From dcc555206b57ca344a782e0d6869656e53e52425 Mon Sep 17 00:00:00 2001 From: rtyag Date: Thu, 8 Dec 2022 16:25:41 +1100 Subject: [PATCH 01/31] split binaural rendering with fast conv renderer --- Workspace_msvc/lib_debug.vcxproj | 6 +- Workspace_msvc/lib_rend.vcxproj | 5 + apps/decoder.c | 186 +++- apps/renderer.c | 290 +++++- lib_com/common_api_types.h | 19 + lib_com/ivas_cnst.h | 20 + lib_com/ivas_prot.h | 155 +++- lib_com/options.h | 8 +- lib_debug/debug.c | 133 ++- lib_debug/debug.h | 14 +- lib_debug/mem_count.c | 2 +- lib_dec/ivas_dec.c | 31 + lib_dec/ivas_dirac_dec.c | 41 + lib_dec/ivas_init_dec.c | 33 + lib_dec/ivas_mc_param_dec.c | 16 +- lib_dec/ivas_rom_dec.c | 43 + lib_dec/ivas_rom_dec.h | 12 + lib_dec/ivas_sba_dec.c | 12 + lib_dec/ivas_spar_md_dec.c | 4 +- lib_dec/ivas_stat_dec.h | 129 ++- lib_dec/lib_dec.c | 39 +- lib_dec/lib_dec.h | 12 + lib_rend/ivas_binauralRenderer.c | 479 +++++++++- lib_rend/ivas_lib_rend_internal.h | 52 ++ lib_rend/ivas_output_init.c | 12 + lib_rend/ivas_splitRend_lcld_dec.c | 92 ++ lib_rend/ivas_splitRend_lcld_enc.c | 92 ++ lib_rend/ivas_splitRendererPost.c | 1004 ++++++++++++++++++++ lib_rend/ivas_splitRendererPre.c | 1324 +++++++++++++++++++++++++++ lib_rend/ivas_splitRenderer_utils.c | 300 ++++++ lib_rend/lib_rend.c | 267 +++++- lib_rend/lib_rend.h | 25 + 32 files changed, 4774 insertions(+), 83 deletions(-) create mode 100644 lib_rend/ivas_splitRend_lcld_dec.c create mode 100644 lib_rend/ivas_splitRend_lcld_enc.c create mode 100644 lib_rend/ivas_splitRendererPost.c create mode 100644 lib_rend/ivas_splitRendererPre.c create mode 100644 lib_rend/ivas_splitRenderer_utils.c diff --git a/Workspace_msvc/lib_debug.vcxproj b/Workspace_msvc/lib_debug.vcxproj index 5dc36d4633..ec954e62ff 100644 --- a/Workspace_msvc/lib_debug.vcxproj +++ b/Workspace_msvc/lib_debug.vcxproj @@ -73,7 +73,7 @@ Disabled - ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;..\lib_rend;%(AdditionalIncludeDirectories) + ..\lib_util;..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;..\lib_rend;%(AdditionalIncludeDirectories) _CRT_SECURE_NO_WARNINGS;$(Macros);%(PreprocessorDefinitions) false @@ -97,7 +97,7 @@ Disabled - ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;..\lib_rend;%(AdditionalIncludeDirectories) + ..\lib_util;..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;..\lib_rend;%(AdditionalIncludeDirectories) _CRT_SECURE_NO_WARNINGS;$(Macros);%(PreprocessorDefinitions) false @@ -124,7 +124,7 @@ AnySuitable false false - ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;..\lib_rend;%(AdditionalIncludeDirectories) + ..\lib_util;..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;..\lib_rend;%(AdditionalIncludeDirectories) _CRT_SECURE_NO_WARNINGS;$(Macros);%(PreprocessorDefinitions) true diff --git a/Workspace_msvc/lib_rend.vcxproj b/Workspace_msvc/lib_rend.vcxproj index c3a1268694..af88421f8b 100644 --- a/Workspace_msvc/lib_rend.vcxproj +++ b/Workspace_msvc/lib_rend.vcxproj @@ -200,6 +200,11 @@ + + + + + diff --git a/apps/decoder.c b/apps/decoder.c index 6396e3ab94..29d0e17119 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -76,6 +76,10 @@ static #define MAX_NUM_OUTPUT_CHANNELS 16 #define MAX_OUTPUT_PCM_BUFFER_SIZE ( MAX_NUM_OUTPUT_CHANNELS * MAX_FRAME_SIZE ) +#ifdef SPLIT_REND_WITH_HEAD_ROT +#define MAX_SPLIT_REND_BITS_BUFFER_SIZE_IN_BYTES ( 3750 ) /*temp buffer size for 1.5 mbps*/ +#endif + #define IVAS_PUBLIC_ORIENT_TRK_REF 0 #define IVAS_PUBLIC_ORIENT_TRK_AVG 1 @@ -114,7 +118,10 @@ typedef struct #ifdef DEBUG_FOA_AGC FILE *agcBitstream; /* temporary */ #endif - +#endif +#ifdef SPLIT_REND_WITH_HEAD_ROT + IVAS_SPLIT_REND_MODE splitRendMode; + char *postRendheadrotTrajFileName; #endif } DecArguments; @@ -126,7 +133,13 @@ typedef struct static bool parseCmdlIVAS_dec( int16_t argc, char **argv, DecArguments *arg ); static void usage_dec( void ); -static ivas_error decodeG192( DecArguments arg, BS_READER_HANDLE hBsReader, HeadRotFileReader *headRotReader, IVAS_DEC_HANDLE hIvasDec, int16_t *pcmBuf ); +static ivas_error decodeG192( DecArguments arg, BS_READER_HANDLE hBsReader, HeadRotFileReader *headRotReader, +#ifdef SPLIT_REND_WITH_HEAD_ROT + HeadRotFileReader *postRendheadRotReader, + uint8_t *splitRendBitsBuf, +#endif + IVAS_DEC_HANDLE hIvasDec, + int16_t *pcmBuf ); static ivas_error decodeVoIP( DecArguments arg, BS_READER_HANDLE hBsReader, IVAS_DEC_HANDLE hIvasDec ); #ifdef DEBUGGING static int16_t app_own_random( int16_t *seed ); @@ -186,8 +199,14 @@ int main( LsCustomFileReader *hLsCustomReader = NULL; hrtfFileReader *hrtfReader = NULL; HeadRotFileReader *headRotReader = NULL; +#ifdef SPLIT_REND_WITH_HEAD_ROT + HeadRotFileReader *postRendheadRotReader = NULL; +#endif ivas_error error = IVAS_ERR_UNKNOWN; int16_t pcmBuf[MAX_OUTPUT_PCM_BUFFER_SIZE]; +#ifdef SPLIT_REND_WITH_HEAD_ROT + uint8_t splitRendBitsBuf[MAX_SPLIT_REND_BITS_BUFFER_SIZE_IN_BYTES]; +#endif RenderConfigReader *renderConfigReader = NULL; #ifdef DEBUGGING int32_t noClipping; @@ -284,6 +303,16 @@ int main( goto cleanup; } } +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( arg.splitRendMode == SPLIT_REND_COMB ) + { + if ( ( error = HeadRotationFileReader_open( arg.postRendheadrotTrajFileName, &postRendheadRotReader ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError: Can't open post renderer head-rotation file %s \n\n", arg.postRendheadrotTrajFileName ); + goto cleanup; + } + } +#endif /*------------------------------------------------------------------------------------------* * Open custom loudspeaker layout file @@ -316,9 +345,18 @@ int main( *------------------------------------------------------------------------------------------*/ #ifdef DEBUGGING - if ( ( error = IVAS_DEC_Configure( hIvasDec, arg.output_Fs, arg.outputFormat, arg.customLsOutputEnabled, arg.hrtfReaderEnabled, arg.enableHeadRotation, arg.forceSubframeBinauralization ) ) != IVAS_ERR_OK ) + if ( ( error = IVAS_DEC_Configure( hIvasDec, arg.output_Fs, arg.outputFormat, arg.customLsOutputEnabled, arg.hrtfReaderEnabled, arg.enableHeadRotation, +#ifdef SPLIT_REND_WITH_HEAD_ROT + arg.splitRendMode, +#endif + arg.forceSubframeBinauralization ) ) != IVAS_ERR_OK ) #else - if ( ( error = IVAS_DEC_Configure( hIvasDec, arg.output_Fs, arg.outputFormat, arg.customLsOutputEnabled, arg.hrtfReaderEnabled, arg.enableHeadRotation ) ) != IVAS_ERR_OK ) + if ( ( error = IVAS_DEC_Configure( hIvasDec, arg.output_Fs, arg.outputFormat, arg.customLsOutputEnabled, arg.hrtfReaderEnabled, arg.enableHeadRotation +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + arg.enableSplitRendWithHeadRot +#endif + ) ) != IVAS_ERR_OK ) #endif { fprintf( stderr, "\nConfigure failed: %s\n\n", IVAS_DEC_GetErrorMessage( error ) ); @@ -507,7 +545,11 @@ int main( } else { - error = decodeG192( arg, hBsReader, headRotReader, hIvasDec, pcmBuf ); + error = decodeG192( arg, hBsReader, headRotReader, +#ifdef SPLIT_REND_WITH_HEAD_ROT + postRendheadRotReader, splitRendBitsBuf, +#endif + hIvasDec, pcmBuf ); } if ( error == IVAS_ERR_OK || error == IVAS_ERR_END_OF_FILE ) @@ -554,7 +596,9 @@ cleanup: CustomLsReader_close( &hLsCustomReader ); hrtfFileReader_close( &hrtfReader ); HeadRotationFileReader_close( &headRotReader ); - +#ifdef SPLIT_REND_WITH_HEAD_ROT + HeadRotationFileReader_close( &postRendheadRotReader ); +#endif RenderConfigReader_close( &renderConfigReader ); if ( BS_Reader_Close( &hBsReader ) != IVAS_ERR_OK ) @@ -666,6 +710,43 @@ static IVAS_DEC_AUDIO_CONFIG cmdline2config( } +#ifdef SPLIT_REND_WITH_HEAD_ROT +static int8_t parseSplitRendMode( + char *value, + IVAS_SPLIT_REND_MODE *SplitRendMode ) +{ + int16_t temp; + int8_t success; + success = 1; + to_upper( value ); + + temp = (int16_t) atoi( value ); + if ( temp == 0 ) + { + *SplitRendMode = SPLIT_REND_DISABLED; + } +#if 0 + else if ( temp == 1 ) + { + *SplitRendMode = SPLIT_REND_PRE; + } + else if ( temp == 2 ) + { + *SplitRendMode = SPLIT_REND_POST; + } +#endif + else if ( temp == 3 ) + { + *SplitRendMode = SPLIT_REND_COMB; + } + else + { + fprintf( stderr, "Error: Incorrect or unsupported value for split rendering mode specified!\n\n" ); + success = 0; + } + return success ? 0 : -1; +} +#endif /*---------------------------------------------------------------------* * parseCmdlIVAS_dec() * @@ -698,6 +779,10 @@ static bool parseCmdlIVAS_dec( arg->enableHeadRotation = false; arg->headrotTrajFileName = NULL; +#ifdef SPLIT_REND_WITH_HEAD_ROT + arg->postRendheadrotTrajFileName = NULL; +#endif + arg->orientation_tracking = IVAS_PUBLIC_ORIENT_TRK_REF; #ifdef SUPPORT_JBM_TRACEFILE @@ -720,6 +805,10 @@ static bool parseCmdlIVAS_dec( arg->inputFormat = IVAS_DEC_INPUT_FORMAT_G192; arg->no_diegetic_pan = 0.f; +#ifdef SPLIT_REND_WITH_HEAD_ROT + arg->splitRendMode = SPLIT_REND_DISABLED; +#endif + /*-----------------------------------------------------------------* * Initialization *-----------------------------------------------------------------*/ @@ -871,6 +960,41 @@ static bool parseCmdlIVAS_dec( arg->headrotTrajFileName = argv[i]; i++; } +#ifdef SPLIT_REND_WITH_HEAD_ROT + else if ( strcmp( argv_to_upper, "-SBRM" ) == 0 ) + { + i++; + + if ( argc - i <= 4 || argv[i][0] == '-' ) + { + fprintf( stderr, "Error: Head rotation file name not specified!\n\n" ); + usage_dec(); + return false; + } + if ( parseSplitRendMode( argv[i], &arg->splitRendMode ) != 0 ) + { + fprintf( stderr, "Error: Invalid split rendering mode %s \n\n", argv[i] ); + usage_dec(); + return false; + } + i++; + } + else if ( strcmp( argv_to_upper, "-PRTF" ) == 0 ) + { + arg->enableHeadRotation = true; + i++; + + if ( argc - i <= 4 || argv[i][0] == '-' ) + { + fprintf( stderr, "Error: Head rotation file name not specified!\n\n" ); + usage_dec(); + return false; + } + + arg->postRendheadrotTrajFileName = argv[i]; + i++; + } +#endif else if ( strcmp( argv_to_upper, "-OTR" ) == 0 ) { if ( strlen( argv[i + 1] ) > 3 ) @@ -1079,6 +1203,10 @@ static void usage_dec( void ) fprintf( stdout, " which of the two supported formats is in use.\n" ); fprintf( stdout, " default bitstream file format is G.192\n" ); fprintf( stdout, "-T File : Head rotation specified by external trajectory File\n" ); +#ifdef SPLIT_REND_WITH_HEAD_ROT + fprintf( stdout, "-sbrm mode : split rendering mode (0 - disabled, 1 - PRE RENDERER, 2 - POST RENDERER, 3 - COMBINED PRE-POST RENDERING), by default disabled\n" ); + fprintf( stdout, "-prtf File : Head rotation for post renderer specified by external trajectory File (to be used with split rendering)\n" ); +#endif fprintf( stdout, "-hrtf File : HRTF filter File used in ISm format and BINAURAL output configuration\n" ); #ifdef DEBUGGING fprintf( stdout, "-force_subframe_bin : Forces parametric binauralizer code to use 5 ms time resolution even when\n" ); @@ -1126,6 +1254,10 @@ static ivas_error decodeG192( DecArguments arg, BS_READER_HANDLE hBsReader, HeadRotFileReader *headRotReader, +#ifdef SPLIT_REND_WITH_HEAD_ROT + HeadRotFileReader *postRendheadRotReader, + uint8_t *splitRendBitsBuf, +#endif IVAS_DEC_HANDLE hIvasDec, int16_t *pcmBuf ) @@ -1151,6 +1283,10 @@ static ivas_error decodeG192( uint16_t numObj = 0; IVAS_DEC_BS_FORMAT bsFormat = IVAS_DEC_BS_UNKOWN; +#ifdef SPLIT_REND_WITH_HEAD_ROT + IVAS_SPLIT_REND_BITS splitRendBits; +#endif + IsmFileWriter *ismWriters[IVAS_MAX_NUM_OBJECTS]; for ( i = 0; i < IVAS_MAX_NUM_OBJECTS; ++i ) { @@ -1172,6 +1308,13 @@ static ivas_error decodeG192( reset_wmops(); #endif +#ifdef SPLIT_REND_WITH_HEAD_ROT + splitRendBits.bits_buf = splitRendBitsBuf; + splitRendBits.bits_read = 0; + splitRendBits.bits_written = 0; + splitRendBits.buf_len = MAX_SPLIT_REND_BITS_BUFFER_SIZE_IN_BYTES; +#endif + /*------------------------------------------------------------------------------------------* * Loop for every packet (frame) of bitstream data * - Read the bitstream packet @@ -1226,15 +1369,42 @@ static ivas_error decodeG192( goto cleanup; } - if ( ( error = IVAS_DEC_FeedHeadTrackData( hIvasDec, Quaternions ) ) != IVAS_ERR_OK ) + if ( ( error = IVAS_DEC_FeedHeadTrackData( hIvasDec, Quaternions +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + SPLIT_REND_PRE +#endif + ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nIVAS_DEC_FeedHeadTrackData failed: %s\n", IVAS_DEC_GetErrorMessage( error ) ); goto cleanup; } + +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( arg.splitRendMode == SPLIT_REND_COMB ) + { + if ( ( error = HeadRotationFileReading( postRendheadRotReader, Quaternions, frame ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError %s while reading post rendering head orientation from %s\n", IVAS_DEC_GetErrorMessage( error ), HeadRotationFileReader_getFilePath( headRotReader ) ); + goto cleanup; + } + + if ( ( error = IVAS_DEC_FeedHeadTrackData( hIvasDec, Quaternions, SPLIT_REND_POST ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nIVAS_DEC_FeedHeadTrackData failed: %s\n", IVAS_DEC_GetErrorMessage( error ) ); + goto cleanup; + } + } +#endif } /* Run decoder for one frame (get rendered output) */ - if ( ( error = IVAS_DEC_GetSamples( hIvasDec, pcmBuf, &nOutSamples ) ) != IVAS_ERR_OK ) + if ( ( error = IVAS_DEC_GetSamples( hIvasDec, pcmBuf, &nOutSamples +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + &splitRendBits +#endif + ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nError: could not get samples from decoder: %s\n\n", IVAS_DEC_GetErrorMessage( error ) ); goto cleanup; diff --git a/apps/renderer.c b/apps/renderer.c index 8682232fa0..1fc6a5bad5 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -183,6 +183,10 @@ typedef struct char inMetadataFilePaths[RENDERER_MAX_ISM_INPUTS][RENDERER_MAX_CLI_ARG_LENGTH]; int16_t numInMetadataFiles; char headRotationFilePath[RENDERER_MAX_CLI_ARG_LENGTH]; +#ifdef SPLIT_REND_WITH_HEAD_ROT + IVAS_SPLIT_REND_MODE splitRendMode; + char postRendheadRotationFilePath[RENDERER_MAX_CLI_ARG_LENGTH]; +#endif char customHrtfFilePath[RENDERER_MAX_CLI_ARG_LENGTH]; char renderConfigFilePath[RENDERER_MAX_CLI_ARG_LENGTH]; int8_t orientationTracking; @@ -211,6 +215,10 @@ typedef enum CmdLnOptionId_inputMetadata, CmdLnOptionId_listFormats, CmdLnOptionId_inputGain, +#ifdef SPLIT_REND_WITH_HEAD_ROT + CmdLnOptionId_SplitRendMode, + CmdLnOptionId_PostRendtrajFile, +#endif } CmdLnOptionId; static const CmdLnParser_Option cliOptions[] = { @@ -256,6 +264,20 @@ static const CmdLnParser_Option cliOptions[] = { .matchShort = "tf", .description = "Head rotation trajectory file for simulation of head tracking (only for BINAURAL and BINAURAL_ROOM outputs)", }, +#ifdef SPLIT_REND_WITH_HEAD_ROT + { + .id = CmdLnOptionId_SplitRendMode, + .match = "split_bin_rend_mode", + .matchShort = "sbrm", + .description = "Split rendering mode option (only for BINAURAL and BINAURAL_ROOM outputs)", + }, + { + .id = CmdLnOptionId_PostRendtrajFile, + .match = "post_rend_trajectory_file", + .matchShort = "prtf", + .description = "Split rendering option with head tracking data for post renderer (only for BINAURAL and BINAURAL_ROOM outputs)", + }, +#endif { .id = CmdLnOptionId_customHrtfFile, .match = "custom_hrtf", @@ -405,7 +427,13 @@ static void printSupportedAudioConfigs( void ); static IVAS_REND_AudioConfig parseAudioConfig( const char *configString ); -static void convertInputBuffer( const int16_t *intBuffer, const int16_t numIntSamplesPerChannel, const int16_t numFloatSamplesPerChannel, const int16_t numChannels, float *floatBuffer ); +static void convertInputBuffer( const int16_t *intBuffer, const int16_t numIntSamplesPerChannel, const int16_t numFloatSamplesPerChannel, const int16_t numChannels, float *floatBuffer +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + const int16_t cldfb_in, + HANDLE_CLDFB_FILTER_BANK *cldfbAna +#endif +); static void convertOutputBuffer( const float *floatBuffer, const int16_t numSamplesPerChannel, const int16_t numChannels, int16_t *intBuffer ); @@ -558,6 +586,50 @@ static float dBToLin( return powf( 10.0f, gain_dB / 20.0f ); } +#ifdef SPLIT_REND_WITH_HEAD_ROT +static int16_t rend_openCldfb( + HANDLE_CLDFB_FILTER_BANK cldfbAna[MAX_INPUT_CHANNELS], + const int16_t num_in_chs, + const int32_t output_Fs ) +{ + int16_t n; + + for ( n = 0; n < num_in_chs; n++ ) + { + if ( openCldfb( &( cldfbAna[n] ), CLDFB_ANALYSIS, output_Fs, CLDFB_PROTOTYPE_5_00MS ) != IVAS_ERR_OK ) + { + return -1; + } + } + return 0; +} + +static void rend_closeCldfb( HANDLE_CLDFB_FILTER_BANK cldfbAna[MAX_INPUT_CHANNELS] ) +{ + int16_t n; + for ( n = 0; n < MAX_INPUT_CHANNELS; n++ ) + { + if ( cldfbAna[n] != NULL ) + { + deleteCldfb( &( cldfbAna[n] ) ); + cldfbAna[n] = NULL; + } + } + return; +} + +static int16_t get_cldfb_in_flag( CmdlnArgs *args ) +{ + int16_t cldfb_in; + cldfb_in = 0; + if ( ( args->splitRendMode == SPLIT_REND_PRE ) || ( args->splitRendMode == SPLIT_REND_COMB ) ) + { + cldfb_in = 1; + } + + return cldfb_in; +} +#endif /* ============================================================================ */ @@ -567,6 +639,11 @@ int main( { IVAS_REND_HANDLE hIvasRend; HeadRotFileReader *headRotReader = NULL; +#ifdef SPLIT_REND_WITH_HEAD_ROT + HeadRotFileReader *postRendHeadRotReader = NULL; + HANDLE_CLDFB_FILTER_BANK cldfbAna[MAX_INPUT_CHANNELS]; + int16_t cldfb_in; +#endif hrtfFileReader *hrtfFileReader = NULL; IsmPositionProvider *positionProvider; RenderConfigReader *renderConfigReader = NULL; @@ -622,6 +699,13 @@ int main( HeadRotationFileReader_open( args.headRotationFilePath, &headRotReader ); } +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( ( args.splitRendMode == SPLIT_REND_COMB ) && !isEmptyString( args.postRendheadRotationFilePath ) ) + { + HeadRotationFileReader_open( args.postRendheadRotationFilePath, &postRendHeadRotReader ); + } +#endif + if ( !isEmptyString( args.customHrtfFilePath ) ) { hrtfFileReader_open( args.customHrtfFilePath, &hrtfFileReader ); @@ -666,12 +750,22 @@ int main( } const int16_t frameSize_smpls = (int16_t) ( 20 * args.sampleRate / 1000 ); +#ifdef SPLIT_REND_WITH_HEAD_ROT + const int16_t CLDFBframeSize_smpls = (int16_t) frameSize_smpls * 2; + cldfb_in = get_cldfb_in_flag( &args ); +#endif + IVAS_REND_InputId mcIds[RENDERER_MAX_MC_INPUTS] = { 0 }; IVAS_REND_InputId ismIds[RENDERER_MAX_ISM_INPUTS] = { 0 }; IVAS_REND_InputId sbaIds[RENDERER_MAX_SBA_INPUTS] = { 0 }; IVAS_REND_InputId masaIds[RENDERER_MAX_MASA_INPUTS] = { 0 }; - if ( ( error = IVAS_REND_Open( &hIvasRend, args.sampleRate, args.outConfig.audioConfig ) ) != IVAS_ERR_OK ) + if ( ( error = IVAS_REND_Open( &hIvasRend, args.sampleRate, args.outConfig.audioConfig +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + args.splitRendMode +#endif + ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error opening renderer handle: %s\n", ivas_error_to_string( error ) ); exit( -1 ); @@ -794,6 +888,12 @@ int main( } const int16_t totalNumInChannels = getTotalNumInChannels( hIvasRend, mcIds, ismIds, sbaIds, masaIds ); +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( cldfb_in ) + { + rend_openCldfb( cldfbAna, totalNumInChannels, args.sampleRate ); + } +#endif if ( AudioFileReader_getNumChannels( audioReader ) != 0 /* If input file is raw PCM, audio reader has no info about number of channels */ && totalNumInChannels != AudioFileReader_getNumChannels( audioReader ) ) @@ -829,11 +929,26 @@ int main( inBufferSize = frameSize_smpls * totalNumInChannels; outBufferSize = frameSize_smpls * numOutChannels; inpInt16Buffer = count_malloc( inBufferSize * sizeof( int16_t ) ); +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( cldfb_in == 0 ) + { + inFloatBuffer = count_malloc( inBufferSize * sizeof( float ) ); + inBuffer.config.numSamplesPerChannel = (int16_t) frameSize_smpls; + } + else + { + inFloatBuffer = count_malloc( CLDFBframeSize_smpls * totalNumInChannels * sizeof( float ) ); + inBuffer.config.numSamplesPerChannel = (int16_t) CLDFBframeSize_smpls; + } +#else inFloatBuffer = count_malloc( inBufferSize * sizeof( float ) ); +#endif outInt16Buffer = count_malloc( outBufferSize * sizeof( int16_t ) ); outFloatBuffer = count_malloc( outBufferSize * sizeof( float ) ); - inBuffer.config.numSamplesPerChannel = (int16_t) frameSize_smpls; +#ifdef SPLIT_REND_WITH_HEAD_ROT + inBuffer.config.is_cldfb = cldfb_in; +#endif inBuffer.config.numChannels = (int16_t) totalNumInChannels; inBuffer.data = inFloatBuffer; @@ -874,7 +989,12 @@ int main( } /* Convert from int to float and from interleaved to packed */ - convertInputBuffer( inpInt16Buffer, numSamplesRead, frameSize_smpls, num_in_channels, inFloatBuffer ); + convertInputBuffer( inpInt16Buffer, numSamplesRead, inBuffer.config.numSamplesPerChannel, num_in_channels, inFloatBuffer +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + inBuffer.config.is_cldfb, cldfbAna +#endif + ); #ifdef DEC_TO_REND_FLOAT_DUMP /* Overwrite from dump file */ float tmp[960 * 16]; @@ -899,13 +1019,33 @@ int main( { IVAS_QUATERNION quatBuffer[RENDERER_HEAD_POSITIONS_PER_FRAME]; HeadRotationFileReading( headRotReader, quatBuffer, frame ); - IVAS_REND_SetHeadRotation( hIvasRend, quatBuffer ); + IVAS_REND_SetHeadRotation( hIvasRend, quatBuffer +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + SPLIT_REND_PRE +#endif + ); } else { - IVAS_REND_SetHeadRotation( hIvasRend, NULL ); + IVAS_REND_SetHeadRotation( hIvasRend, NULL +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + SPLIT_REND_PRE +#endif + ); } +#ifdef SPLIT_REND_WITH_HEAD_ROT + /* Read from post renderer head rotation trajectory file if specified */ + if ( postRendHeadRotReader != NULL ) + { + IVAS_QUATERNION quatBuffer[RENDERER_HEAD_POSITIONS_PER_FRAME]; + HeadRotationFileReading( postRendHeadRotReader, quatBuffer, frame ); + IVAS_REND_SetHeadRotation( hIvasRend, quatBuffer, SPLIT_REND_POST ); + } +#endif + for ( i = 0; i < args.inConfig.numMultiChannelBuses; ++i ) { if ( ( error = IVAS_REND_GetInputNumChannels( hIvasRend, mcIds[i], &numChannels ) ) != IVAS_ERR_OK ) @@ -1071,6 +1211,13 @@ int main( { MasaFileReader_close( &masaReaders[i] ); } + +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( cldfb_in ) + { + rend_closeCldfb( cldfbAna ); + } +#endif AudioFileReader_close( &audioReader ); AudioFileWriter_close( &audioWriter ); HeadRotationFileReader_close( &headRotReader ); @@ -1090,6 +1237,10 @@ int main( print_mem_renderer( SRAM_size ); #endif +#ifdef DEBUGGING + dbgclose(); +#endif + return 0; } @@ -1276,6 +1427,44 @@ static int8_t parseDiegeticPan( return success ? 0 : -1; } +#ifdef SPLIT_REND_WITH_HEAD_ROT +static int8_t parseSplitRendMode( + char *value, + IVAS_SPLIT_REND_MODE *SplitRendMode ) +{ + int16_t temp; + int8_t success; + success = 1; + to_upper( value ); + + temp = (int16_t) atoi( value ); + if ( temp == 0 ) + { + *SplitRendMode = SPLIT_REND_DISABLED; + } +#if 0 + else if ( temp == 1 ) + { + *SplitRendMode = SPLIT_REND_PRE; + } + else if ( temp == 2 ) + { + *SplitRendMode = SPLIT_REND_POST; + } +#endif + else if ( temp == 3 ) + { + *SplitRendMode = SPLIT_REND_COMB; + } + else + { + fprintf( stderr, "Error: Incorrect or unsupported value for split rendering mode specified!\n\n" ); + success = 0; + } + return success ? 0 : -1; +} +#endif + static int8_t parseOrientationTracking( char *value, int8_t *tracking_type ) @@ -1305,8 +1494,13 @@ static int8_t parseOrientationTracking( static IVAS_REND_AudioConfig parseAudioConfig( const char *configString ) { +#ifndef SPLIT_REND_WITH_HEAD_ROT char charBuf[14]; charBuf[13] = '\0'; +#else + char charBuf[25]; + charBuf[24] = '\0'; +#endif strncpy( charBuf, configString, sizeof( charBuf ) - 1 ); to_upper( charBuf ); @@ -1377,7 +1571,6 @@ static IVAS_REND_AudioConfig parseAudioConfig( { return IVAS_REND_AUDIO_CONFIG_BINAURAL; } - return IVAS_REND_AUDIO_CONFIG_UNKNOWN; } @@ -1467,6 +1660,11 @@ static CmdlnArgs defaultArgs( args.numInMetadataFiles = 0; clearString( args.headRotationFilePath ); + +#ifdef SPLIT_REND_WITH_HEAD_ROT + args.splitRendMode = SPLIT_REND_DISABLED; + clearString( args.postRendheadRotationFilePath ); +#endif clearString( args.customHrtfFilePath ); clearString( args.renderConfigFilePath ); @@ -1538,6 +1736,20 @@ static void parseOption( assert( numOptionValues == 1 ); strncpy( args->headRotationFilePath, optionValues[0], RENDERER_MAX_CLI_ARG_LENGTH - 1 ); break; +#ifdef SPLIT_REND_WITH_HEAD_ROT + case CmdLnOptionId_PostRendtrajFile: + assert( numOptionValues == 1 ); + strncpy( args->postRendheadRotationFilePath, optionValues[0], RENDERER_MAX_CLI_ARG_LENGTH - 1 ); + break; + case CmdLnOptionId_SplitRendMode: + assert( numOptionValues == 1 ); + if ( parseSplitRendMode( optionValues[0], &args->splitRendMode ) != 0 ) + { + fprintf( stderr, "Unknown option for split rendering mode: %s\n", optionValues[0] ); + exit( -1 ); + } + break; +#endif case CmdLnOptionId_customHrtfFile: assert( numOptionValues == 1 ); strncpy( args->customHrtfFilePath, optionValues[0], RENDERER_MAX_CLI_ARG_LENGTH - 1 ); @@ -2392,26 +2604,72 @@ static void convertInputBuffer( const int16_t numIntSamplesPerChannel, const int16_t numFloatSamplesPerChannel, const int16_t numChannels, - float *floatBuffer ) + float *floatBuffer +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + const int16_t cldfb_in, + HANDLE_CLDFB_FILTER_BANK *cldfbAna +#endif +) { int16_t chnl, smpl, i; i = 0; +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( cldfb_in ) + { + int16_t slotIdx, numCldfbBands, numFloatPcmSamples; + float fIn[MAX_OUTPUT_CHANNELS][L_FRAME48k]; + numFloatPcmSamples = numFloatSamplesPerChannel >> 1; + numCldfbBands = numFloatPcmSamples / CLDFB_NO_COL_MAX; + /* CLDFB Analysis*/ + assert( numIntSamplesPerChannel <= MAX_OUTPUT_CHANNELS * L_FRAME48k ); + for ( smpl = 0; smpl < numFloatPcmSamples; ++smpl ) + { + for ( chnl = 0; chnl < numChannels; ++chnl ) + { + if ( i < numIntSamplesPerChannel ) + { + fIn[chnl][smpl] = (float) intBuffer[i]; + } + else + { + fIn[chnl][smpl] = 0.f; + } - for ( smpl = 0; smpl < numFloatSamplesPerChannel; ++smpl ) - { + ++i; + } + } for ( chnl = 0; chnl < numChannels; ++chnl ) { - if ( i < numIntSamplesPerChannel ) + for ( slotIdx = 0; slotIdx < CLDFB_NO_COL_MAX; slotIdx++ ) { - floatBuffer[chnl * numFloatSamplesPerChannel + smpl] = (float) intBuffer[i]; + cldfbAnalysis_ts( &fIn[chnl][numCldfbBands * slotIdx], + &floatBuffer[( chnl * numFloatSamplesPerChannel ) + ( 2 * slotIdx * numCldfbBands )], + &floatBuffer[numCldfbBands + ( chnl * numFloatSamplesPerChannel ) + ( 2 * slotIdx * numCldfbBands )], + numCldfbBands, + cldfbAna[chnl] ); } - else + } + } + else +#endif + { + for ( smpl = 0; smpl < numFloatSamplesPerChannel; ++smpl ) + { + for ( chnl = 0; chnl < numChannels; ++chnl ) { - floatBuffer[chnl * numFloatSamplesPerChannel + smpl] = 0.f; - } + if ( i < numIntSamplesPerChannel ) + { + floatBuffer[chnl * numFloatSamplesPerChannel + smpl] = (float) intBuffer[i]; + } + else + { + floatBuffer[chnl * numFloatSamplesPerChannel + smpl] = 0.f; + } - ++i; + ++i; + } } } diff --git a/lib_com/common_api_types.h b/lib_com/common_api_types.h index fa14ecff23..39cbc82a1a 100644 --- a/lib_com/common_api_types.h +++ b/lib_com/common_api_types.h @@ -83,6 +83,16 @@ typedef struct } IVAS_QUATERNION; +#ifdef SPLIT_REND_WITH_HEAD_ROT +typedef struct ivas_split_rend_bits_t +{ + uint8_t *bits_buf; + int32_t buf_len; /*size of bits_buf in bytes. This field should be set by allocator of bits_buf*/ + int32_t bits_written; + int32_t bits_read; +} ivas_split_rend_bits_t, IVAS_SPLIT_REND_BITS, *IVAS_SPLIT_REND_BITS_HANDLE; +#endif + typedef struct ivas_masa_metadata_frame_struct *IVAS_MASA_METADATA_HANDLE; typedef struct ivas_masa_qmetadata_frame_struct *IVAS_MASA_QMETADATA_HANDLE; @@ -146,5 +156,14 @@ typedef struct _IVAS_JBM_TRACE_DATA } IVAS_JBM_TRACE_DATA; +#ifdef SPLIT_REND_WITH_HEAD_ROT +typedef enum _IVAS_SPLIT_REND_MODE +{ + SPLIT_REND_DISABLED = -1, + SPLIT_REND_PRE, + SPLIT_REND_POST, + SPLIT_REND_COMB +} IVAS_SPLIT_REND_MODE; +#endif #endif /* COMMON_API_TYPES_H */ diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index 4a9ce1e080..0c33ade4d7 100644 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -1360,6 +1360,26 @@ typedef enum #define BINAURAL_CONVBANDS 50 /* Bands upto which convolution is performed */ #define BINAURAL_NTAPS_MAX 96 +#ifdef SPLIT_REND_WITH_HEAD_ROT +#define SPLIT_REND_DECOR_ALPHA (0.25f) +#define MAX_YAW_ANGLES (3) +#define MAX_PITCH_ANGLES (1) +#define MAX_ROLL_ANGLES (1) +#define MAX_HEAD_ROT_POSES (MAX_YAW_ANGLES*MAX_PITCH_ANGLES*MAX_ROLL_ANGLES) +#define MAX_SPLIT_REND_MD_BANDS (20) +#define COMPLEX_MD_BAND_THRESH (MAX_SPLIT_REND_MD_BANDS) + +#ifdef SPLIT_REND_WITH_HEAD_ROT +#define IVAS_SPLIT_REND_PRED_QUANT_PNTS ( 31 ) +#define IVAS_SPLIT_REND_D_QUANT_PNTS ( 15 ) +#define IVAS_SPLIT_REND_PRED_MIN_VAL ( -1.0f ) +#define IVAS_SPLIT_REND_PRED_MAX_VAL ( 1.0f ) +#define IVAS_SPLIT_REND_D_MIN_VAL ( 0.0f ) +#define IVAS_SPLIT_REND_D_MAX_VAL ( 1.0f ) +#define IVAS_SPLIT_REND_MAX_NUM_BYTES (4000) +#endif +#endif + #define HRTF_SH_ORDER 3 #define HRTF_SH_CHANNELS 16 #define HRTF_NUM_BINS 60 diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index c09adab6c8..fea2bef693 100644 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -298,6 +298,10 @@ void stereo_dmx_evs_close_encoder( ivas_error ivas_dec( Decoder_Struct *st_ivas, /* i : IVAS decoder structure */ int16_t *data /* o : output synthesis signal */ +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + IVAS_SPLIT_REND_BITS_HANDLE hSplitRendBits +#endif ); ivas_error ivas_dec_setup( @@ -4339,6 +4343,14 @@ void ivas_quantise_real_values( const int16_t dim ); +ivas_error ivas_deindex_real_index( + const int16_t *index, + const int16_t q_levels, + const float min_value, + const float max_value, + float *quant, + const int16_t num_ch_dim2 ); + void ivas_spar_get_uniform_quant_strat( ivas_spar_md_com_cfg *pSpar_md_com_cfg, @@ -4551,12 +4563,20 @@ void ivas_binaural_cldfb( ); void ivas_binRenderer( - BINAURAL_RENDERER_HANDLE hBinRenderer, /* i/o: fastconv binaural renderer handle */ - HEAD_TRACK_DATA_HANDLE hHeadTrackData, /* i/o: head track handle */ - float Cldfb_RealBuffer_Binaural[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : Binaural signals */ - float Cldfb_ImagBuffer_Binaural[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : Binaural signals */ - float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : LS signals */ - float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX] /* i : LS signals */ + BINAURAL_RENDERER_HANDLE hBinRenderer, /* i/o: binaural renderer handle */ + HEAD_TRACK_DATA_HANDLE hHeadTrackData, /* i/o: head track handle */ +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + HEAD_TRACK_DATA_HANDLE hPostRendHeadTrackData, +#endif +#ifdef SPLIT_REND_WITH_HEAD_ROT + float Cldfb_RealBuffer_Binaural[][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : Rotated Binaural signals */ + float Cldfb_ImagBuffer_Binaural[][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : Rotated Binaural signals */ +#else + float Cldfb_RealBuffer_Binaural[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : Binaural signals */ + float Cldfb_ImagBuffer_Binaural[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : Binaural signals */ +#endif + float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : LS signals */ + float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX] /* i : LS signals */ ); void ivas_binaural_add_LFE( @@ -4638,6 +4658,129 @@ void rotateFrame_sd_cldfb( const int16_t nb_band /* i : number of CLDFB bands to process */ ); +#ifdef SPLIT_REND_WITH_HEAD_ROT + +/*----------------------------------------------------------------------------------* + * Split renderer prototypes + *----------------------------------------------------------------------------------*/ + +void ivas_set_split_rend_setup( + IVAS_DEC_SPLIT_REND_WRAPPER *hSplitBinRend, + IVAS_SPLIT_REND_BITS_HANDLE hSplitRendBits ); + +void ivas_init_split_rend_handles( + SPLIT_REND_WRAPPER *hSplitRendWrapper ); + +ivas_error ivas_split_renderer_open( SPLIT_REND_WRAPPER *hSplitBinRend, + const int32_t output_Fs, + const IVAS_SPLIT_REND_MODE splitRendMode, + const int16_t is_cldfb_in ); + +void ivas_split_renderer_close( + SPLIT_REND_WRAPPER *hSplitBinRend); + +ivas_error ivas_splitBinLCLDEncOpen( + BIN_HR_SPLIT_LCLD_ENC_HANDLE *hSplitBinLCLDEnc ); + +void ivas_splitBinLCLDEncClose( + BIN_HR_SPLIT_LCLD_ENC_HANDLE *hSplitBinLCLDEnc ); + +void ivas_splitBinLCLDEncProcess( + BIN_HR_SPLIT_LCLD_ENC_HANDLE hSplitBinLCLDEnc, + float Cldfb_In_Real[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float Cldfb_In_Imag[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + ivas_split_rend_bits_t *pBits ); + +ivas_error ivas_splitBinLCLDDecOpen( + BIN_HR_SPLIT_LCLD_DEC_HANDLE *hSplitBinLCLDDec ); + +void ivas_splitBinLCLDDecClose( + BIN_HR_SPLIT_LCLD_DEC_HANDLE *hSplitBinLCLDDec ); + +void ivas_splitBinLCLDDecProcess( + BIN_HR_SPLIT_LCLD_DEC_HANDLE hSplitBinLCLDDec, + ivas_split_rend_bits_t *pBits, + float Cldfb_Out_Real[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float Cldfb_Out_Imag[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX] ); + +ivas_error ivas_splitBinPreRendOpen( + BIN_HR_SPLIT_PRE_REND_HANDLE *hBinHrSplitPreRend +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + , + const int32_t output_Fs +#endif +); + +ivas_error ivas_splitBinPostRendOpen( + BIN_HR_SPLIT_POST_REND_HANDLE *hBinHrSplitPostRend, + const int32_t output_Fs ); + +ivas_error ivas_renderMultiBinToSplitBinaural( + SPLIT_REND_WRAPPER *hSplitBin, + ivas_split_rend_bits_t *pBits, + float Cldfb_In_BinReal[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float Cldfb_In_BinImag[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + const IVAS_QUATERNION QuaternionsPre[MAX_PARAM_SPATIAL_SUBFRAMES], + const IVAS_QUATERNION QuaternionsPost[MAX_PARAM_SPATIAL_SUBFRAMES], + const int16_t max_bands, + float out[][L_FRAME48k]); + +void ivas_rend_CldfbSplitPreRendProcess( + const BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend, + float Cldfb_In_BinReal[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float Cldfb_In_BinImag[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + const int16_t max_bands, + ivas_split_rend_bits_t *pBits ); + +void ivas_rend_CldfbSplitPostRendProcess( + BIN_HR_SPLIT_POST_REND_HANDLE hBinHrSplitPostRend, + const IVAS_QUATERNION QuaternionsPre[MAX_PARAM_SPATIAL_SUBFRAMES], + const IVAS_QUATERNION QuaternionsPost[MAX_PARAM_SPATIAL_SUBFRAMES], + float Cldfb_RealBuffer_Binaural[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float Cldfb_ImagBuffer_Binaural[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float output[][L_FRAME48k] ); + +void ivas_splitBinPreRendClose( + BIN_HR_SPLIT_PRE_REND_HANDLE *hBinHrSplitPreRend ); + +void ivas_splitBinPostRendClose( + BIN_HR_SPLIT_POST_REND_HANDLE *hBinHrSplitPostRend ); + +void ivas_splitBinPostRendMdDec( + ivas_split_rend_bits_t *pBits, + BIN_HR_SPLIT_POST_REND_HANDLE hBinHrSplitPostRend, +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend, +#endif + const int16_t num_md_bands); + +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG +void ivas_log_cldfb2wav_data( + float Cldfb_In_Real[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], + float Cldfb_In_Imag[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], + HANDLE_CLDFB_FILTER_BANK *cldfbSyn, + const int16_t num_chs, + const int16_t num_freq_bands, + const int32_t output_Fs, + const char *filename ); +#endif + +void ivas_SplitRenderer_GetRotMd( + BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend, /* i/o: binaural renderer handle */ + float Cldfb_RealBuffer_Ref_Binaural[][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : Reference Binaural signals */ + float Cldfb_ImagBuffer_Ref_Binaural[][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : Reference Binaural signals */ + ivas_split_rend_bits_t *pBits, + int16_t sf_idx ); + +void ivas_SplitRenderer_PostRenderer( + BIN_HR_SPLIT_POST_REND_HANDLE hBinPostRenderer, /* i/o: binaural renderer handle */ + float Cldfb_RealBuffer_Ref_Binaural[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o : Reference/out Binaural signals */ + float Cldfb_ImagBuffer_Ref_Binaural[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o : Reference/out Binaural signals */ + int16_t sf_idx, + const IVAS_QUATERNION *Quaternions_ref, + const IVAS_QUATERNION *Quaternions_act ); + +#endif /*----------------------------------------------------------------------------------* * renderer prototypes diff --git a/lib_com/options.h b/lib_com/options.h index 9dc8ab44c8..1f12475cfb 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -154,8 +154,12 @@ #define FIX_VBR_COMPLEXITY /* Issue 234: fix extremely high complexity numbers for IVAS EVS mode */ #define FIX_ISM_INACTIVE_BITS /* Issue 230: fix bitbudget distribution in inactive frames in ISM format */ - - +#define SPLIT_REND_WITH_HEAD_ROT +#ifdef SPLIT_REND_WITH_HEAD_ROT +//#define SPLIT_REND_WITH_HEAD_ROT_DEBUG // only for debugging purposes +#define SPLIT_REND_BASE2_CODING +//#define SPLIT_REND_SKIP_POST_REND +#endif /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ #endif diff --git a/lib_debug/debug.c b/lib_debug/debug.c index 5ee8f10e31..dc3d0cb4d9 100644 --- a/lib_debug/debug.c +++ b/lib_debug/debug.c @@ -35,6 +35,7 @@ #include #include #include +#include #include "options.h" #include "prot.h" #ifdef DEBUGGING @@ -54,6 +55,9 @@ #else #endif #include "wmops.h" +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG +#include "tinywaveout_c.h" +#endif /*-------------------------------------------------------------------* @@ -89,12 +93,19 @@ int16_t debug_level = 0; static FILE *in_fileptr[N_FILEPTR]; static FILE *out_fileptr[N_FILEPTR]; - +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG +static WAVEFILEOUT *out_wavfileptr[N_FILEPTR]; +#endif static char *in_filename[N_FILEPTR]; static char *out_filename[N_FILEPTR]; - +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG +static char *out_wavfilename[N_FILEPTR]; +#endif static int16_t in_count = 0; static int16_t out_count = 0; +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG +static int16_t out_wav_count = 0; +#endif static int16_t flag_count = 0; static char *flag_name[N_DBGFLAG]; @@ -390,7 +401,13 @@ void dbgclose() fclose( out_fileptr[i] ); free( out_filename[i] ); } - +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + for ( i = 0; i < out_wav_count; i++ ) + { + CloseWav( out_wavfileptr[i] ); + free( out_wavfilename[i] ); + } +#endif for ( i = 0; i < snr_count; i++ ) { free( snr_name[i] ); @@ -846,4 +863,114 @@ int16_t make_dirs( const char *const pathname ) return 0; } +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG +int16_t dbgwrite_wav( + const float *buffer[], /* i : Write buffer */ + const int16_t count_per_ch, /* i : Number of elements */ + const char *const filename, + int32_t fs, + int16_t num_chs ) +{ + int16_t index, i; + int16_t *tmp_buf; + + index = lookup( filename, (const char *const *) out_wavfilename, out_wav_count ); + + if ( index == -1 ) + { + if ( make_dirs( filename ) != 0 ) + { + fprintf( stderr, "dbgwrite: Could not create directory structure for %s. Exiting..\n", filename ); + exit( -1 ); + } + + index = out_wav_count; + out_wavfileptr[index] = CreateWav( (const char *) filename, fs, num_chs, 16 /* const uint32_t writeWaveExt */ ); + out_wavfilename[index] = malloc( sizeof( char ) * ( strlen( filename ) + 1 ) ); + strcpy( out_wavfilename[index], filename ); + out_wav_count++; + } + + if ( out_wavfileptr[index] != NULL ) + { + int16_t j, k; + float tmp; + tmp_buf = (int16_t *) calloc( count_per_ch * num_chs, sizeof( int16_t ) ); + k = 0; + for ( j = 0; j < count_per_ch; j++ ) + { + for ( i = 0; i < num_chs; i++, k++ ) + { + tmp = roundf( buffer[i][j] ); + tmp_buf[k] = ( tmp > MAX16B_FLT ) ? MAX16B : ( tmp < MIN16B_FLT ) ? MIN16B + : (short) tmp; + } + } + WriteWavShort( out_wavfileptr[index], tmp_buf, count_per_ch * num_chs ); + free( tmp_buf ); + } + else + { + fprintf( stderr, "dbgwrite_wav: Could not write to file: %s. Exiting..\n", filename ); + exit( -1 ); + } + + return 0; +} + + +int16_t dbgwrite_txt( + const float *buffer, /* i : Write buffer */ + const int16_t count, /* i : Number of elements */ + const char *const filename, + const char *const msg_opt ) +{ + int16_t index, i; + + index = lookup( filename, (const char *const *) out_filename, out_count ); + + if ( index == -1 ) + { + if ( make_dirs( filename ) != 0 ) + { + fprintf( stderr, "dbgwrite: Could not create directory structure for %s. Exiting..\n", filename ); + exit( -1 ); + } + + index = out_count; + out_fileptr[index] = fopen( filename, "w" ); + out_filename[index] = malloc( sizeof( char ) * ( strlen( filename ) + 1 ) ); + strcpy( out_filename[index], filename ); + out_count++; + } + + if ( out_fileptr[index] != NULL ) + { + if ( buffer != NULL ) + { + if ( msg_opt == NULL ) + { + for ( i = 0; i < count; i++ ) + { + fprintf( out_fileptr[index], "%f\n", buffer[i] ); + } + } + else + { + for ( i = 0; i < count; i++ ) + { + fprintf( out_fileptr[index], "%s %f\n", msg_opt, buffer[i] ); + } + } + } + } + else + { + fprintf( stderr, "dbgwrite_txt: Could not write to file: %s. Exiting..\n", filename ); + exit( -1 ); + } + + return 0; +} +#endif #endif /* DEBUGGING */ diff --git a/lib_debug/debug.h b/lib_debug/debug.h index abf246674a..e228f11cf4 100644 --- a/lib_debug/debug.h +++ b/lib_debug/debug.h @@ -95,7 +95,19 @@ int16_t dbgwrite( const char *const filename #endif ); - +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG +int16_t dbgwrite_wav( + const float *buffer[], /* i : Write buffer */ + const int16_t count_per_ch, /* i : Number of elements */ + const char *const filename, + int32_t fs, + int16_t num_chs ); +int16_t dbgwrite_txt( + const float *buffer, /* i : Write buffer */ + const int16_t count, /* i : Number of elements */ + const char *const filename, + const char *const msg_opt ); +#endif void dbgwrite_mat_repeat( float *buffer, /* i : write buffer */ int16_t nRow, /* i : matrix size (rows) */ diff --git a/lib_debug/mem_count.c b/lib_debug/mem_count.c index 278126d35e..598b023df3 100644 --- a/lib_debug/mem_count.c +++ b/lib_debug/mem_count.c @@ -98,7 +98,7 @@ typedef INT64 int64_t; /* This is the maximum number of allocations for which to keep information. It can be increased if required. */ #ifdef SBA_BR_SWITCHING -#define MAX_INFO_RECORDS 8000 +#define MAX_INFO_RECORDS 9000 #else #define MAX_INFO_RECORDS 3000 #endif diff --git a/lib_dec/ivas_dec.c b/lib_dec/ivas_dec.c index 5d3a5a10f9..cf887ab725 100644 --- a/lib_dec/ivas_dec.c +++ b/lib_dec/ivas_dec.c @@ -53,6 +53,10 @@ ivas_error ivas_dec( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ int16_t *data /* o : output synthesis signal */ +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + IVAS_SPLIT_REND_BITS_HANDLE hSplitRendBits +#endif ) { int16_t n, output_frame, nchan_out; @@ -85,6 +89,12 @@ ivas_error ivas_dec( } } +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( st_ivas->hDecoderConfig->Opt_splitRendMode != SPLIT_REND_DISABLED ) + { + ivas_set_split_rend_setup( &st_ivas->splitBinRend, hSplitRendBits ); + } +#endif /*----------------------------------------------------------------* * Initialization of local vars after struct has been set *----------------------------------------------------------------*/ @@ -543,6 +553,27 @@ ivas_error ivas_dec( } +#ifdef SPLIT_REND_WITH_HEAD_ROT + /*split rendering process calls*/ + if ( st_ivas->hDecoderConfig->Opt_splitRendMode != SPLIT_REND_DISABLED ) + { + if ( ( st_ivas->splitBinRend.splitrend.hBinHrSplitPreRend != NULL ) && ( st_ivas->splitBinRend.splitrend.hBinHrSplitPostRend != NULL ) ) + { + IVAS_DEC_SPLIT_REND_WRAPPER *hSplitBinRend; + int16_t max_band; + hSplitBinRend = &st_ivas->splitBinRend; + max_band = (int16_t) ( ( BINAURAL_MAXBANDS * output_Fs ) / 48000 ); + ivas_renderMultiBinToSplitBinaural( &hSplitBinRend->splitrend, + hSplitBinRend->hSplitRendBits, + hSplitBinRend->hMultiBinCldfbData->Cldfb_RealBuffer_Binaural, + hSplitBinRend->hMultiBinCldfbData->Cldfb_ImagBuffer_Binaural, + st_ivas->hHeadTrackData->Quaternions, + st_ivas->hPostRendheadTrackData->Quaternions, max_band, output ); + + dynamic_free( st_ivas->splitBinRend.hMultiBinCldfbData ); + } + } +#endif /*----------------------------------------------------------------* * Write IVAS output channels * - compensation for saturation diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c index f2273de26d..8b07d7bb1d 100644 --- a/lib_dec/ivas_dirac_dec.c +++ b/lib_dec/ivas_dirac_dec.c @@ -1815,8 +1815,19 @@ void ivas_dirac_dec( /*CLDFB: last output channels reserved to LFT for CICPx*/ float Cldfb_RealBuffer[MAX_OUTPUT_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; float Cldfb_ImagBuffer[MAX_OUTPUT_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; +#ifdef SPLIT_REND_WITH_HEAD_ROT +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + float Cldfb_RealBuffer_Binaural[MAX_HEAD_ROT_POSES + 1][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer_Binaural[MAX_HEAD_ROT_POSES + 1][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; +#else + float Cldfb_RealBuffer_Binaural[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer_Binaural[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; +#endif +#else float Cldfb_RealBuffer_Binaural[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; float Cldfb_ImagBuffer_Binaural[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; +#endif + int16_t index, num_freq_bands; DIRAC_DEC_STACK_MEM DirAC_mem; @@ -2338,12 +2349,37 @@ void ivas_dirac_dec( /* Perform binaural rendering */ ivas_binRenderer( st_ivas->hBinRenderer, st_ivas->hHeadTrackData, +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + st_ivas->hPostRendheadTrackData, +#endif Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer, Cldfb_ImagBuffer ); +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( st_ivas->hBinRenderer->splitRendMode == SPLIT_REND_PRE || st_ivas->hBinRenderer->splitRendMode == SPLIT_REND_COMB ) + { + int16_t pos_idx; +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES + 1; pos_idx++ ) +#else + for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES; pos_idx++ ) +#endif + { + for ( slot_idx = 0; slot_idx < hDirAC->subframe_nbslots; slot_idx++ ) + { + for ( ch = 0; ch < st_ivas->hDecoderConfig->nchan_out; ch++ ) + { + mvr2r( Cldfb_RealBuffer_Binaural[pos_idx][ch][slot_idx], st_ivas->splitBinRend.hMultiBinCldfbData->Cldfb_RealBuffer_Binaural[pos_idx][ch][index_slot + slot_idx], hDirAC->num_freq_bands ); + mvr2r( Cldfb_ImagBuffer_Binaural[pos_idx][ch][slot_idx], st_ivas->splitBinRend.hMultiBinCldfbData->Cldfb_ImagBuffer_Binaural[pos_idx][ch][index_slot + slot_idx], hDirAC->num_freq_bands ); + } + } + } + } +#endif + /* Inverse CLDFB*/ for ( ch = 0; ch < st_ivas->hDecoderConfig->nchan_out; ch++ ) { @@ -2353,8 +2389,13 @@ void ivas_dirac_dec( for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) { +#ifdef SPLIT_REND_WITH_HEAD_ROT + RealBuffer[i] = Cldfb_RealBuffer_Binaural[0][ch][i]; + ImagBuffer[i] = Cldfb_ImagBuffer_Binaural[0][ch][i]; +#else RealBuffer[i] = Cldfb_RealBuffer_Binaural[ch][i]; ImagBuffer[i] = Cldfb_ImagBuffer_Binaural[ch][i]; +#endif } cldfbSynthesis( RealBuffer, diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index e51b46779c..5d8d158739 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -564,6 +564,20 @@ ivas_error ivas_init_decoder_front( } } +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( st_ivas->hDecoderConfig->Opt_splitRendMode == SPLIT_REND_COMB ) + { + if ( ( error = ivas_headTrack_open( &( st_ivas->hPostRendheadTrackData ) ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else + { + st_ivas->hPostRendheadTrackData = NULL; + } +#endif + /*-------------------------------------------------------------------* * Allocate HRTF binary handle *--------------------------------------------------------------------*/ @@ -1157,6 +1171,9 @@ ivas_error ivas_init_decoder( { return error; } +#ifdef SPLIT_REND_WITH_HEAD_ROT + ivas_split_renderer_open( &st_ivas->splitBinRend.splitrend, hDecoderConfig->output_Fs, hDecoderConfig->Opt_splitRendMode, 1 ); +#endif } else if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) { @@ -1482,6 +1499,11 @@ void ivas_initialize_handles_dec( /* rendering handles */ st_ivas->hBinRenderer = NULL; +#ifdef SPLIT_REND_WITH_HEAD_ROT + st_ivas->splitBinRend.hMultiBinCldfbData = NULL; + st_ivas->splitBinRend.hSplitRendBits = NULL; + ivas_init_split_rend_handles( &st_ivas->splitBinRend.splitrend ); +#endif st_ivas->hDiracDecBin = NULL; st_ivas->hLsSetUpConversion = NULL; st_ivas->hEFAPdata = NULL; @@ -1640,6 +1662,10 @@ void ivas_destroy_dec( /* Fastconv binaural renderer handle */ ivas_binRenderer_close( &st_ivas->hBinRenderer ); +#ifdef SPLIT_REND_WITH_HEAD_ROT + /* Split binaural renderer handle */ + ivas_split_renderer_close( &st_ivas->splitBinRend.splitrend ); +#endif /* Parametric binaural renderer handle */ ivas_dirac_dec_close_binaural_data( &st_ivas->hDiracDecBin ); @@ -1677,6 +1703,13 @@ void ivas_destroy_dec( count_free( st_ivas->hHeadTrackData ); st_ivas->hHeadTrackData = NULL; } +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( st_ivas->hPostRendheadTrackData != NULL ) + { + count_free( st_ivas->hPostRendheadTrackData ); + st_ivas->hPostRendheadTrackData = NULL; + } +#endif /* Time Domain binaural renderer handle */ if ( st_ivas->hBinRendererTd != NULL ) diff --git a/lib_dec/ivas_mc_param_dec.c b/lib_dec/ivas_mc_param_dec.c index 7557fed214..7b8901fdec 100644 --- a/lib_dec/ivas_mc_param_dec.c +++ b/lib_dec/ivas_mc_param_dec.c @@ -799,8 +799,13 @@ void ivas_param_mc_dec( float Cldfb_ImagBuffer_in[PARAM_MC_MAX_TRANSPORT_CHANS][PARAM_MC_MAX_NSLOTS][CLDFB_NO_CHANNELS_MAX]; float Cldfb_RealBuffer[MAX_INTERN_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; float Cldfb_ImagBuffer[MAX_INTERN_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; +#ifdef SPLIT_REND_WITH_HEAD_ROT + float Cldfb_RealBuffer_Binaural[1][BINAURAL_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer_Binaural[1][BINAURAL_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; +#else float Cldfb_RealBuffer_Binaural[BINAURAL_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; float Cldfb_ImagBuffer_Binaural[BINAURAL_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; +#endif float cx[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS]; float cx_imag[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS]; float mixing_matrix[PARAM_MC_MAX_PARAMETER_BANDS][MAX_CICP_CHANNELS * PARAM_MC_MAX_TRANSPORT_CHANS]; @@ -1052,7 +1057,11 @@ void ivas_param_mc_dec( if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) { ivas_binRenderer( st_ivas->hBinRenderer, st_ivas->hHeadTrackData, - Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer, Cldfb_ImagBuffer ); +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + NULL, +#endif + Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, + Cldfb_RealBuffer, Cldfb_ImagBuffer ); } else if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_LS_CONV_CLDFB ) { @@ -1073,8 +1082,13 @@ void ivas_param_mc_dec( { if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) { +#ifdef SPLIT_REND_WITH_HEAD_ROT + RealBuffer[i] = Cldfb_RealBuffer_Binaural[0][ch][i]; + ImagBuffer[i] = Cldfb_ImagBuffer_Binaural[0][ch][i]; +#else RealBuffer[i] = Cldfb_RealBuffer_Binaural[ch][i]; ImagBuffer[i] = Cldfb_ImagBuffer_Binaural[ch][i]; +#endif } else { diff --git a/lib_dec/ivas_rom_dec.c b/lib_dec/ivas_rom_dec.c index c79bc38019..d481ffa904 100644 --- a/lib_dec/ivas_rom_dec.c +++ b/lib_dec/ivas_rom_dec.c @@ -552,4 +552,47 @@ const float diffuseFieldCoherenceDifferenceZ[BINAURAL_COHERENCE_DIFFERENCE_BINS] 0.048207f, 0.10796f, 0.11845f, 0.047886f, 0.035917f, 0.045196f, 0.018863f, 0.015547f, 0.014157f }; +#ifdef SPLIT_REND_WITH_HEAD_ROT +/*----------------------------------------------------------------------* + * split rendering ROM tables + *-----------------------------------------------------------------------*/ +const float split_rend_relative_yaw_angles[MAX_YAW_ANGLES] = {0.0f, -15.0f, 30.0f}; /*actual rotations would be Ref, Ref - 15, Ref - 15 + 30 */ +const float split_rend_relative_pitch_angles[MAX_PITCH_ANGLES] = {0.0f}; +const float split_rend_relative_roll_angles[MAX_ROLL_ANGLES] = {0.0f}; +const int16_t SplitRend_band_grouping[MAX_SPLIT_REND_MD_BANDS + 1] = +{ + //0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 32, 34, 36, 38, 40, 50, 60 + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 20, 25, 30, 35, 40, 50, 60 + //0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 21, 23, 25, 27, 30, 35, 40, 50, 60 + //0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 25, 40, 60 +}; + +const int32_t ivas_split_rend_huff_d_consts[IVAS_SPLIT_REND_D_QUANT_PNTS][3] = { + { 0, 1, 0 },{ 1, 2, 2 },{ 2, 3, 6 },{ 3, 4, 14 }, + { 4, 5, 30 },{ 5, 6, 62 },{ 6, 7, 126 },{ 7, 8, 254 }, + { 8, 9, 510 },{ 9, 10, 1022 },{ 10, 11, 2046 },{ 11, 12, 4094 }, + { 12, 13, 8190 },{ 13, 14, 16382 },{ 14, 14, 16383 } +}; +const int32_t ivas_split_rend_huff_pred_consts[IVAS_SPLIT_REND_PRED_QUANT_PNTS][3] = { + /* + { -15, 16, 65532 },{ -14, 16, 65533 },{ -13, 15, 32764 },{ -12, 14, 16380 }, + { -11, 13, 8188 },{ -10, 12, 4092 },{ -9, 11, 2044 },{ -8, 10, 1020 },{ -7, 9, 508 }, + { -6, 8, 252 },{ -5, 7, 124 },{ -4, 6, 60 },{ -3, 5, 28 }, + { -2, 4, 12 },{ -1, 3, 4 },{ 0, 1, 0 },{ 1, 3, 5 }, + { 2, 4, 13 },{ 3, 5, 29 },{ 4, 6, 61 },{ 5, 7, 125 }, + { 6, 8, 253 },{ 7, 9, 509 },{ 8, 10, 1021 },{ 9, 11, 2045 }, + { 10, 12, 4093 },{ 11, 13, 8189 },{ 12, 14, 16381 },{ 13, 15, 32765 }, + { 14, 16, 65534 },{ 15, 16, 65535 }*/ + +{-15,10,1020},{-14,10,1021},{-13,9,506},{-12,9,507}, +{-11,8,250},{-10,8,251},{-9,7,120},{-8,7,121}, +{-7,6,56},{-6,6,57},{-5,5,24},{-4,5,25},{-3,4,8}, +{-2,4,9},{-1,3,2},{0,2,0},{1,3,3}, +{2,4,10},{3,4,11},{4,5,26},{5,5,27}, +{6,6,58},{7,6,59},{8,7,122},{9,7,123}, +{10,7,124},{11,8,252},{12,9,508},{13,9,509}, +{14,10,1022},{15,10,1023}, +}; +#endif + /* clang-format on */ diff --git a/lib_dec/ivas_rom_dec.h b/lib_dec/ivas_rom_dec.h index febc60e2e5..aa5f48cbe9 100644 --- a/lib_dec/ivas_rom_dec.h +++ b/lib_dec/ivas_rom_dec.h @@ -156,4 +156,16 @@ extern const float diffuseFieldCoherenceDifferenceX[BINAURAL_COHERENCE_DIFFERENC extern const float diffuseFieldCoherenceDifferenceY[BINAURAL_COHERENCE_DIFFERENCE_BINS]; extern const float diffuseFieldCoherenceDifferenceZ[BINAURAL_COHERENCE_DIFFERENCE_BINS]; +#ifdef SPLIT_REND_WITH_HEAD_ROT +/*----------------------------------------------------------------------* + * split rendering ROM tables + *-----------------------------------------------------------------------*/ +extern const float split_rend_relative_yaw_angles[MAX_YAW_ANGLES]; +extern const float split_rend_relative_pitch_angles[MAX_PITCH_ANGLES]; +extern const float split_rend_relative_roll_angles[MAX_ROLL_ANGLES]; +extern const int16_t SplitRend_band_grouping[MAX_SPLIT_REND_MD_BANDS + 1]; +extern const int32_t ivas_split_rend_huff_d_consts[IVAS_SPLIT_REND_D_QUANT_PNTS][3]; +extern const int32_t ivas_split_rend_huff_pred_consts[IVAS_SPLIT_REND_PRED_QUANT_PNTS][3]; +#endif + #endif diff --git a/lib_dec/ivas_sba_dec.c b/lib_dec/ivas_sba_dec.c index 975fb60480..3c02a05d9b 100644 --- a/lib_dec/ivas_sba_dec.c +++ b/lib_dec/ivas_sba_dec.c @@ -159,6 +159,9 @@ ivas_error ivas_sba_dec_reinit( /* Fastconv binaural renderer handle */ ivas_binRenderer_close( &st_ivas->hBinRenderer ); +#ifdef SPLIT_REND_WITH_HEAD_ROT + ivas_split_renderer_close( &st_ivas->splitBinRend.splitrend ); +#endif /* Parametric binaural renderer handle */ ivas_dirac_dec_close_binaural_data( &st_ivas->hDiracDecBin ); @@ -460,6 +463,9 @@ ivas_error ivas_sba_dec_reinit( { return error; } +#ifdef SPLIT_REND_WITH_HEAD_ROT + ivas_split_renderer_open( &st_ivas->splitBinRend.splitrend, hDecoderConfig->output_Fs, hDecoderConfig->Opt_splitRendMode, 1 ); +#endif } else if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) { @@ -794,10 +800,16 @@ ivas_error ivas_sba_dec_reconfigure( { return error; } +#ifdef SPLIT_REND_WITH_HEAD_ROT + ivas_split_renderer_open( &st_ivas->splitBinRend.splitrend, st_ivas->hDecoderConfig->output_Fs, st_ivas->hDecoderConfig->Opt_splitRendMode, 1 ); +#endif } else if ( st_ivas->hBinRenderer != NULL && ( st_ivas->renderer_type != RENDERER_BINAURAL_FASTCONV && st_ivas->renderer_type != RENDERER_BINAURAL_FASTCONV_ROOM ) ) { ivas_binRenderer_close( &st_ivas->hBinRenderer ); +#ifdef SPLIT_REND_WITH_HEAD_ROT + ivas_split_renderer_close( &st_ivas->splitBinRend.splitrend ); +#endif } if ( st_ivas->hDiracDecBin == NULL && ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) ) diff --git a/lib_dec/ivas_spar_md_dec.c b/lib_dec/ivas_spar_md_dec.c index f316c746cf..4eed6b8ced 100644 --- a/lib_dec/ivas_spar_md_dec.c +++ b/lib_dec/ivas_spar_md_dec.c @@ -83,8 +83,6 @@ static ivas_error ivas_spar_set_dec_config( ivas_spar_md_dec_state_t *hMdDec, co static void ivas_parse_parameter_bitstream_dtx( ivas_spar_md_t *pSpar_md, Decoder_State *st, const int16_t bw, const int16_t num_bands, int16_t *num_dmx_per_band, int16_t *num_dec_per_band ); -static ivas_error ivas_deindex_real_index( const int16_t *index, const int16_t q_levels, const float min_value, const float max_value, float *quant, const int16_t num_ch_dim2 ); - static void ivas_spar_dec_parse_md_bs( ivas_spar_md_dec_state_t *hMdDec, Decoder_State *st, int16_t *nB, int16_t *bands_bw, int16_t *dtx_vad, const int32_t ivas_total_brate, const int16_t use_planar_coeff, const int16_t sba_inactive_mode ); @@ -2482,7 +2480,7 @@ static void ivas_parse_parameter_bitstream_dtx( * Deindex real index *-----------------------------------------------------------------------------------------*/ -static ivas_error ivas_deindex_real_index( +ivas_error ivas_deindex_real_index( const int16_t *index, const int16_t q_levels, const float min_value, diff --git a/lib_dec/ivas_stat_dec.h b/lib_dec/ivas_stat_dec.h index a18f826921..0b346d0036 100644 --- a/lib_dec/ivas_stat_dec.h +++ b/lib_dec/ivas_stat_dec.h @@ -1264,15 +1264,107 @@ typedef struct ivas_binaural_rendering_conv_module_struct float ***filterTapsLeftImag; float ***filterTapsRightReal; float ***filterTapsRightImag; - +#ifdef SPLIT_REND_WITH_HEAD_ROT + float ****filterStatesLeftReal; + float ****filterStatesLeftImag; +#else float ***filterStatesLeftReal; float ***filterStatesLeftImag; +#endif int16_t numTapsArray[BINAURAL_CONVBANDS]; int16_t numTaps; +#ifdef SPLIT_REND_WITH_HEAD_ROT + int16_t numPoses; +#endif } BINRENDERER_CONV_MODULE, *BINRENDERER_CONV_MODULE_HANDLE; +#ifdef SPLIT_REND_WITH_HEAD_ROT +/* binaural split rendering head rotation data structure */ +typedef struct ivas_binaural_head_rot_split_rendering_md_struct +{ + float pred_mat_re[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float pred_mat_im[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float gd; + int16_t pred_mat_re_idx[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + int16_t pred_mat_im_idx[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + int16_t gd_idx; +} BIN_HR_SPLIT_REND_MD, *BIN_HR_SPLIT_REND_MD_HANDLE; + +typedef struct ivas_split_rend_huffman_cfg_t +{ + const int32_t *codebook; + int16_t min_len; + int16_t max_len; + int16_t sym_len; +} ivas_split_rend_huffman_cfg_t; + +typedef struct ivas_binaural_head_rot_split_rendering_huff_struct +{ + ivas_split_rend_huffman_cfg_t pred; + int16_t pred_idx_trav[IVAS_SPLIT_REND_PRED_QUANT_PNTS]; + int16_t pred_base2_code_len; + ivas_split_rend_huffman_cfg_t gd; + int16_t gd_base2_code_len; + int16_t gd_idx_trav[IVAS_SPLIT_REND_D_QUANT_PNTS]; +} BIN_HR_SPLIT_REND_HUFF, *BIN_HR_SPLIT_REND_HUFF_HANDLE; + +typedef struct ivas_binaural_head_rot_split_pre_rendering_struct +{ + BIN_HR_SPLIT_REND_MD rot_md[MAX_HEAD_ROT_POSES - 1][MAX_PARAM_SPATIAL_SUBFRAMES][MAX_SPLIT_REND_MD_BANDS]; + float fix_pos_rot_mat[MAX_YAW_ANGLES - 1][BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + BIN_HR_SPLIT_REND_HUFF huff_cfg; +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + HANDLE_CLDFB_FILTER_BANK cldfbSynRotBinDec[MAX_HEAD_ROT_POSES + 1][BINAURAL_CHANNELS]; +#endif +} BIN_HR_SPLIT_PRE_REND, *BIN_HR_SPLIT_PRE_REND_HANDLE; + +typedef struct ivas_binaural_head_rot_split_post_rendering_struct +{ + BIN_HR_SPLIT_REND_MD rot_md[MAX_HEAD_ROT_POSES][MAX_PARAM_SPATIAL_SUBFRAMES][MAX_SPLIT_REND_MD_BANDS]; + float fix_pos_rot_mat[MAX_HEAD_ROT_POSES - 1][BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + BIN_HR_SPLIT_REND_HUFF huff_cfg; +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + float mixer_mat_re[MAX_HEAD_ROT_POSES][MAX_SPLIT_REND_MD_BANDS][BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float mixer_mat_im[MAX_HEAD_ROT_POSES][MAX_SPLIT_REND_MD_BANDS][BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float gd_mem[MAX_HEAD_ROT_POSES][MAX_SPLIT_REND_MD_BANDS]; +#else + float mixer_mat_re[1][MAX_SPLIT_REND_MD_BANDS][BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float mixer_mat_im[1][MAX_SPLIT_REND_MD_BANDS][BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float gd_mem[1][MAX_SPLIT_REND_MD_BANDS]; +#endif + int16_t cf_flag; + HANDLE_CLDFB_FILTER_BANK cldfbSyn[BINAURAL_CHANNELS]; +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + HANDLE_CLDFB_FILTER_BANK cldfbSynReconsBinDec[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS]; +#endif +} BIN_HR_SPLIT_POST_REND, *BIN_HR_SPLIT_POST_REND_HANDLE; + +typedef struct ivas_binaural_head_rot_split_rendering_lcld_enc_struct +{ + void *pLcld_enc; +} BIN_HR_SPLIT_LCLD_ENC, *BIN_HR_SPLIT_LCLD_ENC_HANDLE; + +typedef struct ivas_binaural_head_rot_split_rendering_lcld_dec_struct +{ + void *pLcld_dec; +} BIN_HR_SPLIT_LCLD_DEC, *BIN_HR_SPLIT_LCLD_DEC_HANDLE; + +typedef struct +{ + HANDLE_CLDFB_FILTER_BANK cldfbAna[MAX_HEAD_ROT_POSES * BINAURAL_CHANNELS]; +} CLDFB_HANDLES_WRAPPER, *CLDFB_HANDLES_WRAPPER_HANDLE; +typedef struct +{ + BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend; + BIN_HR_SPLIT_LCLD_ENC_HANDLE hSplitBinLCLDEnc; + BIN_HR_SPLIT_POST_REND_HANDLE hBinHrSplitPostRend; + BIN_HR_SPLIT_LCLD_DEC_HANDLE hSplitBinLCLDDec; + CLDFB_HANDLES_WRAPPER_HANDLE hCldfbHandles; +} SPLIT_REND_WRAPPER; +#endif + /* Fastconv binaural data structure */ typedef struct ivas_binaural_rendering_struct { @@ -1287,14 +1379,15 @@ typedef struct ivas_binaural_rendering_struct int16_t nInChannels; /* number input channels */ int8_t render_lfe; /* Flag to render LFE in binaural rendering*/ IVAS_FORMAT ivas_format; /* format; corresponds to st_ivas->ivas_format, unless the signal gets transormed to a different domain for rendering */ - +#ifdef SPLIT_REND_WITH_HEAD_ROT + IVAS_SPLIT_REND_MODE splitRendMode; /*Split rendering mode, pre, post (OR combined in debug mode)*/ +#endif /* Convolution module structure */ BINRENDERER_CONV_MODULE_HANDLE hBinRenConvModule; /* Variables related to reverb module */ float earlyPartEneCorrection[CLDFB_NO_CHANNELS_MAX]; REVERB_STRUCT_HANDLE hReverb; - } BINAURAL_RENDERER, *BINAURAL_RENDERER_HANDLE; @@ -1688,7 +1781,6 @@ typedef struct ivas_render_config_t ivas_renderTypeOverride renderer_type_override; #endif ivas_roomAcoustics_t roomAcoustics; - } RENDER_CONFIG_DATA, *RENDER_CONFIG_HANDLE; @@ -1877,7 +1969,10 @@ typedef struct decoder_config_structure int16_t Opt_LsCustom; /* indicates whether loudspeaker custom setup is used */ int16_t Opt_HRTF_binary; /* indicates whether HRTF binary file is used */ int16_t Opt_Headrotation; /* indicates whether head-rotation is used */ - int16_t orientation_tracking; /* indicates orientation tracking type */ +#ifdef SPLIT_REND_WITH_HEAD_ROT + IVAS_SPLIT_REND_MODE Opt_splitRendMode; /* Split rendering mode */ +#endif + int16_t orientation_tracking; /* indicates orientation tracking type */ float no_diegetic_pan; int16_t Opt_AMR_WB; /* flag indicating AMR-WB IO mode */ @@ -1889,7 +1984,24 @@ typedef struct decoder_config_structure } DECODER_CONFIG, *DECODER_CONFIG_HANDLE; - +#ifdef SPLIT_REND_WITH_HEAD_ROT +typedef struct +{ +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + float Cldfb_RealBuffer_Binaural[MAX_HEAD_ROT_POSES + 1][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer_Binaural[MAX_HEAD_ROT_POSES + 1][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; +#else + float Cldfb_RealBuffer_Binaural[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer_Binaural[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; +#endif +} IVAS_DEC_SPLIT_REND_MULTI_BIN_CLDFB_DATA, *IVAS_DEC_SPLIT_REND_MULTI_BIN_CLDFB_DATA_HANDLE; +typedef struct +{ + IVAS_DEC_SPLIT_REND_MULTI_BIN_CLDFB_DATA_HANDLE hMultiBinCldfbData; /*scratch buffer for frame by frame processing*/ + IVAS_SPLIT_REND_BITS_HANDLE hSplitRendBits; /*scratch buffer for frame by frame processing*/ + SPLIT_REND_WRAPPER splitrend; +} IVAS_DEC_SPLIT_REND_WRAPPER; +#endif /*----------------------------------------------------------------------------------* * * Main IVAS decoder structure @@ -1975,6 +2087,11 @@ typedef struct Decoder_Struct int32_t noClipping; /* number of clipped samples */ #endif +#ifdef SPLIT_REND_WITH_HEAD_ROT + IVAS_DEC_SPLIT_REND_WRAPPER splitBinRend; + HEAD_TRACK_DATA_HANDLE hPostRendheadTrackData; +#endif + } Decoder_Struct; /* clang-format on */ diff --git a/lib_dec/lib_dec.c b/lib_dec/lib_dec.c index d45527b740..676076fc1f 100644 --- a/lib_dec/lib_dec.c +++ b/lib_dec/lib_dec.c @@ -95,7 +95,6 @@ static ivas_error evs_dec_main( Decoder_Struct *st_ivas, const int16_t nOutSampl static ivas_error input_format_API_to_internal( IVAS_DEC_INPUT_FORMAT input_format, int16_t *bitstream_format_internal, int16_t *sdp_hf_only, const bool is_voip_enabled ); static void init_decoder_config( DECODER_CONFIG_HANDLE hDecoderConfig, const int16_t orientation_tracking, const float no_diegetic_pan ); - /*---------------------------------------------------------------------* * IVAS_DEC_Open() * @@ -388,6 +387,10 @@ ivas_error IVAS_DEC_Configure( const int16_t customLsOutputEnabled, /* i : enable custom loudspeaker setup handle */ const int16_t hrtfReaderEnabled, /* i : enable HRTF binary file input */ const int16_t enableHeadRotation /* i : enable head rotation for binaural output */ +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + const IVAS_SPLIT_REND_MODE splitRendMode /* i : split rend mode */ +#endif #ifdef DEBUGGING , const int16_t forceSubframeBinauralization /* i : enable subframe binauralization */ @@ -444,6 +447,10 @@ ivas_error IVAS_DEC_Configure( hDecoderConfig->Opt_Headrotation = enableHeadRotation; hDecoderConfig->Opt_HRTF_binary = hrtfReaderEnabled; +#ifdef SPLIT_REND_WITH_HEAD_ROT + hDecoderConfig->Opt_splitRendMode = splitRendMode; +#endif + /* Set decoder parameters to initial values */ if ( ( error = ivas_init_decoder_front( st_ivas ) ) != IVAS_ERR_OK ) { @@ -620,6 +627,10 @@ ivas_error IVAS_DEC_GetSamples( IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ int16_t *pcmBuf, /* i/o: buffer for decoded PCM output. The memory must already be allocated and be able to hold the expected number of output samples, based on frame size and number of output channels */ int16_t *nOutSamples /* o : number of samples written to output buffer */ +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + IVAS_SPLIT_REND_BITS_HANDLE hSplitRendBits +#endif ) { Decoder_Struct *st_ivas; @@ -646,7 +657,12 @@ ivas_error IVAS_DEC_GetSamples( else if ( hIvasDec->mode == IVAS_DEC_MODE_IVAS ) { /* run the main IVAS decoding routine */ - if ( ( error = ivas_dec( st_ivas, pcmBuf ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_dec( st_ivas, pcmBuf +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + hSplitRendBits +#endif + ) ) != IVAS_ERR_OK ) { return error; } @@ -832,6 +848,10 @@ ivas_error IVAS_DEC_GetMasaMetadata( ivas_error IVAS_DEC_FeedHeadTrackData( IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ IVAS_QUATERNION *orientation /* i : head-tracking data */ +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + IVAS_SPLIT_REND_MODE splitRendMode /* i : flag to determine split rendering mode*/ +#endif ) { HEAD_TRACK_DATA_HANDLE hHeadTrackData; @@ -843,6 +863,12 @@ ivas_error IVAS_DEC_FeedHeadTrackData( } hHeadTrackData = hIvasDec->st_ivas->hHeadTrackData; +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( splitRendMode == SPLIT_REND_POST ) + { + hHeadTrackData = hIvasDec->st_ivas->hPostRendheadTrackData; + } +#endif if ( hHeadTrackData == NULL ) { @@ -858,7 +884,7 @@ ivas_error IVAS_DEC_FeedHeadTrackData( hHeadTrackData->Quaternions[i].z = orientation[i].z; } - hIvasDec->st_ivas->hHeadTrackData->num_quaternions = 0; + hHeadTrackData->num_quaternions = 0; return IVAS_ERR_OK; } @@ -1345,7 +1371,12 @@ ivas_error IVAS_DEC_VoIP_GetSamples( hIvasDec->st_ivas->hDecoderConfig->ivas_total_brate = st->total_brate; } - if ( ( error = IVAS_DEC_GetSamples( hIvasDec, pcmBuf, &nOutSamplesElse ) ) != IVAS_ERR_OK ) + if ( ( error = IVAS_DEC_GetSamples( hIvasDec, pcmBuf, &nOutSamplesElse +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + NULL +#endif + ) ) != IVAS_ERR_OK ) { return error; } diff --git a/lib_dec/lib_dec.h b/lib_dec/lib_dec.h index f43034c885..4a052ba32b 100644 --- a/lib_dec/lib_dec.h +++ b/lib_dec/lib_dec.h @@ -127,6 +127,10 @@ ivas_error IVAS_DEC_Configure( const int16_t customLsOutputEnabled, /* i : enable custom loudspeaker setup handle */ const int16_t hrtfReaderEnabled, /* i : enable HRTF binary file input */ const int16_t enableHeadRotation /* i : enable head rotation for binaural output */ +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + const IVAS_SPLIT_REND_MODE splitRendMode /* i : split rendering mode */ +#endif #ifdef DEBUGGING , const int16_t forceSubframeBinauralization /* i : enable subframe binauralization */ @@ -153,6 +157,10 @@ ivas_error IVAS_DEC_GetSamples( IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ int16_t *pcmBuf, /* i/o: buffer for decoded PCM output. The memory must already be allocated and be able to hold the expected number of output samples, based on frame size and number of output channels */ int16_t *nOutSamples /* o : number of samples written to output buffer */ +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + IVAS_SPLIT_REND_BITS_HANDLE hSplitRendBits /* o : bitstream output for split rendering mode*/ +#endif ); /*! r: error code */ @@ -173,6 +181,10 @@ ivas_error IVAS_DEC_GetMasaMetadata( ivas_error IVAS_DEC_FeedHeadTrackData( IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ IVAS_QUATERNION *orientation /* i : head-tracking data */ +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + IVAS_SPLIT_REND_MODE splitRendMode /* i : flag to determine split rendering mode*/ +#endif ); /*! r: error code */ diff --git a/lib_rend/ivas_binauralRenderer.c b/lib_rend/ivas_binauralRenderer.c index 09713a6f5c..ff85e0c73b 100644 --- a/lib_rend/ivas_binauralRenderer.c +++ b/lib_rend/ivas_binauralRenderer.c @@ -40,6 +40,11 @@ #include "ivas_rom_rend.h" #include "ivas_rom_com.h" #include "ivas_rom_binauralRenderer.h" +#ifdef SPLIT_REND_WITH_HEAD_ROT +#include "ivas_rom_dec.h" +#include "lib_rend.h" +#include "ivas_lib_rend_internal.h" +#endif #ifdef DEBUGGING #include "debug.h" #endif @@ -58,6 +63,10 @@ static void ivas_binRenderer_filterModule( float CLDFB_real[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : real part of LS signals */ float CLDFB_imag[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : imag part of LS signals */ BINAURAL_RENDERER_HANDLE hBinRenderer /* i/o: fastconv binaural renderer handle */ +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + int16_t pos_idx +#endif ) { int16_t bandIdx, k, chIdx, tapIdx; @@ -68,8 +77,13 @@ static void ivas_binRenderer_filterModule( { for ( chIdx = 0; chIdx < hBinRenderer->nInChannels; chIdx++ ) { +#ifdef SPLIT_REND_WITH_HEAD_ROT + filterStatesLeftRealPtr = (float *) &( hBinRenderer->hBinRenConvModule->filterStatesLeftReal[pos_idx][bandIdx][chIdx][0] ); + filterStatesLeftImagPtr = (float *) &( hBinRenderer->hBinRenConvModule->filterStatesLeftImag[pos_idx][bandIdx][chIdx][0] ); +#else filterStatesLeftRealPtr = (float *) &( hBinRenderer->hBinRenConvModule->filterStatesLeftReal[bandIdx][chIdx][0] ); filterStatesLeftImagPtr = (float *) &( hBinRenderer->hBinRenConvModule->filterStatesLeftImag[bandIdx][chIdx][0] ); +#endif filterTapsLeftRealPtr = hBinRenderer->hBinRenConvModule->filterTapsLeftReal[bandIdx][chIdx]; filterTapsLeftImagPtr = hBinRenderer->hBinRenConvModule->filterTapsLeftImag[bandIdx][chIdx]; @@ -112,7 +126,6 @@ static void ivas_binRenderer_filterModule( return; } - /*------------------------------------------------------------------------- * ivas_binRenderer_convModuleOpen() * @@ -128,6 +141,9 @@ static ivas_error ivas_binRenderer_convModuleOpen( { int16_t bandIdx, chIdx; BINRENDERER_CONV_MODULE_HANDLE hBinRenConvModule; +#ifdef SPLIT_REND_WITH_HEAD_ROT + int16_t pos_idx; +#endif /*-----------------------------------------------------------------* * prepare library opening @@ -229,7 +245,69 @@ static ivas_error ivas_binRenderer_convModuleOpen( return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); } } +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( hBinRenderer->splitRendMode == SPLIT_REND_PRE || hBinRenderer->splitRendMode == SPLIT_REND_COMB ) + { +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + hBinRenConvModule->numPoses = MAX_HEAD_ROT_POSES + 1; +#else + hBinRenConvModule->numPoses = MAX_HEAD_ROT_POSES; +#endif + } + else + { + hBinRenConvModule->numPoses = 1; + } + + if ( ( hBinRenConvModule->filterStatesLeftReal = (float ****) count_malloc( hBinRenConvModule->numPoses * sizeof( float *** ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); + } + + if ( ( hBinRenConvModule->filterStatesLeftImag = (float ****) count_malloc( hBinRenConvModule->numPoses * sizeof( float *** ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); + } + + for ( pos_idx = 0; pos_idx < hBinRenConvModule->numPoses; pos_idx++ ) + { + if ( ( hBinRenConvModule->filterStatesLeftReal[pos_idx] = (float ***) count_malloc( hBinRenderer->conv_band * sizeof( float ** ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); + } + + if ( ( hBinRenConvModule->filterStatesLeftImag[pos_idx] = (float ***) count_malloc( hBinRenderer->conv_band * sizeof( float ** ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); + } + for ( bandIdx = 0; bandIdx < hBinRenderer->conv_band; bandIdx++ ) + { + if ( ( hBinRenConvModule->filterStatesLeftReal[pos_idx][bandIdx] = (float **) count_malloc( hBinRenderer->nInChannels * sizeof( float * ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); + } + + if ( ( hBinRenConvModule->filterStatesLeftImag[pos_idx][bandIdx] = (float **) count_malloc( hBinRenderer->nInChannels * sizeof( float * ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); + } + + for ( chIdx = 0; chIdx < hBinRenderer->nInChannels; chIdx++ ) + { + if ( ( hBinRenConvModule->filterStatesLeftReal[pos_idx][bandIdx][chIdx] = (float *) count_malloc( hBinRenConvModule->numTapsArray[bandIdx] * sizeof( float ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); + } + + if ( ( hBinRenConvModule->filterStatesLeftImag[pos_idx][bandIdx][chIdx] = (float *) count_malloc( hBinRenConvModule->numTapsArray[bandIdx] * sizeof( float ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); + } + } + } + } +#else if ( ( hBinRenConvModule->filterStatesLeftReal = (float ***) count_malloc( hBinRenderer->conv_band * sizeof( float ** ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); @@ -265,8 +343,10 @@ static ivas_error ivas_binRenderer_convModuleOpen( } } } +#endif /* set memories */ + for ( bandIdx = 0; bandIdx < hBinRenderer->conv_band; bandIdx++ ) { for ( chIdx = 0; chIdx < hBinRenderer->nInChannels; chIdx++ ) @@ -305,10 +385,6 @@ static ivas_error ivas_binRenderer_convModuleOpen( if ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM && hRenderConfig->roomAcoustics.use_brir ) { - /* set the memories to zero */ - set_zero( hBinRenConvModule->filterStatesLeftReal[bandIdx][chIdx], hBinRenConvModule->numTapsArray[bandIdx] ); - set_zero( hBinRenConvModule->filterStatesLeftImag[bandIdx][chIdx], hBinRenConvModule->numTapsArray[bandIdx] ); - if ( isLoudspeaker ) { hBinRenConvModule->filterTapsLeftReal[bandIdx][chIdx] = leftBRIRReal[bandIdx][tmp]; @@ -326,10 +402,6 @@ static ivas_error ivas_binRenderer_convModuleOpen( } else { - /* set the memories to zero */ - set_zero( hBinRenConvModule->filterStatesLeftReal[bandIdx][chIdx], hBinRenConvModule->numTaps ); - set_zero( hBinRenConvModule->filterStatesLeftImag[bandIdx][chIdx], hBinRenConvModule->numTaps ); - if ( isLoudspeaker ) { hBinRenConvModule->filterTapsLeftReal[bandIdx][chIdx] = leftHRIRReal[bandIdx][tmp]; @@ -349,6 +421,31 @@ static ivas_error ivas_binRenderer_convModuleOpen( } } +#ifdef SPLIT_REND_WITH_HEAD_ROT + for ( pos_idx = 0; pos_idx < hBinRenConvModule->numPoses; pos_idx++ ) + { + for ( bandIdx = 0; bandIdx < hBinRenderer->conv_band; bandIdx++ ) + { + for ( chIdx = 0; chIdx < hBinRenderer->nInChannels; chIdx++ ) + { + /* set the memories to zero */ + set_zero( hBinRenConvModule->filterStatesLeftReal[pos_idx][bandIdx][chIdx], hBinRenConvModule->numTapsArray[bandIdx] ); + set_zero( hBinRenConvModule->filterStatesLeftImag[pos_idx][bandIdx][chIdx], hBinRenConvModule->numTapsArray[bandIdx] ); + } + } + } +#else + for ( bandIdx = 0; bandIdx < hBinRenderer->conv_band; bandIdx++ ) + { + for ( chIdx = 0; chIdx < hBinRenderer->nInChannels; chIdx++ ) + { + /* set the memories to zero */ + set_zero( hBinRenConvModule->filterStatesLeftReal[bandIdx][chIdx], hBinRenConvModule->numTapsArray[bandIdx] ); + set_zero( hBinRenConvModule->filterStatesLeftImag[bandIdx][chIdx], hBinRenConvModule->numTapsArray[bandIdx] ); + } + } +#endif + hBinRenderer->hBinRenConvModule = hBinRenConvModule; return IVAS_ERR_OK; @@ -474,6 +571,77 @@ static void ivas_binaural_obtain_DMX( return; } +#ifdef SPLIT_REND_WITH_HEAD_ROT +/*------------------------------------------------------------------------- + * ivas_rend_openCldfbRend() + * + * Allocate and initialize CLDFB fast conv renderer handle + *------------------------------------------------------------------------*/ + +ivas_error ivas_rend_openCldfbRend( + CLDFB_REND_WRAPPER *pCldfbRend, + const IVAS_REND_AudioConfig inConfig, + const IVAS_SPLIT_REND_MODE splitRendMode, + RENDER_CONFIG_DATA *hRendCfg, + const int32_t output_Fs ) +{ + BINAURAL_RENDERER_HANDLE hBinRenderer; + int16_t convBand; + ivas_error error; + AUDIO_CONFIG in_config; + + error = IVAS_ERR_OK; + + /*-----------------------------------------------------------------* + * prepare library opening + *-----------------------------------------------------------------*/ + + if ( ( hBinRenderer = (BINAURAL_RENDERER_HANDLE) count_malloc( sizeof( BINAURAL_RENDERER ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Renderer\n" ) ); + } + + if ( ( hBinRenderer->hInputSetup = (IVAS_OUTPUT_SETUP_HANDLE) count_malloc( sizeof( IVAS_OUTPUT_SETUP ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for output setup Binaural Renderer\n" ) ); + } + + hBinRenderer->rotInCldfb = 1; + hBinRenderer->splitRendMode = splitRendMode; + + hBinRenderer->ivas_format = SBA_FORMAT; + + hBinRenderer->max_band = (int16_t) ( ( BINAURAL_MAXBANDS * output_Fs ) / 48000 ); + convBand = hBinRenderer->max_band; + + hBinRenderer->timeSlots = MAX_PARAM_SPATIAL_SUBFRAMES; /* Corresponds to 5 msec sound to motion latency */ + in_config = getIvasAudioConfigFromRendAudioConfig( inConfig ); + + if ( convBand > BINAURAL_CONVBANDS ) + { + hBinRenderer->conv_band = BINAURAL_CONVBANDS; + } + else + { + hBinRenderer->conv_band = convBand; + } + hBinRenderer->hInputSetup->is_loudspeaker_setup = 0; + getAudioConfigNumChannels( inConfig, &hBinRenderer->hInputSetup->nchan_out_woLFE ); + + /* Allocate memories and buffers needed for convolutional module */ + if ( ( error = ivas_binRenderer_convModuleOpen( hBinRenderer, RENDERER_BINAURAL_FASTCONV, hBinRenderer->hInputSetup->is_loudspeaker_setup, in_config, hRendCfg ) ) != IVAS_ERR_OK ) + { + return error; + } + pCldfbRend->binaural_latency_ns = (int32_t) ( FASTCONV_HOA3_latency_s * 1000000000.f ); + hBinRenderer->hReverb = NULL; + hBinRenderer->hEFAPdata = NULL; + + pCldfbRend->hCldfbRend = hBinRenderer; + + return error; +} +#endif /*------------------------------------------------------------------------- * ivas_binRenderer_open() @@ -509,6 +677,10 @@ ivas_error ivas_binRenderer_open( hBinRenderer->rotInCldfb = 1; } +#ifdef SPLIT_REND_WITH_HEAD_ROT + hBinRenderer->splitRendMode = st_ivas->hDecoderConfig->Opt_splitRendMode; +#endif + /* Declare some common variables needed for renderer */ /* Which format used for binaural rendering (needed for late reverb) ? MC or SBA */ if ( st_ivas->hIntSetup.is_loudspeaker_setup ) @@ -647,6 +819,9 @@ static void ivas_binRenderer_convModuleClose( ) { int16_t bandIdx, chIdx; +#ifdef SPLIT_REND_WITH_HEAD_ROT + int16_t posIdx; +#endif BINRENDERER_CONV_MODULE_HANDLE hBinRenConvModule; hBinRenConvModule = ( *hBinRenderer )->hBinRenConvModule; @@ -683,7 +858,39 @@ static void ivas_binRenderer_convModuleClose( count_free( hBinRenConvModule->filterTapsRightImag ); hBinRenConvModule->filterTapsRightImag = NULL; +#ifdef SPLIT_REND_WITH_HEAD_ROT + for ( posIdx = 0; posIdx < hBinRenConvModule->numPoses; posIdx++ ) + { + for ( bandIdx = 0; bandIdx < ( *hBinRenderer )->conv_band; bandIdx++ ) + { + for ( chIdx = 0; chIdx < ( *hBinRenderer )->nInChannels; chIdx++ ) + { + count_free( hBinRenConvModule->filterStatesLeftReal[posIdx][bandIdx][chIdx] ); + hBinRenConvModule->filterStatesLeftReal[posIdx][bandIdx][chIdx] = NULL; + + count_free( hBinRenConvModule->filterStatesLeftImag[posIdx][bandIdx][chIdx] ); + hBinRenConvModule->filterStatesLeftImag[posIdx][bandIdx][chIdx] = NULL; + } + + count_free( hBinRenConvModule->filterStatesLeftReal[posIdx][bandIdx] ); + hBinRenConvModule->filterStatesLeftReal[posIdx][bandIdx] = NULL; + count_free( hBinRenConvModule->filterStatesLeftImag[posIdx][bandIdx] ); + hBinRenConvModule->filterStatesLeftImag[posIdx][bandIdx] = NULL; + } + + count_free( hBinRenConvModule->filterStatesLeftReal[posIdx] ); + hBinRenConvModule->filterStatesLeftReal[posIdx] = NULL; + + count_free( hBinRenConvModule->filterStatesLeftImag[posIdx] ); + hBinRenConvModule->filterStatesLeftImag[posIdx] = NULL; + } + count_free( hBinRenConvModule->filterStatesLeftReal ); + hBinRenConvModule->filterStatesLeftReal = NULL; + + count_free( hBinRenConvModule->filterStatesLeftImag ); + hBinRenConvModule->filterStatesLeftImag = NULL; +#else for ( bandIdx = 0; bandIdx < ( *hBinRenderer )->conv_band; bandIdx++ ) { for ( chIdx = 0; chIdx < ( *hBinRenderer )->nInChannels; chIdx++ ) @@ -707,7 +914,7 @@ static void ivas_binRenderer_convModuleClose( count_free( hBinRenConvModule->filterStatesLeftImag ); hBinRenConvModule->filterStatesLeftImag = NULL; - +#endif count_free( ( *hBinRenderer )->hBinRenConvModule ); ( *hBinRenderer )->hBinRenConvModule = NULL; @@ -715,6 +922,23 @@ static void ivas_binRenderer_convModuleClose( return; } +#ifdef SPLIT_REND_WITH_HEAD_ROT +/*------------------------------------------------------------------------- + * ivas_rend_openCldfbRend() + * + * Close CLDFB based fastconv binaural renderer memories + *------------------------------------------------------------------------*/ +void ivas_rend_closeCldfbRend( CLDFB_REND_WRAPPER *pCldfbRend ) +{ + if ( pCldfbRend->hCldfbRend->hInputSetup != NULL ) + { + count_free( pCldfbRend->hCldfbRend->hInputSetup ); + pCldfbRend->hCldfbRend->hInputSetup = NULL; + } + ivas_binRenderer_close( &pCldfbRend->hCldfbRend ); + return; +} +#endif /*------------------------------------------------------------------------- * ivas_binRenderer_close() @@ -801,8 +1025,13 @@ void ivas_binaural_cldfb( { float Cldfb_RealBuffer[MAX_INTERN_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; float Cldfb_ImagBuffer[MAX_INTERN_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; +#ifdef SPLIT_REND_WITH_HEAD_ROT + float Cldfb_RealBuffer_Binaural[1][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer_Binaural[1][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; +#else float Cldfb_RealBuffer_Binaural[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; float Cldfb_ImagBuffer_Binaural[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; +#endif int16_t slot_idx, subframeIdx, index_slot, idx_in, idx_lfe, maxBand, ch; /* Implement a 5 msec loops */ @@ -839,7 +1068,13 @@ void ivas_binaural_cldfb( } /* Implement binaural rendering */ - ivas_binRenderer( st_ivas->hBinRenderer, st_ivas->hHeadTrackData, Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer, Cldfb_ImagBuffer ); + ivas_binRenderer( st_ivas->hBinRenderer, st_ivas->hHeadTrackData, +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + NULL, +#endif + Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, + Cldfb_RealBuffer, + Cldfb_ImagBuffer ); /* Implement CLDFB synthesis */ for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) @@ -851,8 +1086,13 @@ void ivas_binaural_cldfb( for ( slot_idx = 0; slot_idx < MAX_PARAM_SPATIAL_SUBFRAMES; slot_idx++ ) { +#ifdef SPLIT_REND_WITH_HEAD_ROT + RealBuffer[slot_idx] = Cldfb_RealBuffer_Binaural[0][ch][slot_idx]; + ImagBuffer[slot_idx] = Cldfb_ImagBuffer_Binaural[0][ch][slot_idx]; +#else RealBuffer[slot_idx] = Cldfb_RealBuffer_Binaural[ch][slot_idx]; ImagBuffer[slot_idx] = Cldfb_ImagBuffer_Binaural[ch][slot_idx]; +#endif } cldfbSynthesis( RealBuffer, ImagBuffer, &( output_f[ch][index_slot * maxBand] ), maxBand * MAX_PARAM_SPATIAL_SUBFRAMES, st_ivas->cldfbSynDec[ch] ); @@ -862,7 +1102,6 @@ void ivas_binaural_cldfb( return; } - /*------------------------------------------------------------------------- * ivas_binRenderer() * @@ -870,21 +1109,59 @@ void ivas_binaural_cldfb( *-------------------------------------------------------------------------*/ void ivas_binRenderer( - BINAURAL_RENDERER_HANDLE hBinRenderer, /* i/o: binaural renderer handle */ - HEAD_TRACK_DATA_HANDLE hHeadTrackData, /* i/o: head track handle */ + BINAURAL_RENDERER_HANDLE hBinRenderer, /* i/o: binaural renderer handle */ + HEAD_TRACK_DATA_HANDLE hHeadTrackData, /* i/o: head track handle */ +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + HEAD_TRACK_DATA_HANDLE hPostRendHeadTrackData, +#endif +#ifdef SPLIT_REND_WITH_HEAD_ROT + float Cldfb_RealBuffer_Binaural[][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : Rotated Binaural signals */ + float Cldfb_ImagBuffer_Binaural[][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : Rotated Binaural signals */ +#else float Cldfb_RealBuffer_Binaural[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : Binaural signals */ float Cldfb_ImagBuffer_Binaural[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : Binaural signals */ - float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : LS signals */ - float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX] /* i : LS signals */ +#endif + float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : LS signals */ + float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX] /* i : LS signals */ ) { int16_t chIdx, k; int16_t numTimeSlots = MAX_PARAM_SPATIAL_SUBFRAMES; - +#ifdef SPLIT_REND_WITH_HEAD_ROT + int16_t pos_idx, num_poses; +#endif wmops_sub_start( "fastconv_binaural_rendering" ); +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( hBinRenderer->splitRendMode == SPLIT_REND_PRE || hBinRenderer->splitRendMode == SPLIT_REND_COMB ) + { +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + num_poses = MAX_HEAD_ROT_POSES + 1; +#else + num_poses = MAX_HEAD_ROT_POSES; +#endif + } + else + { + num_poses = 1; + } +#endif + /* Compute Convolution */ /* memory reset for the binaural output */ +#ifdef SPLIT_REND_WITH_HEAD_ROT + for ( pos_idx = 0; pos_idx < num_poses; pos_idx++ ) + { + for ( chIdx = 0; chIdx < BINAURAL_CHANNELS; chIdx++ ) + { + for ( k = 0; k < numTimeSlots; k++ ) + { + set_zero( Cldfb_RealBuffer_Binaural[pos_idx][chIdx][k], CLDFB_NO_CHANNELS_MAX ); + set_zero( Cldfb_ImagBuffer_Binaural[pos_idx][chIdx][k], CLDFB_NO_CHANNELS_MAX ); + } + } + } +#else for ( chIdx = 0; chIdx < BINAURAL_CHANNELS; chIdx++ ) { for ( k = 0; k < numTimeSlots; k++ ) @@ -893,6 +1170,7 @@ void ivas_binRenderer( set_zero( Cldfb_ImagBuffer_Binaural[chIdx][k], CLDFB_NO_CHANNELS_MAX ); } } +#endif /* Head rotation in HOA3 or CICPx */ if ( hHeadTrackData && hHeadTrackData->num_quaternions >= 0 && hBinRenderer->rotInCldfb ) @@ -924,7 +1202,94 @@ void ivas_binRenderer( ivas_sba2mc_cldfb( *( hBinRenderer->hInputSetup ), RealBuffer, ImagBuffer, hBinRenderer->nInChannels, hBinRenderer->conv_band, hBinRenderer->hoa_dec_mtx ); } - ivas_binRenderer_filterModule( Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, RealBuffer, ImagBuffer, hBinRenderer ); +#ifdef SPLIT_REND_WITH_HEAD_ROT + ivas_binRenderer_filterModule( Cldfb_RealBuffer_Binaural[0], Cldfb_ImagBuffer_Binaural[0], RealBuffer, ImagBuffer, hBinRenderer, 0 ); +#else + ivas_binRenderer_filterModule( Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, RealBuffer, ImagBuffer, hBinRenderer +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + 0 +#endif + ); +#endif + +#ifdef SPLIT_REND_WITH_HEAD_ROT + /*TODO : move this to a separate function*/ + if ( hBinRenderer->splitRendMode == SPLIT_REND_PRE || hBinRenderer->splitRendMode == SPLIT_REND_COMB ) + { + int16_t yaw_idx, pitch_idx, roll_idx; + IVAS_QUATERNION Quaternions_rel, Quaternions_abs, *Quaternions_ref; + float Rmat_local[3][3]; + if ( hHeadTrackData && hHeadTrackData->num_quaternions >= 0 && hBinRenderer->rotInCldfb ) + { + Quaternions_ref = &hHeadTrackData->Quaternions[hHeadTrackData->num_quaternions - 1]; + Quaternions_rel.w = -3.0f; /*euler*/ + Quaternions_abs.w = -3.0f; /*euler*/ + Quat2Euler( *Quaternions_ref, &Quaternions_abs.z, &Quaternions_abs.y, &Quaternions_abs.x ); /*order in Quat2Euler seems to be reversed ?*/ + // Quaternions_abs.x = Quaternions_ref->x; + // Quaternions_abs.y = Quaternions_ref->y; + // Quaternions_abs.z = Quaternions_ref->z; + for ( yaw_idx = 0; yaw_idx < MAX_YAW_ANGLES; yaw_idx++ ) + { + for ( pitch_idx = 0; pitch_idx < MAX_PITCH_ANGLES; pitch_idx++ ) + { + for ( roll_idx = 0; roll_idx < MAX_ROLL_ANGLES; roll_idx++ ) + { + pos_idx = yaw_idx * MAX_PITCH_ANGLES * MAX_ROLL_ANGLES + pitch_idx * MAX_ROLL_ANGLES + roll_idx; + if ( pos_idx == 0 ) + { + continue; + } + + Quaternions_rel.x = split_rend_relative_yaw_angles[yaw_idx]; + Quaternions_rel.y = split_rend_relative_pitch_angles[pitch_idx]; + Quaternions_rel.z = split_rend_relative_roll_angles[roll_idx]; + Quaternions_abs.x = Quaternions_abs.x + Quaternions_rel.x; + Quaternions_abs.y = Quaternions_abs.y + Quaternions_rel.y; + Quaternions_abs.z = Quaternions_abs.z + Quaternions_rel.z; + + + QuatToRotMat( Quaternions_rel, Rmat_local ); + rotateFrame_shd_cldfb( RealBuffer, ImagBuffer, Rmat_local, hBinRenderer->hInputSetup->nchan_out_woLFE, 3 ); + ivas_binRenderer_filterModule( Cldfb_RealBuffer_Binaural[pos_idx], Cldfb_ImagBuffer_Binaural[pos_idx], RealBuffer, ImagBuffer, hBinRenderer +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + pos_idx +#endif + ); + } + } + } + +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + if ( hPostRendHeadTrackData != NULL ) + { + IVAS_QUATERNION *Quaternions_new1; + IVAS_QUATERNION Quaternions_new; + Quaternions_new1 = &hPostRendHeadTrackData->Quaternions[hPostRendHeadTrackData->num_quaternions++]; + Quaternions_new.w = -3.0f; /*euler*/ + Quat2Euler( *Quaternions_new1, &Quaternions_new.z, &Quaternions_new.y, &Quaternions_new.x ); /*order in Quat2Euler seems to be reversed ?*/ + Quaternions_rel.x = Quaternions_new.x - Quaternions_abs.x; + Quaternions_rel.y = Quaternions_new.y - Quaternions_abs.y; + Quaternions_rel.z = Quaternions_new.z - Quaternions_abs.z; + Quaternions_abs.x = Quaternions_abs.x + Quaternions_rel.x; + Quaternions_abs.y = Quaternions_abs.y + Quaternions_rel.y; + Quaternions_abs.z = Quaternions_abs.z + Quaternions_rel.z; + + QuatToRotMat( Quaternions_rel, Rmat_local ); + rotateFrame_shd_cldfb( RealBuffer, ImagBuffer, Rmat_local, hBinRenderer->hInputSetup->nchan_out_woLFE, 3 ); + ivas_binRenderer_filterModule( Cldfb_RealBuffer_Binaural[MAX_HEAD_ROT_POSES], Cldfb_ImagBuffer_Binaural[MAX_HEAD_ROT_POSES], RealBuffer, ImagBuffer, hBinRenderer +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + MAX_HEAD_ROT_POSES +#endif + ); + } +#endif + } + } +#endif + /* Obtain the binaural dmx and compute the reverb */ if ( hBinRenderer->hReverb != NULL ) @@ -952,9 +1317,18 @@ void ivas_binRenderer( { for ( k = 0; k < numTimeSlots; k++ ) { +#ifdef SPLIT_REND_WITH_HEAD_ROT + for ( pos_idx = 0; pos_idx < num_poses; pos_idx++ ) + { + /* Combine first and second parts to generate binaural output signal with room effect */ + v_add( Cldfb_RealBuffer_Binaural[pos_idx][chIdx][k], reverbRe[chIdx][k], Cldfb_RealBuffer_Binaural[pos_idx][chIdx][k], hBinRenderer->conv_band ); + v_add( Cldfb_ImagBuffer_Binaural[pos_idx][chIdx][k], reverbIm[chIdx][k], Cldfb_ImagBuffer_Binaural[pos_idx][chIdx][k], hBinRenderer->conv_band ); + } +#else /* Combine first and second parts to generate binaural output signal with room effect */ v_add( Cldfb_RealBuffer_Binaural[chIdx][k], reverbRe[chIdx][k], Cldfb_RealBuffer_Binaural[chIdx][k], hBinRenderer->conv_band ); v_add( Cldfb_ImagBuffer_Binaural[chIdx][k], reverbIm[chIdx][k], Cldfb_ImagBuffer_Binaural[chIdx][k], hBinRenderer->conv_band ); +#endif } } } @@ -963,3 +1337,72 @@ void ivas_binRenderer( return; } + +#ifdef SPLIT_REND_WITH_HEAD_ROT +void ivas_rend_CldfbMultiBinRendProcess( + const BINAURAL_RENDERER_HANDLE hCldfbRend, + const IVAS_REND_HeadRotData *pHeadRotData, + float Cldfb_In_Real[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float Cldfb_In_Imag[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float Cldfb_Out_Real[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* o : Binaural signals */ + float Cldfb_Out_Imag[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX] ) +{ + int16_t sf_idx, slot_idx, ch_idx, idx, pose_idx; + HEAD_TRACK_DATA head_track; + float Cldfb_RealBuffer_sfIn[MAX_INPUT_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer_sfIn[MAX_INPUT_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + HEAD_TRACK_DATA head_track_post; + float Cldfb_RealBuffer_Binaural[MAX_HEAD_ROT_POSES + 1][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer_Binaural[MAX_HEAD_ROT_POSES + 1][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; +#else + float Cldfb_RealBuffer_Binaural[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer_Binaural[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; +#endif + + + for ( sf_idx = 0; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ ) + { + for ( slot_idx = 0; slot_idx < MAX_PARAM_SPATIAL_SUBFRAMES; slot_idx++ ) + { + idx = sf_idx * MAX_PARAM_SPATIAL_SUBFRAMES + slot_idx; + for ( ch_idx = 0; ch_idx < hCldfbRend->nInChannels; ch_idx++ ) + { + mvr2r( &Cldfb_In_Real[ch_idx][idx][0], &Cldfb_RealBuffer_sfIn[ch_idx][slot_idx][0], hCldfbRend->max_band ); + mvr2r( &Cldfb_In_Imag[ch_idx][idx][0], &Cldfb_ImagBuffer_sfIn[ch_idx][slot_idx][0], hCldfbRend->max_band ); + } + } + head_track.num_quaternions = 0; + head_track.shd_rot_max_order = -1; + head_track.Quaternions[0] = ivas_split_rend_get_sf_rot_data( pHeadRotData->headPositions, sf_idx ); +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + head_track_post.num_quaternions = 0; + head_track_post.shd_rot_max_order = -1; + head_track_post.Quaternions[0] = ivas_split_rend_get_sf_rot_data( pHeadRotData->headPositionsPostRend, sf_idx ); +#endif + + ivas_binRenderer( hCldfbRend, &head_track, +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + &head_track_post, +#endif + Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer_sfIn, Cldfb_ImagBuffer_sfIn ); + +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + for ( pose_idx = 0; pose_idx < MAX_HEAD_ROT_POSES + 1; pose_idx++ ) +#else + for ( pose_idx = 0; pose_idx < MAX_HEAD_ROT_POSES; pose_idx++ ) +#endif + for ( slot_idx = 0; slot_idx < MAX_PARAM_SPATIAL_SUBFRAMES; slot_idx++ ) + { + idx = sf_idx * MAX_PARAM_SPATIAL_SUBFRAMES + slot_idx; + for ( ch_idx = 0; ch_idx < BINAURAL_CHANNELS; ch_idx++ ) + { + mvr2r( &Cldfb_RealBuffer_Binaural[pose_idx][ch_idx][slot_idx][0], &Cldfb_Out_Real[pose_idx][ch_idx][idx][0], hCldfbRend->max_band ); + mvr2r( &Cldfb_ImagBuffer_Binaural[pose_idx][ch_idx][slot_idx][0], &Cldfb_Out_Imag[pose_idx][ch_idx][idx][0], hCldfbRend->max_band ); + } + } + } + + return; +} +#endif \ No newline at end of file diff --git a/lib_rend/ivas_lib_rend_internal.h b/lib_rend/ivas_lib_rend_internal.h index f758bc780a..f985b662a0 100644 --- a/lib_rend/ivas_lib_rend_internal.h +++ b/lib_rend/ivas_lib_rend_internal.h @@ -41,6 +41,9 @@ typedef struct { int8_t headRotEnabled; IVAS_QUATERNION headPositions[RENDERER_HEAD_POSITIONS_PER_FRAME]; +#ifdef SPLIT_REND_WITH_HEAD_ROT + IVAS_QUATERNION headPositionsPostRend[RENDERER_HEAD_POSITIONS_PER_FRAME]; +#endif float crossfade[L_FRAME48k / RENDERER_HEAD_POSITIONS_PER_FRAME]; } IVAS_REND_HeadRotData; @@ -58,6 +61,14 @@ typedef struct HRTFS_HANDLE hHrtfCrend; } CREND_WRAPPER; +#ifdef SPLIT_REND_WITH_HEAD_ROT +typedef struct +{ + int32_t binaural_latency_ns; + BINAURAL_RENDERER_HANDLE hCldfbRend; +} CLDFB_REND_WRAPPER; +#endif + IVAS_REND_AudioConfigType getAudioConfigType( const IVAS_REND_AudioConfig config ); @@ -75,6 +86,47 @@ ivas_error ivas_rend_openCrend( RENDER_CONFIG_DATA *hRendCfg, const int32_t output_Fs ); +#ifdef SPLIT_REND_WITH_HEAD_ROT +void ivas_rend_CldfbMultiBinRendProcess( + const BINAURAL_RENDERER_HANDLE hCldfbRend, + const IVAS_REND_HeadRotData *pHeadRotData, + float Cldfb_In_Real[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float Cldfb_In_Imag[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float Cldfb_Out_Real[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* o : Binaural signals */ + float Cldfb_Out_Imag[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX] ); + +ivas_error ivas_rend_openCldfb( + HANDLE_CLDFB_FILTER_BANK cldfbAna[MAX_INPUT_CHANNELS], + const IVAS_REND_AudioConfig inConfig, + const int32_t output_Fs ); +ivas_error ivas_rend_openCldfbRend( + CLDFB_REND_WRAPPER *pCldfbRend, + const IVAS_REND_AudioConfig inConfig, + const IVAS_SPLIT_REND_MODE splitRendMode, + RENDER_CONFIG_DATA *hRendCfg, + const int32_t output_Fs ); + +void ivas_split_rend_bitstream_init( ivas_split_rend_bits_t *pBits, const int32_t buf_len_bytes, uint8_t *pbuf ); +void ivas_split_rend_huffman_dec_init_min_max_len( ivas_split_rend_huffman_cfg_t *p_huff_cfg ); +void ivas_split_rend_init_huff_cfg( BIN_HR_SPLIT_REND_HUFF_HANDLE pHuff_cfg ); +void set_fix_rotation_mat( float fix_pos_rot_mat[][BINAURAL_CHANNELS][BINAURAL_CHANNELS] ); +int16_t wrap_a( int16_t val, int16_t min_val, int16_t max_val ); +void ivas_SplitRenderer_getdiagdiff( + int16_t in_idx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + int16_t out_idx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + const int16_t sign, + const int16_t min_val, + const int16_t max_val ); +void ivas_split_rend_bitstream_write_int32( ivas_split_rend_bits_t *pBits, int32_t val, int32_t bits ); +int32_t ivas_split_rend_bitstream_read_int32( ivas_split_rend_bits_t *pBits, int32_t bits ); +IVAS_QUATERNION ivas_split_rend_get_sf_rot_data( + const IVAS_QUATERNION headPositions[RENDERER_HEAD_POSITIONS_PER_FRAME], + int16_t subframe_idx ); + +void ivas_rend_closeCldfb( HANDLE_CLDFB_FILTER_BANK cldfbAna[MAX_INPUT_CHANNELS] ); +void ivas_rend_closeCldfbRend( CLDFB_REND_WRAPPER *pCldfbRend ); +#endif + ivas_error ivas_rend_initCrend( CREND_WRAPPER *pCrend, const IVAS_REND_AudioConfig inConfig, diff --git a/lib_rend/ivas_output_init.c b/lib_rend/ivas_output_init.c index e5407abff4..fae2144afe 100644 --- a/lib_rend/ivas_output_init.c +++ b/lib_rend/ivas_output_init.c @@ -627,3 +627,15 @@ void ivas_renderer_select( return; } + +#ifdef SPLIT_REND_WITH_HEAD_ROT +void ivas_set_split_rend_setup( IVAS_DEC_SPLIT_REND_WRAPPER *hSplitBinRend, IVAS_SPLIT_REND_BITS_HANDLE hSplitRendBits ) +{ + hSplitRendBits->bits_written = 0; + hSplitRendBits->bits_read = 0; + hSplitBinRend->hSplitRendBits = hSplitRendBits; + + hSplitBinRend->hMultiBinCldfbData = (IVAS_DEC_SPLIT_REND_MULTI_BIN_CLDFB_DATA_HANDLE) dynamic_malloc( sizeof( IVAS_DEC_SPLIT_REND_MULTI_BIN_CLDFB_DATA ) ); + return; +} +#endif \ No newline at end of file diff --git a/lib_rend/ivas_splitRend_lcld_dec.c b/lib_rend/ivas_splitRend_lcld_dec.c new file mode 100644 index 0000000000..249acceea7 --- /dev/null +++ b/lib_rend/ivas_splitRend_lcld_dec.c @@ -0,0 +1,92 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include +#include "ivas_prot.h" +#include "prot.h" +#include "cnst.h" +#include "ivas_cnst.h" +#include "ivas_rom_rend.h" +#include "ivas_rom_com.h" +#include "ivas_rom_dec.h" +#include "ivas_rom_binauralRenderer.h" +#include "lib_rend.h" +#include "ivas_lib_rend_internal.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + +#ifdef SPLIT_REND_WITH_HEAD_ROT +ivas_error ivas_splitBinLCLDDecOpen( + BIN_HR_SPLIT_LCLD_DEC_HANDLE *hSplitBinLCLDDec ) +{ + ivas_error error; + BIN_HR_SPLIT_LCLD_DEC_HANDLE splitBinLCLDDec; + error = IVAS_ERR_OK; + if ( ( splitBinLCLDDec = (BIN_HR_SPLIT_LCLD_DEC_HANDLE) count_malloc( sizeof( BIN_HR_SPLIT_LCLD_DEC ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LCLD decoder Module \n" ) ); + } + + splitBinLCLDDec->pLcld_dec = NULL; // place holder for CLDFB decoder handle + + *hSplitBinLCLDDec = splitBinLCLDDec; + return error; +} + +void ivas_splitBinLCLDDecClose( + BIN_HR_SPLIT_LCLD_DEC_HANDLE *hSplitBinLCLDDec ) +{ + if ( ( *hSplitBinLCLDDec ) != NULL ) + { + count_free( *hSplitBinLCLDDec ); + *hSplitBinLCLDDec = NULL; + } + return; +} + +void ivas_splitBinLCLDDecProcess( + BIN_HR_SPLIT_LCLD_DEC_HANDLE hSplitBinLCLDDec, + ivas_split_rend_bits_t *pBits, + float Cldfb_Out_Real[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float Cldfb_Out_Imag[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX] ) +{ + assert( hSplitBinLCLDDec != NULL ); + assert( Cldfb_Out_Real != NULL ); + assert( Cldfb_Out_Imag != NULL ); + assert( pBits != NULL ); + return; +} +#endif \ No newline at end of file diff --git a/lib_rend/ivas_splitRend_lcld_enc.c b/lib_rend/ivas_splitRend_lcld_enc.c new file mode 100644 index 0000000000..355712e327 --- /dev/null +++ b/lib_rend/ivas_splitRend_lcld_enc.c @@ -0,0 +1,92 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include +#include "ivas_prot.h" +#include "prot.h" +#include "cnst.h" +#include "ivas_cnst.h" +#include "ivas_rom_rend.h" +#include "ivas_rom_com.h" +#include "ivas_rom_dec.h" +#include "ivas_rom_binauralRenderer.h" +#include "lib_rend.h" +#include "ivas_lib_rend_internal.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + +#ifdef SPLIT_REND_WITH_HEAD_ROT +ivas_error ivas_splitBinLCLDEncOpen( + BIN_HR_SPLIT_LCLD_ENC_HANDLE *hSplitBinLCLDEnc ) +{ + ivas_error error; + BIN_HR_SPLIT_LCLD_ENC_HANDLE splitBinLCLDEnc; + error = IVAS_ERR_OK; + if ( ( splitBinLCLDEnc = (BIN_HR_SPLIT_LCLD_ENC_HANDLE) count_malloc( sizeof( BIN_HR_SPLIT_LCLD_ENC ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LCLD encoder Module \n" ) ); + } + + splitBinLCLDEnc->pLcld_enc = NULL; // place holder for CLDFB encoder handle + + *hSplitBinLCLDEnc = splitBinLCLDEnc; + return error; +} + +void ivas_splitBinLCLDEncClose( + BIN_HR_SPLIT_LCLD_ENC_HANDLE *hSplitBinLCLDEnc ) +{ + if ( ( *hSplitBinLCLDEnc ) != NULL ) + { + count_free( *hSplitBinLCLDEnc ); + *hSplitBinLCLDEnc = NULL; + } + return; +} + +void ivas_splitBinLCLDEncProcess( + BIN_HR_SPLIT_LCLD_ENC_HANDLE hSplitBinLCLDEnc, + float Cldfb_In_Real[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float Cldfb_In_Imag[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + ivas_split_rend_bits_t *pBits ) +{ + assert( hSplitBinLCLDEnc != NULL ); + assert( Cldfb_In_Real != NULL ); + assert( Cldfb_In_Imag != NULL ); + assert( pBits != NULL ); + return; +} +#endif \ No newline at end of file diff --git a/lib_rend/ivas_splitRendererPost.c b/lib_rend/ivas_splitRendererPost.c new file mode 100644 index 0000000000..56782f4989 --- /dev/null +++ b/lib_rend/ivas_splitRendererPost.c @@ -0,0 +1,1004 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG +#include +#endif +#include "ivas_prot.h" +#include "prot.h" +#include "cnst.h" +#include "ivas_cnst.h" +#include "ivas_rom_rend.h" +#include "ivas_rom_com.h" +#include "ivas_rom_dec.h" +#include "ivas_rom_binauralRenderer.h" +#include "lib_rend.h" +#include "ivas_lib_rend_internal.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + +#ifdef SPLIT_REND_WITH_HEAD_ROT +ivas_error ivas_splitBinPostRendOpen( + BIN_HR_SPLIT_POST_REND_HANDLE *hBinHrSplitPostRend, + const int32_t output_Fs ) +{ + BIN_HR_SPLIT_POST_REND_HANDLE hBinRend; + ivas_error error; + int16_t ch; + + error = IVAS_ERR_OK; + if ( ( hBinRend = (BIN_HR_SPLIT_POST_REND_HANDLE) count_malloc( sizeof( BIN_HR_SPLIT_POST_REND ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for bin split post renderer Module \n" ) ); + } + + for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) + { + hBinRend->cldfbSyn[ch] = NULL; + } +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + for ( int16_t i = 0; i < MAX_HEAD_ROT_POSES; i++ ) + { + for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) + { + hBinRend->cldfbSynReconsBinDec[i][ch] = NULL; + } + } +#endif + + + for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) + { + if ( ( error = openCldfb( &( hBinRend->cldfbSyn[ch] ), CLDFB_SYNTHESIS, output_Fs, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) + { + return error; + } + } + +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + for ( int16_t i = 0; i < MAX_HEAD_ROT_POSES; i++ ) + { + for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) + { + if ( ( error = openCldfb( &( hBinRend->cldfbSynReconsBinDec[i][ch] ), CLDFB_SYNTHESIS, output_Fs, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } +#endif + hBinRend->cf_flag = 0; + set_fix_rotation_mat( hBinRend->fix_pos_rot_mat ); + ivas_split_rend_init_huff_cfg( &hBinRend->huff_cfg ); + *hBinHrSplitPostRend = hBinRend; + + return error; +} + +void ivas_splitBinPostRendClose( BIN_HR_SPLIT_POST_REND_HANDLE *hBinHrSplitPostRend ) +{ + int16_t ch; + if ( ( *hBinHrSplitPostRend ) != NULL ) + { + for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) + { + if ( ( *hBinHrSplitPostRend )->cldfbSyn[ch] != NULL ) + { + deleteCldfb( &( ( *hBinHrSplitPostRend )->cldfbSyn[ch] ) ); + ( *hBinHrSplitPostRend )->cldfbSyn[ch] = NULL; + } + } +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + for ( int16_t i = 0; i < MAX_HEAD_ROT_POSES; i++ ) + { + for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) + { + if ( ( *hBinHrSplitPostRend )->cldfbSynReconsBinDec[i][ch] != NULL ) + { + deleteCldfb( &( ( *hBinHrSplitPostRend )->cldfbSynReconsBinDec[i][ch] ) ); + ( *hBinHrSplitPostRend )->cldfbSynReconsBinDec[i][ch] = NULL; + } + } + } +#endif + + count_free( ( *hBinHrSplitPostRend ) ); + ( *hBinHrSplitPostRend ) = NULL; + } + return; +} + +/*-----------------------------------------------------------------------------------------* + * Function ivas_huffman_code_bits_present() + * + * Huffman code bits present + *-----------------------------------------------------------------------------------------*/ + +static int32_t ivas_split_rend_huffman_code_bits_present( + const int32_t *codebook, + const int32_t code, + const int32_t bits, + const int32_t len ) +{ + int32_t index = len + 1; + int32_t i = 0; + int32_t code_t, ind_t, bits_t; + + while ( i < len ) + { + ind_t = codebook[0]; + bits_t = codebook[1]; + code_t = codebook[2]; + if ( ( code == code_t ) && ( bits == bits_t ) ) + { + return ind_t; + } + codebook = codebook + 3; + i++; + } + + return index; +} + +static int16_t ivas_split_rend_huffman_decode_opt( + ivas_split_rend_huffman_cfg_t *huff_cfg, + ivas_split_rend_bits_t *pBits, + const int16_t *idx_trav_list ) +{ + int32_t i, ind, code, num_bits, code_b, num_bits_read; + const int32_t *codebook; + codebook = huff_cfg->codebook; + num_bits_read = 0; + ind = huff_cfg->codebook[0] - 1; + code = 0; + for ( i = 0; i < huff_cfg->sym_len; i++ ) + { + codebook = codebook + idx_trav_list[i] * 3; + num_bits = codebook[1]; + code_b = codebook[2]; + num_bits_read = num_bits - num_bits_read; + code = code << num_bits_read; + if ( num_bits_read > 0 ) + { + code |= ivas_split_rend_bitstream_read_int32( pBits, num_bits_read ); + } + + if ( code == code_b ) + { + ind = codebook[0]; + break; + } + + num_bits_read = num_bits; + codebook = huff_cfg->codebook; + } +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + assert( ind >= huff_cfg->codebook[0] ); +#endif + return (int16_t) ind; +} + +static int16_t ivas_split_rend_huffman_decode( + ivas_split_rend_huffman_cfg_t *huff_cfg, + ivas_split_rend_bits_t *pBits ) +{ + int32_t code, bit, num_bits_read, ind; + + code = ivas_split_rend_bitstream_read_int32( pBits, huff_cfg->min_len ); + num_bits_read = huff_cfg->min_len; + + ind = ivas_split_rend_huffman_code_bits_present( huff_cfg->codebook, code, num_bits_read, huff_cfg->sym_len ); + + while ( ind > huff_cfg->sym_len ) + { + bit = ivas_split_rend_bitstream_read_int32( pBits, 1 ); + num_bits_read += 1; + code = code << 1 | bit; + ind = ivas_split_rend_huffman_code_bits_present( huff_cfg->codebook, code, num_bits_read, huff_cfg->sym_len ); + if ( num_bits_read > huff_cfg->max_len ) + { + assert( 0 ); + } + } + + return (int16_t) ind; +} + +static void ivas_split_rend_unquant_md( + BIN_HR_SPLIT_REND_MD_HANDLE hMd, + int16_t real_only, + float fix_pos_rot_mat[][BINAURAL_CHANNELS] ) +{ + int16_t ch1, ch2; + + ivas_deindex_real_index( + &hMd->pred_mat_re_idx[0][0], + IVAS_SPLIT_REND_PRED_QUANT_PNTS, + IVAS_SPLIT_REND_PRED_MIN_VAL, + IVAS_SPLIT_REND_PRED_MAX_VAL, + &hMd->pred_mat_re[0][0], + BINAURAL_CHANNELS * BINAURAL_CHANNELS ); + ivas_deindex_real_index( + &hMd->pred_mat_im_idx[0][0], + IVAS_SPLIT_REND_PRED_QUANT_PNTS, + IVAS_SPLIT_REND_PRED_MIN_VAL, + IVAS_SPLIT_REND_PRED_MAX_VAL, + &hMd->pred_mat_im[0][0], + BINAURAL_CHANNELS * BINAURAL_CHANNELS ); + ivas_deindex_real_index( + &hMd->gd_idx, + IVAS_SPLIT_REND_D_QUANT_PNTS, + IVAS_SPLIT_REND_D_MIN_VAL, + IVAS_SPLIT_REND_D_MAX_VAL, + &hMd->gd, + 1 ); + + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + hMd->pred_mat_re[ch1][ch2] = hMd->pred_mat_re[ch1][ch2] + fix_pos_rot_mat[ch1][ch2]; + // hMd->pred_mat_re[ch1][ch2] = hQMd->pred_mat_re[ch1][ch2]; + } + } + if ( real_only ) + { + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + hMd->pred_mat_im[ch1][ch2] = 0.0f; + } + } + } + return; +} + +static void ivas_splitBinPostRendMdBase2Dec( + ivas_split_rend_bits_t *pBits, + BIN_HR_SPLIT_POST_REND_HANDLE hBinHrSplitPostRend, + const int16_t num_md_bands ) +{ + int16_t sf_idx, real_only, pos_idx, b, ch1, ch2; + int16_t min_pred_idx, min_gd_idx, pred_code_len, gd_code_len; + int16_t code; + BIN_HR_SPLIT_REND_MD_HANDLE hMd; + BIN_HR_SPLIT_REND_HUFF_HANDLE pHuff_cfg; + + pHuff_cfg = &hBinHrSplitPostRend->huff_cfg; + min_pred_idx = (int16_t) pHuff_cfg->pred.codebook[0]; + min_gd_idx = (int16_t) pHuff_cfg->gd.codebook[0]; + pred_code_len = pHuff_cfg->pred_base2_code_len; + gd_code_len = pHuff_cfg->gd_base2_code_len; + + + for ( sf_idx = 0; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ ) + { + for ( b = 0; b < num_md_bands; b++ ) + { + if ( b < COMPLEX_MD_BAND_THRESH ) + { + real_only = 0; + } + else + { + real_only = 1; + } + + for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES - 1; pos_idx++ ) + { + hMd = &hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b]; + + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + code = (int16_t) ivas_split_rend_bitstream_read_int32( pBits, pred_code_len ); + hMd->pred_mat_re_idx[ch1][ch2] = code + min_pred_idx; + } + } + + if ( real_only == 0 ) + { + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + code = (int16_t) ivas_split_rend_bitstream_read_int32( pBits, pred_code_len ); + hMd->pred_mat_im_idx[ch1][ch2] = code + min_pred_idx; + } + } + } + code = (int16_t) ivas_split_rend_bitstream_read_int32( pBits, gd_code_len ); + hMd->gd_idx = code + min_gd_idx; + } + } + } + + return; +} + +static void ivas_splitBinPostRendMdHuffDec( + ivas_split_rend_bits_t *pBits, + BIN_HR_SPLIT_POST_REND_HANDLE hBinHrSplitPostRend, + const int16_t num_md_bands ) +{ + int16_t pos_idx, b, sf_idx; + int16_t real_only, ch1, ch2; + int16_t sym_adj_idx[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + int16_t min_pred_idx, max_pred_idx; + BIN_HR_SPLIT_REND_MD_HANDLE hMd; + BIN_HR_SPLIT_REND_HUFF_HANDLE pHuff_cfg; + + pHuff_cfg = &hBinHrSplitPostRend->huff_cfg; + min_pred_idx = (int16_t) pHuff_cfg->pred.codebook[0]; + max_pred_idx = (int16_t) pHuff_cfg->pred.codebook[( IVAS_SPLIT_REND_PRED_QUANT_PNTS - 1 ) * 3]; + real_only = 0; + + + for ( sf_idx = 0; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ ) + { + for ( b = 0; b < num_md_bands; b++ ) + { + if ( b < COMPLEX_MD_BAND_THRESH ) + { + real_only = 0; + } + else + { + real_only = 1; + } + + for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES - 1; pos_idx++ ) + { + hMd = &hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b]; + + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + sym_adj_idx[ch1][ch2] = ivas_split_rend_huffman_decode_opt( &pHuff_cfg->pred, pBits, pHuff_cfg->pred_idx_trav ); + // sym_adj_idx[ch1][ch2] = ivas_split_rend_huffman_decode( &pHuff_cfg->pred, pBits ); + } + } + ivas_SplitRenderer_getdiagdiff( sym_adj_idx, hMd->pred_mat_re_idx, 1, min_pred_idx, max_pred_idx ); + + if ( real_only == 0 ) + { + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + sym_adj_idx[ch1][ch2] = ivas_split_rend_huffman_decode_opt( &pHuff_cfg->pred, pBits, pHuff_cfg->pred_idx_trav ); + // sym_adj_idx[ch1][ch2] = ivas_split_rend_huffman_decode( &pHuff_cfg->pred, pBits ); + } + } + ivas_SplitRenderer_getdiagdiff( sym_adj_idx, hMd->pred_mat_im_idx, -1, min_pred_idx, max_pred_idx ); + } + hMd->gd_idx = ivas_split_rend_huffman_decode_opt( &pHuff_cfg->gd, pBits, pHuff_cfg->gd_idx_trav ); + // hMd->gd_idx = ivas_split_rend_huffman_decode( &pHuff_cfg->gd, pBits ); + } + } + } + + return; +} + +void ivas_splitBinPostRendMdDec( + ivas_split_rend_bits_t *pBits, + BIN_HR_SPLIT_POST_REND_HANDLE hBinHrSplitPostRend, +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend, +#endif + const int16_t num_md_bands ) +{ + int16_t pos_idx, b, sf_idx; +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + int16_t ch1, ch2; +#endif + int16_t real_only, yaw_idx; + BIN_HR_SPLIT_REND_MD_HANDLE hMd; + real_only = 0; + +#ifdef SPLIT_REND_BASE2_CODING + ivas_splitBinPostRendMdBase2Dec( pBits, hBinHrSplitPostRend, num_md_bands ); +#else + ivas_splitBinPostRendMdHuffDec( pBits, hBinHrSplitPostRend, num_md_bands ); +#endif + + for ( sf_idx = 0; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ ) + { + for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES - 1; pos_idx++ ) + { + yaw_idx = ( pos_idx / ( MAX_PITCH_ANGLES * MAX_ROLL_ANGLES ) ); + for ( b = 0; b < num_md_bands; b++ ) + { + if ( b < COMPLEX_MD_BAND_THRESH ) + { + real_only = 0; + } + else + { + real_only = 1; + } + hMd = &hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b]; +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + /*verify that MD is decodd correctly*/ + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + int16_t val; + val = hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b].pred_mat_re_idx[ch1][ch2]; + if ( abs( hMd->pred_mat_re_idx[ch1][ch2] - val ) > 0 ) + { + assert( 0 ); + } + + if ( real_only == 0 ) + { + val = hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b].pred_mat_im_idx[ch1][ch2]; + if ( abs( hMd->pred_mat_im_idx[ch1][ch2] - val ) > 0 ) + { + assert( 0 ); + } + } + + val = hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b].gd_idx; + if ( abs( hMd->gd_idx - val ) > 0 ) + { + assert( 0 ); + } + } + } +#endif + + ivas_split_rend_unquant_md( hMd, + real_only, hBinHrSplitPostRend->fix_pos_rot_mat[yaw_idx] ); + +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + /*verify that MD is decodd correctly*/ + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + float val; + val = hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch1][ch2] + + hBinHrSplitPostRend->fix_pos_rot_mat[yaw_idx][ch1][ch2]; + if ( fabs( hMd->pred_mat_re[ch1][ch2] - val ) > 1e-20 ) + { + assert( 0 ); + } + + val = hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b].pred_mat_im[ch1][ch2]; + if ( fabs( hMd->pred_mat_im[ch1][ch2] - val ) > 1e-20 ) + { + assert( 0 ); + } + + val = hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b].gd; + if ( fabs( hMd->gd - val ) > 1e-20 ) + { + assert( 0 ); + } + } + } +#endif + } + } + } + return; +} + +#define REAL_IMAG_INTERPOLATION +static void wrap_around_angle( float *a ) +{ + if ( ( *a ) > 180.0f ) + { + ( *a ) = ( *a ) - 360; + } + else if ( ( *a ) < -180.0f ) + { + ( *a ) = ( *a ) + 360; + } + return; +} +static void wrap_around_ypr( IVAS_QUATERNION *Quaternions ) +{ + /*only if quat is actually yaw, pitch , roll angles*/ + if ( Quaternions->w == -3.0f ) + { + wrap_around_angle( &Quaternions->x ); + wrap_around_angle( &Quaternions->y ); + wrap_around_angle( &Quaternions->z ); + } + return; +} +static void get_interpolation_vars( + const IVAS_QUATERNION *Quaternions_ref, + const IVAS_QUATERNION *Quaternions_act, + int16_t interp_pose_idx[2], + float *interp_fact ) +{ + IVAS_QUATERNION quaternions_diff, quaternions_diffx[MAX_HEAD_ROT_POSES], quaternions_ref_euler, quaternions_act_euler; + int16_t yaw_idx, pitch_idx, roll_idx, pos_idx; + float min_diff, d1, n1; + int16_t idx1, idx2; + + idx1 = 0; + idx2 = 0; + quaternions_diff.x = 0.0f; + quaternions_diff.y = 0.0f; + quaternions_diff.z = 0.0f; + + for ( yaw_idx = 0; yaw_idx < MAX_YAW_ANGLES; yaw_idx++ ) + { + for ( pitch_idx = 0; pitch_idx < MAX_PITCH_ANGLES; pitch_idx++ ) + { + for ( roll_idx = 0; roll_idx < MAX_ROLL_ANGLES; roll_idx++ ) + { + pos_idx = yaw_idx * MAX_PITCH_ANGLES * MAX_ROLL_ANGLES + pitch_idx * MAX_ROLL_ANGLES + roll_idx; + + quaternions_diff.x += split_rend_relative_yaw_angles[yaw_idx]; + quaternions_diff.y += split_rend_relative_pitch_angles[pitch_idx]; + quaternions_diff.z += split_rend_relative_roll_angles[roll_idx]; + quaternions_diffx[pos_idx].x = quaternions_diff.x; + quaternions_diffx[pos_idx].y = quaternions_diff.y; + quaternions_diffx[pos_idx].z = quaternions_diff.z; + } + } + } + + /*interpolation if actual pose is not same as one of assumed poses*/ + /*get the deviation*/ + Quat2Euler( *Quaternions_ref, &quaternions_ref_euler.z, &quaternions_ref_euler.y, &quaternions_ref_euler.x ); /*order in Quat2Euler seems to be reversed ?*/ + Quat2Euler( *Quaternions_act, &quaternions_act_euler.z, &quaternions_act_euler.y, &quaternions_act_euler.x ); /*order in Quat2Euler seems to be reversed ?*/ + quaternions_diff.w = -3.0f; /*euler*/ + quaternions_diff.x = quaternions_act_euler.x - quaternions_ref_euler.x; + quaternions_diff.y = quaternions_act_euler.y - quaternions_ref_euler.y; + quaternions_diff.z = quaternions_act_euler.z - quaternions_ref_euler.z; + wrap_around_ypr( &quaternions_diff ); + if ( fabs( quaternions_diff.x ) > EPSILON ) + { + min_diff = 360.0f; + /*find the closest pose from assumed poses*/ + for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES; pos_idx++ ) + { + if ( fabs( quaternions_diff.x - quaternions_diffx[pos_idx].x ) < min_diff ) + { + idx1 = pos_idx; + min_diff = (float) fabs( quaternions_diff.x - quaternions_diffx[pos_idx].x ); + } + } + + min_diff = 360.0; + for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES; pos_idx++ ) + { + if ( ( fabs( quaternions_diff.x - quaternions_diffx[pos_idx].x ) < min_diff ) && + ( pos_idx != idx1 ) ) + { + idx2 = pos_idx; + min_diff = (float) fabs( quaternions_diff.x - quaternions_diffx[pos_idx].x ); + } + } + } + interp_pose_idx[0] = idx1; + interp_pose_idx[1] = idx2; + + if ( idx1 != idx2 ) + { + n1 = quaternions_diffx[idx1].x - quaternions_diffx[idx2].x; + d1 = quaternions_diffx[idx1].x - quaternions_diff.x; + *interp_fact = d1 / n1; + } + else + { + *interp_fact = 0.0f; + } + + return; +} + +static void interpolate_rend_md( + BIN_HR_SPLIT_REND_MD rot_md[][MAX_PARAM_SPATIAL_SUBFRAMES][MAX_SPLIT_REND_MD_BANDS], + float mix_mat_re[][BINAURAL_CHANNELS], + float mix_mat_im[][BINAURAL_CHANNELS], + float *gd_int, + int16_t sf_idx, + int16_t band_idx, + int16_t interp_pose_idx[2], + float interp_fact ) +{ + int16_t ch_idx1, ch_idx2, idx1, idx2; + float mix_mat_abs1[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float mix_mat_ph1[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float mix_mat_abs2[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float mix_mat_ph2[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float mix_mat_abs[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float mix_mat_ph[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float gd1, gd2, diff; + BIN_HR_SPLIT_REND_MD *pRot_md; + + for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) + { + set_zero( mix_mat_abs1[ch_idx1], BINAURAL_CHANNELS ); + set_zero( mix_mat_ph1[ch_idx1], BINAURAL_CHANNELS ); + mix_mat_abs1[ch_idx1][ch_idx1] = 1.0f; + + set_zero( mix_mat_abs2[ch_idx1], BINAURAL_CHANNELS ); + set_zero( mix_mat_ph2[ch_idx1], BINAURAL_CHANNELS ); + mix_mat_abs2[ch_idx1][ch_idx1] = 1.0f; + } + gd1 = 0.0f; + gd2 = 0.0f; + + idx1 = interp_pose_idx[0]; + idx2 = interp_pose_idx[1]; + if ( ( idx1 != 0 ) || ( idx2 != 0 ) ) + { + if ( idx1 != 0 ) + { + pRot_md = &rot_md[idx1 - 1][sf_idx][band_idx]; + + for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) + { + for ( ch_idx2 = 0; ch_idx2 < BINAURAL_CHANNELS; ch_idx2++ ) + { + mix_mat_abs1[ch_idx1][ch_idx2] = pRot_md->pred_mat_re[ch_idx1][ch_idx2]; + mix_mat_ph1[ch_idx1][ch_idx2] = pRot_md->pred_mat_im[ch_idx1][ch_idx2]; + } + } + gd1 = rot_md[idx1 - 1][sf_idx][band_idx].gd; + } + + if ( idx2 != 0 ) + { + pRot_md = &rot_md[idx2 - 1][sf_idx][band_idx]; + + for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) + { + for ( ch_idx2 = 0; ch_idx2 < BINAURAL_CHANNELS; ch_idx2++ ) + { + mix_mat_abs2[ch_idx1][ch_idx2] = pRot_md->pred_mat_re[ch_idx1][ch_idx2]; + mix_mat_ph2[ch_idx1][ch_idx2] = pRot_md->pred_mat_im[ch_idx1][ch_idx2]; + } + } + gd2 = rot_md[idx2 - 1][sf_idx][band_idx].gd; + } + + for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) + { + for ( ch_idx2 = 0; ch_idx2 < BINAURAL_CHANNELS; ch_idx2++ ) + { + diff = mix_mat_abs1[ch_idx1][ch_idx2] - mix_mat_abs2[ch_idx1][ch_idx2]; + mix_mat_abs[ch_idx1][ch_idx2] = mix_mat_abs1[ch_idx1][ch_idx2] - ( diff * interp_fact ); + + diff = mix_mat_ph1[ch_idx1][ch_idx2] - mix_mat_ph2[ch_idx1][ch_idx2]; + mix_mat_ph[ch_idx1][ch_idx2] = mix_mat_ph1[ch_idx1][ch_idx2] - ( diff * interp_fact ); + + mix_mat_re[ch_idx1][ch_idx2] = mix_mat_abs[ch_idx1][ch_idx2]; + mix_mat_im[ch_idx1][ch_idx2] = mix_mat_ph[ch_idx1][ch_idx2]; + } + } + diff = gd1 - gd2; + *gd_int = gd1 - ( diff * interp_fact ); + } + else + { + /*P = P'*/ + for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) + { + set_zero( mix_mat_re[ch_idx1], BINAURAL_CHANNELS ); + set_zero( mix_mat_im[ch_idx1], BINAURAL_CHANNELS ); + mix_mat_re[ch_idx1][ch_idx1] = 1.0f; + } + *gd_int = 0.0f; + } + + return; +} + +void ivas_SplitRenderer_PostRenderer( + BIN_HR_SPLIT_POST_REND_HANDLE hBinPostRenderer, /* i/o: binaural renderer handle */ + float Cldfb_RealBuffer_Ref_Binaural[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o : Reference/out Binaural signals */ + float Cldfb_ImagBuffer_Ref_Binaural[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o : Reference/out Binaural signals */ + int16_t sf_idx, + const IVAS_QUATERNION *Quaternions_ref, + const IVAS_QUATERNION *Quaternions_act ) +{ + int16_t pos_idx, b, brange[2], ch_idx1; + int16_t num_md_bands, slot_idx, b2; + float pred_out_re[BINAURAL_CHANNELS], pred_out_im[BINAURAL_CHANNELS], tmp_re, tmp_im, gd_int, gd_cf, gd_cf_abs; + int16_t interp_pose_idx[2]; + float interp_fact; + float mix_mat_re[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float mix_mat_im[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + float Cldfb_RealBuffer_Recons_Binaural[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer_Recons_Binaural[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; +#endif + float fade; + float *pMix_mat_re_prev[BINAURAL_CHANNELS]; + float *pMix_mat_im_prev[BINAURAL_CHANNELS]; + const int16_t *pBand_grouping = SplitRend_band_grouping; + num_md_bands = MAX_SPLIT_REND_MD_BANDS; + + wmops_sub_start( "ivas_SplitRenderer_PostRenderer" ); + +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + pos_idx = MAX_HEAD_ROT_POSES - 1; +#else + pos_idx = 0; +#endif + + get_interpolation_vars( Quaternions_ref, Quaternions_act, interp_pose_idx, &interp_fact ); + for ( b = 0; b < num_md_bands; b++ ) + { + for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) + { + set_zero( mix_mat_re[ch_idx1], BINAURAL_CHANNELS ); + set_zero( mix_mat_im[ch_idx1], BINAURAL_CHANNELS ); + mix_mat_re[ch_idx1][ch_idx1] = 1.0f; + } + gd_int = 0.0f; + + interpolate_rend_md( hBinPostRenderer->rot_md, mix_mat_re, mix_mat_im, &gd_int, sf_idx, b, interp_pose_idx, interp_fact ); + for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) + { + /*update the prediction matrix with interpolated matrix*/ + hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch_idx1][0] = mix_mat_re[ch_idx1][0]; + hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch_idx1][1] = mix_mat_re[ch_idx1][1]; + hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_im[ch_idx1][0] = mix_mat_im[ch_idx1][0]; + hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_im[ch_idx1][1] = mix_mat_im[ch_idx1][1]; + hBinPostRenderer->rot_md[pos_idx][sf_idx][b].gd = gd_int; + } + } + +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES; pos_idx++ ) +#else + pos_idx = 0; +#endif + { + for ( slot_idx = 0; slot_idx < MAX_PARAM_SPATIAL_SUBFRAMES; slot_idx++ ) + { + fade = ( (float) slot_idx + 1.0f ) / MAX_PARAM_SPATIAL_SUBFRAMES; + for ( b = 0; b < num_md_bands; b++ ) + { + for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) + { + if ( hBinPostRenderer->cf_flag ) + { + pMix_mat_re_prev[ch_idx1] = hBinPostRenderer->mixer_mat_re[pos_idx][b][ch_idx1]; + pMix_mat_im_prev[ch_idx1] = hBinPostRenderer->mixer_mat_im[pos_idx][b][ch_idx1]; + mix_mat_re[ch_idx1][0] = fade * ( hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch_idx1][0] ) + + ( 1.0f - fade ) * pMix_mat_re_prev[ch_idx1][0]; + mix_mat_re[ch_idx1][1] = fade * ( hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch_idx1][1] ) + + ( 1.0f - fade ) * pMix_mat_re_prev[ch_idx1][1]; + + mix_mat_im[ch_idx1][0] = fade * ( hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_im[ch_idx1][0] ) + + ( 1.0f - fade ) * pMix_mat_im_prev[ch_idx1][0]; + mix_mat_im[ch_idx1][1] = fade * ( hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_im[ch_idx1][1] ) + + ( 1.0f - fade ) * pMix_mat_im_prev[ch_idx1][1]; + } + else + { + mix_mat_re[ch_idx1][0] = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch_idx1][0]; + mix_mat_re[ch_idx1][1] = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch_idx1][1]; + mix_mat_im[ch_idx1][0] = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_im[ch_idx1][0]; + mix_mat_im[ch_idx1][1] = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_im[ch_idx1][1]; + } + } + + if ( hBinPostRenderer->cf_flag ) + { + gd_cf = fade * hBinPostRenderer->rot_md[pos_idx][sf_idx][b].gd + + ( 1 - fade ) * hBinPostRenderer->gd_mem[pos_idx][b]; + } + else + { + gd_cf = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].gd; + } + gd_cf_abs = (float) fabs( gd_cf ); + + brange[0] = pBand_grouping[b]; + brange[1] = pBand_grouping[b + 1]; + for ( b2 = brange[0]; b2 < brange[1]; b2++ ) + { + for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) + { + // Apply prediction matrix + IVAS_CMULT_FLOAT( Cldfb_RealBuffer_Ref_Binaural[0][slot_idx][b2], + Cldfb_ImagBuffer_Ref_Binaural[0][slot_idx][b2], + mix_mat_re[0][ch_idx1], + mix_mat_im[0][ch_idx1], + tmp_re, + tmp_im ); + pred_out_re[ch_idx1] = tmp_re; + pred_out_im[ch_idx1] = tmp_im; + + IVAS_CMULT_FLOAT( Cldfb_RealBuffer_Ref_Binaural[1][slot_idx][b2], + Cldfb_ImagBuffer_Ref_Binaural[1][slot_idx][b2], + mix_mat_re[1][ch_idx1], + mix_mat_im[1][ch_idx1], + tmp_re, + tmp_im ); + pred_out_re[ch_idx1] += tmp_re; + pred_out_im[ch_idx1] += tmp_im; + } + + // Apply decorrelation + if ( 1 ) + { + tmp_re = Cldfb_RealBuffer_Ref_Binaural[0][slot_idx][b2] + Cldfb_RealBuffer_Ref_Binaural[1][slot_idx][b2]; + tmp_im = Cldfb_ImagBuffer_Ref_Binaural[0][slot_idx][b2] + Cldfb_ImagBuffer_Ref_Binaural[1][slot_idx][b2]; + + pred_out_re[0] += ( gd_cf_abs * tmp_re ); + pred_out_im[0] += ( gd_cf_abs * tmp_im ); + pred_out_re[1] += ( gd_cf * tmp_re ); + pred_out_im[1] += ( gd_cf * tmp_im ); + } + + for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) + { +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + Cldfb_RealBuffer_Recons_Binaural[pos_idx][ch_idx1][slot_idx][b2] = pred_out_re[ch_idx1]; + Cldfb_ImagBuffer_Recons_Binaural[pos_idx][ch_idx1][slot_idx][b2] = pred_out_im[ch_idx1]; +#else + Cldfb_RealBuffer_Ref_Binaural[ch_idx1][slot_idx][b2] = pred_out_re[ch_idx1]; + Cldfb_ImagBuffer_Ref_Binaural[ch_idx1][slot_idx][b2] = pred_out_im[ch_idx1]; +#endif + } + } + } + } + } + +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES; pos_idx++ ) +#else + pos_idx = 0; +#endif + { + for ( b = 0; b < num_md_bands; b++ ) + { + for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) + { + hBinPostRenderer->mixer_mat_re[pos_idx][b][ch_idx1][0] = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch_idx1][0]; + hBinPostRenderer->mixer_mat_re[pos_idx][b][ch_idx1][1] = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch_idx1][1]; + hBinPostRenderer->mixer_mat_im[pos_idx][b][ch_idx1][0] = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_im[ch_idx1][0]; + hBinPostRenderer->mixer_mat_im[pos_idx][b][ch_idx1][1] = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_im[ch_idx1][1]; + } + hBinPostRenderer->gd_mem[pos_idx][b] = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].gd; + } + } + hBinPostRenderer->cf_flag = 1; + +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + { + int16_t num_cldfb_bands; + num_cldfb_bands = CLDFB_NO_CHANNELS_MAX; + for ( slot_idx = 0; slot_idx < MAX_PARAM_SPATIAL_SUBFRAMES; slot_idx++ ) + { + for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) + { + mvr2r( Cldfb_RealBuffer_Recons_Binaural[MAX_HEAD_ROT_POSES - 1][ch_idx1][slot_idx], Cldfb_RealBuffer_Ref_Binaural[ch_idx1][slot_idx], num_cldfb_bands ); + mvr2r( Cldfb_ImagBuffer_Recons_Binaural[MAX_HEAD_ROT_POSES - 1][ch_idx1][slot_idx], Cldfb_ImagBuffer_Ref_Binaural[ch_idx1][slot_idx], num_cldfb_bands ); + } + } + + for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES; pos_idx++ ) + { + char fname[200] = "recons_out_pos"; + char tag[2]; + tag[0] = (char) ( '0' + pos_idx ); + tag[1] = '\0'; + strcat( fname, tag ); + strcat( fname, ".wav" ); + ivas_log_cldfb2wav_data( + Cldfb_RealBuffer_Recons_Binaural[pos_idx], + Cldfb_ImagBuffer_Recons_Binaural[pos_idx], + hBinPostRenderer->cldfbSynReconsBinDec[pos_idx], + BINAURAL_CHANNELS, + num_cldfb_bands, + 48000, + fname ); + } + } +#endif + + wmops_sub_end(); + return; +} + +void ivas_rend_CldfbSplitPostRendProcess( + BIN_HR_SPLIT_POST_REND_HANDLE hBinHrSplitPostRend, + const IVAS_QUATERNION QuaternionsPre[MAX_PARAM_SPATIAL_SUBFRAMES], + const IVAS_QUATERNION QuaternionsPost[MAX_PARAM_SPATIAL_SUBFRAMES], + float Cldfb_RealBuffer_Binaural[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float Cldfb_ImagBuffer_Binaural[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float output[][L_FRAME48k] ) +{ + int16_t sf_idx, ch_idx, index_slot, slot_idx, num_cldfb_bands; + float Cldfb_RealBuffer_sfIn[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer_sfIn[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + + num_cldfb_bands = hBinHrSplitPostRend->cldfbSyn[0]->no_channels; + + for ( sf_idx = 0; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ ) + { + for ( slot_idx = 0; slot_idx < MAX_PARAM_SPATIAL_SUBFRAMES; slot_idx++ ) + { + index_slot = sf_idx * MAX_PARAM_SPATIAL_SUBFRAMES + slot_idx; + for ( ch_idx = 0; ch_idx < BINAURAL_CHANNELS; ch_idx++ ) + { + mvr2r( &Cldfb_RealBuffer_Binaural[ch_idx][index_slot][0], &Cldfb_RealBuffer_sfIn[ch_idx][slot_idx][0], num_cldfb_bands ); + mvr2r( &Cldfb_ImagBuffer_Binaural[ch_idx][index_slot][0], &Cldfb_ImagBuffer_sfIn[ch_idx][slot_idx][0], num_cldfb_bands ); + } + } + +#ifndef SPLIT_REND_SKIP_POST_REND + ivas_SplitRenderer_PostRenderer( + hBinHrSplitPostRend, + Cldfb_RealBuffer_sfIn, + Cldfb_ImagBuffer_sfIn, + sf_idx, + &QuaternionsPre[sf_idx], + &QuaternionsPost[sf_idx] ); +#endif + + /* Implement CLDFB synthesis */ + for ( ch_idx = 0; ch_idx < BINAURAL_CHANNELS; ch_idx++ ) + { + float *RealBuffer[MAX_PARAM_SPATIAL_SUBFRAMES]; + float *ImagBuffer[MAX_PARAM_SPATIAL_SUBFRAMES]; + + index_slot = sf_idx * MAX_PARAM_SPATIAL_SUBFRAMES; + + for ( slot_idx = 0; slot_idx < MAX_PARAM_SPATIAL_SUBFRAMES; slot_idx++ ) + { + RealBuffer[slot_idx] = Cldfb_RealBuffer_sfIn[ch_idx][slot_idx]; + ImagBuffer[slot_idx] = Cldfb_ImagBuffer_sfIn[ch_idx][slot_idx]; + } + + cldfbSynthesis( RealBuffer, ImagBuffer, &( output[ch_idx][index_slot * num_cldfb_bands] ), num_cldfb_bands * MAX_PARAM_SPATIAL_SUBFRAMES, hBinHrSplitPostRend->cldfbSyn[ch_idx] ); + } + } + + return; +} +#endif \ No newline at end of file diff --git a/lib_rend/ivas_splitRendererPre.c b/lib_rend/ivas_splitRendererPre.c new file mode 100644 index 0000000000..8c37efcef3 --- /dev/null +++ b/lib_rend/ivas_splitRendererPre.c @@ -0,0 +1,1324 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG +#include +#endif +#include "ivas_prot.h" +#include "prot.h" +#include "cnst.h" +#include "ivas_cnst.h" +#include "ivas_rom_rend.h" +#include "ivas_rom_com.h" +#include "ivas_rom_dec.h" +#include "ivas_rom_binauralRenderer.h" +#include "lib_rend.h" +#include "ivas_lib_rend_internal.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + + +#ifdef SPLIT_REND_WITH_HEAD_ROT +#define MAX_BAND_SMOOTH ( 1 ) +#define SMOOTH_NORM_FACTOR ( 5.0f ) + +static void ivas_mat_mult_2by2_complex( float in_re1[2][2], + float in_im1[2][2], + float in_re2[2][2], + float in_im2[2][2], + float out_re2[2][2], + float out_im2[2][2] ) +{ + int16_t i, j; + float tmp_re, tmp_im; + + for ( i = 0; i < 2; i++ ) + { + for ( j = 0; j < 2; j++ ) + { + + IVAS_CMULT_FLOAT( in_re1[i][0], in_im1[i][0], + in_re2[0][j], in_im2[0][j], tmp_re, tmp_im ); + out_re2[i][j] = tmp_re; + out_im2[i][j] = tmp_im; + IVAS_CMULT_FLOAT( in_re1[i][1], in_im1[i][1], + in_re2[1][j], in_im2[1][j], tmp_re, tmp_im ); + out_re2[i][j] += tmp_re; + out_im2[i][j] += tmp_im; + } + } + return; +} +static void ivas_calc_mat_det_2by2_complex( float in_re[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + float in_im[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + float *det_re, + float *det_im ) +{ + float re1, im1, re2, im2; + IVAS_CMULT_FLOAT( in_re[0][0], in_im[0][0], in_re[1][1], in_im[1][1], re1, im1 ); + IVAS_CMULT_FLOAT( in_re[0][1], in_im[0][1], in_re[1][0], in_im[1][0], re2, im2 ); + *det_re = re1 - re2; + *det_im = im1 - im2; + return; +} + +static int16_t ivas_is_mat_inv_2by2_complex( float in_re[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + float in_im[BINAURAL_CHANNELS][BINAURAL_CHANNELS] ) +{ + int16_t is_det_zero = 1; + float det, det_re, det_im; + ivas_calc_mat_det_2by2_complex( in_re, in_im, &det_re, &det_im ); + det = ( ( det_re * det_re ) + ( det_im * det_im ) ); + if ( det < EPSILON ) + { + is_det_zero = 0; + } + return is_det_zero; +} + +static void ivas_calc_mat_inv_2by2_complex( + float in_re[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + float in_im[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + float out_re[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + float out_im[BINAURAL_CHANNELS][BINAURAL_CHANNELS] ) +{ + float det_re, det_im; + float re, im, det; + ivas_calc_mat_det_2by2_complex( in_re, in_im, &det_re, &det_im ); + det = ( det_re * det_re ) + ( det_im * det_im ); + // assert to catch cases when input is singular matrix + assert( det > 0 ); + det = 1 / det; + + IVAS_CMULT_FLOAT( det_re, -det_im, in_re[1][1], in_im[1][1], re, im ); + out_re[0][0] = re * det; + out_im[0][0] = im * det; + + IVAS_CMULT_FLOAT( det_re, -det_im, in_re[0][1], in_im[0][1], re, im ); + out_re[0][1] = -re * det; + out_im[0][1] = -im * det; + IVAS_CMULT_FLOAT( det_re, -det_im, in_re[1][0], in_im[1][0], re, im ); + out_re[1][0] = -re * det; + out_im[1][0] = -im * det; + IVAS_CMULT_FLOAT( det_re, -det_im, in_re[0][0], in_im[0][0], re, im ); + out_re[1][1] = re * det; + out_im[1][1] = im * det; + return; +} + +static void ComputePredMat( + float cov_ii_re[][BINAURAL_CHANNELS], + float cov_ii_im[][BINAURAL_CHANNELS], + float cov_io_re[][BINAURAL_CHANNELS], + float cov_io_im[][BINAURAL_CHANNELS], + float pred_mat_re[][BINAURAL_CHANNELS], + float pred_mat_im[][BINAURAL_CHANNELS], + int16_t num_chs, + int16_t real_only ) +{ + float cov_ii_local_re[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + // float cov_ii_local_im[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float cov_ii_inv_re[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float cov_ii_inv_im[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float trace_cov; + int16_t i, j; + + trace_cov = 0.0f; + for ( i = 0; i < num_chs; i++ ) + { + trace_cov += cov_ii_re[i][i]; + } + trace_cov = max( 0.0f, trace_cov ); + if ( trace_cov < EPSILON ) + { + for ( i = 0; i < num_chs; i++ ) + { + /* protection from cases when variance of ref channels is very small */ + set_zero( pred_mat_re[i], BINAURAL_CHANNELS ); + set_zero( pred_mat_im[i], BINAURAL_CHANNELS ); + } + return; + } + + for ( i = 0; i < num_chs; i++ ) + { + mvr2r( cov_ii_re[i], cov_ii_local_re[i], num_chs ); + // mvr2r( cov_ii_im[i], cov_ii_local_im[i], num_chs ); + } + for ( i = 0; i < num_chs; i++ ) + { + cov_ii_local_re[i][i] = cov_ii_re[i][i] + ( trace_cov * 0.0001f ); + // cov_ii_local_im[i][i] = cov_ii_im[i][i] + ( trace_cov * 0.0005f ); + } + + // float det_re, det_im, det; + // ivas_calc_mat_det_2by2_complex( cov_ii_local_re, cov_ii_im, &det_re, &det_im ); + // det = ( ( det_re * det_re ) + ( det_im * det_im ) ); + // det = sqrtf( det ); + // if ( ivas_is_mat_inv_2by2_complex( cov_ii_local_re, cov_ii_im ) ) + // if ( det > 0.0001f ) + if ( ivas_is_mat_inv_2by2_complex( cov_ii_local_re, cov_ii_im ) ) + { + ivas_calc_mat_inv_2by2_complex( cov_ii_local_re, cov_ii_im, cov_ii_inv_re, cov_ii_inv_im ); + ivas_mat_mult_2by2_complex( cov_ii_inv_re, cov_ii_inv_im, cov_io_re, cov_io_im, + pred_mat_re, pred_mat_im ); + } + else + { + // float max_var; + int16_t max_var_idx; + for ( i = 0; i < num_chs; i++ ) + { + set_zero( pred_mat_re[i], BINAURAL_CHANNELS ); + set_zero( pred_mat_im[i], BINAURAL_CHANNELS ); + } + + max_var_idx = 0; + // max_var = cov_ii_local_re[0][0]; + if ( cov_ii_local_re[1][1] > cov_ii_local_re[0][0] ) + { + max_var_idx = 1; + // max_var = cov_ii_local_re[1][1]; + } + + if ( cov_ii_local_re[max_var_idx][max_var_idx] > EPSILON ) + { + for ( j = 0; j < num_chs; j++ ) + { + pred_mat_re[max_var_idx][j] = cov_io_re[max_var_idx][j] / cov_ii_local_re[max_var_idx][max_var_idx]; + pred_mat_im[max_var_idx][j] = cov_io_im[max_var_idx][j] / cov_ii_local_re[max_var_idx][max_var_idx]; + } + } + } + + if ( real_only ) + { + for ( i = 0; i < num_chs; i++ ) + { + set_zero( pred_mat_im[i], BINAURAL_CHANNELS ); + } + } + + return; +} + +static void ComputePostPredCov( + float cov_ii_re[][BINAURAL_CHANNELS], + float cov_ii_im[][BINAURAL_CHANNELS], + float pred_mat_re[][BINAURAL_CHANNELS], + float pred_mat_im[][BINAURAL_CHANNELS], + float postpred_cov_re[][BINAURAL_CHANNELS], + float postpred_cov_im[][BINAURAL_CHANNELS], + int16_t num_chs ) +{ + int16_t i, j; + float dmx_mat_conj_re[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float dmx_mat_conj_im[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float temp_mat_re[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float temp_mat_im[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + + assert( num_chs == BINAURAL_CHANNELS ); + for ( i = 0; i < num_chs; i++ ) + { + for ( j = 0; j < num_chs; j++ ) + { + dmx_mat_conj_re[i][j] = pred_mat_re[j][i]; + dmx_mat_conj_im[i][j] = -pred_mat_im[j][i]; + + temp_mat_re[i][j] = pred_mat_re[i][j]; + temp_mat_im[i][j] = pred_mat_im[i][j]; + } + set_zero( postpred_cov_re[i], BINAURAL_CHANNELS ); + set_zero( postpred_cov_im[i], BINAURAL_CHANNELS ); + } + + /* 2x2 mult */ + ivas_mat_mult_2by2_complex( dmx_mat_conj_re, dmx_mat_conj_im, cov_ii_re, cov_ii_im, + temp_mat_re, temp_mat_im ); + ivas_mat_mult_2by2_complex( temp_mat_re, temp_mat_im, pred_mat_re, pred_mat_im, + postpred_cov_re, postpred_cov_im ); + + for ( i = 0; i < BINAURAL_CHANNELS; i++ ) + { + for ( j = 0; j < i; j++ ) + { + postpred_cov_re[i][j] = postpred_cov_re[j][i]; + postpred_cov_im[i][j] = -postpred_cov_im[j][i]; + } + postpred_cov_im[i][i] = 0; + } + + return; +} + +static void ComputeBandedCrossCov( + float Cldfb_RealBuffer1[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], + float Cldfb_ImagBuffer1[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], + float Cldfb_RealBuffer2[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], + float Cldfb_ImagBuffer2[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], + float out_cov_re[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + float out_cov_im[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + int16_t num_chs, + const int16_t *pBand_grouping, + int16_t num_subframes, + int16_t md_band_idx, + int16_t real_only ) +{ + int16_t sf, cldfb_band_idx, ch_idx1, ch_idx2; + int16_t brange[2]; + + for ( ch_idx1 = 0; ch_idx1 < num_chs; ch_idx1++ ) + { + set_f( out_cov_re[ch_idx1], 0.0f, num_chs ); + set_f( out_cov_im[ch_idx1], 0.0f, num_chs ); + } + brange[0] = pBand_grouping[md_band_idx]; + brange[1] = pBand_grouping[md_band_idx + 1]; + for ( ch_idx1 = 0; ch_idx1 < num_chs; ch_idx1++ ) + { + for ( ch_idx2 = 0; ch_idx2 < num_chs; ch_idx2++ ) + { + if ( real_only == 0 ) + { + for ( sf = 0; sf < num_subframes; sf++ ) + { + for ( cldfb_band_idx = brange[0]; cldfb_band_idx < brange[1]; cldfb_band_idx++ ) + { + out_cov_re[ch_idx1][ch_idx2] += + Cldfb_RealBuffer1[ch_idx1][sf][cldfb_band_idx] * Cldfb_RealBuffer2[ch_idx2][sf][cldfb_band_idx] + + Cldfb_ImagBuffer1[ch_idx1][sf][cldfb_band_idx] * Cldfb_ImagBuffer2[ch_idx2][sf][cldfb_band_idx]; + + out_cov_im[ch_idx1][ch_idx2] += + Cldfb_RealBuffer1[ch_idx1][sf][cldfb_band_idx] * Cldfb_ImagBuffer2[ch_idx2][sf][cldfb_band_idx] - + Cldfb_ImagBuffer1[ch_idx1][sf][cldfb_band_idx] * Cldfb_RealBuffer2[ch_idx2][sf][cldfb_band_idx]; + } + } + } + else + { + for ( sf = 0; sf < num_subframes; sf++ ) + { + for ( cldfb_band_idx = brange[0]; cldfb_band_idx < brange[1]; cldfb_band_idx++ ) + { + out_cov_re[ch_idx1][ch_idx2] += + Cldfb_RealBuffer1[ch_idx1][sf][cldfb_band_idx] * Cldfb_RealBuffer2[ch_idx2][sf][cldfb_band_idx] + + Cldfb_ImagBuffer1[ch_idx1][sf][cldfb_band_idx] * Cldfb_ImagBuffer2[ch_idx2][sf][cldfb_band_idx]; + + out_cov_im[ch_idx1][ch_idx2] = 0.0f; + } + } + } + } + } + + + return; +} + +static void ComputeBandedCov( + float Cldfb_RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], + float Cldfb_ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], + float out_cov_re[][BINAURAL_CHANNELS], + float out_cov_im[][BINAURAL_CHANNELS], + int16_t num_chs, + const int16_t *pBand_grouping, + int16_t num_subframes, + int16_t md_band_idx, + int16_t real_only ) +{ + int16_t sf, cldfb_band_idx, ch_idx1, ch_idx2; + int16_t brange[2]; + + for ( ch_idx1 = 0; ch_idx1 < num_chs; ch_idx1++ ) + { + set_f( out_cov_re[ch_idx1], 0.0f, num_chs ); + set_f( out_cov_im[ch_idx1], 0.0f, num_chs ); + } + brange[0] = pBand_grouping[md_band_idx]; + brange[1] = pBand_grouping[md_band_idx + 1]; + for ( ch_idx1 = 0; ch_idx1 < num_chs; ch_idx1++ ) + { + for ( ch_idx2 = 0; ch_idx2 <= ch_idx1; ch_idx2++ ) + { + if ( ( ch_idx2 != ch_idx1 ) && ( real_only == 0 ) ) + { + for ( sf = 0; sf < num_subframes; sf++ ) + { + for ( cldfb_band_idx = brange[0]; cldfb_band_idx < brange[1]; cldfb_band_idx++ ) + { + out_cov_re[ch_idx1][ch_idx2] += + Cldfb_RealBuffer[ch_idx1][sf][cldfb_band_idx] * Cldfb_RealBuffer[ch_idx2][sf][cldfb_band_idx] + + Cldfb_ImagBuffer[ch_idx1][sf][cldfb_band_idx] * Cldfb_ImagBuffer[ch_idx2][sf][cldfb_band_idx]; + + out_cov_im[ch_idx1][ch_idx2] += + Cldfb_RealBuffer[ch_idx1][sf][cldfb_band_idx] * Cldfb_ImagBuffer[ch_idx2][sf][cldfb_band_idx] - + Cldfb_ImagBuffer[ch_idx1][sf][cldfb_band_idx] * Cldfb_RealBuffer[ch_idx2][sf][cldfb_band_idx]; + } + } + } + else + { + for ( sf = 0; sf < num_subframes; sf++ ) + { + for ( cldfb_band_idx = brange[0]; cldfb_band_idx < brange[1]; cldfb_band_idx++ ) + { + out_cov_re[ch_idx1][ch_idx2] += + Cldfb_RealBuffer[ch_idx1][sf][cldfb_band_idx] * Cldfb_RealBuffer[ch_idx2][sf][cldfb_band_idx] + + Cldfb_ImagBuffer[ch_idx1][sf][cldfb_band_idx] * Cldfb_ImagBuffer[ch_idx2][sf][cldfb_band_idx]; + + out_cov_im[ch_idx1][ch_idx2] = 0.0f; + } + } + } + } + } + + for ( ch_idx1 = 0; ch_idx1 < num_chs; ch_idx1++ ) + { + for ( ch_idx2 = ch_idx1 + 1; ch_idx2 < num_chs; ch_idx2++ ) + { + out_cov_re[ch_idx1][ch_idx2] = out_cov_re[ch_idx2][ch_idx1]; + out_cov_im[ch_idx1][ch_idx2] = -out_cov_im[ch_idx2][ch_idx1]; + } + } + + + return; +} + +static float GetNormFact( + float cov_ii_re[][BINAURAL_CHANNELS], + float cov_ii_im[][BINAURAL_CHANNELS], + float cov_io_re[][BINAURAL_CHANNELS], + float cov_io_im[][BINAURAL_CHANNELS], + float cov_oo_re[][BINAURAL_CHANNELS] ) +{ + int16_t i, j; + float norm_fact, abs_val; + + norm_fact = 0.0f; + for ( i = 0; i < BINAURAL_CHANNELS; i++ ) + { + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + IVAS_CALCULATE_ABS( cov_ii_re[i][j], cov_ii_im[i][j], abs_val ); + norm_fact = max( norm_fact, abs_val ); + + IVAS_CALCULATE_ABS( cov_io_re[i][j], cov_io_im[i][j], abs_val ); + norm_fact = max( norm_fact, abs_val ); + + IVAS_CALCULATE_RABS( cov_oo_re[i][j], abs_val ); + norm_fact = max( norm_fact, abs_val ); + } + } + + norm_fact = ( norm_fact > EPSILON ) ? norm_fact : 1.0f; + + norm_fact = PCM16_TO_FLT_FAC / norm_fact; + + return norm_fact; +} + +static void ivas_split_rend_huffman_encode( + ivas_split_rend_huffman_cfg_t *huff_cfg, + int16_t in, + int32_t *hcode, + int32_t *hlen ) +{ + int32_t min_sym_val; + const int32_t *codebook; + + min_sym_val = huff_cfg->codebook[0]; + + codebook = &huff_cfg->codebook[3 * ( in - min_sym_val )]; + *hlen = codebook[1]; + *hcode = codebook[2]; + + return; +} + +static void ivas_split_rend_quant_md( + BIN_HR_SPLIT_REND_MD_HANDLE hMd, + int16_t real_only, + float fix_pos_rot_mat[][BINAURAL_CHANNELS] ) +{ + int16_t ch1, ch2; + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + hMd->pred_mat_re[ch1][ch2] -= fix_pos_rot_mat[ch1][ch2]; + hMd->pred_mat_re[ch1][ch2] = min( IVAS_SPLIT_REND_PRED_MAX_VAL, max( hMd->pred_mat_re[ch1][ch2], IVAS_SPLIT_REND_PRED_MIN_VAL ) ); + } + } + if ( real_only == 0 ) + { + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + hMd->pred_mat_im[ch1][ch2] = min( IVAS_SPLIT_REND_PRED_MAX_VAL, max( hMd->pred_mat_im[ch1][ch2], IVAS_SPLIT_REND_PRED_MIN_VAL ) ); + } + } + } + hMd->gd = min( IVAS_SPLIT_REND_D_MAX_VAL, max( hMd->gd, IVAS_SPLIT_REND_D_MIN_VAL ) ); + + ivas_quantise_real_values( &hMd->pred_mat_re[0][0], + IVAS_SPLIT_REND_PRED_QUANT_PNTS, + IVAS_SPLIT_REND_PRED_MIN_VAL, + IVAS_SPLIT_REND_PRED_MAX_VAL, + &hMd->pred_mat_re_idx[0][0], + &hMd->pred_mat_re[0][0], + BINAURAL_CHANNELS * BINAURAL_CHANNELS ); + + ivas_quantise_real_values( &hMd->pred_mat_im[0][0], + IVAS_SPLIT_REND_PRED_QUANT_PNTS, + IVAS_SPLIT_REND_PRED_MIN_VAL, + IVAS_SPLIT_REND_PRED_MAX_VAL, + &hMd->pred_mat_im_idx[0][0], + &hMd->pred_mat_im[0][0], + BINAURAL_CHANNELS * BINAURAL_CHANNELS ); + + ivas_quantise_real_values( &hMd->gd, + IVAS_SPLIT_REND_D_QUANT_PNTS, + IVAS_SPLIT_REND_D_MIN_VAL, + IVAS_SPLIT_REND_D_MAX_VAL, + &hMd->gd_idx, + &hMd->gd, + 1 ); + + return; +} + + +static void ComputeCoeffs( + float cov_ii_re[][BINAURAL_CHANNELS], + float cov_ii_im[][BINAURAL_CHANNELS], + float cov_io_re[][BINAURAL_CHANNELS], + float cov_io_im[][BINAURAL_CHANNELS], + float cov_oo_re[][BINAURAL_CHANNELS], + BIN_HR_SPLIT_REND_MD_HANDLE hMd, + float fix_pos_rot_mat[][BINAURAL_CHANNELS], + int16_t real_only ) +{ + float postpred_cov_re[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float postpred_cov_im[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float cov_ii_norm_re[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float cov_ii_norm_im[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float cov_io_norm_re[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float cov_io_norm_im[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float cov_oo_norm_re[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float sigma_d, rho_hat, rho, gd, gd2, gl2, gr2, cov_norm_fact; + float aa, bb, cc, dd, sign; + int16_t i, j; + + +#if 1 + + cov_norm_fact = GetNormFact( + cov_ii_re, + cov_ii_im, + cov_io_re, + cov_io_im, + cov_oo_re ); + + // normalize the covariance + for ( i = 0; i < BINAURAL_CHANNELS; i++ ) + { + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + cov_ii_norm_re[i][j] = cov_ii_re[i][j] * cov_norm_fact; + cov_ii_norm_im[i][j] = cov_ii_im[i][j] * cov_norm_fact; + cov_io_norm_re[i][j] = cov_io_re[i][j] * cov_norm_fact; + cov_io_norm_im[i][j] = cov_io_im[i][j] * cov_norm_fact; + cov_oo_norm_re[i][j] = cov_oo_re[i][j] * cov_norm_fact; + } + } + + ComputePredMat( cov_ii_norm_re, + cov_ii_norm_im, + cov_io_norm_re, + cov_io_norm_im, + hMd->pred_mat_re, + hMd->pred_mat_im, + BINAURAL_CHANNELS, + real_only ); +#else + +#endif + + /*TODO : change this function to real only as thats what is needed*/ + ComputePostPredCov( cov_ii_norm_re, + cov_ii_norm_im, + hMd->pred_mat_re, + hMd->pred_mat_im, + postpred_cov_re, + postpred_cov_im, + BINAURAL_CHANNELS ); + + // normalize everything to +-1 range + for ( i = 0; i < BINAURAL_CHANNELS; i++ ) + { + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + postpred_cov_re[i][j] *= 1.0f / ( PCM16_TO_FLT_FAC ); + cov_ii_norm_re[i][j] = cov_ii_norm_re[i][j] * 1.0f / ( PCM16_TO_FLT_FAC ); + cov_oo_norm_re[i][j] = cov_oo_norm_re[i][j] * 1.0f / ( PCM16_TO_FLT_FAC ); + } + } + + sigma_d = cov_ii_norm_re[0][0] + cov_ii_norm_re[1][1] + cov_ii_norm_re[0][1] + cov_ii_norm_re[1][0] + EPSILON; + + rho_hat = max( EPSILON, sqrtf( postpred_cov_re[0][0] * postpred_cov_re[1][1] ) ); + rho_hat = postpred_cov_re[0][1] / rho_hat; + rho = max( EPSILON, sqrtf( cov_oo_norm_re[0][0] * cov_oo_norm_re[1][1] ) ); + rho = cov_oo_norm_re[0][1] / rho; + rho_hat = min( max( rho_hat, -0.9999f ), 0.9999f ); + rho = min( max( rho, -0.9999f ), 0.9999f ); + + // Compute decorrelator gain : gd2 = 0; + gd = 0; + gd2 = 0; + + aa = ( sigma_d * sigma_d ) * ( ( rho_hat * rho_hat ) - 1 ) + EPSILON; + bb = -( rho_hat * rho_hat ) * sigma_d * ( cov_oo_norm_re[0][0] + cov_oo_norm_re[1][1] ); + cc = ( rho_hat * rho_hat ) * cov_oo_norm_re[0][0] * cov_oo_norm_re[1][1]; + cc -= cov_oo_norm_re[0][1] * cov_oo_norm_re[0][1]; + + sign = +1.0f; + if ( rho < ( rho_hat - 0.0001 ) ) + { + bb -= 2 * sigma_d * cov_oo_norm_re[0][1]; + sign = -1.0f; + } + else if ( rho > ( rho_hat + 0.0001 ) ) + { + bb += 2 * sigma_d * cov_oo_norm_re[0][1]; + } + dd = bb * bb - ( 4 * aa * cc ); + if ( dd >= 0 ) + { + float gd2_1, gd2_2; + gd2_1 = ( -bb + sqrtf( dd ) ) / ( 2 * aa ); + gd2_2 = ( -bb - sqrtf( dd ) ) / ( 2 * aa ); + if ( ( gd2_1 >= 0 ) && ( gd2_2 >= 0 ) ) + { + gd2 = min( gd2_1, gd2_2 ); + } + else + { + gd2 = max( 0, max( gd2_1, gd2_2 ) ); + } + gd = sign * sqrtf( gd2 ); + } + + gd = min( 1.0f, max( gd, 0.0f ) ); + hMd->gd = SPLIT_REND_DECOR_ALPHA * gd + ( 1 - SPLIT_REND_DECOR_ALPHA ) * hMd->gd; + gd2 = min( gd2, cov_oo_norm_re[0][0] / sigma_d ); + gd2 = min( gd2, cov_oo_norm_re[1][1] / sigma_d ); + + + if ( postpred_cov_re[0][0] > EPSILON ) + { + gl2 = ( cov_oo_norm_re[0][0] - ( gd2 * sigma_d ) ) / max( EPSILON, postpred_cov_re[0][0] ); + gl2 = max( gl2, 1.0f ); + gl2 = sqrtf( gl2 ); + } + else + { + gl2 = 1.0f; + } + if ( postpred_cov_re[1][1] > EPSILON ) + { + gr2 = ( cov_oo_norm_re[1][1] - ( gd2 * sigma_d ) ) / max( EPSILON, postpred_cov_re[1][1] ); + gr2 = max( gr2, 1.0f ); + gr2 = sqrtf( gr2 ); + } + else + { + gr2 = 1.0f; + } + + for ( i = 0; i < BINAURAL_CHANNELS; i++ ) + { + hMd->pred_mat_re[i][0] *= gl2; + hMd->pred_mat_re[i][0] = min( 2.0f, max( hMd->pred_mat_re[i][0], -2.0f ) ); + + hMd->pred_mat_re[i][1] *= gr2; + hMd->pred_mat_re[i][1] = min( 2.0f, max( hMd->pred_mat_re[i][1], -2.0f ) ); + } + if ( real_only == 0 ) + { + for ( i = 0; i < BINAURAL_CHANNELS; i++ ) + { + hMd->pred_mat_im[i][0] *= gl2; + hMd->pred_mat_im[i][0] = min( 2.0f, max( hMd->pred_mat_im[i][0], -2.0f ) ); + + hMd->pred_mat_im[i][1] *= gr2; + hMd->pred_mat_im[i][1] = min( 2.0f, max( hMd->pred_mat_im[i][1], -2.0f ) ); + } + } + + ivas_split_rend_quant_md( hMd, real_only, fix_pos_rot_mat ); + return; +} + +static void ivas_SplitRenderer_code_md_base2( + BIN_HR_SPLIT_REND_MD rot_md[MAX_HEAD_ROT_POSES - 1][MAX_PARAM_SPATIAL_SUBFRAMES][MAX_SPLIT_REND_MD_BANDS], + BIN_HR_SPLIT_REND_HUFF_HANDLE pHuff_cfg, + ivas_split_rend_bits_t *pBits, + int16_t sf_idx, + int16_t num_md_bands ) +{ + int16_t real_only, pos_idx, b, ch1, ch2; + int16_t min_pred_idx, min_gd_idx, pred_code_len, gd_code_len; + int32_t code; + BIN_HR_SPLIT_REND_MD_HANDLE hMd; + min_pred_idx = (int16_t) pHuff_cfg->pred.codebook[0]; + min_gd_idx = (int16_t) pHuff_cfg->gd.codebook[0]; + pred_code_len = pHuff_cfg->pred_base2_code_len; + gd_code_len = pHuff_cfg->gd_base2_code_len; + + for ( b = 0; b < num_md_bands; b++ ) + { + if ( b < COMPLEX_MD_BAND_THRESH ) + { + real_only = 0; + } + else + { + real_only = 1; + } + + for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES - 1; pos_idx++ ) + { + hMd = &rot_md[pos_idx][sf_idx][b]; + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + code = hMd->pred_mat_re_idx[ch1][ch2] - min_pred_idx; + ivas_split_rend_bitstream_write_int32( pBits, code, pred_code_len ); + } + } + if ( real_only == 0 ) + { + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + code = hMd->pred_mat_im_idx[ch1][ch2] - min_pred_idx; + ivas_split_rend_bitstream_write_int32( pBits, code, pred_code_len ); + } + } + } + code = hMd->gd_idx - min_gd_idx; + ivas_split_rend_bitstream_write_int32( pBits, code, gd_code_len ); + } + } + +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + { + static int num_bits = 0; + static int cntr = 0, sh_cnt = 0; + float fnum_bits; + + cntr++; + sh_cnt++; + + if ( sh_cnt == MAX_PARAM_SPATIAL_SUBFRAMES ) + { + num_bits += pBits->bits_written; + // collect bits for every second + if ( cntr == 200 ) + { + cntr = 0; + fnum_bits = (float) num_bits / 1000.0f; + dbgwrite_txt( &fnum_bits, 1, "split_rend_MD_bitrate.txt", "MD bitrate (kbps)" ); + num_bits = 0; + } + sh_cnt = 0; + } + } +#endif + return; +} + +static void ivas_SplitRenderer_code_md( + BIN_HR_SPLIT_REND_MD rot_md[MAX_HEAD_ROT_POSES - 1][MAX_PARAM_SPATIAL_SUBFRAMES][MAX_SPLIT_REND_MD_BANDS], + BIN_HR_SPLIT_REND_HUFF_HANDLE pHuff_cfg, + ivas_split_rend_bits_t *pBits, + int16_t sf_idx, + int16_t num_md_bands ) +{ + int16_t real_only, pos_idx, b, ch1, ch2; + int16_t sym_adj_idx[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + int16_t min_pred_idx, max_pred_idx; + int32_t code, len; + BIN_HR_SPLIT_REND_MD_HANDLE hMd; + + min_pred_idx = (int16_t) pHuff_cfg->pred.codebook[0]; + max_pred_idx = (int16_t) pHuff_cfg->pred.codebook[( IVAS_SPLIT_REND_PRED_QUANT_PNTS - 1 ) * 3]; + real_only = 0; + for ( b = 0; b < num_md_bands; b++ ) + { + if ( b < COMPLEX_MD_BAND_THRESH ) + { + real_only = 0; + } + else + { + real_only = 1; + } + + for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES - 1; pos_idx++ ) + { + hMd = &rot_md[pos_idx][sf_idx][b]; + + ivas_SplitRenderer_getdiagdiff( hMd->pred_mat_re_idx, sym_adj_idx, -1, min_pred_idx, max_pred_idx ); + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + ivas_split_rend_huffman_encode( &pHuff_cfg->pred, sym_adj_idx[ch1][ch2], &code, &len ); + ivas_split_rend_bitstream_write_int32( pBits, code, len ); + } + } + if ( real_only == 0 ) + { + ivas_SplitRenderer_getdiagdiff( hMd->pred_mat_im_idx, sym_adj_idx, 1, min_pred_idx, max_pred_idx ); + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + ivas_split_rend_huffman_encode( &pHuff_cfg->pred, sym_adj_idx[ch1][ch2], &code, &len ); + ivas_split_rend_bitstream_write_int32( pBits, code, len ); + } + } + } + ivas_split_rend_huffman_encode( &pHuff_cfg->gd, hMd->gd_idx, &code, &len ); + ivas_split_rend_bitstream_write_int32( pBits, code, len ); + } + } + +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + { + static int num_bits = 0; + static int cntr = 0, sh_cnt = 0; + float fnum_bits; + + cntr++; + sh_cnt++; + + if ( sh_cnt == MAX_PARAM_SPATIAL_SUBFRAMES ) + { + num_bits += pBits->bits_written; + // collect bits for every second + if ( cntr == 200 ) + { + cntr = 0; + fnum_bits = (float) num_bits / 1000.0f; + dbgwrite_txt( &fnum_bits, 1, "split_rend_MD_bitrate.txt", "MD bitrate (kbps)" ); + num_bits = 0; + } + sh_cnt = 0; + } + } +#endif + return; +} + +void ivas_SplitRenderer_GetRotMd( + BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend, /* i/o: binaural renderer handle */ + float Cldfb_RealBuffer_Ref_Binaural[][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : Reference Binaural signals */ + float Cldfb_ImagBuffer_Ref_Binaural[][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : Reference Binaural signals */ + ivas_split_rend_bits_t *pBits, + int16_t sf_idx ) +{ + float cov_ii_re[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float cov_oo_re[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float cov_io_re[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float cov_ii_im[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float cov_oo_im[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float cov_io_im[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + int16_t real_only = 0; + + int16_t pos_idx, b; + int16_t yaw_idx; + int16_t num_md_bands; + const int16_t *pBand_grouping = SplitRend_band_grouping; + num_md_bands = MAX_SPLIT_REND_MD_BANDS; + + wmops_sub_start( "ivas_SplitRenderer_GetRotMd" ); + + /*compute reference signal covariance*/ + for ( b = 0; b < num_md_bands; b++ ) + { + if ( b < COMPLEX_MD_BAND_THRESH ) + { + real_only = 0; + } + else + { + real_only = 1; + } + ComputeBandedCov( Cldfb_RealBuffer_Ref_Binaural[0], + Cldfb_ImagBuffer_Ref_Binaural[0], + cov_ii_re, cov_ii_im, + BINAURAL_CHANNELS, + pBand_grouping, + MAX_PARAM_SPATIAL_SUBFRAMES, b, real_only ); + + /*compute rotated signal covariance*/ + for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES - 1; pos_idx++ ) + { + ComputeBandedCrossCov( Cldfb_RealBuffer_Ref_Binaural[0], + Cldfb_ImagBuffer_Ref_Binaural[0], + Cldfb_RealBuffer_Ref_Binaural[pos_idx + 1], + Cldfb_ImagBuffer_Ref_Binaural[pos_idx + 1], + cov_io_re, cov_io_im, + BINAURAL_CHANNELS, + pBand_grouping, + MAX_PARAM_SPATIAL_SUBFRAMES, b, real_only ); + + ComputeBandedCov( Cldfb_RealBuffer_Ref_Binaural[pos_idx + 1], + Cldfb_ImagBuffer_Ref_Binaural[pos_idx + 1], + cov_oo_re, cov_oo_im, + BINAURAL_CHANNELS, + pBand_grouping, + MAX_PARAM_SPATIAL_SUBFRAMES, b, real_only ); + + yaw_idx = ( pos_idx / ( MAX_PITCH_ANGLES * MAX_ROLL_ANGLES ) ); + ComputeCoeffs( cov_ii_re, + cov_ii_im, + cov_io_re, + cov_io_im, + cov_oo_re, + &hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b], + hBinHrSplitPreRend->fix_pos_rot_mat[yaw_idx], + real_only ); + } + } + +#ifdef SPLIT_REND_BASE2_CODING + ivas_SplitRenderer_code_md_base2( + hBinHrSplitPreRend->rot_md, + &hBinHrSplitPreRend->huff_cfg, + pBits, + sf_idx, + num_md_bands ); +#else + ivas_SplitRenderer_code_md( + hBinHrSplitPreRend->rot_md, + &hBinHrSplitPreRend->huff_cfg, + pBits, + sf_idx, + num_md_bands ); +#endif + +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + { + int16_t num_cldfb_bands; + num_cldfb_bands = CLDFB_NO_CHANNELS_MAX; + for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES; pos_idx++ ) + { + char fname[200] = "rotated_ref_pos"; + char tag[2]; + tag[0] = (char) ( '0' + pos_idx ); + tag[1] = '\0'; + strcat( fname, tag ); + strcat( fname, ".wav" ); + ivas_log_cldfb2wav_data( + Cldfb_RealBuffer_Ref_Binaural[pos_idx + 1], + Cldfb_ImagBuffer_Ref_Binaural[pos_idx + 1], + hBinHrSplitPreRend->cldfbSynRotBinDec[pos_idx], + BINAURAL_CHANNELS, + num_cldfb_bands, + 48000, + fname ); + } + ivas_log_cldfb2wav_data( + Cldfb_RealBuffer_Ref_Binaural[0], + Cldfb_ImagBuffer_Ref_Binaural[0], + hBinHrSplitPreRend->cldfbSynRotBinDec[MAX_HEAD_ROT_POSES], + BINAURAL_CHANNELS, + num_cldfb_bands, + 48000, + "rotated_ref_RefPos.wav" ); + } +#endif + + wmops_sub_end(); + + return; +} + +void ivas_rend_CldfbSplitPreRendProcess( + const BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend, + float Cldfb_In_BinReal[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float Cldfb_In_BinImag[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + const int16_t max_bands, + ivas_split_rend_bits_t *pBits ) +{ + int16_t sf_idx, slot_idx, ch_idx, idx, pos_idx, num_poses; +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + float Cldfb_RealBuffer_Binaural[MAX_HEAD_ROT_POSES + 1][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer_Binaural[MAX_HEAD_ROT_POSES + 1][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; +#else + float Cldfb_RealBuffer_Binaural[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer_Binaural[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; +#endif + +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + num_poses = MAX_HEAD_ROT_POSES + 1; +#else + num_poses = MAX_HEAD_ROT_POSES; +#endif + + for ( sf_idx = 0; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ ) + { + for ( pos_idx = 0; pos_idx < num_poses; pos_idx++ ) + { + for ( slot_idx = 0; slot_idx < MAX_PARAM_SPATIAL_SUBFRAMES; slot_idx++ ) + { + idx = sf_idx * MAX_PARAM_SPATIAL_SUBFRAMES + slot_idx; + for ( ch_idx = 0; ch_idx < BINAURAL_CHANNELS; ch_idx++ ) + { + mvr2r( &Cldfb_In_BinReal[pos_idx][ch_idx][idx][0], &Cldfb_RealBuffer_Binaural[pos_idx][ch_idx][slot_idx][0], max_bands ); + mvr2r( &Cldfb_In_BinImag[pos_idx][ch_idx][idx][0], &Cldfb_ImagBuffer_Binaural[pos_idx][ch_idx][slot_idx][0], max_bands ); + } + } + } + + ivas_SplitRenderer_GetRotMd( + hBinHrSplitPreRend, + Cldfb_RealBuffer_Binaural, + Cldfb_ImagBuffer_Binaural, + pBits, + sf_idx ); + } + + return; +} + +ivas_error ivas_splitBinPreRendOpen( + BIN_HR_SPLIT_PRE_REND_HANDLE *hBinHrSplitPreRend +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + , + const int32_t output_Fs +#endif +) +{ + BIN_HR_SPLIT_PRE_REND_HANDLE hBinRend; + ivas_error error; +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + int16_t ch; +#endif + int16_t pos_idx, sf_idx, bandIdx; + + error = IVAS_ERR_OK; + if ( ( hBinRend = (BIN_HR_SPLIT_PRE_REND_HANDLE) count_malloc( sizeof( BIN_HR_SPLIT_PRE_REND ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for bin split pre renderer Module \n" ) ); + } + +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + for ( int16_t i = 0; i < MAX_HEAD_ROT_POSES + 1; i++ ) + { + for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) + { + hBinRend->cldfbSynRotBinDec[i][ch] = NULL; + } + } + + for ( int16_t i = 0; i < MAX_HEAD_ROT_POSES + 1; i++ ) + { + for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) + { + if ( ( error = openCldfb( &( hBinRend->cldfbSynRotBinDec[i][ch] ), CLDFB_SYNTHESIS, output_Fs, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } +#endif + + for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES - 1; pos_idx++ ) + { + for ( sf_idx = 0; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ ) + { + for ( bandIdx = 0; bandIdx < MAX_SPLIT_REND_MD_BANDS; bandIdx++ ) + { + hBinRend->rot_md[pos_idx][sf_idx][bandIdx].gd = 0.0f; + } + } + } + set_fix_rotation_mat( hBinRend->fix_pos_rot_mat ); + ivas_split_rend_init_huff_cfg( &hBinRend->huff_cfg ); + *hBinHrSplitPreRend = hBinRend; + return error; +} + +void ivas_splitBinPreRendClose( BIN_HR_SPLIT_PRE_REND_HANDLE *hBinHrSplitPreRend ) +{ + if ( ( *hBinHrSplitPreRend ) != NULL ) + { +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + { + int16_t i, n; + for ( i = 0; i < MAX_HEAD_ROT_POSES + 1; i++ ) + { + for ( n = 0; n < BINAURAL_CHANNELS; n++ ) + { + if ( ( *hBinHrSplitPreRend )->cldfbSynRotBinDec[i][n] != NULL ) + { + deleteCldfb( &( ( *hBinHrSplitPreRend )->cldfbSynRotBinDec[i][n] ) ); + ( *hBinHrSplitPreRend )->cldfbSynRotBinDec[i][n] = NULL; + } + } + } + } +#endif + count_free( ( *hBinHrSplitPreRend ) ); + ( *hBinHrSplitPreRend ) = NULL; + } + return; +} + +void ivas_init_split_rend_handles( SPLIT_REND_WRAPPER *hSplitRendWrapper ) +{ + hSplitRendWrapper->hBinHrSplitPostRend = NULL; + hSplitRendWrapper->hBinHrSplitPreRend = NULL; + hSplitRendWrapper->hCldfbHandles = NULL; + hSplitRendWrapper->hSplitBinLCLDDec = NULL; + hSplitRendWrapper->hSplitBinLCLDEnc = NULL; + return; +} + +ivas_error ivas_split_renderer_open( SPLIT_REND_WRAPPER *hSplitRendWrapper, const int32_t OutSampleRate, const IVAS_SPLIT_REND_MODE splitRendMode, const int16_t is_cldfb_in ) +{ + ivas_error error, ch, num_ch; + error = IVAS_ERR_OK; + + if ( is_cldfb_in == 0 ) + { + if ( ( hSplitRendWrapper->hCldfbHandles = (CLDFB_HANDLES_WRAPPER_HANDLE) count_malloc( sizeof( CLDFB_HANDLES_WRAPPER ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CLDFB handles\n" ) ); + } + num_ch = MAX_HEAD_ROT_POSES * BINAURAL_CHANNELS; + for ( ch = 0; ch < num_ch; ch++ ) + { + hSplitRendWrapper->hCldfbHandles->cldfbAna[ch] = NULL; + } + + for ( ch = 0; ch < num_ch; ch++ ) + { + if ( ( error = openCldfb( &( hSplitRendWrapper->hCldfbHandles->cldfbAna[ch] ), CLDFB_ANALYSIS, OutSampleRate, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) + { + return error; + } + } + } + + switch ( splitRendMode ) + { + case SPLIT_REND_PRE: + + error = ivas_splitBinPreRendOpen( &hSplitRendWrapper->hBinHrSplitPreRend +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + , + OutSampleRate +#endif + ); + if ( error != IVAS_ERR_OK ) + { + return error; + } + error = ivas_splitBinLCLDEncOpen( &hSplitRendWrapper->hSplitBinLCLDEnc ); + break; + case SPLIT_REND_POST: + error = ivas_splitBinPostRendOpen( &hSplitRendWrapper->hBinHrSplitPostRend, OutSampleRate ); + if ( error != IVAS_ERR_OK ) + { + return error; + } + error = ivas_splitBinLCLDDecOpen( &hSplitRendWrapper->hSplitBinLCLDDec ); + if ( error != IVAS_ERR_OK ) + { + return error; + } + break; + case SPLIT_REND_COMB: + error = ivas_splitBinPreRendOpen( &hSplitRendWrapper->hBinHrSplitPreRend +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + , + OutSampleRate +#endif + ); + if ( error != IVAS_ERR_OK ) + { + return error; + } + error = ivas_splitBinLCLDEncOpen( &hSplitRendWrapper->hSplitBinLCLDEnc ); + if ( error != IVAS_ERR_OK ) + { + return error; + } + error = ivas_splitBinPostRendOpen( &hSplitRendWrapper->hBinHrSplitPostRend, OutSampleRate ); + if ( error != IVAS_ERR_OK ) + { + return error; + } + error = ivas_splitBinLCLDDecOpen( &hSplitRendWrapper->hSplitBinLCLDDec ); + break; + default: + return IVAS_ERR_INVALID_OUTPUT_FORMAT; + } + + return error; +} + +void ivas_split_renderer_close( SPLIT_REND_WRAPPER *hSplitBinRend ) +{ + if ( hSplitBinRend->hBinHrSplitPreRend != NULL ) + { + ivas_splitBinPreRendClose( &hSplitBinRend->hBinHrSplitPreRend ); + } + if ( hSplitBinRend->hSplitBinLCLDEnc != NULL ) + { + ivas_splitBinLCLDEncClose( &hSplitBinRend->hSplitBinLCLDEnc ); + } + if ( hSplitBinRend->hBinHrSplitPostRend != NULL ) + { + ivas_splitBinPostRendClose( &hSplitBinRend->hBinHrSplitPostRend ); + } + if ( hSplitBinRend->hSplitBinLCLDDec != NULL ) + { + ivas_splitBinLCLDDecClose( &hSplitBinRend->hSplitBinLCLDDec ); + } + + if ( hSplitBinRend->hCldfbHandles != NULL ) + { + hSplitBinRend->hCldfbHandles = NULL; + } + return; +} + +ivas_error ivas_renderMultiBinToSplitBinaural( + SPLIT_REND_WRAPPER *hSplitBin, + ivas_split_rend_bits_t *pBits, + float Cldfb_In_BinReal[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float Cldfb_In_BinImag[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + const IVAS_QUATERNION QuaternionsPre[MAX_PARAM_SPATIAL_SUBFRAMES], + const IVAS_QUATERNION QuaternionsPost[MAX_PARAM_SPATIAL_SUBFRAMES], + const int16_t max_bands, + float out[][L_FRAME48k] ) +{ + ivas_error error; + error = IVAS_ERR_OK; + if ( hSplitBin->hCldfbHandles != NULL ) + { + /*if CLDFB handles have been allocated then assume valid multi binaural input in out[][] buffer and perform CLDFB analysis*/ + int16_t num_cldfb_bands, ch, slot_idx, pos_idx; + + assert( hSplitBin->hCldfbHandles != NULL ); + num_cldfb_bands = hSplitBin->hCldfbHandles->cldfbAna[0]->no_channels; + /* CLDFB Analysis*/ +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES + 1; pos_idx++ ) +#else + for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES; pos_idx++ ) +#endif + { + for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) + { + for ( slot_idx = 0; slot_idx < CLDFB_NO_COL_MAX; slot_idx++ ) + { + cldfbAnalysis_ts( &( out[pos_idx * BINAURAL_CHANNELS + ch][num_cldfb_bands * slot_idx] ), + Cldfb_In_BinReal[pos_idx][ch][slot_idx], + Cldfb_In_BinImag[pos_idx][ch][slot_idx], + max_bands, + hSplitBin->hCldfbHandles->cldfbAna[ch] ); + } + } + } + } + + ivas_rend_CldfbSplitPreRendProcess( + hSplitBin->hBinHrSplitPreRend, + Cldfb_In_BinReal, + Cldfb_In_BinImag, + max_bands, + pBits ); + + ivas_splitBinLCLDEncProcess( + hSplitBin->hSplitBinLCLDEnc, + Cldfb_In_BinReal[0], + Cldfb_In_BinImag[0], + pBits ); + + + /*CLFDB decoding and SPLIT post rendering MD based adjustments*/ + { + + ivas_splitBinLCLDDecProcess( + hSplitBin->hSplitBinLCLDDec, + pBits, + Cldfb_In_BinReal[0], + Cldfb_In_BinImag[0] ); + + ivas_splitBinPostRendMdDec( + pBits, + hSplitBin->hBinHrSplitPostRend, +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + hSplitBin->hBinHrSplitPreRend, +#endif + MAX_SPLIT_REND_MD_BANDS ); + + ivas_rend_CldfbSplitPostRendProcess( + hSplitBin->hBinHrSplitPostRend, + QuaternionsPre, + QuaternionsPost, + Cldfb_In_BinReal[0], + Cldfb_In_BinImag[0], + out ); + } + + return error; +} +#endif \ No newline at end of file diff --git a/lib_rend/ivas_splitRenderer_utils.c b/lib_rend/ivas_splitRenderer_utils.c new file mode 100644 index 0000000000..9d68e424fd --- /dev/null +++ b/lib_rend/ivas_splitRenderer_utils.c @@ -0,0 +1,300 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include +#include "options.h" +#include +#include "ivas_prot.h" +#include "prot.h" +#include "cnst.h" +#include "ivas_cnst.h" +#include "ivas_rom_rend.h" +#include "ivas_rom_com.h" +#include "ivas_rom_dec.h" +#include "ivas_rom_binauralRenderer.h" +#include "lib_rend.h" +#include "ivas_lib_rend_internal.h" +#ifdef DEBUGGING +#include "debug.h" +#endif +#include "wmops.h" + +#ifdef SPLIT_REND_WITH_HEAD_ROT +void ivas_split_rend_bitstream_init( ivas_split_rend_bits_t *pBits, const int32_t buf_len_bytes, uint8_t *pbuf ) +{ + pBits->bits_buf = pbuf; + pBits->buf_len = buf_len_bytes; + pBits->bits_read = 0; + pBits->bits_written = 0; + return; +} + +void ivas_split_rend_huffman_dec_init_min_max_len( + ivas_split_rend_huffman_cfg_t *p_huff_cfg ) +{ + int16_t i, code_len; + const int32_t *codebook; + + codebook = p_huff_cfg->codebook; + + p_huff_cfg->min_len = p_huff_cfg->sym_len; + p_huff_cfg->max_len = 0; + + for ( i = 0; i < p_huff_cfg->sym_len; i++ ) + { + code_len = (int16_t) codebook[1]; + if ( p_huff_cfg->min_len > code_len ) + { + p_huff_cfg->min_len = code_len; + } + if ( p_huff_cfg->max_len < code_len ) + { + p_huff_cfg->max_len = code_len; + } + codebook = codebook + 3; + } + + return; +} + +static int16_t is_idx_present( int16_t *idx_list, const int16_t idx, const int16_t len ) +{ + int16_t i; + for ( i = 0; i < len; i++ ) + { + if ( idx_list[i] == idx ) + { + return 1; + } + } + return 0; +} +static void ivas_split_huff_get_idx_trav_list( int16_t *idx_list, ivas_split_rend_huffman_cfg_t *p_huff_cfg ) +{ + int16_t i, j, min_idx; + int32_t min_bits; + const int32_t *codebook; + + for ( i = 0; i < p_huff_cfg->sym_len; i++ ) + { + idx_list[i] = -1; + } + + for ( i = 0; i < p_huff_cfg->sym_len; i++ ) + { + codebook = p_huff_cfg->codebook; + min_bits = p_huff_cfg->max_len; + min_idx = -1; + for ( j = 0; j < p_huff_cfg->sym_len; j++ ) + { + if ( ( min_bits >= codebook[1] ) && ( is_idx_present( idx_list, j, i + 1 ) == 0 ) ) + { + min_bits = codebook[1]; + min_idx = j; + } + codebook += 3; + } + idx_list[i] = min_idx; + } + + return; +} + +void ivas_split_rend_init_huff_cfg( BIN_HR_SPLIT_REND_HUFF_HANDLE pHuff_cfg ) +{ + pHuff_cfg->pred.codebook = &ivas_split_rend_huff_pred_consts[0][0]; + pHuff_cfg->pred.sym_len = IVAS_SPLIT_REND_PRED_QUANT_PNTS; + ivas_split_rend_huffman_dec_init_min_max_len( &pHuff_cfg->pred ); + ivas_split_huff_get_idx_trav_list( pHuff_cfg->pred_idx_trav, &pHuff_cfg->pred ); + pHuff_cfg->pred_base2_code_len = (int16_t) ceilf( log2f( pHuff_cfg->pred.sym_len ) ); + + pHuff_cfg->gd.codebook = &ivas_split_rend_huff_d_consts[0][0]; + pHuff_cfg->gd.sym_len = IVAS_SPLIT_REND_D_QUANT_PNTS; + ivas_split_rend_huffman_dec_init_min_max_len( &pHuff_cfg->gd ); + ivas_split_huff_get_idx_trav_list( pHuff_cfg->gd_idx_trav, &pHuff_cfg->gd ); + pHuff_cfg->gd_base2_code_len = (int16_t) ceilf( log2f( pHuff_cfg->gd.sym_len ) ); + + return; +} + +void set_fix_rotation_mat( float fix_pos_rot_mat[][BINAURAL_CHANNELS][BINAURAL_CHANNELS] ) +{ + float yaw_a, cos_yaw, sin_yaw; + int16_t pos_idx; + yaw_a = 0.0f; + for ( pos_idx = 0; pos_idx < MAX_YAW_ANGLES - 1; pos_idx++ ) + { + yaw_a += split_rend_relative_yaw_angles[pos_idx + 1]; + cos_yaw = cosf( EVS_PI * yaw_a / 180.0f ); + sin_yaw = sinf( EVS_PI * yaw_a / 180.0f ); + sin_yaw = 0.0f; + fix_pos_rot_mat[pos_idx][0][0] = cos_yaw; + fix_pos_rot_mat[pos_idx][1][1] = cos_yaw; + fix_pos_rot_mat[pos_idx][0][1] = sin_yaw; + fix_pos_rot_mat[pos_idx][1][0] = -1.0f * sin_yaw; + } + return; +} + +int16_t wrap_a( int16_t val, int16_t min_val, int16_t max_val ) +{ + if ( val < min_val ) + { + val = max_val - min_val + val + 1; + } + if ( val > max_val ) + { + val = min_val + val - max_val - 1; + } + return val; +} + +void ivas_SplitRenderer_getdiagdiff( + int16_t in_idx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + int16_t out_idx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + const int16_t sign, + const int16_t min_val, + const int16_t max_val ) +{ + out_idx[0][0] = in_idx[0][0]; + out_idx[0][1] = in_idx[0][1]; + out_idx[1][1] = in_idx[1][1] + sign * out_idx[0][0]; + out_idx[1][1] = wrap_a( out_idx[1][1], min_val, max_val ); + out_idx[1][0] = in_idx[1][0] + sign * out_idx[0][1]; + out_idx[1][0] = wrap_a( out_idx[1][0], min_val, max_val ); + + return; +} + + +int32_t ivas_split_rend_bitstream_read_int32( ivas_split_rend_bits_t *pBits, int32_t bits ) +{ + int32_t val, k; +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + assert( ( pBits->bits_written - pBits->bits_read ) >= bits ); + assert( bits <= 32 ); +#endif + + /* write bit by bit */ + val = 0; + for ( k = bits - 1; k >= 0; k-- ) + { + if ( pBits->bits_buf[pBits->bits_read >> 3] & ( 1 << ( pBits->bits_read & 7 ) ) ) + { + val |= 1 << k; + } + pBits->bits_read++; + } + return val; +} +void ivas_split_rend_bitstream_write_int32( ivas_split_rend_bits_t *pBits, int32_t val, int32_t bits ) +{ + int32_t mask, k; + +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + /*protection check*/ + if ( ( pBits->buf_len << 3 ) < ( pBits->bits_written + bits ) ) + { + assert( 0 ); + } +#endif + + mask = 1 << ( bits - 1 ); + /* write bit by bit */ + for ( k = 0; k < bits; k++ ) + { + if ( val & mask ) + { + pBits->bits_buf[pBits->bits_written >> 3] |= ( 1 << ( pBits->bits_written & 7 ) ); + } + else + { + pBits->bits_buf[pBits->bits_written >> 3] &= ~( 1 << ( pBits->bits_written & 7 ) ); + } + pBits->bits_written++; + mask >>= 1; + } + return; +} + + +IVAS_QUATERNION ivas_split_rend_get_sf_rot_data( + const IVAS_QUATERNION headPositions[RENDERER_HEAD_POSITIONS_PER_FRAME], + int16_t subframe_idx ) +{ + int16_t idx; + + idx = ( subframe_idx * RENDERER_HEAD_POSITIONS_PER_FRAME ) / MAX_PARAM_SPATIAL_SUBFRAMES; + return headPositions[idx]; +} + + +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG +void ivas_log_cldfb2wav_data( + float Cldfb_In_Real[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], + float Cldfb_In_Imag[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], + HANDLE_CLDFB_FILTER_BANK *cldfbSyn, + const int16_t num_chs, + const int16_t num_freq_bands, + const int32_t output_Fs, + const char *filename ) +{ + float *RealBuffer[MAX_PARAM_SPATIAL_SUBFRAMES]; + float *ImagBuffer[MAX_PARAM_SPATIAL_SUBFRAMES]; + float pcm_out[BINAURAL_CHANNELS][L_FRAME48k]; + float *pPcm[BINAURAL_CHANNELS]; + float Cldfb_local_Real[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_local_Imag[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + int16_t sf, ch; + + assert( num_chs <= BINAURAL_CHANNELS ); + for ( ch = 0; ch < num_chs; ch++ ) + { + for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) + { + mvr2r( Cldfb_In_Real[ch][sf], Cldfb_local_Real[ch][sf], num_freq_bands ); + mvr2r( Cldfb_In_Imag[ch][sf], Cldfb_local_Imag[ch][sf], num_freq_bands ); + RealBuffer[sf] = Cldfb_local_Real[ch][sf]; + ImagBuffer[sf] = Cldfb_local_Imag[ch][sf]; + } + cldfbSynthesis( RealBuffer, + ImagBuffer, + &( pcm_out[ch][0] ), + num_freq_bands * MAX_PARAM_SPATIAL_SUBFRAMES, + cldfbSyn[ch] ); + pPcm[ch] = pcm_out[ch]; + } + dbgwrite_wav( pPcm, num_freq_bands * MAX_PARAM_SPATIAL_SUBFRAMES, + filename, output_Fs, num_chs ); +} +#endif +#endif diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 2764aa6a10..f604c309e9 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -50,10 +50,15 @@ /* Maximum buffer length (per channel) in samples. * Keep this separate from L_FRAME48k in case we want to support different size later */ -#define MAX_BUFFER_LENGTH_PER_CHANNEL ( L_FRAME48k ) +#define MAX_BUFFER_LENGTH_PER_CHANNEL ( L_FRAME48k ) +#define MAX_CLDFB_BUFFER_LENGTH_PER_CHANNEL ( MAX_BUFFER_LENGTH_PER_CHANNEL * 2 ) /* Maximum buffer length (total) in samples. */ +#ifdef SPLIT_REND_WITH_HEAD_ROT +#define MAX_BUFFER_LENGTH ( MAX_CLDFB_BUFFER_LENGTH_PER_CHANNEL * MAX_INPUT_CHANNELS ) +#else #define MAX_BUFFER_LENGTH ( MAX_BUFFER_LENGTH_PER_CHANNEL * MAX_INPUT_CHANNELS ) +#endif /* Frame size required when rendering to binaural */ #define BINAURAL_RENDERING_FRAME_SIZE_MS 20 @@ -86,6 +91,9 @@ typedef struct const LSSETUP_CUSTOM_STRUCT *pCustomLsOut; const EFAP_WRAPPER *pEfapOutWrapper; const IVAS_REND_HeadRotData *pHeadRotData; +#ifdef SPLIT_REND_WITH_HEAD_ROT + const IVAS_SPLIT_REND_MODE *pSplitRendMode; +#endif /* TODO @Philips : would this be a better place to store the render config data? * bearing in mind we could have multiple inputs to the renderer, we might neeed to accomodate * multiple rendering configurations unless one global one can be used. If this is not relevant, @@ -136,6 +144,10 @@ typedef struct input_base base; pan_matrix hoaDecMtx; CREND_WRAPPER crendWrapper; +#ifdef SPLIT_REND_WITH_HEAD_ROT + CLDFB_REND_WRAPPER cldfbRendWrapper; + SPLIT_REND_WRAPPER splitRendWrapper; +#endif rotation_gains rot_gains_prev; } input_sba; @@ -172,6 +184,9 @@ struct IVAS_REND IVAS_LSSETUP_CUSTOM_STRUCT customLsOut; IVAS_REND_HeadRotData headRotData; +#ifdef SPLIT_REND_WITH_HEAD_ROT + IVAS_SPLIT_REND_MODE splitRendMode; +#endif int8_t rendererConfigEnabled; RENDER_CONFIG_DATA *hRendererConfig; /* Renderer config pointer */ @@ -194,6 +209,40 @@ static float *getSmplPtr( return buffer.data + chnlIdx * buffer.config.numSamplesPerChannel + smplIdx; } +#ifdef SPLIT_REND_WITH_HEAD_ROT +static void copyBufferToCLDFBarray( + const IVAS_REND_AudioBuffer buffer, + float re[MAX_OUTPUT_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float im[MAX_OUTPUT_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX] ) +{ + uint32_t smplIdx, slotIdx; + uint32_t numCldfbSamples, num_bands; + uint32_t chnlIdx; + const float *readPtr; + + assert( ( buffer.config.is_cldfb == 1 ) && "for time domain input call copyBufferTo2dArray()" ); + readPtr = buffer.data; + numCldfbSamples = ( (uint32_t) buffer.config.numSamplesPerChannel ) >> 1; + num_bands = numCldfbSamples / CLDFB_NO_COL_MAX; + for ( chnlIdx = 0; chnlIdx < (uint32_t) buffer.config.numChannels; ++chnlIdx ) + { + for ( slotIdx = 0; slotIdx < CLDFB_NO_COL_MAX; ++slotIdx ) + { + for ( smplIdx = 0; smplIdx < num_bands; ++smplIdx ) + { + re[chnlIdx][slotIdx][smplIdx] = *readPtr++; + } + for ( smplIdx = 0; smplIdx < num_bands; ++smplIdx ) + { + im[chnlIdx][slotIdx][smplIdx] = *readPtr++; + } + } + } + + return; +} +#endif + static void copyBufferTo2dArray( const IVAS_REND_AudioBuffer buffer, float array[MAX_OUTPUT_CHANNELS][L_FRAME48k] ) @@ -202,6 +251,9 @@ static void copyBufferTo2dArray( uint32_t chnlIdx; const float *readPtr; +#ifdef SPLIT_REND_WITH_HEAD_ROT + assert( ( buffer.config.is_cldfb == 0 ) && "for CLDFB input call copyBufferToCLDFBarray()" ); +#endif readPtr = buffer.data; for ( chnlIdx = 0; chnlIdx < (uint32_t) buffer.config.numChannels; ++chnlIdx ) @@ -836,6 +888,12 @@ static void initHeadRotation( { hIvasRend->headRotData.headPositions[i] = quaternionInit(); } +#ifdef SPLIT_REND_WITH_HEAD_ROT + for ( i = 0; i < RENDERER_HEAD_POSITIONS_PER_FRAME; ++i ) + { + hIvasRend->headRotData.headPositionsPostRend[i] = quaternionInit(); + } +#endif return; } @@ -915,6 +973,9 @@ static rendering_context getRendCtx( ctx.pCustomLsOut = &hIvasRend->customLsOut; ctx.pEfapOutWrapper = &hIvasRend->efapOutWrapper; ctx.pHeadRotData = &hIvasRend->headRotData; +#ifdef SPLIT_REND_WITH_HEAD_ROT + ctx.pSplitRendMode = &hIvasRend->splitRendMode; +#endif return ctx; } @@ -942,7 +1003,6 @@ static CREND_WRAPPER defaultCrendWrapper( return w; } - static ivas_error setRendInputActiveIsm( void *input, const IVAS_REND_AudioConfig inConfig, @@ -1796,7 +1856,24 @@ static ivas_error updateSbaPanGains( switch ( outConfig ) { case IVAS_REND_AUDIO_CONFIG_BINAURAL: - error = ivas_rend_openCrend( &inputSba->crendWrapper, inConfig, outConfig, hRendCfg, *rendCtx.pOutSampleRate ); +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( ( *rendCtx.pSplitRendMode ) != SPLIT_REND_DISABLED ) + { + if ( ( *rendCtx.pSplitRendMode ) != SPLIT_REND_POST ) + { + error = ivas_rend_openCldfbRend( &inputSba->cldfbRendWrapper, inConfig, SPLIT_REND_PRE, hRendCfg, *rendCtx.pOutSampleRate ); + if ( error != IVAS_ERR_OK ) + { + return error; + } + } + error = ivas_split_renderer_open( &inputSba->splitRendWrapper, *rendCtx.pOutSampleRate, *rendCtx.pSplitRendMode, 1 ); + } + else +#endif + { + error = ivas_rend_openCrend( &inputSba->crendWrapper, inConfig, outConfig, hRendCfg, *rendCtx.pOutSampleRate ); + } break; case IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM: if ( ( error = initSbaPanGainsForMcOut( inputSba, IVAS_REND_AUDIO_CONFIG_7_1_4, NULL ) ) != IVAS_ERR_OK ) @@ -1863,6 +1940,13 @@ static void clearInputSba( { ivas_rend_closeCrend( &inputSba->crendWrapper ); } +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( inputSba->cldfbRendWrapper.hCldfbRend != NULL ) + { + ivas_rend_closeCldfbRend( &inputSba->cldfbRendWrapper ); + } + ivas_split_renderer_close( &inputSba->splitRendWrapper ); +#endif return; } @@ -2125,6 +2209,11 @@ static DecoderDummy *initDecoderDummy( int32_t sampleRate, int16_t numTransChann decDummy->hDecoderConfig->Opt_Headrotation = 0; decDummy->hBinRenderer = NULL; +#ifdef SPLIT_REND_WITH_HEAD_ROT + decDummy->splitBinRend.hSplitRendBits = NULL; + decDummy->splitBinRend.hMultiBinCldfbData = NULL; + ivas_init_split_rend_handles( &decDummy->splitBinRend.splitrend ); +#endif decDummy->hEFAPdata = NULL; decDummy->hHrtf = NULL; decDummy->hHrtfTD = NULL; @@ -2287,7 +2376,12 @@ static void clearInputMasa( input_masa *inputMasa ) ivas_error IVAS_REND_Open( IVAS_REND_HANDLE *phIvasRend, const int32_t outputSampleRate, - const IVAS_REND_AudioConfig outConfig ) + const IVAS_REND_AudioConfig outConfig +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + IVAS_SPLIT_REND_MODE splitRendMode +#endif +) { int16_t i; IVAS_REND_HANDLE hIvasRend; @@ -2327,6 +2421,9 @@ ivas_error IVAS_REND_Open( #ifdef DEBUGGING hIvasRend->numClipping = 0; #endif +#ifdef SPLIT_REND_WITH_HEAD_ROT + hIvasRend->splitRendMode = splitRendMode; +#endif /* Initialize limiter */ if ( ( error = IVAS_REND_NumOutChannels( hIvasRend, &numOutChannels ) ) != IVAS_ERR_OK ) @@ -2359,6 +2456,10 @@ ivas_error IVAS_REND_Open( { initRendInputBase( &hIvasRend->inputsSba[i].base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, getRendCtx( hIvasRend ) ); hIvasRend->inputsSba[i].crendWrapper.hCrend = NULL; +#ifdef SPLIT_REND_WITH_HEAD_ROT + hIvasRend->inputsSba[i].cldfbRendWrapper.hCldfbRend = NULL; + ivas_init_split_rend_handles( &hIvasRend->inputsSba[i].splitRendWrapper ); +#endif } for ( i = 0; i < RENDERER_MAX_MASA_INPUTS; ++i ) { @@ -3047,8 +3148,19 @@ ivas_error IVAS_REND_GetDelay( { if ( hIvasRend->inputsSba[i].base.inConfig != IVAS_REND_AUDIO_CONFIG_UNKNOWN ) { - latency_ns = hIvasRend->inputsSba[i].crendWrapper.binaural_latency_ns; - *nSamples = max( *nSamples, NS2SA( *timeScale, latency_ns ) ); +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( hIvasRend->inputsSba[i].splitRendWrapper.hBinHrSplitPostRend != NULL ) + { + latency_ns = hIvasRend->inputsSba[i].cldfbRendWrapper.binaural_latency_ns; + latency_ns += IVAS_FB_DEC_DELAY_NS; + *nSamples = max( *nSamples, NS2SA( *timeScale, latency_ns ) ); + } + else +#endif + { + latency_ns = hIvasRend->inputsSba[i].crendWrapper.binaural_latency_ns; + *nSamples = max( *nSamples, NS2SA( *timeScale, latency_ns ) ); + } } } @@ -3072,7 +3184,9 @@ ivas_error IVAS_REND_FeedInputAudio( ivas_error error; input_base *inputBase; int16_t numInputChannels; - +#ifdef SPLIT_REND_WITH_HEAD_ROT + int16_t cldfb2tdSampleFact; +#endif /*-----------------------------------------------------------------* * Validate function arguments *-----------------------------------------------------------------*/ @@ -3081,7 +3195,16 @@ ivas_error IVAS_REND_FeedInputAudio( { return IVAS_ERR_UNEXPECTED_NULL_POINTER; } + +#ifdef SPLIT_REND_WITH_HEAD_ROT + cldfb2tdSampleFact = ( inputAudio.config.is_cldfb ) ? 2 : 1; +#endif +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( inputAudio.config.numSamplesPerChannel <= 0 || ( MAX_BUFFER_LENGTH_PER_CHANNEL < inputAudio.config.numSamplesPerChannel && inputAudio.config.is_cldfb == 0 ) || + ( ( MAX_BUFFER_LENGTH_PER_CHANNEL * cldfb2tdSampleFact ) < inputAudio.config.numSamplesPerChannel && inputAudio.config.is_cldfb == 1 ) ) +#else if ( inputAudio.config.numSamplesPerChannel <= 0 || MAX_BUFFER_LENGTH_PER_CHANNEL < inputAudio.config.numSamplesPerChannel ) +#endif { return IVAS_ERR_INVALID_BUFFER_SIZE; } @@ -3089,8 +3212,13 @@ ivas_error IVAS_REND_FeedInputAudio( { return IVAS_ERR_WRONG_NUM_CHANNELS; } +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( getAudioConfigType( hIvasRend->outputConfig ) == IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL && + ( inputAudio.config.numSamplesPerChannel * 1000 / cldfb2tdSampleFact ) != BINAURAL_RENDERING_FRAME_SIZE_MS * hIvasRend->sampleRateOut ) +#else if ( getAudioConfigType( hIvasRend->outputConfig ) == IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL && inputAudio.config.numSamplesPerChannel * 1000 != BINAURAL_RENDERING_FRAME_SIZE_MS * hIvasRend->sampleRateOut ) +#endif { /* Binaural rendering requires specific frame size */ return IVAS_ERR_INVALID_BUFFER_SIZE; @@ -3295,7 +3423,12 @@ int16_t IVAS_REND_FeedRenderConfig( ivas_error IVAS_REND_SetHeadRotation( IVAS_REND_HANDLE hIvasRend, - const IVAS_QUATERNION headRot[RENDERER_HEAD_POSITIONS_PER_FRAME] ) + const IVAS_QUATERNION headRot[RENDERER_HEAD_POSITIONS_PER_FRAME] +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + const IVAS_SPLIT_REND_MODE splitRendMode +#endif +) { int16_t i; @@ -3320,9 +3453,21 @@ ivas_error IVAS_REND_SetHeadRotation( else { hIvasRend->headRotData.headRotEnabled = 1; - for ( i = 0; i < RENDERER_HEAD_POSITIONS_PER_FRAME; ++i ) +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( splitRendMode == SPLIT_REND_POST ) + { + for ( i = 0; i < RENDERER_HEAD_POSITIONS_PER_FRAME; ++i ) + { + hIvasRend->headRotData.headPositionsPostRend[i] = headRot[i]; + } + } + else +#endif { - hIvasRend->headRotData.headPositions[i] = headRot[i]; + for ( i = 0; i < RENDERER_HEAD_POSITIONS_PER_FRAME; ++i ) + { + hIvasRend->headRotData.headPositions[i] = headRot[i]; + } } } @@ -4330,6 +4475,88 @@ static ivas_error renderSbaToSba( return IVAS_ERR_OK; } +#ifdef SPLIT_REND_WITH_HEAD_ROT +static ivas_error renderMultiBinToSplitBinaural( + SPLIT_REND_WRAPPER *hSplitBin, + ivas_split_rend_bits_t *pBits, + float Cldfb_In_BinReal[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float Cldfb_In_BinImag[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + const IVAS_REND_HeadRotData *pHeadRotData, + const int16_t max_bands, + float out[][L_FRAME48k] ) +{ + ivas_error error; + IVAS_QUATERNION QuaternionsPre[MAX_PARAM_SPATIAL_SUBFRAMES]; + IVAS_QUATERNION QuaternionsPost[MAX_PARAM_SPATIAL_SUBFRAMES]; + int16_t sf_idx; + + error = IVAS_ERR_OK; + + for ( sf_idx = 0; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ ) + { + QuaternionsPre[sf_idx] = ivas_split_rend_get_sf_rot_data( pHeadRotData->headPositions, sf_idx ); + QuaternionsPost[sf_idx] = ivas_split_rend_get_sf_rot_data( pHeadRotData->headPositionsPostRend, sf_idx ); + } + + ivas_renderMultiBinToSplitBinaural( hSplitBin, pBits, Cldfb_In_BinReal, Cldfb_In_BinImag, QuaternionsPre, QuaternionsPost, max_bands, out ); + + return error; +} + +static ivas_error renderSbaToSplitBinaural( + input_sba *sbaInput, + IVAS_REND_AudioBuffer outAudio ) +{ + float tmpCrendBuffer[MAX_OUTPUT_CHANNELS][L_FRAME48k]; + ivas_error error; + float Cldfb_RealBuffer[MAX_OUTPUT_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer[MAX_OUTPUT_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + float Cldfb_RealBuffer_Binaural[MAX_HEAD_ROT_POSES + 1][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer_Binaural[MAX_HEAD_ROT_POSES + 1][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; +#else + float Cldfb_RealBuffer_Binaural[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer_Binaural[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; +#endif + ivas_split_rend_bits_t bits; + + wmops_sub_start( "renderSbaToSplitBinaural" ); + error = IVAS_ERR_OK; + + copyBufferToCLDFBarray( sbaInput->base.inputBuffer, Cldfb_RealBuffer, Cldfb_ImagBuffer ); + + ivas_rend_CldfbMultiBinRendProcess( + sbaInput->cldfbRendWrapper.hCldfbRend, + sbaInput->base.ctx.pHeadRotData, + Cldfb_RealBuffer, + Cldfb_ImagBuffer, + Cldfb_RealBuffer_Binaural, + Cldfb_ImagBuffer_Binaural ); + + + /*SPLIT pre rendering MD and CLDFB coding*/ + ivas_split_rend_bitstream_init( &bits, + outAudio.config.numChannels * outAudio.config.numSamplesPerChannel * sizeof( float ), + (uint8_t *) outAudio.data ); + + renderMultiBinToSplitBinaural( &sbaInput->splitRendWrapper, + &bits, + Cldfb_RealBuffer_Binaural, + Cldfb_ImagBuffer_Binaural, + sbaInput->base.ctx.pHeadRotData, + sbaInput->cldfbRendWrapper.hCldfbRend->max_band, + tmpCrendBuffer ); + + // TEMP zero out + set_zero( outAudio.data, outAudio.config.numChannels * outAudio.config.numSamplesPerChannel ); + accumulate2dArrayToBuffer( tmpCrendBuffer, &outAudio ); + + wmops_sub_end(); + + return error; +} +#endif + static ivas_error renderSbaToBinaural( input_sba *sbaInput, const IVAS_REND_AudioConfig outConfig, @@ -4451,10 +4678,18 @@ static ivas_error renderInputSba( { ivas_error error; IVAS_REND_AudioBuffer inAudio; +#ifdef SPLIT_REND_WITH_HEAD_ROT + int16_t cldfb2tdSampleFact; +#endif inAudio = sbaInput->base.inputBuffer; +#ifdef SPLIT_REND_WITH_HEAD_ROT + cldfb2tdSampleFact = ( inAudio.config.is_cldfb ) ? 2 : 1; + if ( sbaInput->base.numNewSamplesPerChannel != outAudio.config.numSamplesPerChannel * cldfb2tdSampleFact ) +#else if ( sbaInput->base.numNewSamplesPerChannel != outAudio.config.numSamplesPerChannel ) +#endif { /* Mismatch between the number of input samples vs number of requested output samples - currently not allowed */ return IVAS_ERR_INVALID_BUFFER_SIZE; @@ -4479,7 +4714,17 @@ static ivas_error renderInputSba( switch ( outConfig ) { case IVAS_REND_AUDIO_CONFIG_BINAURAL: - error = renderSbaToBinaural( sbaInput, outConfig, outAudio ); +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( ( *sbaInput->base.ctx.pSplitRendMode ) != SPLIT_REND_DISABLED ) + { + /*TODO : combine this with renderSbaToBinaural*/ + error = renderSbaToSplitBinaural( sbaInput, outAudio ); + } + else +#endif + { + error = renderSbaToBinaural( sbaInput, outConfig, outAudio ); + } break; case IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM: error = renderSbaToBinauralRoom( sbaInput, outConfig, outAudio ); diff --git a/lib_rend/lib_rend.h b/lib_rend/lib_rend.h index ea4b84d897..498545a9c2 100644 --- a/lib_rend/lib_rend.h +++ b/lib_rend/lib_rend.h @@ -53,6 +53,9 @@ typedef struct { int16_t numSamplesPerChannel; int16_t numChannels; +#ifdef SPLIT_REND_WITH_HEAD_ROT + int16_t is_cldfb; +#endif } IVAS_REND_AudioBufferConfig; typedef struct @@ -61,6 +64,20 @@ typedef struct float *data; } IVAS_REND_AudioBuffer; +#ifdef SPLIT_REND_WITH_HEAD_ROT +typedef struct +{ + int32_t bufLenInBytes; + int32_t bitsWritten; + int32_t bitsRead; +} IVAS_REND_BitstreamBufferConfig; +typedef struct +{ + IVAS_REND_BitstreamBufferConfig config; + uint8_t *bits; +} IVAS_REND_BitstreamBuffer; +#endif + typedef struct { IVAS_REND_AudioBufferConfig config; @@ -150,6 +167,10 @@ ivas_error IVAS_REND_Open( IVAS_REND_HANDLE *phIvasRend, /* i/o: Pointer to renderer handle */ const int32_t outputSampleRate, /* i : output sampling rate */ const IVAS_REND_AudioConfig outConfig /* i : output audio config */ +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + IVAS_SPLIT_REND_MODE splitRendMode /* i : split rendering mode */ +#endif ); /* Note: this will reset custom LFE routings set for any MC input */ @@ -252,6 +273,10 @@ int16_t IVAS_REND_FeedRenderConfig( ivas_error IVAS_REND_SetHeadRotation( IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ const IVAS_QUATERNION headRot[RENDERER_HEAD_POSITIONS_PER_FRAME] /* i : head positions for next rendering call */ +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + const IVAS_SPLIT_REND_MODE splitRendMode +#endif ); ivas_error IVAS_REND_GetSamples( -- GitLab From 54394aba7ffb008a6ab7e79db57bed56cb42573f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Reinhold=20B=C3=B6hm?= Date: Thu, 22 Dec 2022 11:52:34 +0100 Subject: [PATCH 02/31] added CLDFB codec implementation --- Workspace_msvc/lib_rend.vcxproj | 15 +- Workspace_msvc/renderer.vcxproj | 6 +- lib_com/ivas_prot.h | 9 +- lib_dec/ivas_stat_dec.h | 20 + lib_rend/ivas_cldfb_trans_codec/Bitstream.c | 226 +++ lib_rend/ivas_cldfb_trans_codec/Bitstream.h | 62 + lib_rend/ivas_cldfb_trans_codec/CQMFDecoder.c | 912 +++++++++++ lib_rend/ivas_cldfb_trans_codec/CQMFDecoder.h | 32 + lib_rend/ivas_cldfb_trans_codec/CQMFEncoder.c | 1226 ++++++++++++++ lib_rend/ivas_cldfb_trans_codec/CQMFEncoder.h | 33 + lib_rend/ivas_cldfb_trans_codec/CQMFHuff.c | 1457 +++++++++++++++++ lib_rend/ivas_cldfb_trans_codec/CQMFHuff.h | 305 ++++ lib_rend/ivas_cldfb_trans_codec/NoiseGen.c | 47 + lib_rend/ivas_cldfb_trans_codec/NoiseGen.h | 35 + .../ivas_cldfb_trans_codec/PerceptualModel.c | 160 ++ .../ivas_cldfb_trans_codec/PerceptualModel.h | 18 + .../ivas_cldfb_trans_codec/RMSEnvDeltaHuff.c | 31 + .../ivas_cldfb_trans_codec/RMSEnvDeltaHuff.h | 25 + .../ivas_cldfb_trans_codec/RMSEnvGrouping.c | 378 +++++ .../ivas_cldfb_trans_codec/RMSEnvGrouping.h | 31 + lib_rend/ivas_cldfb_trans_codec/Tables.c | 116 ++ lib_rend/ivas_cldfb_trans_codec/Tables.h | 65 + lib_rend/ivas_splitRend_lcld_dec.c | 111 +- lib_rend/ivas_splitRend_lcld_enc.c | 127 +- lib_rend/ivas_splitRendererPre.c | 20 +- lib_rend/lib_rend.c | 10 +- 26 files changed, 5453 insertions(+), 24 deletions(-) create mode 100644 lib_rend/ivas_cldfb_trans_codec/Bitstream.c create mode 100644 lib_rend/ivas_cldfb_trans_codec/Bitstream.h create mode 100644 lib_rend/ivas_cldfb_trans_codec/CQMFDecoder.c create mode 100644 lib_rend/ivas_cldfb_trans_codec/CQMFDecoder.h create mode 100644 lib_rend/ivas_cldfb_trans_codec/CQMFEncoder.c create mode 100644 lib_rend/ivas_cldfb_trans_codec/CQMFEncoder.h create mode 100644 lib_rend/ivas_cldfb_trans_codec/CQMFHuff.c create mode 100644 lib_rend/ivas_cldfb_trans_codec/CQMFHuff.h create mode 100644 lib_rend/ivas_cldfb_trans_codec/NoiseGen.c create mode 100644 lib_rend/ivas_cldfb_trans_codec/NoiseGen.h create mode 100644 lib_rend/ivas_cldfb_trans_codec/PerceptualModel.c create mode 100644 lib_rend/ivas_cldfb_trans_codec/PerceptualModel.h create mode 100644 lib_rend/ivas_cldfb_trans_codec/RMSEnvDeltaHuff.c create mode 100644 lib_rend/ivas_cldfb_trans_codec/RMSEnvDeltaHuff.h create mode 100644 lib_rend/ivas_cldfb_trans_codec/RMSEnvGrouping.c create mode 100644 lib_rend/ivas_cldfb_trans_codec/RMSEnvGrouping.h create mode 100644 lib_rend/ivas_cldfb_trans_codec/Tables.c create mode 100644 lib_rend/ivas_cldfb_trans_codec/Tables.h diff --git a/Workspace_msvc/lib_rend.vcxproj b/Workspace_msvc/lib_rend.vcxproj index af88421f8b..0cef2758b9 100644 --- a/Workspace_msvc/lib_rend.vcxproj +++ b/Workspace_msvc/lib_rend.vcxproj @@ -89,7 +89,7 @@ Disabled - ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;%(AdditionalIncludeDirectories) + ivas_cldfb_trans_codec;..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;%(AdditionalIncludeDirectories) _CRT_SECURE_NO_WARNINGS;$(Macros);WIN32;%(PreprocessorDefinitions) EnableFastChecks @@ -126,7 +126,7 @@ Disabled - ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;..\lib_util;%(AdditionalIncludeDirectories) + ivas_cldfb_trans_codec;..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;..\lib_util;%(AdditionalIncludeDirectories) _CRT_SECURE_NO_WARNINGS;$(Macros);WIN32;%(PreprocessorDefinitions) @@ -169,7 +169,7 @@ Neither false false - ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;%(AdditionalIncludeDirectories) + ivas_cldfb_trans_codec;..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;%(AdditionalIncludeDirectories) _CRT_SECURE_NO_WARNINGS;$(Macros);WIN32;%(PreprocessorDefinitions) true @@ -197,6 +197,15 @@ + + + + + + + + + diff --git a/Workspace_msvc/renderer.vcxproj b/Workspace_msvc/renderer.vcxproj index 6ca03f67dd..250d5c6025 100644 --- a/Workspace_msvc/renderer.vcxproj +++ b/Workspace_msvc/renderer.vcxproj @@ -86,7 +86,7 @@ Disabled - ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;..\lib_util;..\lib_rend;%(AdditionalIncludeDirectories) + ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;..\lib_util;..\lib_rend;..\lib_rend\ivas_cldfb_trans_codec;%(AdditionalIncludeDirectories) _CRT_SECURE_NO_WARNINGS;WIN32;$(Macros);%(PreprocessorDefinitions) EnableFastChecks @@ -130,7 +130,7 @@ Disabled - ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;..\lib_util;..\lib_rend;%(AdditionalIncludeDirectories) + ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;..\lib_util;..\lib_rend;..\lib_rend\ivas_cldfb_trans_codec;%(AdditionalIncludeDirectories) _CRT_SECURE_NO_WARNINGS;WIN32;$(Macros);%(PreprocessorDefinitions) @@ -180,7 +180,7 @@ Neither false false - ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;..\lib_util;..\lib_rend;%(AdditionalIncludeDirectories) + ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;..\lib_util;..\lib_rend;..\lib_rend\ivas_cldfb_trans_codec;%(AdditionalIncludeDirectories) _CRT_SECURE_NO_WARNINGS;$(Macros);%(PreprocessorDefinitions) true diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index fea2bef693..62050015c6 100644 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -4680,7 +4680,10 @@ void ivas_split_renderer_close( SPLIT_REND_WRAPPER *hSplitBinRend); ivas_error ivas_splitBinLCLDEncOpen( - BIN_HR_SPLIT_LCLD_ENC_HANDLE *hSplitBinLCLDEnc ); + BIN_HR_SPLIT_LCLD_ENC_HANDLE *hSplitBinLCLDEnc, + int32_t iSampleRate, + int32_t iChannels, + int32_t iDataRate ); void ivas_splitBinLCLDEncClose( BIN_HR_SPLIT_LCLD_ENC_HANDLE *hSplitBinLCLDEnc ); @@ -4692,7 +4695,9 @@ void ivas_splitBinLCLDEncProcess( ivas_split_rend_bits_t *pBits ); ivas_error ivas_splitBinLCLDDecOpen( - BIN_HR_SPLIT_LCLD_DEC_HANDLE *hSplitBinLCLDDec ); + BIN_HR_SPLIT_LCLD_DEC_HANDLE *hSplitBinLCLDDec, + int32_t iSampleRate, + int32_t iChannels ); void ivas_splitBinLCLDDecClose( BIN_HR_SPLIT_LCLD_DEC_HANDLE *hSplitBinLCLDDec ); diff --git a/lib_dec/ivas_stat_dec.h b/lib_dec/ivas_stat_dec.h index 0b346d0036..65d2af32f9 100644 --- a/lib_dec/ivas_stat_dec.h +++ b/lib_dec/ivas_stat_dec.h @@ -42,6 +42,10 @@ #include "ivas_stat_rend.h" #include "common_api_types.h" // VE2AT: don't we want to avoid this include in the library? I admit that the rules hefre are not 100% clear to me but introducing it just for IVAS_QUATERNION is not necessry I think +#ifdef SPLIT_REND_WITH_HEAD_ROT +#include "ivas_cldfb_trans_codec/CQMFEncoder.h" +#include "ivas_cldfb_trans_codec/CQMFDecoder.h" +#endif /*----------------------------------------------------------------------------------* * Output configuration for renderer (e.g. DirAC, MASA, Binaural Renderer...) @@ -1344,11 +1348,27 @@ typedef struct ivas_binaural_head_rot_split_post_rendering_struct typedef struct ivas_binaural_head_rot_split_rendering_lcld_enc_struct { void *pLcld_enc; + int32_t iChannels; + CQMFEncoder *psCQMFEncoder; + float ***pppfCQMFReal; + float ***pppfCQMFImag; +#ifdef CLDFB_DEBUG + FILE *cldfbIn; + int numFrame; +#endif } BIN_HR_SPLIT_LCLD_ENC, *BIN_HR_SPLIT_LCLD_ENC_HANDLE; typedef struct ivas_binaural_head_rot_split_rendering_lcld_dec_struct { void *pLcld_dec; + int32_t iChannels; + CQMFDecoder *psCQMFDecoder; + float ***pppfDecCQMFReal; + float ***pppfDecCQMFImag; +#ifdef CLDFB_DEBUG + FILE *cldfbOut; + int numFrame; +#endif } BIN_HR_SPLIT_LCLD_DEC, *BIN_HR_SPLIT_LCLD_DEC_HANDLE; typedef struct diff --git a/lib_rend/ivas_cldfb_trans_codec/Bitstream.c b/lib_rend/ivas_cldfb_trans_codec/Bitstream.c new file mode 100644 index 0000000000..e542fcb15e --- /dev/null +++ b/lib_rend/ivas_cldfb_trans_codec/Bitstream.c @@ -0,0 +1,226 @@ +#include "Bitstream.h" + +#include +#include +#include "wmops.h" + +#define MAX_BUFFER 1024 + +static const unsigned int MASKS[] = +{ + 0x00000000, 0x00000001, 0x00000003, 0x00000007, 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, + 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, + 0x0000ffff, 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff, 0x001fffff, 0x003fffff, 0x007fffff, + 0x00ffffff, 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff, +}; + +Bitstream* CreateBitstream(const int iDirection, + const int iMaxBuffer) + +{ + + int n; + Bitstream *psBitstream; + + psBitstream = (Bitstream*)malloc(sizeof(Bitstream)); + + psBitstream->iDirection =iDirection; + psBitstream->iMaxBuffer = iMaxBuffer; + psBitstream->iIndex = 0; + psBitstream->iBufferEnd = 0; + psBitstream->iBufferStart = 0; + psBitstream->iError = BS_ERROR_NONE; + + if(psBitstream->iMaxBuffer == -1){ + psBitstream->iMaxBuffer = MAX_BUFFER; + } + + psBitstream->puchBuffer = (unsigned char*)malloc(sizeof(unsigned char) * psBitstream->iMaxBuffer); + + for(n = 0; n < psBitstream->iMaxBuffer; n ++){ + psBitstream->puchBuffer[n] = 0; + } + + return psBitstream; +} + +void DeleteBitstream(Bitstream *psBitstream) +{ + free(psBitstream->puchBuffer); + free(psBitstream); +} + +void BSFlushBuffer(Bitstream *psBitstream) +{ + memset(psBitstream->puchBuffer,0,psBitstream->iMaxBuffer); + psBitstream->iIndex = 0; + psBitstream->iBufferEnd = 0; + psBitstream->iBufferStart = 0; + psBitstream->iError = BS_ERROR_NONE; +} + +int BSPutBytes(Bitstream *psBitstream, + const unsigned char *puchBytes, + const int iByteCount) +{ + int n; + for(n = 0; n < iByteCount; n ++){ + psBitstream->puchBuffer[psBitstream->iBufferEnd] = puchBytes[n]; + psBitstream->iBufferEnd ++; + } + if(psBitstream->iDirection != BS_READ){ + psBitstream->iError = BS_ERROR_FAIL; + } + + return psBitstream->iError; +} + +int BSGetBytes(Bitstream *psBitstream, + unsigned char *puchBytes, + int iByteCount) +{ + int n; + for(n = 0; n < iByteCount; n++){ + puchBytes[n] = psBitstream->puchBuffer[psBitstream->iBufferStart]; + psBitstream->puchBuffer[psBitstream->iBufferStart] = 0; + psBitstream->iBufferStart ++; + } + if(psBitstream->iDirection != BS_WRITE){ + psBitstream->iError = BS_ERROR_FAIL; + } + + return psBitstream->iError; +} + +int BSByteAlign(Bitstream *psBitstream) +{ + if(psBitstream->iDirection == BS_WRITE){ + if(psBitstream->iIndex & 0x7){ + int iByte; + int iRem; + + iByte = psBitstream->iIndex >> 3; + iRem = 8 - (psBitstream->iIndex - (iByte<<3)); + psBitstream->puchBuffer[iByte] &= (0xff ^ MASKS[iRem]); + psBitstream->iIndex += iRem; + } + } + else{ + if(psBitstream->iIndex & 0x7){ + int iByte; + int iRem; + + iByte = psBitstream->iIndex >> 3; + iRem = 8 - (psBitstream->iIndex - (iByte<<3)); + psBitstream->iIndex += iRem; + } + } + + return psBitstream->iError; +} + +int BSPutBits(Bitstream *psBitstream, + int iValue, + int iBitCount) +{ + iValue &= MASKS[iBitCount]; + while(iBitCount){ + int iByte; + int iRem; + int iShift; + + iByte = psBitstream->iIndex >> 3; + iRem = 8 - (psBitstream->iIndex - (iByte<<3)); //8 - psBitstream->iIndex & 0x7; + + iShift = iBitCount-iRem; + if(iShift <= 0){ + iShift *= -1; + psBitstream->puchBuffer[iByte] += (unsigned char) (iValue<iIndex += iBitCount; + iBitCount = 0; + } + else{ + psBitstream->puchBuffer[iByte] += (unsigned char) (iValue>>iShift); + iValue &= MASKS[iShift]; + psBitstream->iIndex += iRem; + iBitCount -= iRem; + } + } + + if(psBitstream->iDirection != BS_WRITE){ + psBitstream->iError = BS_ERROR_FAIL; + } + + return psBitstream->iError; +} + +int BSGetBits(Bitstream *psBitstream, + int iBitCount) +{ + int iValue = 0; + + while(iBitCount){ + unsigned char uchByte; + int iByte; + int iRem; + int iShift; + + iByte = psBitstream->iIndex >> 3; + iRem = 8 - (psBitstream->iIndex - (iByte << 3)); //8 - psBitstream->iIndex & 0x7; + uchByte = psBitstream->puchBuffer[iByte]; + iShift = iBitCount - iRem; + + if(iShift <= 0){ + iShift *= -1; + iValue += (int)((uchByte >> iShift) & MASKS[iBitCount]); + psBitstream->iIndex += iBitCount; + iBitCount = 0; + } + else{ + uchByte &= MASKS[iRem]; + iValue += (((int)uchByte)<iIndex += iRem; + iBitCount -= iRem; + } + } + + if(psBitstream->iDirection != BS_READ){ + psBitstream->iError = BS_ERROR_FAIL; + } + + return iValue; +} + +int BSForceBack(Bitstream *psBitstream, + int iValue, + int iBitCount) +{ + psBitstream->iIndex -= iBitCount; + return (iValue>>iBitCount); +} + +int BSGetByteCount(Bitstream *psBitstream) +{ + int iBytes; + iBytes = psBitstream->iIndex>>3; + if((iBytes << 3) != psBitstream->iIndex){ + iBytes ++; + } + + return iBytes; +} + +unsigned char* BSGetBuffer(Bitstream *psBitstream) +{ + return psBitstream->puchBuffer; +} + +int BSGetAvailableBytes(Bitstream *psBitstream) +{ + return psBitstream->iBufferEnd; +} + +int BSGetError(Bitstream *psBitstream) +{ + return psBitstream->iError; +} diff --git a/lib_rend/ivas_cldfb_trans_codec/Bitstream.h b/lib_rend/ivas_cldfb_trans_codec/Bitstream.h new file mode 100644 index 0000000000..a3e936e59b --- /dev/null +++ b/lib_rend/ivas_cldfb_trans_codec/Bitstream.h @@ -0,0 +1,62 @@ +#ifndef _BITSTREAM_H_ +#define _BITSTREAM_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +enum{BS_READ,BS_WRITE}; +enum{BS_ERROR_NONE,BS_ERROR_FAIL}; + +typedef struct BITSTREAM{ + int iMaxBuffer; + int iDirection; + int iBufferEnd; + int iBufferStart; + int iIndex; + int iError; + unsigned char *puchBuffer; +}Bitstream; + + +Bitstream* CreateBitstream(const int iDirection, + const int iMaxBuffer); + +void DeleteBitstream(Bitstream *psBitstream); + +void BSFlushBuffer(Bitstream *psBitstream); + +int BSPutBytes(Bitstream *psBitstream, + const unsigned char *puchBytes, + const int iByteCount); + +int BSGetBytes(Bitstream *psBitstream, + unsigned char *puchBytes, + int iByteCount); + +int BSByteAlign(Bitstream *psBitstream); + +int BSPutBits(Bitstream *psBitstream, + int iValue, + int iBitCount); + +int BSGetBits(Bitstream *psBitstream, + int iBitCount); + +int BSForceBack(Bitstream *psBitstream, + int iValue, + int iBitCount); + +unsigned char* BSGetBuffer(Bitstream *psBitstream); + +int BSGetByteCount(Bitstream *psBitstream); + +int BSGetAvailableBytes(Bitstream *psBitstream); + +int BSGetError(Bitstream *psBitstream); + +#ifdef __cplusplus +} +#endif + +#endif /* _BITSTREAM_H_ */ diff --git a/lib_rend/ivas_cldfb_trans_codec/CQMFDecoder.c b/lib_rend/ivas_cldfb_trans_codec/CQMFDecoder.c new file mode 100644 index 0000000000..40d627e612 --- /dev/null +++ b/lib_rend/ivas_cldfb_trans_codec/CQMFDecoder.c @@ -0,0 +1,912 @@ +#include "CQMFDecoder.h" + +#include +#include +#include +#include +#include "Tables.h" +#include "wmops.h" +#include "PerceptualModel.h" +#include "RMSEnvDeltaHuff.h" +#include "CQMFHuff.h" +#include "NoiseGen.h" +#include "Bitstream.h" + +typedef struct CQMF_DECODER{ + int iSampleRate; + int iChannels; + int iNumBlocks; + + int iNumBands; + const int *piBandwidths; + + int iMSMode; + int *piMSFlags; + + int iCommonGrouping; + int *piNumGroups; + int **ppiGroupLengths; + + int ***pppiRMSEnvelope; + int ***pppiSMR; + int ***pppiExcitation; + int ***pppiAlloc; + + int iAllocOffset; + + int ***pppiCQMFSignReal; + int ***pppiCQMFSignImag; + int ***pppiQCQMFReal; + int ***pppiQCQMFImag; + + Bitstream *psBSRead; + + NoiseGen *psNoiseGen; + + int iLastError; +}CQMFDecoder; + +CQMFDecoder* CreateCQMFDecoder(const int iSampleRate, + const int iChannels) +{ + int n; + CQMFDecoder *psCQMFDecoder = NULL; + + assert(iSampleRate == 48000); //Fix + + psCQMFDecoder = (CQMFDecoder*)malloc(sizeof(CQMFDecoder)); + psCQMFDecoder->iSampleRate = iSampleRate; + psCQMFDecoder->iChannels = iChannels; + psCQMFDecoder->iNumBlocks = CQMF_BLOCKS_PER_FRAME; + psCQMFDecoder->iAllocOffset = 0; + + psCQMFDecoder->iNumBands = MAX_BANDS_48; //Fix + psCQMFDecoder->piBandwidths = c_aiBandwidths48; //Fix + + psCQMFDecoder->iMSMode = 0; + psCQMFDecoder->piMSFlags = (int*)malloc(MAX_BANDS * sizeof(int)); + + psCQMFDecoder->iCommonGrouping = 1; // Common grouping always on only impacts stereo + psCQMFDecoder->piNumGroups = (int*)malloc(psCQMFDecoder->iChannels * sizeof(int)); + psCQMFDecoder->ppiGroupLengths = (int**)malloc(psCQMFDecoder->iChannels * sizeof(int*)); + psCQMFDecoder->pppiRMSEnvelope = (int***)malloc(psCQMFDecoder->iChannels * sizeof(int**)); + psCQMFDecoder->pppiSMR = (int***)malloc(psCQMFDecoder->iChannels * sizeof(int**)); + psCQMFDecoder->pppiExcitation = (int***)malloc(psCQMFDecoder->iChannels * sizeof(int**)); + psCQMFDecoder->pppiAlloc = (int***)malloc(psCQMFDecoder->iChannels * sizeof(int**)); + + psCQMFDecoder->pppiCQMFSignReal = (int***)malloc(psCQMFDecoder->iChannels * sizeof(int**)); + psCQMFDecoder->pppiCQMFSignImag = (int***)malloc(psCQMFDecoder->iChannels * sizeof(int**)); + psCQMFDecoder->pppiQCQMFReal = (int***)malloc(psCQMFDecoder->iChannels * sizeof(int**)); + psCQMFDecoder->pppiQCQMFImag = (int***)malloc(psCQMFDecoder->iChannels * sizeof(int**)); + for(n = 0; n < iChannels ; n ++){ + int k; + psCQMFDecoder->ppiGroupLengths[n] = (int*)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int)); + psCQMFDecoder->pppiRMSEnvelope[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); + psCQMFDecoder->pppiSMR[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); + psCQMFDecoder->pppiExcitation[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); + psCQMFDecoder->pppiAlloc[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); + + psCQMFDecoder->pppiCQMFSignReal[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); + psCQMFDecoder->pppiCQMFSignImag[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); + psCQMFDecoder->pppiQCQMFReal[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); + psCQMFDecoder->pppiQCQMFImag[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); + for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ + psCQMFDecoder->pppiRMSEnvelope[n][k] = (int*)malloc(MAX_BANDS * sizeof(int)); + psCQMFDecoder->pppiSMR[n][k] = (int*)malloc(MAX_BANDS * sizeof(int)); + psCQMFDecoder->pppiExcitation[n][k] = (int*)malloc(MAX_BANDS * sizeof(int)); + psCQMFDecoder->pppiAlloc[n][k] = (int*)malloc(MAX_BANDS * sizeof(int)); + + psCQMFDecoder->pppiCQMFSignReal[n][k] = (int*)malloc(CQMF_BANDS * sizeof(int)); + psCQMFDecoder->pppiCQMFSignImag[n][k] = (int*)malloc(CQMF_BANDS * sizeof(int)); + psCQMFDecoder->pppiQCQMFReal[n][k] = (int*)malloc(CQMF_BANDS * sizeof(int)); + psCQMFDecoder->pppiQCQMFImag[n][k] = (int*)malloc(CQMF_BANDS * sizeof(int)); + } + } + + psCQMFDecoder->psBSRead = CreateBitstream(BS_READ,4096); + + psCQMFDecoder->psNoiseGen = NULL;//CreateNoiseGen(); // No noise fill for now + + psCQMFDecoder->iLastError = DECODER_ERROR_NONE; + + return psCQMFDecoder; +} + +void DeleteCQMFDecoder(CQMFDecoder *psCQMFDecoder) +{ + if(psCQMFDecoder != NULL){ + + if(psCQMFDecoder->piMSFlags != NULL){ + free(psCQMFDecoder->piMSFlags); + } + + if(psCQMFDecoder->piNumGroups != NULL){ + free(psCQMFDecoder->piNumGroups); + } + + if(psCQMFDecoder->ppiGroupLengths != NULL){ + int n; + for(n = 0; n < psCQMFDecoder->iChannels; n ++){ + free(psCQMFDecoder->ppiGroupLengths[n]); + } + free(psCQMFDecoder->ppiGroupLengths); + } + + if(psCQMFDecoder->pppiRMSEnvelope != NULL){ + int n; + for(n = 0; n < psCQMFDecoder->iChannels; n ++){ + int k; + for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ + free(psCQMFDecoder->pppiRMSEnvelope[n][k]); + } + free(psCQMFDecoder->pppiRMSEnvelope[n]); + } + free(psCQMFDecoder->pppiRMSEnvelope); + } + + if(psCQMFDecoder->pppiSMR != NULL){ + int n; + for(n = 0; n < psCQMFDecoder->iChannels; n ++){ + int k; + for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ + free(psCQMFDecoder->pppiSMR[n][k]); + } + free(psCQMFDecoder->pppiSMR[n]); + } + free(psCQMFDecoder->pppiSMR); + } + + if(psCQMFDecoder->pppiExcitation != NULL){ + int n; + for(n = 0; n < psCQMFDecoder->iChannels; n ++){ + int k; + for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ + free(psCQMFDecoder->pppiExcitation[n][k]); + } + free(psCQMFDecoder->pppiExcitation[n]); + } + free(psCQMFDecoder->pppiExcitation); + } + + if(psCQMFDecoder->pppiAlloc != NULL){ + int n; + for(n = 0; n < psCQMFDecoder->iChannels; n ++){ + int k; + for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ + free(psCQMFDecoder->pppiAlloc[n][k]); + } + free(psCQMFDecoder->pppiAlloc[n]); + } + free(psCQMFDecoder->pppiAlloc); + } + + if(psCQMFDecoder->pppiCQMFSignReal != NULL){ + int n; + for(n = 0; n < psCQMFDecoder->iChannels; n ++){ + int k; + for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ + free(psCQMFDecoder->pppiCQMFSignReal[n][k]); + } + free(psCQMFDecoder->pppiCQMFSignReal[n]); + } + free(psCQMFDecoder->pppiCQMFSignReal); + } + + if(psCQMFDecoder->pppiCQMFSignImag != NULL){ + int n; + for(n = 0; n < psCQMFDecoder->iChannels; n ++){ + int k; + for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ + free(psCQMFDecoder->pppiCQMFSignImag[n][k]); + } + free(psCQMFDecoder->pppiCQMFSignImag[n]); + } + free(psCQMFDecoder->pppiCQMFSignImag); + } + + if(psCQMFDecoder->pppiQCQMFReal != NULL){ + int n; + for(n = 0; n < psCQMFDecoder->iChannels; n ++){ + int k; + for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ + free(psCQMFDecoder->pppiQCQMFReal[n][k]); + } + free(psCQMFDecoder->pppiQCQMFReal[n]); + } + free(psCQMFDecoder->pppiQCQMFReal); + } + + if(psCQMFDecoder->pppiQCQMFImag != NULL){ + int n; + for(n = 0; n < psCQMFDecoder->iChannels; n ++){ + int k; + for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ + free(psCQMFDecoder->pppiQCQMFImag[n][k]); + } + free(psCQMFDecoder->pppiQCQMFImag[n]); + } + free(psCQMFDecoder->pppiQCQMFImag); + } + + if(psCQMFDecoder->psBSRead != NULL){ + DeleteBitstream(psCQMFDecoder->psBSRead); + } + + if(psCQMFDecoder->psNoiseGen != NULL){ + DeleteNoiseGen(psCQMFDecoder->psNoiseGen); + } + + free(psCQMFDecoder); + } +} + +int CQMFDecoderGetError(CQMFDecoder *psCQMFDecoder) +{ + return psCQMFDecoder->iLastError; +} + +static void ApplyRMSEnvelope(const int iNumBands, + const int *piBandwidths, + const int iNumGroups, + const int *piGroupLengths, + const int **ppiRMSEnvelope, + float **ppfReal, + float **ppfImag); + +static void ReplaceSign(const int iNumBlocks, + const int iNumCQMFBands, + const int **ppiSignReal, + const int **ppiSignImag, + float **ppfReal, + float **ppfImag); + +static void InvQuantizeSpectrum(const int iNumGroups, + const int *piGroupLengths, + const int iNumBands, + const int *piBandwidths, + const int **ppiAlloc, + const int **ppiQReal, + const int **ppiQImag, + float **ppfReal, + float **ppfImag, + NoiseGen *psNoiseGen); //Nullable + +static void InvMSCoding(const int iNumBlocks, + const int iNumBands, + const int *piBandwidths, + const int iMSMode, + const int *piMSFlags, + float ***pppfReal, + float ***pppfImag); + +/* Currently only the number of bands in frame */ +static int ReadHeaderInformation(int *piNumBands, + Bitstream *psBSRead); + +static int ReadMSInformation(const int iNumBands, + int *piMSMode, + int *piMSFlags, + Bitstream *psBSRead); + +static int ReadGroupInformation(const int iChannels, + int *piCommonGrouping, + int *piNumGroups, + int **ppiGroupLengths, + Bitstream *psBSRead); + +static int ReadHuff(const unsigned int (*pauiHuffDecTable)[HUFF_DEC_TABLE_SIZE], + int *piSymbol, + Bitstream *psBSRead); + +static int ReadRMSEnvelope(const int iChannels, + const int *piNumGroups, + const int iNumBands, + int ***pppiRMSEnvelope, + Bitstream *psBSRead); + +static int ReadAllocInformation(int *piAllocOffset, + Bitstream *psBSRead); + +static int ReadCQMFData( const int iNumGroups, + const int *piGroupLengths, + const int iNumBands, + const int *piBandwidths, + const int **ppiAlloc, + int **ppiSignReal, + int **ppiSignImag, + int **ppiQReal, + int **ppiQImag, + Bitstream *psBSRead); + +static void ComputeAllocation(const int iChannels, + const int *piNumGroups, + const int iNumBands, + const int ***pppiSMR, + const int iAllocOffset, + int ***pppiAlloc); + +int DecodeFrame(CQMFDecoder *psCQMFDecoder, + const int iNumBytes, + const unsigned char *puchData, + float ***pppfCQMFReal, + float ***pppfCQMFImag) +{ + int n; + int iBitsRead; + + iBitsRead = 0; + + BSFlushBuffer(psCQMFDecoder->psBSRead); + BSPutBytes(psCQMFDecoder->psBSRead,puchData,iNumBytes); + + iBitsRead += ReadHeaderInformation(&psCQMFDecoder->iNumBands, + psCQMFDecoder->psBSRead); + + if(psCQMFDecoder->iChannels == 2){ + iBitsRead += ReadMSInformation(psCQMFDecoder->iNumBands, + &psCQMFDecoder->iMSMode, + psCQMFDecoder->piMSFlags, + psCQMFDecoder->psBSRead); + } + + iBitsRead += ReadGroupInformation(psCQMFDecoder->iChannels, + &psCQMFDecoder->iCommonGrouping, + psCQMFDecoder->piNumGroups, + psCQMFDecoder->ppiGroupLengths, + psCQMFDecoder->psBSRead); + + iBitsRead += ReadRMSEnvelope(psCQMFDecoder->iChannels, + (const int*)psCQMFDecoder->piNumGroups, + psCQMFDecoder->iNumBands, + psCQMFDecoder->pppiRMSEnvelope, + psCQMFDecoder->psBSRead); + + iBitsRead += ReadAllocInformation(&psCQMFDecoder->iAllocOffset, + psCQMFDecoder->psBSRead); + + for(n = 0; n < psCQMFDecoder->iChannels; n ++){ // This will be updated to support multiple sample rates + int k; + for(k = 0; k < psCQMFDecoder->piNumGroups[n]; k ++){ + PerceptualModel(psCQMFDecoder->iNumBands, + psCQMFDecoder->pppiRMSEnvelope[n][k], + psCQMFDecoder->pppiExcitation[n][k], + psCQMFDecoder->pppiSMR[n][k]); + + } + } + + ComputeAllocation(psCQMFDecoder->iChannels, + (const int*)psCQMFDecoder->piNumGroups, + psCQMFDecoder->iNumBands, + (const int***)psCQMFDecoder->pppiSMR, + psCQMFDecoder->iAllocOffset, + psCQMFDecoder->pppiAlloc); + + for(n = 0; n < psCQMFDecoder->iChannels; n ++){ + iBitsRead += ReadCQMFData(psCQMFDecoder->piNumGroups[n], + (const int*)psCQMFDecoder->ppiGroupLengths[n], + psCQMFDecoder->iNumBands, + psCQMFDecoder->piBandwidths, + (const int**)psCQMFDecoder->pppiAlloc[n], + psCQMFDecoder->pppiCQMFSignReal[n], + psCQMFDecoder->pppiCQMFSignImag[n], + psCQMFDecoder->pppiQCQMFReal[n], + psCQMFDecoder->pppiQCQMFImag[n], + psCQMFDecoder->psBSRead); + } + + for(n = 0; n < psCQMFDecoder->iChannels; n ++){ + InvQuantizeSpectrum(psCQMFDecoder->piNumGroups[n], + (const int*)psCQMFDecoder->ppiGroupLengths[n], + psCQMFDecoder->iNumBands, + psCQMFDecoder->piBandwidths, + (const int**)psCQMFDecoder->pppiAlloc[n], + (const int**)psCQMFDecoder->pppiQCQMFReal[n], + (const int**)psCQMFDecoder->pppiQCQMFImag[n], + pppfCQMFReal[n], + pppfCQMFImag[n], + psCQMFDecoder->psNoiseGen); + + ReplaceSign(psCQMFDecoder->iNumBlocks, + CQMF_BANDS, + (const int**)psCQMFDecoder->pppiCQMFSignReal[n], + (const int**)psCQMFDecoder->pppiCQMFSignImag[n], + pppfCQMFReal[n], + pppfCQMFImag[n]); + + + ApplyRMSEnvelope(psCQMFDecoder->iNumBands, + psCQMFDecoder->piBandwidths, + psCQMFDecoder->piNumGroups[n], + (const int*)psCQMFDecoder->ppiGroupLengths[n], + (const int **)psCQMFDecoder->pppiRMSEnvelope[n], + pppfCQMFReal[n], + pppfCQMFImag[n]); + } + + if(psCQMFDecoder->iChannels == 2 && psCQMFDecoder->iMSMode > 0){ + InvMSCoding(psCQMFDecoder->iNumBlocks, + psCQMFDecoder->iNumBands, + psCQMFDecoder->piBandwidths, + psCQMFDecoder->iMSMode, + (const int*)psCQMFDecoder->piMSFlags, + pppfCQMFReal, + pppfCQMFImag); + } + + //printf("Bits Read %d\n",iBitsRead); + + return psCQMFDecoder->iLastError; +} + +static void ApplyRMSEnvelope(const int iNumBands, + const int *piBandwidths, + const int iNumGroups, + const int *piGroupLengths, + const int **ppiRMSEnvelope, + float **ppfReal, + float **ppfImag) +{ + int n; + int iBlockOffset; + + iBlockOffset = 0; + for(n = 0; n < iNumGroups; n ++){ + int k; + + for(k = 0; k < piGroupLengths[n]; k ++){ + int b; + int iFBOffset; + iFBOffset = 0; + for(b = 0; b < iNumBands; b ++){ + int m; + int iRMSEnv; + float fGain; + + iRMSEnv = ppiRMSEnvelope[n][b]; + fGain = c_afRMSEnvReconstructTable[ENV_RECONSTRUCT_TABLE_CENTER + iRMSEnv]; + for(m = 0; m < piBandwidths[b]; m ++){ + ppfReal[iBlockOffset][iFBOffset] *= fGain; + ppfImag[iBlockOffset][iFBOffset] *= fGain; + iFBOffset ++; + } + } + iBlockOffset ++; + } + } +} + +static void ReplaceSign(const int iNumBlocks, + const int iNumCQMFBands, + const int **ppiSignReal, + const int **ppiSignImag, + float **ppfReal, + float **ppfImag) +{ + int n; + for(n = 0; n < iNumBlocks; n ++){ + int b; + for(b = 0; b < iNumCQMFBands; b ++){ + if(ppiSignReal[n][b] == 1){ + ppfReal[n][b] = -ppfReal[n][b]; + } + if(ppiSignImag[n][b] == 1){ + ppfImag[n][b] = -ppfImag[n][b]; + } + } + } +} + +static void InvQuantizeSpectrum(const int iNumGroups, + const int *piGroupLengths, + const int iNumBands, + const int *piBandwidths, + const int **ppiAlloc, + const int **ppiQReal, + const int **ppiQImag, + float **ppfReal, + float **ppfImag, + NoiseGen *psNoiseGen) // Pass in NULL to swicth off noise gen +{ + int n; + int iBlockOffest; + + iBlockOffest = 0; + for(n = 0; n < iNumGroups; n ++){ + int k; + for(k = 0; k < piGroupLengths[n]; k ++){ + int b; + int iFBOffset; + + iFBOffset = 0; + for(b = 0; b < iNumBands; b ++){ + int m; + int iAlloc; + float fInvSCFGain; + + iAlloc = ppiAlloc[n][b]; + fInvSCFGain = c_afInvScaleFactor[iAlloc]; + + if(iAlloc > 0){ + for(m = 0; m < piBandwidths[b]; m ++){ + int iQuantValue; + + iQuantValue = ppiQReal[iBlockOffest][iFBOffset]; + ppfReal[iBlockOffest][iFBOffset] = (float)iQuantValue * fInvSCFGain; + + iQuantValue = ppiQImag[iBlockOffest][iFBOffset]; + ppfImag[iBlockOffest][iFBOffset] = (float)iQuantValue * fInvSCFGain; + + iFBOffset ++; + } + } + else if(psNoiseGen != NULL){ + for(m = 0; m < piBandwidths[b]; m ++){ + ppfReal[iBlockOffest][iFBOffset] = 0.7f * GetNoise(psNoiseGen); + ppfImag[iBlockOffest][iFBOffset] = 0.7f * GetNoise(psNoiseGen); + + iFBOffset ++; + } + } + else{ + iFBOffset += piBandwidths[b]; + } + + } + + iBlockOffest ++; + } + } +} + +static void InvMSCoding(const int iNumBlocks, + const int iNumBands, + const int *piBandwidths, + const int iMSMode, + const int *piMSFlags, + float ***pppfReal, + float ***pppfImag) +{ + if(iMSMode > 0){ + int b; + int iFBOffset; + + iFBOffset = 0; + for(b = 0; b < iNumBands; b ++){ + if(piMSFlags[b] == 1){ + int n; + for(n = 0; n < piBandwidths[b]; n ++){ + int k; + for(k = 0; k < iNumBlocks; k ++){ + float fLeftReal; + float fLeftImag; + float fRightReal; + float fRightImag; + + fLeftReal = (pppfReal[0][k][iFBOffset] + pppfReal[1][k][iFBOffset]); + fLeftImag = (pppfImag[0][k][iFBOffset] + pppfImag[1][k][iFBOffset]); + fRightReal = (pppfReal[0][k][iFBOffset] - pppfReal[1][k][iFBOffset]); + fRightImag = (pppfImag[0][k][iFBOffset] - pppfImag[1][k][iFBOffset]); + + pppfReal[0][k][iFBOffset] = fLeftReal; + pppfReal[1][k][iFBOffset] = fRightReal; + pppfImag[0][k][iFBOffset] = fLeftImag; + pppfImag[1][k][iFBOffset] = fRightImag; + } + iFBOffset ++; + } + } + else{ + iFBOffset += piBandwidths[b]; + } + } + } +} + +/* Currently only the number of bands in frame */ +static int ReadHeaderInformation(int *piNumBands, + Bitstream *psBSRead) +{ + int iBitsRead; + + iBitsRead = 0; + *piNumBands = BSGetBits(psBSRead, 5); + iBitsRead += 5; + + return iBitsRead; +} + +static int ReadMSInformation(const int iNumBands, + int *piMSMode, + int *piMSFlags, + Bitstream *psBSRead) +{ + int iBitsRead; + + iBitsRead = 0; + *piMSMode = BSGetBits(psBSRead,2); + iBitsRead += 2; + + if(*piMSMode == 0){ + int n; + for(n = 0; n > 16); + } + + if(iVal){ + BSForceBack(psBSRead,iIndex,iVal); + iBitsRead -= iVal; + } + + *piSymbol = iSymbol; + + return iBitsRead; +} + +static int ReadRMSEnvelope(const int iChannels, + const int *piNumGroups, + const int iNumBands, + int ***pppiRMSEnvelope, + Bitstream *psBSRead) +{ + int n; + int iBitsRead; + + iBitsRead = 0; + for(n = 0; n < iChannels; n ++){ + int k; + for(k = 0; k < piNumGroups[n]; k ++){ + int b; + int iLastRMSVal; + + iLastRMSVal = BSGetBits(psBSRead,ENV0_BITS); + iBitsRead += ENV0_BITS; + + iLastRMSVal += ENV_MIN; + pppiRMSEnvelope[n][k][0] = iLastRMSVal; + for(b = 1; b < iNumBands; b ++){ + int iDelta; + + iBitsRead += ReadHuff(c_aaiRMSEnvHuffDec,&iDelta,psBSRead); + + iDelta += ENV_DELTA_MIN; + iLastRMSVal += iDelta; + pppiRMSEnvelope[n][k][b] = iLastRMSVal; + } + } + } + + return iBitsRead; +} + +static int ReadAllocInformation(int *piAllocOffset, + Bitstream *psBSRead) +{ + int iBitsRead; + + iBitsRead = 0; + + *piAllocOffset = BSGetBits(psBSRead,ALLOC_OFFSET_BITS); + *piAllocOffset += MIN_ALLOC_OFFSET; + iBitsRead += ALLOC_OFFSET_BITS; + + return iBitsRead; +} + +static int ReadCQMFData(const int iNumGroups, + const int *piGroupLengths, + const int iNumBands, + const int *piBandwidths, + const int **ppiAlloc, + int **ppiSignReal, + int **ppiSignImag, + int **ppiQReal, + int **ppiQImag, + Bitstream *psBSRead) +{ + int n; + int iBitsRead; + int iBlockOffest; + + iBitsRead = 0; + iBlockOffest = 0; + for(n = 0; n < iNumGroups; n ++){ + int k; + for(k = 0; k < piGroupLengths[n]; k ++){ + int b; + int iFBOffset; + + iFBOffset = 0; + for(b = 0; b < iNumBands; b ++){ + int m; + int iAlloc; + int iHuffDim; + int iHuffMod; + + iAlloc = ppiAlloc[n][b]; + + iHuffDim = c_aiHuffmanDim[iAlloc]; + iHuffMod = c_aiHuffmanMod[iAlloc]; + + + if(iAlloc > 0){ + const unsigned int (*pauiHuffmanTable)[HUFF_DEC_TABLE_SIZE] = NULL; //const? + + pauiHuffmanTable = GetHuffDecTable(iAlloc); + for(m = 0; m < piBandwidths[b]; m ++){ + int iQuantValue1 = 0; + int iQuantValue2 = 0; + + if(iHuffDim == 2){ + int iSymbol; + + iBitsRead += ReadHuff(pauiHuffmanTable,&iSymbol,psBSRead); + iQuantValue1 = iSymbol / iHuffMod; + iQuantValue2 = iSymbol % iHuffMod; + } + else{ + iBitsRead += ReadHuff(pauiHuffmanTable,&iQuantValue1,psBSRead); + iBitsRead += ReadHuff(pauiHuffmanTable,&iQuantValue2,psBSRead); + } + + ppiQReal[iBlockOffest][iFBOffset] = iQuantValue1; + ppiQImag[iBlockOffest][iFBOffset] = iQuantValue2; + + if(iQuantValue1 > 0){ + ppiSignReal[iBlockOffest][iFBOffset] = BSGetBits(psBSRead,1); + iBitsRead += 1; + } + if(iQuantValue2 > 0){ + ppiSignImag[iBlockOffest][iFBOffset] = BSGetBits(psBSRead,1); + iBitsRead += 1; + } + + iFBOffset ++; + } + } + else{ + iFBOffset += piBandwidths[b]; + } + + } + + iBlockOffest ++; + } + } + + return iBitsRead; +} + +static void ComputeAllocation(const int iChannels, + const int *piNumGroups, + const int iNumBands, + const int ***pppiSMR, + const int iAllocOffset, + int ***pppiAlloc) +{ + int n; + + for(n = 0; n < iChannels; n ++){ + int k; + for(k = 0; k < piNumGroups[n]; k ++){ + int b; + for(b = 0; b < iNumBands; b ++){ + int iAlloc; + iAlloc = ((pppiSMR[n][k][b] + iAllocOffset * ALLOC_OFFSET_SCALE) >> 5); + iAlloc = (iAlloc > MIN_ALLOC) ? iAlloc : MIN_ALLOC; + iAlloc = (iAlloc < MAX_ALLOC) ? iAlloc : MAX_ALLOC; + pppiAlloc[n][k][b] = iAlloc; + } + } + } +} diff --git a/lib_rend/ivas_cldfb_trans_codec/CQMFDecoder.h b/lib_rend/ivas_cldfb_trans_codec/CQMFDecoder.h new file mode 100644 index 0000000000..e865343cd9 --- /dev/null +++ b/lib_rend/ivas_cldfb_trans_codec/CQMFDecoder.h @@ -0,0 +1,32 @@ +#ifndef _CQMF_DECODER_H_ +#define _CQMF_DECODER_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#define DECODER_ERROR_NONE (0) +#define DECODER_ERROR_FS_NOT_SUPPORTED (-1) +#define DECODER_ERROR_CHAN_NOT_SUPPORTED (-2) +#define DECODER_ERROR_UNKNOWN (-100) + +typedef struct CQMF_DECODER CQMFDecoder; + +CQMFDecoder* CreateCQMFDecoder(const int iSampleRate, + const int iChannels); + +void DeleteCQMFDecoder(CQMFDecoder *psCQMFDecoder); + +int CQMFDecoderGetError(CQMFDecoder *psCQMFDecoder); + +int DecodeFrame(CQMFDecoder *psCQMFDecoder, + const int iNumBytes, + const unsigned char *puchData, + float ***pppfCQMFReal, + float ***pppfCQMFImag); + +#ifdef __cplusplus +} +#endif + +#endif /* _CQMF_DECODER_H_ */ diff --git a/lib_rend/ivas_cldfb_trans_codec/CQMFEncoder.c b/lib_rend/ivas_cldfb_trans_codec/CQMFEncoder.c new file mode 100644 index 0000000000..a7db7969e9 --- /dev/null +++ b/lib_rend/ivas_cldfb_trans_codec/CQMFEncoder.c @@ -0,0 +1,1226 @@ +#include "CQMFEncoder.h" + +#include +#include +#include +#include +#include "Tables.h" +#include "wmops.h" +#include "RMSEnvGrouping.h" +#include "PerceptualModel.h" +#include "RMSEnvDeltaHuff.h" +#include "CQMFHuff.h" +#include "Bitstream.h" + +typedef struct CQMF_ENCODER{ + int iSampleRate; + int iChannels; + int iNumBlocks; + + int iTargetBitRate; + int iTargetBitsPerFrame; + + int iNumBands; + const int *piBandwidths; + + int iMSMode; + int *piMSFlags; + + RMSEnvelopeGrouping *psRMSEnvelopeGrouping; + + int iCommonGrouping; + int *piNumGroups; + int **ppiGroupLengths; + + int ***pppiRMSEnvelope; + int ***pppiSMR; + int ***pppiExcitation; + int ***pppiAlloc; + + int iAllocOffset; + + int ***pppiCQMFSignReal; + int ***pppiCQMFSignImag; + int ***pppiQCQMFReal; + int ***pppiQCQMFImag; + + Bitstream *psBSWrite; + + int iLastError; +}CQMFEncoder; + +CQMFEncoder* CreateCQMFEncoder(const int iSampleRate, + const int iChannels, + const int iTargetBitRate) +{ + int n; + CQMFEncoder *psCQMFEncoder = NULL; + + assert(iSampleRate == 48000); //Fix + + psCQMFEncoder = (CQMFEncoder*)malloc(sizeof(CQMFEncoder)); + psCQMFEncoder->iSampleRate = iSampleRate; + psCQMFEncoder->iChannels = iChannels; + psCQMFEncoder->iNumBlocks = CQMF_BLOCKS_PER_FRAME; + psCQMFEncoder->iAllocOffset = 0; + + psCQMFEncoder->iTargetBitRate = iTargetBitRate; + psCQMFEncoder->iTargetBitsPerFrame = iTargetBitRate * CQMF_BLOCKS_PER_FRAME * CQMF_BANDS / iSampleRate; + + psCQMFEncoder->iNumBands = MAX_BANDS_48 - 1; //Fix + psCQMFEncoder->piBandwidths = c_aiBandwidths48; //Fix + + psCQMFEncoder->iMSMode = 0; + psCQMFEncoder->piMSFlags = (int*)malloc(MAX_BANDS * sizeof(int)); + + psCQMFEncoder->psRMSEnvelopeGrouping = CreateRMSEnvelopeGrouping(psCQMFEncoder->iNumBlocks); + + psCQMFEncoder->iCommonGrouping = 1; // Common grouping always on only impacts stereo + psCQMFEncoder->piNumGroups = (int*)malloc(psCQMFEncoder->iChannels * sizeof(int)); + psCQMFEncoder->ppiGroupLengths = (int**)malloc(psCQMFEncoder->iChannels * sizeof(int*)); + psCQMFEncoder->pppiRMSEnvelope = (int***)malloc(psCQMFEncoder->iChannels * sizeof(int**)); + psCQMFEncoder->pppiSMR = (int***)malloc(psCQMFEncoder->iChannels * sizeof(int**)); + psCQMFEncoder->pppiExcitation = (int***)malloc(psCQMFEncoder->iChannels * sizeof(int**)); + psCQMFEncoder->pppiAlloc = (int***)malloc(psCQMFEncoder->iChannels * sizeof(int**)); + + psCQMFEncoder->pppiCQMFSignReal = (int***)malloc(psCQMFEncoder->iChannels * sizeof(int**)); + psCQMFEncoder->pppiCQMFSignImag = (int***)malloc(psCQMFEncoder->iChannels * sizeof(int**)); + psCQMFEncoder->pppiQCQMFReal = (int***)malloc(psCQMFEncoder->iChannels * sizeof(int**)); + psCQMFEncoder->pppiQCQMFImag = (int***)malloc(psCQMFEncoder->iChannels * sizeof(int**)); + for(n = 0; n < iChannels ; n ++){ + int k; + psCQMFEncoder->ppiGroupLengths[n] = (int*)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int)); + psCQMFEncoder->pppiRMSEnvelope[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); + psCQMFEncoder->pppiSMR[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); + psCQMFEncoder->pppiExcitation[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); + psCQMFEncoder->pppiAlloc[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); + + psCQMFEncoder->pppiCQMFSignReal[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); + psCQMFEncoder->pppiCQMFSignImag[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); + psCQMFEncoder->pppiQCQMFReal[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); + psCQMFEncoder->pppiQCQMFImag[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); + for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ + psCQMFEncoder->pppiRMSEnvelope[n][k] = (int*)malloc(MAX_BANDS * sizeof(int)); + psCQMFEncoder->pppiSMR[n][k] = (int*)malloc(MAX_BANDS * sizeof(int)); + psCQMFEncoder->pppiExcitation[n][k] = (int*)malloc(MAX_BANDS * sizeof(int)); + psCQMFEncoder->pppiAlloc[n][k] = (int*)malloc(MAX_BANDS * sizeof(int)); + + psCQMFEncoder->pppiCQMFSignReal[n][k] = (int*)malloc(CQMF_BANDS * sizeof(int)); + psCQMFEncoder->pppiCQMFSignImag[n][k] = (int*)malloc(CQMF_BANDS * sizeof(int)); + psCQMFEncoder->pppiQCQMFReal[n][k] = (int*)malloc(CQMF_BANDS * sizeof(int)); + psCQMFEncoder->pppiQCQMFImag[n][k] = (int*)malloc(CQMF_BANDS * sizeof(int)); + } + } + + psCQMFEncoder->psBSWrite = CreateBitstream(BS_WRITE,4096); + + psCQMFEncoder->iLastError = ENCODER_ERROR_NONE; + + return psCQMFEncoder; +} + +void DeleteCQMFEncoder(CQMFEncoder *psCQMFEncoder) +{ + if(psCQMFEncoder != NULL){ + + if(psCQMFEncoder->piMSFlags != NULL){ + free(psCQMFEncoder->piMSFlags); + } + + if(psCQMFEncoder->piNumGroups != NULL){ + free(psCQMFEncoder->piNumGroups); + } + + if(psCQMFEncoder->psRMSEnvelopeGrouping != NULL){ + DeleteRMSEnvelopeGrouping(psCQMFEncoder->psRMSEnvelopeGrouping); + } + + if(psCQMFEncoder->ppiGroupLengths != NULL){ + int n; + for(n = 0; n < psCQMFEncoder->iChannels; n ++){ + free(psCQMFEncoder->ppiGroupLengths[n]); + } + free(psCQMFEncoder->ppiGroupLengths); + } + + if(psCQMFEncoder->pppiRMSEnvelope != NULL){ + int n; + for(n = 0; n < psCQMFEncoder->iChannels; n ++){ + int k; + for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ + free(psCQMFEncoder->pppiRMSEnvelope[n][k]); + } + free(psCQMFEncoder->pppiRMSEnvelope[n]); + } + free(psCQMFEncoder->pppiRMSEnvelope); + } + + if(psCQMFEncoder->pppiSMR != NULL){ + int n; + for(n = 0; n < psCQMFEncoder->iChannels; n ++){ + int k; + for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ + free(psCQMFEncoder->pppiSMR[n][k]); + } + free(psCQMFEncoder->pppiSMR[n]); + } + free(psCQMFEncoder->pppiSMR); + } + + if(psCQMFEncoder->pppiExcitation != NULL){ + int n; + for(n = 0; n < psCQMFEncoder->iChannels; n ++){ + int k; + for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ + free(psCQMFEncoder->pppiExcitation[n][k]); + } + free(psCQMFEncoder->pppiExcitation[n]); + } + free(psCQMFEncoder->pppiExcitation); + } + + if(psCQMFEncoder->pppiAlloc != NULL){ + int n; + for(n = 0; n < psCQMFEncoder->iChannels; n ++){ + int k; + for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ + free(psCQMFEncoder->pppiAlloc[n][k]); + } + free(psCQMFEncoder->pppiAlloc[n]); + } + free(psCQMFEncoder->pppiAlloc); + } + + if(psCQMFEncoder->pppiCQMFSignReal != NULL){ + int n; + for(n = 0; n < psCQMFEncoder->iChannels; n ++){ + int k; + for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ + free(psCQMFEncoder->pppiCQMFSignReal[n][k]); + } + free(psCQMFEncoder->pppiCQMFSignReal[n]); + } + free(psCQMFEncoder->pppiCQMFSignReal); + } + + if(psCQMFEncoder->pppiCQMFSignImag != NULL){ + int n; + for(n = 0; n < psCQMFEncoder->iChannels; n ++){ + int k; + for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ + free(psCQMFEncoder->pppiCQMFSignImag[n][k]); + } + free(psCQMFEncoder->pppiCQMFSignImag[n]); + } + free(psCQMFEncoder->pppiCQMFSignImag); + } + + if(psCQMFEncoder->pppiQCQMFReal != NULL){ + int n; + for(n = 0; n < psCQMFEncoder->iChannels; n ++){ + int k; + for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ + free(psCQMFEncoder->pppiQCQMFReal[n][k]); + } + free(psCQMFEncoder->pppiQCQMFReal[n]); + } + free(psCQMFEncoder->pppiQCQMFReal); + } + + if(psCQMFEncoder->pppiQCQMFImag != NULL){ + int n; + for(n = 0; n < psCQMFEncoder->iChannels; n ++){ + int k; + for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ + free(psCQMFEncoder->pppiQCQMFImag[n][k]); + } + free(psCQMFEncoder->pppiQCQMFImag[n]); + } + free(psCQMFEncoder->pppiQCQMFImag); + } + + DeleteBitstream(psCQMFEncoder->psBSWrite); + + free(psCQMFEncoder); + } +} + +int CQMFEncoderGetError(CQMFEncoder *psCQMFEncoder) +{ + return psCQMFEncoder->iLastError; +} + +static void MSModeCalculation(const int iNumBlocks, + const int iNumBands, + const int *piBandwidths, + float ***pppfReal, + float ***pppfImag, + int *piMSMode, + int *piMSFlags); + +static void RemoveRMSEnvelope(const int iNumBands, + const int *piBandwidths, + const int iNumGroups, + const int *piGroupLengths, + const int **ppiRMSEnvelope, + float **ppfReal, + float **ppfImag); + +static void RemoveSign(const int iNumBlocks, + const int iNumCQMFBands, + float **ppfReal, + float **ppfImag, + int **ppiSignReal, + int **ppiSignImag); + +static int CountCQMFBits(const int iNumGroups, + const int *piGroupLengths, + const int iNumBands, + const int *piBandwidths, + const int **ppiAlloc, + const int **ppiQReal, + const int **ppiQImag); + +/* Currently only the number of bands in frame */ +static int WriteHeaderInformation(const int iNumBands, + Bitstream *psBSWrite); + +static int WriteMSInformation(const int iNumBands, + const int iMSMode, + const int *piMSFlags, + Bitstream *psBSWrite); + +static int WriteGroupInformation(const int iChannels, + const int iCommonGrouping, + const int *piNumGroups, + const int **ppiGroupLengths, + Bitstream *psBSWrite); + +static int WriteRMSEnvelope(const int iChannels, + const int *piNumGroups, + const int iNumBands, + const int ***pppiRMSEnvelope, + Bitstream *psBSWrite); + +static int WriteAllocInformation(const int iAllocOffset, + Bitstream *psBSWrite); + +static int WriteCQMFData(const int iNumGroups, + const int *piGroupLengths, + const int iNumBands, + const int *piBandwidths, + const int **ppiAlloc, + const int **ppiSignReal, + const int **ppiSignImag, + const int **ppiQReal, + const int **ppiQImag, + Bitstream *psBSWrite); + +static int ComputeAllocation(const int iChannels, + const int *piNumGroups, + const int **ppiGroupLengths, + const int iNumBands, + const int *piBandwidths, + const float ***pppfReal, + const float ***pppfImag, + const int ***pppiSMR, + const int iAvailableBits, + int *piAllocOffset, + int ***pppiAlloc, + int ***pppiQReal, + int ***pppiQImag); + +static int ComputeAllocationByPass(const int iChannels, + const int *piNumGroups, + const int **ppiGroupLengths, + const int iNumBands, + const int *piBandwidths, + const float ***pppfReal, + const float ***pppfImag, + const int ***pppiSMR, + const int iAllocOffset, + int ***pppiAlloc, + int ***pppiQReal, + int ***pppiQImag); + + + +int EncodeFrame(CQMFEncoder *psCQMFEncoder, + float ***pppfCQMFReal, + float ***pppfCQMFImag, + int *piNumiBytes, + unsigned char *puchData) +{ + int n; + int iAvailableBits; + int iBitsWritten; + int iCQMFBits; + + iAvailableBits = psCQMFEncoder->iTargetBitsPerFrame; // HCBR for now + iBitsWritten = 0; + + + /* Do MS calc here */ + if(psCQMFEncoder->iChannels == 2){ + MSModeCalculation(psCQMFEncoder->iNumBlocks, + psCQMFEncoder->iNumBands, + psCQMFEncoder->piBandwidths, + pppfCQMFReal, + pppfCQMFImag, + &psCQMFEncoder->iMSMode, + psCQMFEncoder->piMSFlags); + + if(psCQMFEncoder->iMSMode > 0){ + psCQMFEncoder->iCommonGrouping = 1; // Make sure common grouping is enabled when MS is in use + } + } + + + /* Compute Grouping and RMS Envelopes */ + if(psCQMFEncoder->iChannels == 2 && psCQMFEncoder->iCommonGrouping == 1){ + ComputeEnvelopeGrouping(psCQMFEncoder->psRMSEnvelopeGrouping, + psCQMFEncoder->iChannels, + psCQMFEncoder->iNumBands, + psCQMFEncoder->piBandwidths, + (const float***)pppfCQMFReal, + (const float***)pppfCQMFImag, + 8.0, + 20.0, // Use these to trade off RMS Env bits and quantizer loading + &psCQMFEncoder->piNumGroups[0], + psCQMFEncoder->ppiGroupLengths[0], + psCQMFEncoder->pppiRMSEnvelope); + + psCQMFEncoder->piNumGroups[1] = psCQMFEncoder->piNumGroups[0]; + for(n = 0; n < psCQMFEncoder->piNumGroups[0]; n ++){ + psCQMFEncoder->ppiGroupLengths[1][n] = psCQMFEncoder->ppiGroupLengths[0][n]; + } + } + else{ + for(n = 0; n < psCQMFEncoder->iChannels; n ++){ + ComputeEnvelopeGrouping(psCQMFEncoder->psRMSEnvelopeGrouping, + psCQMFEncoder->iChannels, + psCQMFEncoder->iNumBands, + psCQMFEncoder->piBandwidths, + (const float***)&pppfCQMFReal[n], + (const float***)&pppfCQMFImag[n], + 8.0, + 20.0, // Use these to trade off RMS Env bits and quantizer loading + &psCQMFEncoder->piNumGroups[n], + psCQMFEncoder->ppiGroupLengths[n], + &psCQMFEncoder->pppiRMSEnvelope[n]); + } + } + + for(n = 0; n < psCQMFEncoder->iChannels; n ++){ + RemoveSign(psCQMFEncoder->iNumBlocks, + CQMF_BANDS, + pppfCQMFReal[n], + pppfCQMFImag[n], + psCQMFEncoder->pppiCQMFSignReal[n], + psCQMFEncoder->pppiCQMFSignImag[n]); + + RemoveRMSEnvelope(psCQMFEncoder->iNumBands, + psCQMFEncoder->piBandwidths, + psCQMFEncoder->piNumGroups[n], + (const int*)psCQMFEncoder->ppiGroupLengths[n], + (const int **)psCQMFEncoder->pppiRMSEnvelope[n], + pppfCQMFReal[n], + pppfCQMFImag[n]); + } + + BSFlushBuffer(psCQMFEncoder->psBSWrite); + iBitsWritten += WriteHeaderInformation(psCQMFEncoder->iNumBands, + psCQMFEncoder->psBSWrite); + + if(psCQMFEncoder->iChannels == 2){ + iBitsWritten += WriteMSInformation(psCQMFEncoder->iNumBands, + psCQMFEncoder->iMSMode, + (const int*)psCQMFEncoder->piMSFlags, + psCQMFEncoder->psBSWrite); + } + + iBitsWritten += WriteGroupInformation(psCQMFEncoder->iChannels, + psCQMFEncoder->iCommonGrouping, + (const int*)psCQMFEncoder->piNumGroups, + (const int**)psCQMFEncoder->ppiGroupLengths, + psCQMFEncoder->psBSWrite); + + iBitsWritten += WriteRMSEnvelope(psCQMFEncoder->iChannels, + (const int*)psCQMFEncoder->piNumGroups, + psCQMFEncoder->iNumBands, + (const int***)psCQMFEncoder->pppiRMSEnvelope, + psCQMFEncoder->psBSWrite); + + for(n = 0; n < psCQMFEncoder->iChannels; n ++){ // This will be updated to support multiple sample rates + int k; + for(k = 0; k < psCQMFEncoder->piNumGroups[n]; k ++){ + PerceptualModel(psCQMFEncoder->iNumBands, + psCQMFEncoder->pppiRMSEnvelope[n][k], + psCQMFEncoder->pppiExcitation[n][k], + psCQMFEncoder->pppiSMR[n][k]); + + } + } + + iAvailableBits -= iBitsWritten; + iCQMFBits = ComputeAllocation(psCQMFEncoder->iChannels, + (const int*)psCQMFEncoder->piNumGroups, + (const int**)psCQMFEncoder->ppiGroupLengths, + psCQMFEncoder->iNumBands, + psCQMFEncoder->piBandwidths, + (const float***)pppfCQMFReal, + (const float***)pppfCQMFImag, + (const int***)psCQMFEncoder->pppiSMR, + iAvailableBits, + &psCQMFEncoder->iAllocOffset, + psCQMFEncoder->pppiAlloc, + psCQMFEncoder->pppiQCQMFReal, + psCQMFEncoder->pppiQCQMFImag); + + iBitsWritten += WriteAllocInformation(psCQMFEncoder->iAllocOffset,psCQMFEncoder->psBSWrite); + + for(n = 0; n < psCQMFEncoder->iChannels; n ++){ + iBitsWritten += WriteCQMFData(psCQMFEncoder->piNumGroups[n], + (const int*)psCQMFEncoder->ppiGroupLengths[n], + psCQMFEncoder->iNumBands, + psCQMFEncoder->piBandwidths, + (const int**)psCQMFEncoder->pppiAlloc[n], + (const int**)psCQMFEncoder->pppiCQMFSignReal[n], + (const int**)psCQMFEncoder->pppiCQMFSignImag[n], + (const int**)psCQMFEncoder->pppiQCQMFReal[n], + (const int**)psCQMFEncoder->pppiQCQMFImag[n], + psCQMFEncoder->psBSWrite); + } + + BSByteAlign(psCQMFEncoder->psBSWrite); + *piNumiBytes = BSGetByteCount(psCQMFEncoder->psBSWrite); + BSGetBytes(psCQMFEncoder->psBSWrite,puchData,*piNumiBytes); + + //printf("Bits Written %d\n",iBitsWritten); + + return psCQMFEncoder->iLastError; +} + +static void MSModeCalculation(const int iNumBlocks, + const int iNumBands, + const int *piBandwidths, + float ***pppfReal, + float ***pppfImag, + int *piMSMode, + int *piMSFlags) +{ + int b; + int iFBOffset; + int iNumMSBands; + + *piMSMode = 0; + iFBOffset = 0; + iNumMSBands = 0; + for(b = 0; b < iNumBands; b ++){ + int n; + float fLeftEnergy; + float fRightEnergy; + float fMidEnergy; + float fSideEnergy; + float fLRRatio; + float fMSRatio; + + fLeftEnergy = 0.0; + fRightEnergy = 0.0; + fMidEnergy = 0.0; + fSideEnergy = 0.0; + + for(n = 0; n < piBandwidths[b]; n ++){ + int k; + for(k = 0; k < iNumBlocks; k ++){ + float fMidReal; + float fMidImag; + float fSideReal; + float fSideImag; + + fMidReal = 0.5f * (pppfReal[0][k][iFBOffset] + pppfReal[1][k][iFBOffset]); + fMidImag = 0.5f * (pppfImag[0][k][iFBOffset] + pppfImag[1][k][iFBOffset]); + fSideReal = 0.5f * (pppfReal[0][k][iFBOffset] - pppfReal[1][k][iFBOffset]); + fSideImag = 0.5f * (pppfImag[0][k][iFBOffset] - pppfImag[1][k][iFBOffset]); + + fLeftEnergy += (pppfReal[0][k][iFBOffset] * pppfReal[0][k][iFBOffset] + pppfImag[0][k][iFBOffset] * pppfImag[0][k][iFBOffset]); + fRightEnergy += (pppfReal[1][k][iFBOffset] * pppfReal[1][k][iFBOffset] + pppfImag[1][k][iFBOffset] * pppfImag[1][k][iFBOffset]); + fMidEnergy += (fMidReal * fMidReal + fMidImag * fMidImag); + fSideEnergy += (fSideReal * fSideReal + fSideImag * fSideImag); + } + + iFBOffset ++; + } + + fLeftEnergy = log10f(fLeftEnergy + 1e-12f); + fRightEnergy = log10f(fRightEnergy + 1e-12f); + fMidEnergy = log10f(fMidEnergy + 1e-12f); + fSideEnergy = log10f(fSideEnergy + 1e-12f); + + if(fLeftEnergy > fRightEnergy){ + fLRRatio = fLeftEnergy - fRightEnergy; + } + else{ + fLRRatio = fRightEnergy - fLeftEnergy; + } + + if(fMidEnergy > fSideEnergy){ + fMSRatio = fMidEnergy - fSideEnergy; + } + else{ + fMSRatio = fSideEnergy - fMidEnergy; + } + + if(fMSRatio > fLRRatio){ + iNumMSBands ++; + piMSFlags[b] = 1; + } + else{ + piMSFlags[b] = 0; + } + } + + if(iNumMSBands == iNumBands){ + *piMSMode = 1; + } + else if(iNumMSBands > 0){ + *piMSMode = 2; + } + else{ + *piMSMode = 0; + } + + if(*piMSMode > 0){ + iFBOffset = 0; + for(b = 0; b < iNumBands; b ++){ + if(piMSFlags[b] == 1){ + int n; + for(n = 0; n < piBandwidths[b]; n ++){ + int k; + for(k = 0; k < iNumBlocks; k ++){ + float fMidReal; + float fMidImag; + float fSideReal; + float fSideImag; + + fMidReal = 0.5f * (pppfReal[0][k][iFBOffset] + pppfReal[1][k][iFBOffset]); + fMidImag = 0.5f * (pppfImag[0][k][iFBOffset] + pppfImag[1][k][iFBOffset]); + fSideReal = 0.5f * (pppfReal[0][k][iFBOffset] - pppfReal[1][k][iFBOffset]); + fSideImag = 0.5f * (pppfImag[0][k][iFBOffset] - pppfImag[1][k][iFBOffset]); + + pppfReal[0][k][iFBOffset] = fMidReal; + pppfReal[1][k][iFBOffset] = fSideReal; + pppfImag[0][k][iFBOffset] = fMidImag; + pppfImag[1][k][iFBOffset] = fSideImag; + } + iFBOffset ++; + } + } + else{ + iFBOffset += piBandwidths[b]; + } + } + } +} + +static void RemoveRMSEnvelope(const int iNumBands, + const int *piBandwidths, + const int iNumGroups, + const int *piGroupLengths, + const int **ppiRMSEnvelope, + float **ppfReal, + float **ppfImag) +{ + int n; + int iBlockOffset; + + iBlockOffset = 0; + for(n = 0; n < iNumGroups; n ++){ + int k; + for(k = 0; k < piGroupLengths[n]; k ++){ + int b; + int iFBOffset; + iFBOffset = 0; + for(b = 0; b < iNumBands; b ++){ + int m; + int iRMSEnv; + float fGain; + + iRMSEnv = ppiRMSEnvelope[n][b]; + fGain = c_afRMSEnvReconstructTable[ENV_RECONSTRUCT_TABLE_CENTER - iRMSEnv]; + for(m = 0; m < piBandwidths[b]; m ++){ + ppfReal[iBlockOffset][iFBOffset] *= fGain; + ppfImag[iBlockOffset][iFBOffset] *= fGain; + iFBOffset ++; + } + } + iBlockOffset ++; + } + } +} + +static void RemoveSign(const int iNumBlocks, + const int iNumCQMFBands, + float **ppfReal, + float **ppfImag, + int **ppiSignReal, + int **ppiSignImag) +{ + int n; + for(n = 0; n < iNumBlocks; n ++){ + int b; + for(b = 0; b < iNumCQMFBands; b ++){ + if(ppfReal[n][b] > 0.0){ + ppiSignReal[n][b] = 0; + } + else{ + ppfReal[n][b] = -ppfReal[n][b]; + ppiSignReal[n][b] = 1; + } + if(ppfImag[n][b] > 0.0){ + ppiSignImag[n][b] = 0; + } + else{ + ppfImag[n][b] = -ppfImag[n][b]; + ppiSignImag[n][b] = 1; + } + } + } +} + +/* Rename */ +static void QuantizeSpectrum(const int iNumGroups, + const int *piGroupLengths, + const int iNumBands, + const int *piBandwidths, + const int **ppiAlloc, + const float **ppfReal, + const float **ppfImag, + int **ppiQReal, + int **ppiQImag) +{ + int n; + int iBlockOffest; + + iBlockOffest = 0; + for(n = 0; n < iNumGroups; n ++){ + int k; + for(k = 0; k < piGroupLengths[n]; k ++){ + int b; + int iFBOffset; + + iFBOffset = 0; + for(b = 0; b < iNumBands; b ++){ + int m; + int iAlloc; + int iMaxQuantVal; + float fSCFGain; + + iAlloc = ppiAlloc[n][b]; + fSCFGain = c_afScaleFactor[iAlloc]; + iMaxQuantVal = c_aiQuantMaxValues[iAlloc]; + for(m = 0; m < piBandwidths[b]; m ++){ + int iQuantValue; + + iQuantValue = (int)(fSCFGain * ppfReal[iBlockOffest][iFBOffset] + 0.5); +#ifdef _DEBUG_VERBOSE + if(iQuantValue > iMaxQuantVal){ + printf("Value out of range %d\t%d\t%d\n",iAlloc,iQuantValue,iMaxQuantVal); + iQuantValue = iMaxQuantVal; + } +#else + iQuantValue = (iQuantValue < iMaxQuantVal) ? iQuantValue : iMaxQuantVal; +#endif + ppiQReal[iBlockOffest][iFBOffset] = iQuantValue; + + iQuantValue = (int)(fSCFGain * ppfImag[iBlockOffest][iFBOffset] + 0.5); +#ifdef _DEBUG_VERBOSE + if(iQuantValue > iMaxQuantVal){ + printf("Value out of range %d\t%d\t%d\n",iAlloc,iQuantValue,iMaxQuantVal); + iQuantValue = iMaxQuantVal; + } +#else + iQuantValue = (iQuantValue < iMaxQuantVal) ? iQuantValue : iMaxQuantVal; +#endif + ppiQImag[iBlockOffest][iFBOffset] = iQuantValue; + + iFBOffset ++; + } + + } + + iBlockOffest ++; + } + } +} + +static int CountCQMFBits(const int iNumGroups, + const int *piGroupLengths, + const int iNumBands, + const int *piBandwidths, + const int **ppiAlloc, + const int **ppiQReal, + const int **ppiQImag) +{ + int n; + int iBits; + int iBlockOffest; + + iBits = 0; + iBlockOffest = 0; + for(n = 0; n < iNumGroups; n ++){ + int k; + for(k = 0; k < piGroupLengths[n]; k ++){ + int b; + int iFBOffset; + + iFBOffset = 0; + for(b = 0; b < iNumBands; b ++){ + int m; + int iAlloc; + int iHuffDim; + int iHuffMod; + + iAlloc = ppiAlloc[n][b]; + + iHuffDim = c_aiHuffmanDim[iAlloc]; + iHuffMod = c_aiHuffmanMod[iAlloc]; + + + if(iAlloc > 0){ + const unsigned int (*pauiHuffmanTable)[2] = NULL; //const? + + pauiHuffmanTable = GetHuffEncTable(iAlloc); + for(m = 0; m < piBandwidths[b]; m ++){ + int iQuantValue1; + int iQuantValue2; + + iQuantValue1 = ppiQReal[iBlockOffest][iFBOffset]; + iQuantValue2 = ppiQImag[iBlockOffest][iFBOffset]; + + iBits += (iQuantValue1 > 0) ? 1 : 0; //Sign bit for vals > 0 + iBits += (iQuantValue2 > 0) ? 1 : 0; //Sign bit for vals > 0 + if(iHuffDim == 2){ + iQuantValue1 *= iHuffMod; + iQuantValue1 += iQuantValue2; + iBits += pauiHuffmanTable[iQuantValue1][0]; + } + else{ + iBits += pauiHuffmanTable[iQuantValue1][0]; + iBits += pauiHuffmanTable[iQuantValue2][0]; + } + + iFBOffset ++; + } + } + else{ + iFBOffset += piBandwidths[b]; + } + + } + + iBlockOffest ++; + } + } + + return iBits; +} + +/* Currently only the number of bands in frame */ +static int WriteHeaderInformation(const int iNumBands, + Bitstream *psBSWrite) +{ + int iBitsWritten; + + iBitsWritten = 0; + BSPutBits(psBSWrite,iNumBands,5); + iBitsWritten += 5; + + return iBitsWritten; +} + +static int WriteMSInformation(const int iNumBands, + const int iMSMode, + const int *piMSFlags, + Bitstream *psBSWrite) +{ + int iBitsWritten; + + iBitsWritten = 0; + + BSPutBits(psBSWrite,iMSMode,2); + iBitsWritten += 2; + if(iMSMode == 2){ + int n; + for(n = 0; n < iNumBands; n ++){ + BSPutBits(psBSWrite,piMSFlags[n],1); + iBitsWritten += 1; + } + } + + return iBitsWritten; +} + +static int WriteGroupInformation(const int iChannels, + const int iCommonGrouping, + const int *piNumGroups, + const int **ppiGroupLengths, + Bitstream *psBSWrite) +{ + int iBitsWritten; + + iBitsWritten = 0; + if(iChannels == 2 && iCommonGrouping == 1){ + int k; + + BSPutBits(psBSWrite,iCommonGrouping,1); + iBitsWritten += 1; + + BSPutBits(psBSWrite,(piNumGroups[0] - 1),4); + iBitsWritten += 4; + + for(k = 0; k < piNumGroups[0]; k ++){ + BSPutBits(psBSWrite,(ppiGroupLengths[0][k] - 1),4); + iBitsWritten += 4; + } + } + else if(iChannels == 2){ + int n; + + BSPutBits(psBSWrite,iCommonGrouping,1); + iBitsWritten += 1; + + for(n = 0; n < iChannels; n ++){ + int k; + + BSPutBits(psBSWrite,(piNumGroups[n] - 1),4); + iBitsWritten += 4; + + for(k = 0; k < piNumGroups[n]; k ++){ + BSPutBits(psBSWrite,(ppiGroupLengths[n][k] - 1),4); + iBitsWritten += 4; + } + } + } + else{ + int n; + + for(n = 0; n < iChannels; n ++){ + int k; + + BSPutBits(psBSWrite,(piNumGroups[n] - 1),4); + iBitsWritten += 4; + + for(k = 0; k < piNumGroups[n]; k ++){ + BSPutBits(psBSWrite,(ppiGroupLengths[n][k] - 1),4); + iBitsWritten += 4; + } + } + } + + return iBitsWritten; +} + +static int WriteRMSEnvelope(const int iChannels, + const int *piNumGroups, + const int iNumBands, + const int ***pppiRMSEnvelope, + Bitstream *psBSWrite) +{ + int n; + int iBitsWritten; + + iBitsWritten = 0; + for(n = 0; n < iChannels; n ++){ + int k; + for(k = 0; k < piNumGroups[n]; k ++){ + int b; + int iLastRMSVal; + + iLastRMSVal = pppiRMSEnvelope[n][k][0]; + iLastRMSVal = (iLastRMSVal > ENV_MIN) ? iLastRMSVal : ENV_MIN; + iLastRMSVal = (iLastRMSVal < ENV_MAX) ? iLastRMSVal : ENV_MAX; + BSPutBits(psBSWrite,(iLastRMSVal - ENV_MIN),ENV0_BITS); + iBitsWritten += ENV0_BITS; + + for(b = 1; b < iNumBands; b ++){ + int iDelta; + + iDelta = pppiRMSEnvelope[n][k][b] - iLastRMSVal; + iDelta = (iDelta > ENV_DELTA_MIN) ? iDelta : ENV_DELTA_MIN; + iDelta = (iDelta < ENV_DELTA_MAX) ? iDelta : ENV_DELTA_MAX; + iDelta -= ENV_DELTA_MIN; + + BSPutBits(psBSWrite,c_aaiRMSEnvHuffEnc[iDelta][1],c_aaiRMSEnvHuffEnc[iDelta][0]); + iBitsWritten += c_aaiRMSEnvHuffEnc[iDelta][0]; + + iLastRMSVal = pppiRMSEnvelope[n][k][b]; + } + } + } + + return iBitsWritten; +} + +static int WriteAllocInformation(const int iAllocOffset, + Bitstream *psBSWrite) +{ + int iBitsWritten; + + iBitsWritten = 0; + + if(iAllocOffset < MIN_ALLOC_OFFSET || iAllocOffset > MAX_ALLOC_OFFSET){ + printf("Serious error\n"); + } + + BSPutBits(psBSWrite,(iAllocOffset - MIN_ALLOC_OFFSET),ALLOC_OFFSET_BITS); + iBitsWritten += ALLOC_OFFSET_BITS; + + return iBitsWritten; +} + +static int WriteCQMFData(const int iNumGroups, + const int *piGroupLengths, + const int iNumBands, + const int *piBandwidths, + const int **ppiAlloc, + const int **ppiSignReal, + const int **ppiSignImag, + const int **ppiQReal, + const int **ppiQImag, + Bitstream *psBSWrite) +{ + int n; + int iBitsWritten; + int iBlockOffest; + + iBitsWritten = 0; + iBlockOffest = 0; + + + for(n = 0; n < iNumGroups; n ++){ + int k; + for(k = 0; k < piGroupLengths[n]; k ++){ + int b; + int iFBOffset; + + iFBOffset = 0; + for(b = 0; b < iNumBands; b ++){ + int m; + int iAlloc; + int iHuffDim; + int iHuffMod; + + iAlloc = ppiAlloc[n][b]; + + iHuffDim = c_aiHuffmanDim[iAlloc]; + iHuffMod = c_aiHuffmanMod[iAlloc]; + + + if(iAlloc > 0){ + const unsigned int (*pauiHuffmanTable)[2] = NULL; //const? + + pauiHuffmanTable = GetHuffEncTable(iAlloc); + for(m = 0; m < piBandwidths[b]; m ++){ + int iQuantValue1; + int iQuantValue2; + + iQuantValue1 = ppiQReal[iBlockOffest][iFBOffset]; + iQuantValue2 = ppiQImag[iBlockOffest][iFBOffset]; + + + if(iHuffDim == 2){ + int iSymbol; + iSymbol = iQuantValue1; + iSymbol *= iHuffMod; + iSymbol += iQuantValue2; + BSPutBits(psBSWrite, pauiHuffmanTable[iSymbol][1], pauiHuffmanTable[iSymbol][0]); + iBitsWritten += pauiHuffmanTable[iSymbol][0]; + } + else{ + BSPutBits(psBSWrite, pauiHuffmanTable[iQuantValue1][1], pauiHuffmanTable[iQuantValue1][0]); + iBitsWritten += pauiHuffmanTable[iQuantValue1][0]; + BSPutBits(psBSWrite, pauiHuffmanTable[iQuantValue2][1], pauiHuffmanTable[iQuantValue2][0]); + iBitsWritten += pauiHuffmanTable[iQuantValue2][0]; + } + + if(iQuantValue1 > 0){ + BSPutBits(psBSWrite,ppiSignReal[iBlockOffest][iFBOffset],1); + iBitsWritten += 1; + } + if(iQuantValue2 > 0){ + BSPutBits(psBSWrite,ppiSignImag[iBlockOffest][iFBOffset],1); + iBitsWritten += 1; + } + + iFBOffset ++; + } + } + else{ + iFBOffset += piBandwidths[b]; + } + + } + + iBlockOffest ++; + } + } + + return iBitsWritten; +} + +static int ComputeAllocation(const int iChannels, + const int *piNumGroups, + const int **ppiGroupLengths, + const int iNumBands, + const int *piBandwidths, + const float ***pppfReal, + const float ***pppfImag, + const int ***pppiSMR, + const int iAvailableBits, + int *piAllocOffset, + int ***pppiAlloc, + int ***pppiQReal, + int ***pppiQImag) +{ + int iBitsUsed; + int iDone; + int iDelta; + + iBitsUsed = ALLOC_OFFSET_BITS; // Bits used for Alloc Offset + + iDone = 0; + iDelta = -MIN_ALLOC_OFFSET; + *piAllocOffset = 0; + while(iDone == 0){ + int n; + int iLimitAllocOffset; + iBitsUsed = ALLOC_OFFSET_BITS; + + iLimitAllocOffset = *piAllocOffset; + iLimitAllocOffset = (iLimitAllocOffset > MIN_ALLOC_OFFSET) ? iLimitAllocOffset : MIN_ALLOC_OFFSET; + iLimitAllocOffset = (iLimitAllocOffset < MAX_ALLOC_OFFSET) ? iLimitAllocOffset : MAX_ALLOC_OFFSET; + + for(n = 0; n < iChannels; n ++){ + int k; + for(k = 0; k < piNumGroups[n]; k ++){ + int b; + for(b = 0; b < iNumBands; b ++){ + int iAlloc; + iAlloc = ((pppiSMR[n][k][b] + iLimitAllocOffset * ALLOC_OFFSET_SCALE) >> 5); + iAlloc = (iAlloc > MIN_ALLOC) ? iAlloc : MIN_ALLOC; + iAlloc = (iAlloc < MAX_ALLOC) ? iAlloc : MAX_ALLOC; + pppiAlloc[n][k][b] = iAlloc; + } + } + + QuantizeSpectrum(piNumGroups[n], + (const int*)ppiGroupLengths[n], + iNumBands, + piBandwidths, + (const int**)pppiAlloc[n], + (const float**)pppfReal[n], + (const float**)pppfImag[n], + pppiQReal[n], + pppiQImag[n]); + + iBitsUsed += CountCQMFBits(piNumGroups[n], + (const int*)ppiGroupLengths[n], + iNumBands, + piBandwidths, + (const int**)pppiAlloc[n], + (const int**)pppiQReal[n], + (const int**)pppiQImag[n]); + } + + if(*piAllocOffset <= MIN_ALLOC_OFFSET && iBitsUsed > iAvailableBits){ +#ifdef DEBUG_VERBOSE + printf("Frame can not be coded with the number of bits available\n"); +#endif + //iLastError = ENC_ERROR_STREAM_FAILURE; + return -1; + } + else if(*piAllocOffset >= MAX_ALLOC_OFFSET && iBitsUsed < iAvailableBits){ + *piAllocOffset = MAX_ALLOC_OFFSET; + iDone ++; + } + else{ + if(iDelta == 0 && iBitsUsed > iAvailableBits){ + iDelta = 1; + } + else if(iDelta == 0 && iBitsUsed < iAvailableBits){ + iDone ++; + } + else if(iBitsUsed == iAvailableBits){ + iDone ++; + } + + if(iBitsUsed > iAvailableBits){ + *piAllocOffset -= iDelta; + iDelta >>= 1; + } + else if(iBitsUsed < iAvailableBits){ + *piAllocOffset += iDelta; + iDelta >>= 1; + } + } + + } + + //printf("%d\t%d\t%d\t%d\n",*piAllocOffset,iAvailableBits,iBitsUsed,iAvailableBits - iBitsUsed); + + return iBitsUsed; +} + +static int ComputeAllocationByPass(const int iChannels, + const int *piNumGroups, + const int **ppiGroupLengths, + const int iNumBands, + const int *piBandwidths, + const float ***pppfReal, + const float ***pppfImag, + const int ***pppiSMR, + const int iAllocOffset, + int ***pppiAlloc, + int ***pppiQReal, + int ***pppiQImag) +{ + int n; + int iBitsUsed; + + iBitsUsed = ALLOC_OFFSET_BITS; + + for(n = 0; n < iChannels; n ++){ + int k; + for(k = 0; k < piNumGroups[n]; k ++){ + int b; + for(b = 0; b < iNumBands; b ++){ + int iAlloc; + iAlloc = ((pppiSMR[n][k][b] + iAllocOffset * ALLOC_OFFSET_SCALE) >> 5); + iAlloc = (iAlloc > MIN_ALLOC) ? iAlloc : MIN_ALLOC; + iAlloc = (iAlloc < MAX_ALLOC) ? iAlloc : MAX_ALLOC; + pppiAlloc[n][k][b] = iAlloc; + } + } + + QuantizeSpectrum(piNumGroups[n], + (const int*)ppiGroupLengths[n], + iNumBands, + piBandwidths, + (const int**)pppiAlloc[n], + (const float**)pppfReal[n], + (const float**)pppfImag[n], + pppiQReal[n], + pppiQImag[n]); + + iBitsUsed += CountCQMFBits(piNumGroups[n], + (const int*)ppiGroupLengths[n], + iNumBands, + piBandwidths, + (const int**)pppiAlloc[n], + (const int**)pppiQReal[n], + (const int**)pppiQImag[n]); + } + + return iBitsUsed; +} diff --git a/lib_rend/ivas_cldfb_trans_codec/CQMFEncoder.h b/lib_rend/ivas_cldfb_trans_codec/CQMFEncoder.h new file mode 100644 index 0000000000..d509827beb --- /dev/null +++ b/lib_rend/ivas_cldfb_trans_codec/CQMFEncoder.h @@ -0,0 +1,33 @@ +#ifndef _CQMF_ENCODER_H_ +#define _CQMF_ENCODER_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#define ENCODER_ERROR_NONE (0) +#define ENCODER_ERROR_FS_NOT_SUPPORTED (-1) +#define ENCODER_ERROR_CHAN_NOT_SUPPORTED (-2) +#define ENCODER_ERROR_UNKNOWN (-100) + +typedef struct CQMF_ENCODER CQMFEncoder; + +CQMFEncoder* CreateCQMFEncoder(const int iSampleRate, + const int iChannels, + const int iTargetBitRate); + +void DeleteCQMFEncoder(CQMFEncoder *psCQMFEncoder); + +int CQMFEncoderGetError(CQMFEncoder *psCQMFEncoder); + +int EncodeFrame(CQMFEncoder *psCQMFEncoder, + float ***pppfCQMFReal, + float ***pppfCQMFImag, + int *piNumiBytes, + unsigned char *puchData); + +#ifdef __cplusplus +} +#endif + +#endif /* _CQMF_ENCODER_H_ */ diff --git a/lib_rend/ivas_cldfb_trans_codec/CQMFHuff.c b/lib_rend/ivas_cldfb_trans_codec/CQMFHuff.c new file mode 100644 index 0000000000..ad7e387c72 --- /dev/null +++ b/lib_rend/ivas_cldfb_trans_codec/CQMFHuff.c @@ -0,0 +1,1457 @@ +#include "CQMFHuff.h" +#include "wmops.h" + +const unsigned int c_aaiCQMFHuffEnc1[16][2] = +{ + {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000b, 0x0000}, {0x0002, 0x0001}, {0x0004, 0x0001}, {0x0006, 0x0002}, {0x000b, 0x0001}, + {0x0006, 0x0003}, {0x0007, 0x0001}, {0x0009, 0x0003}, {0x000a, 0x0001}, {0x000a, 0x0002}, {0x000a, 0x0003}, {0x000a, 0x0004}, {0x000a, 0x0005}, +}; + +const unsigned int c_aaiCQMFHuffDec1[4][16] = +{ + {0x0001ffff, 0x00000005, 0x00010001, 0x00010001, 0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x0003ffff, 0x0002ffff, 0x00010009, 0x00010009, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x00020006, 0x00020006, 0x00020006, 0x00020006, 0x00020008, 0x00020008, 0x00020008, 0x00020008, }, + {0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, }, + {0x00010003, 0x00010003, 0x00010007, 0x00010007, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, }, +}; + +const unsigned int c_aaiCQMFHuffEnc2[25][2] = +{ + {0x0001, 0x0001}, {0x0002, 0x0001}, {0x0006, 0x0001}, {0x000c, 0x0000}, {0x000c, 0x0001}, {0x0003, 0x0001}, {0x0004, 0x0001}, {0x0006, 0x0002}, + {0x000c, 0x0002}, {0x000c, 0x0003}, {0x0006, 0x0003}, {0x0007, 0x0001}, {0x0009, 0x0003}, {0x000c, 0x0004}, {0x000c, 0x0005}, {0x000c, 0x0006}, + {0x000b, 0x0004}, {0x000c, 0x0007}, {0x000b, 0x0005}, {0x000b, 0x0006}, {0x000b, 0x0007}, {0x000b, 0x0008}, {0x000b, 0x0009}, {0x000b, 0x000a}, + {0x000b, 0x000b}, + +}; + +const unsigned int c_aaiCQMFHuffDec2[4][16] = +{ + {0x0001ffff, 0x00000006, 0x00010005, 0x00010005, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x0003ffff, 0x0002ffff, 0x0001000b, 0x0001000b, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x00020007, 0x00020007, 0x00020007, 0x00020007, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, }, + {0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, + {0x00000003, 0x00000004, 0x00000008, 0x00000009, 0x0000000d, 0x0000000e, 0x0000000f, 0x00000011, 0x00010010, 0x00010010, 0x00010012, 0x00010012, 0x00010013, 0x00010013, 0x00010014, 0x00010014, }, +}; + +const unsigned int c_aaiCQMFHuffEnc3[36][2] = +{ + {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000b, 0x0006}, {0x000d, 0x0000}, {0x000d, 0x0001}, {0x0002, 0x0001}, {0x0004, 0x0001}, + {0x0007, 0x0001}, {0x000b, 0x0007}, {0x000d, 0x0002}, {0x000d, 0x0003}, {0x0006, 0x0002}, {0x0006, 0x0003}, {0x0009, 0x0003}, {0x000b, 0x0008}, + {0x000d, 0x0004}, {0x000d, 0x0005}, {0x000a, 0x0005}, {0x000c, 0x000a}, {0x000b, 0x0009}, {0x000d, 0x0006}, {0x000d, 0x0007}, {0x000d, 0x0008}, + {0x000d, 0x0009}, {0x000d, 0x000a}, {0x000d, 0x000b}, {0x000d, 0x000c}, {0x000d, 0x000d}, {0x000d, 0x000e}, {0x000d, 0x000f}, {0x000d, 0x0010}, + {0x000d, 0x0011}, {0x000d, 0x0012}, {0x000d, 0x0013}, {0x000c, 0x000b}, + +}; + +const unsigned int c_aaiCQMFHuffDec3[14][16] = +{ + {0x0001ffff, 0x00000007, 0x00010001, 0x00010001, 0x00020006, 0x00020006, 0x00020006, 0x00020006, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x0003ffff, 0x0002ffff, 0x00010008, 0x00010008, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, }, + {0x0001000f, 0x0001000f, 0x00010014, 0x00010014, 0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, + {0x0005ffff, 0x0006ffff, 0x0004ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000dffff, 0x00000013, 0x00000023, 0x00010003, 0x00010003, 0x00010009, 0x00010009, }, + {0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, + {0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, }, + {0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, + {0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, }, + {0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, }, + {0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, }, + {0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, }, + {0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, }, + {0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, }, + {0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, }, +}; + +const unsigned int c_aaiCQMFHuffEnc4[49][2] = +{ + {0x0001, 0x0001}, {0x0002, 0x0001}, {0x0006, 0x0001}, {0x000b, 0x0004}, {0x000f, 0x0000}, {0x000f, 0x0001}, {0x000f, 0x0002}, {0x0003, 0x0001}, + {0x0004, 0x0001}, {0x0007, 0x0001}, {0x000b, 0x0005}, {0x000f, 0x0003}, {0x000f, 0x0004}, {0x000f, 0x0005}, {0x0006, 0x0002}, {0x0006, 0x0003}, + {0x0008, 0x0001}, {0x000d, 0x000a}, {0x000f, 0x0006}, {0x000f, 0x0007}, {0x000f, 0x0008}, {0x000b, 0x0006}, {0x000b, 0x0007}, {0x000c, 0x0006}, + {0x000c, 0x0007}, {0x000f, 0x0009}, {0x000f, 0x000a}, {0x000f, 0x000b}, {0x000e, 0x000c}, {0x000d, 0x000b}, {0x000f, 0x000c}, {0x000f, 0x000d}, + {0x000f, 0x000e}, {0x000f, 0x000f}, {0x000f, 0x0010}, {0x000f, 0x0011}, {0x000f, 0x0012}, {0x000f, 0x0013}, {0x000f, 0x0014}, {0x000f, 0x0015}, + {0x000f, 0x0016}, {0x000f, 0x0017}, {0x000e, 0x000d}, {0x000e, 0x000e}, {0x000e, 0x000f}, {0x000e, 0x0010}, {0x000e, 0x0011}, {0x000e, 0x0012}, + {0x000e, 0x0013}, + +}; + +const unsigned int c_aaiCQMFHuffDec4[9][16] = +{ + {0x0001ffff, 0x00000008, 0x00010007, 0x00010007, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x0002ffff, 0x00000010, 0x00010009, 0x00010009, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, }, + {0x0007ffff, 0x0006ffff, 0x0008ffff, 0x0004ffff, 0x0005ffff, 0x0003ffff, 0x00000017, 0x00000018, 0x00010003, 0x00010003, 0x0001000a, 0x0001000a, 0x00010015, 0x00010015, 0x00010016, 0x00010016, }, + {0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, }, + {0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, }, + {0x0002002d, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002f, 0x0002002f, 0x0002002f, 0x0002002f, 0x00020030, 0x00020030, 0x00020030, 0x00020030, }, + {0x00010014, 0x00010014, 0x00010019, 0x00010019, 0x0001001a, 0x0001001a, 0x0001001b, 0x0001001b, 0x0001001e, 0x0001001e, 0x0001001f, 0x0001001f, 0x00010020, 0x00010020, 0x00010021, 0x00010021, }, + {0x00010004, 0x00010004, 0x00010005, 0x00010005, 0x00010006, 0x00010006, 0x0001000b, 0x0001000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x00010012, 0x00010012, 0x00010013, 0x00010013, }, + {0x00010022, 0x00010022, 0x00010023, 0x00010023, 0x00010024, 0x00010024, 0x00010025, 0x00010025, 0x00010026, 0x00010026, 0x00010027, 0x00010027, 0x00010028, 0x00010028, 0x00010029, 0x00010029, }, +}; + +const unsigned int c_aaiCQMFHuffEnc5[64][2] = +{ + {0x0001, 0x0001}, {0x0002, 0x0001}, {0x0006, 0x0001}, {0x000b, 0x0002}, {0x000f, 0x000c}, {0x0011, 0x0000}, {0x0011, 0x0001}, {0x0011, 0x0002}, + {0x0003, 0x0001}, {0x0004, 0x0001}, {0x0006, 0x0002}, {0x000a, 0x0002}, {0x0011, 0x0003}, {0x0011, 0x0004}, {0x0011, 0x0005}, {0x0011, 0x0006}, + {0x0006, 0x0003}, {0x0007, 0x0001}, {0x0008, 0x0001}, {0x000c, 0x0003}, {0x000f, 0x000d}, {0x0011, 0x0007}, {0x0011, 0x0008}, {0x0011, 0x0009}, + {0x000b, 0x0003}, {0x000a, 0x0003}, {0x000d, 0x0004}, {0x0011, 0x000a}, {0x0011, 0x000b}, {0x0011, 0x000c}, {0x0011, 0x000d}, {0x0011, 0x000e}, + {0x000e, 0x0007}, {0x000d, 0x0005}, {0x0010, 0x0015}, {0x0011, 0x000f}, {0x0011, 0x0010}, {0x0011, 0x0011}, {0x0011, 0x0012}, {0x0011, 0x0013}, + {0x0011, 0x0014}, {0x0011, 0x0015}, {0x0011, 0x0016}, {0x0011, 0x0017}, {0x0011, 0x0018}, {0x0011, 0x0019}, {0x0011, 0x001a}, {0x0011, 0x001b}, + {0x0011, 0x001c}, {0x0011, 0x001d}, {0x0011, 0x001e}, {0x0011, 0x001f}, {0x0011, 0x0020}, {0x0011, 0x0021}, {0x0011, 0x0022}, {0x0011, 0x0023}, + {0x0011, 0x0024}, {0x0011, 0x0025}, {0x0011, 0x0026}, {0x0011, 0x0027}, {0x0011, 0x0028}, {0x0011, 0x0029}, {0x0010, 0x0016}, {0x0010, 0x0017}, +}; + +const unsigned int c_aaiCQMFHuffDec5[27][16] = +{ + {0x0001ffff, 0x00000009, 0x00010008, 0x00010008, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x0002ffff, 0x00000012, 0x00010011, 0x00010011, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x00020010, 0x00020010, 0x00020010, 0x00020010, }, + {0x0005ffff, 0x0004ffff, 0x0003ffff, 0x00000013, 0x00010003, 0x00010003, 0x00010018, 0x00010018, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, 0x00020019, 0x00020019, 0x00020019, 0x00020019, }, + {0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, }, + {0x0016ffff, 0x0017ffff, 0x0018ffff, 0x0019ffff, 0x001affff, 0x00000022, 0x0000003e, 0x0000003f, 0x00010004, 0x00010004, 0x00010014, 0x00010014, 0x00020020, 0x00020020, 0x00020020, 0x00020020, }, + {0x0008ffff, 0x0007ffff, 0x0009ffff, 0x000dffff, 0x0006ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000effff, 0x000fffff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, }, + {0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, }, + {0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, + {0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, + {0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, + {0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, }, + {0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, }, + {0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, }, + {0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, }, + {0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, }, + {0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, }, + {0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, }, + {0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, }, + {0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, }, + {0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, }, + {0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, }, + {0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, }, + {0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, }, + {0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, }, + {0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, }, + {0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, }, + {0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, }, +}; + +const unsigned int c_aaiCQMFHuffEnc6[81][2] = +{ + {0x0001, 0x0001}, {0x0002, 0x0001}, {0x0006, 0x0001}, {0x000b, 0x0002}, {0x000e, 0x0005}, {0x0012, 0x0000}, {0x0012, 0x0001}, {0x0012, 0x0002}, + {0x0012, 0x0003}, {0x0003, 0x0001}, {0x0004, 0x0001}, {0x0007, 0x0001}, {0x000a, 0x0002}, {0x000e, 0x0006}, {0x0012, 0x0004}, {0x0012, 0x0005}, + {0x0012, 0x0006}, {0x0012, 0x0007}, {0x0006, 0x0002}, {0x0006, 0x0003}, {0x0008, 0x0001}, {0x000c, 0x0003}, {0x000f, 0x0008}, {0x0012, 0x0008}, + {0x0012, 0x0009}, {0x0012, 0x000a}, {0x0012, 0x000b}, {0x000b, 0x0003}, {0x000a, 0x0003}, {0x000d, 0x0005}, {0x000e, 0x0007}, {0x0011, 0x001c}, + {0x0012, 0x000c}, {0x0012, 0x000d}, {0x0012, 0x000e}, {0x0012, 0x000f}, {0x000e, 0x0008}, {0x000e, 0x0009}, {0x000f, 0x0009}, {0x0010, 0x000f}, + {0x0012, 0x0010}, {0x0012, 0x0011}, {0x0012, 0x0012}, {0x0012, 0x0013}, {0x0012, 0x0014}, {0x0012, 0x0015}, {0x0011, 0x001d}, {0x0012, 0x0016}, + {0x0012, 0x0017}, {0x0012, 0x0018}, {0x0012, 0x0019}, {0x0012, 0x001a}, {0x0012, 0x001b}, {0x0012, 0x001c}, {0x0012, 0x001d}, {0x0012, 0x001e}, + {0x0012, 0x001f}, {0x0012, 0x0020}, {0x0012, 0x0021}, {0x0012, 0x0022}, {0x0012, 0x0023}, {0x0012, 0x0024}, {0x0012, 0x0025}, {0x0012, 0x0026}, + {0x0012, 0x0027}, {0x0012, 0x0028}, {0x0012, 0x0029}, {0x0012, 0x002a}, {0x0012, 0x002b}, {0x0012, 0x002c}, {0x0012, 0x002d}, {0x0012, 0x002e}, + {0x0012, 0x002f}, {0x0012, 0x0030}, {0x0012, 0x0031}, {0x0012, 0x0032}, {0x0012, 0x0033}, {0x0012, 0x0034}, {0x0012, 0x0035}, {0x0012, 0x0036}, + {0x0012, 0x0037}, + +}; + +const unsigned int c_aaiCQMFHuffDec6[21][16] = +{ + {0x0001ffff, 0x0000000a, 0x00010009, 0x00010009, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x0002ffff, 0x00000014, 0x0001000b, 0x0001000b, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00020013, 0x00020013, 0x00020013, 0x00020013, }, + {0x0005ffff, 0x0004ffff, 0x0003ffff, 0x00000015, 0x00010003, 0x00010003, 0x0001001b, 0x0001001b, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, }, + {0x00020024, 0x00020024, 0x00020024, 0x00020024, 0x00020025, 0x00020025, 0x00020025, 0x00020025, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, }, + {0x00010016, 0x00010016, 0x00010026, 0x00010026, 0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, }, + {0x0008ffff, 0x0009ffff, 0x0007ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, 0x0006ffff, 0x00000027, }, + {0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, }, + {0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, }, + {0x00020005, 0x00020005, 0x00020005, 0x00020005, 0x00020006, 0x00020006, 0x00020006, 0x00020006, 0x00020007, 0x00020007, 0x00020007, 0x00020007, 0x00020008, 0x00020008, 0x00020008, 0x00020008, }, + {0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x00020011, 0x00020011, 0x00020011, 0x00020011, }, + {0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x00020023, 0x00020023, 0x00020023, 0x00020023, }, + {0x00020028, 0x00020028, 0x00020028, 0x00020028, 0x00020029, 0x00020029, 0x00020029, 0x00020029, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002b, }, + {0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002f, 0x0002002f, 0x0002002f, 0x0002002f, 0x00020030, 0x00020030, 0x00020030, 0x00020030, }, + {0x00020031, 0x00020031, 0x00020031, 0x00020031, 0x00020032, 0x00020032, 0x00020032, 0x00020032, 0x00020033, 0x00020033, 0x00020033, 0x00020033, 0x00020034, 0x00020034, 0x00020034, 0x00020034, }, + {0x00020035, 0x00020035, 0x00020035, 0x00020035, 0x00020036, 0x00020036, 0x00020036, 0x00020036, 0x00020037, 0x00020037, 0x00020037, 0x00020037, 0x00020038, 0x00020038, 0x00020038, 0x00020038, }, + {0x00020039, 0x00020039, 0x00020039, 0x00020039, 0x0002003a, 0x0002003a, 0x0002003a, 0x0002003a, 0x0002003b, 0x0002003b, 0x0002003b, 0x0002003b, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003c, }, + {0x0002003d, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002003f, 0x0002003f, 0x0002003f, 0x0002003f, 0x00020040, 0x00020040, 0x00020040, 0x00020040, }, + {0x00020041, 0x00020041, 0x00020041, 0x00020041, 0x00020042, 0x00020042, 0x00020042, 0x00020042, 0x00020043, 0x00020043, 0x00020043, 0x00020043, 0x00020044, 0x00020044, 0x00020044, 0x00020044, }, + {0x00020045, 0x00020045, 0x00020045, 0x00020045, 0x00020046, 0x00020046, 0x00020046, 0x00020046, 0x00020047, 0x00020047, 0x00020047, 0x00020047, 0x00020048, 0x00020048, 0x00020048, 0x00020048, }, + {0x00020049, 0x00020049, 0x00020049, 0x00020049, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004b, 0x0002004b, 0x0002004b, 0x0002004b, 0x0002004c, 0x0002004c, 0x0002004c, 0x0002004c, }, + {0x0002004d, 0x0002004d, 0x0002004d, 0x0002004d, 0x0002004e, 0x0002004e, 0x0002004e, 0x0002004e, 0x0002004f, 0x0002004f, 0x0002004f, 0x0002004f, 0x00020050, 0x00020050, 0x00020050, 0x00020050, }, +}; + +const unsigned int c_aaiCQMFHuffEnc7[81][2] = +{ + {0x0002, 0x0001}, {0x0002, 0x0002}, {0x0005, 0x0001}, {0x000a, 0x0002}, {0x000d, 0x0005}, {0x0012, 0x0000}, {0x0012, 0x0001}, {0x0012, 0x0002}, + {0x0012, 0x0003}, {0x0002, 0x0003}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x0009, 0x0002}, {0x000d, 0x0006}, {0x000f, 0x0009}, {0x0012, 0x0004}, + {0x0012, 0x0005}, {0x0012, 0x0006}, {0x0005, 0x0002}, {0x0005, 0x0003}, {0x0007, 0x0001}, {0x000b, 0x0002}, {0x000e, 0x0006}, {0x0011, 0x0018}, + {0x0011, 0x0019}, {0x0012, 0x0007}, {0x0012, 0x0008}, {0x000a, 0x0003}, {0x0009, 0x0003}, {0x000b, 0x0003}, {0x000e, 0x0007}, {0x000f, 0x000a}, + {0x0012, 0x0009}, {0x0012, 0x000a}, {0x0012, 0x000b}, {0x0012, 0x000c}, {0x000d, 0x0007}, {0x000e, 0x0008}, {0x000e, 0x0009}, {0x000f, 0x000b}, + {0x0011, 0x001a}, {0x0012, 0x000d}, {0x0012, 0x000e}, {0x0012, 0x000f}, {0x0012, 0x0010}, {0x0010, 0x000e}, {0x0012, 0x0011}, {0x0010, 0x000f}, + {0x0010, 0x0010}, {0x0012, 0x0012}, {0x0012, 0x0013}, {0x0012, 0x0014}, {0x0012, 0x0015}, {0x0012, 0x0016}, {0x0010, 0x0011}, {0x0012, 0x0017}, + {0x0012, 0x0018}, {0x0012, 0x0019}, {0x0012, 0x001a}, {0x0012, 0x001b}, {0x0012, 0x001c}, {0x0012, 0x001d}, {0x0012, 0x001e}, {0x0012, 0x001f}, + {0x0012, 0x0020}, {0x0012, 0x0021}, {0x0012, 0x0022}, {0x0012, 0x0023}, {0x0012, 0x0024}, {0x0012, 0x0025}, {0x0012, 0x0026}, {0x0012, 0x0027}, + {0x0012, 0x0028}, {0x0012, 0x0029}, {0x0012, 0x002a}, {0x0012, 0x002b}, {0x0012, 0x002c}, {0x0012, 0x002d}, {0x0012, 0x002e}, {0x0012, 0x002f}, + {0x0011, 0x001b}, + +}; + +const unsigned int c_aaiCQMFHuffDec7[23][16] = +{ + {0x0001ffff, 0x0002ffff, 0x0001000a, 0x0001000a, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00020009, 0x00020009, 0x00020009, 0x00020009, }, + {0x0004ffff, 0x0003ffff, 0x00010014, 0x00010014, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, }, + {0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, }, + {0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, }, + {0x0008ffff, 0x0007ffff, 0x0006ffff, 0x0005ffff, 0x00010015, 0x00010015, 0x0001001d, 0x0001001d, 0x00020003, 0x00020003, 0x00020003, 0x00020003, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, }, + {0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, }, + {0x00020025, 0x00020025, 0x00020025, 0x00020025, 0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, }, + {0x00000030, 0x00000036, 0x0001000e, 0x0001000e, 0x0001001f, 0x0001001f, 0x00010027, 0x00010027, 0x00020016, 0x00020016, 0x00020016, 0x00020016, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, }, + {0x000effff, 0x000dffff, 0x000bffff, 0x000cffff, 0x000fffff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, 0x0016ffff, 0x0009ffff, 0x000affff, 0x0000002d, 0x0000002f, }, + {0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, }, + {0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, }, + {0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, 0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, }, + {0x00020023, 0x00020023, 0x00020023, 0x00020023, 0x00020029, 0x00020029, 0x00020029, 0x00020029, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002b, }, + {0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x00020011, 0x00020011, 0x00020011, 0x00020011, 0x00020019, 0x00020019, 0x00020019, 0x00020019, }, + {0x00020005, 0x00020005, 0x00020005, 0x00020005, 0x00020006, 0x00020006, 0x00020006, 0x00020006, 0x00020007, 0x00020007, 0x00020007, 0x00020007, 0x00020008, 0x00020008, 0x00020008, 0x00020008, }, + {0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, 0x00020031, 0x00020031, 0x00020031, 0x00020031, 0x00020032, 0x00020032, 0x00020032, 0x00020032, }, + {0x00020033, 0x00020033, 0x00020033, 0x00020033, 0x00020034, 0x00020034, 0x00020034, 0x00020034, 0x00020035, 0x00020035, 0x00020035, 0x00020035, 0x00020037, 0x00020037, 0x00020037, 0x00020037, }, + {0x00020038, 0x00020038, 0x00020038, 0x00020038, 0x00020039, 0x00020039, 0x00020039, 0x00020039, 0x0002003a, 0x0002003a, 0x0002003a, 0x0002003a, 0x0002003b, 0x0002003b, 0x0002003b, 0x0002003b, }, + {0x0002003c, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002003f, 0x0002003f, 0x0002003f, 0x0002003f, }, + {0x00020040, 0x00020040, 0x00020040, 0x00020040, 0x00020041, 0x00020041, 0x00020041, 0x00020041, 0x00020042, 0x00020042, 0x00020042, 0x00020042, 0x00020043, 0x00020043, 0x00020043, 0x00020043, }, + {0x00020044, 0x00020044, 0x00020044, 0x00020044, 0x00020045, 0x00020045, 0x00020045, 0x00020045, 0x00020046, 0x00020046, 0x00020046, 0x00020046, 0x00020047, 0x00020047, 0x00020047, 0x00020047, }, + {0x00020048, 0x00020048, 0x00020048, 0x00020048, 0x00020049, 0x00020049, 0x00020049, 0x00020049, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004b, 0x0002004b, 0x0002004b, 0x0002004b, }, + {0x0002004c, 0x0002004c, 0x0002004c, 0x0002004c, 0x0002004d, 0x0002004d, 0x0002004d, 0x0002004d, 0x0002004e, 0x0002004e, 0x0002004e, 0x0002004e, 0x0002004f, 0x0002004f, 0x0002004f, 0x0002004f, }, +}; + +const unsigned int c_aaiCQMFHuffEnc8[121][2] = +{ + {0x0002, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000a, 0x0002}, {0x000d, 0x0003}, {0x0010, 0x0008}, {0x0014, 0x0000}, {0x0014, 0x0001}, + {0x0014, 0x0002}, {0x0014, 0x0003}, {0x0014, 0x0004}, {0x0002, 0x0002}, {0x0002, 0x0003}, {0x0005, 0x0001}, {0x0009, 0x0002}, {0x000d, 0x0004}, + {0x0010, 0x0009}, {0x0012, 0x0016}, {0x0014, 0x0005}, {0x0014, 0x0006}, {0x0014, 0x0007}, {0x0014, 0x0008}, {0x0005, 0x0002}, {0x0005, 0x0003}, + {0x0007, 0x0001}, {0x000b, 0x0002}, {0x000e, 0x0004}, {0x0010, 0x000a}, {0x0014, 0x0009}, {0x0014, 0x000a}, {0x0014, 0x000b}, {0x0014, 0x000c}, + {0x0014, 0x000d}, {0x000a, 0x0003}, {0x0009, 0x0003}, {0x000b, 0x0003}, {0x000d, 0x0005}, {0x0010, 0x000b}, {0x0012, 0x0017}, {0x0014, 0x000e}, + {0x0014, 0x000f}, {0x0014, 0x0010}, {0x0014, 0x0011}, {0x0014, 0x0012}, {0x000d, 0x0006}, {0x000d, 0x0007}, {0x000e, 0x0005}, {0x000f, 0x0006}, + {0x0011, 0x000d}, {0x0014, 0x0013}, {0x0014, 0x0014}, {0x0014, 0x0015}, {0x0014, 0x0016}, {0x0014, 0x0017}, {0x0014, 0x0018}, {0x0011, 0x000e}, + {0x000f, 0x0007}, {0x0011, 0x000f}, {0x0012, 0x0018}, {0x0012, 0x0019}, {0x0014, 0x0019}, {0x0014, 0x001a}, {0x0014, 0x001b}, {0x0014, 0x001c}, + {0x0014, 0x001d}, {0x0014, 0x001e}, {0x0013, 0x002a}, {0x0014, 0x001f}, {0x0014, 0x0020}, {0x0013, 0x002b}, {0x0014, 0x0021}, {0x0014, 0x0022}, + {0x0014, 0x0023}, {0x0014, 0x0024}, {0x0014, 0x0025}, {0x0014, 0x0026}, {0x0014, 0x0027}, {0x0014, 0x0028}, {0x0014, 0x0029}, {0x0014, 0x002a}, + {0x0014, 0x002b}, {0x0014, 0x002c}, {0x0014, 0x002d}, {0x0014, 0x002e}, {0x0014, 0x002f}, {0x0014, 0x0030}, {0x0014, 0x0031}, {0x0014, 0x0032}, + {0x0014, 0x0033}, {0x0014, 0x0034}, {0x0014, 0x0035}, {0x0014, 0x0036}, {0x0014, 0x0037}, {0x0014, 0x0038}, {0x0014, 0x0039}, {0x0014, 0x003a}, + {0x0014, 0x003b}, {0x0014, 0x003c}, {0x0014, 0x003d}, {0x0014, 0x003e}, {0x0014, 0x003f}, {0x0014, 0x0040}, {0x0014, 0x0041}, {0x0014, 0x0042}, + {0x0014, 0x0043}, {0x0014, 0x0044}, {0x0014, 0x0045}, {0x0014, 0x0046}, {0x0014, 0x0047}, {0x0014, 0x0048}, {0x0014, 0x0049}, {0x0014, 0x004a}, + {0x0014, 0x004b}, {0x0014, 0x004c}, {0x0014, 0x004d}, {0x0014, 0x004e}, {0x0014, 0x004f}, {0x0014, 0x0050}, {0x0014, 0x0051}, {0x0014, 0x0052}, + {0x0014, 0x0053}, + +}; + +const unsigned int c_aaiCQMFHuffDec8[17][16] = +{ + {0x0001ffff, 0x0002ffff, 0x00010001, 0x00010001, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, }, + {0x0004ffff, 0x0003ffff, 0x00010018, 0x00010018, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, }, + {0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, }, + {0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, }, + {0x0008ffff, 0x0006ffff, 0x0005ffff, 0x0007ffff, 0x00010019, 0x00010019, 0x00010023, 0x00010023, 0x00020003, 0x00020003, 0x00020003, 0x00020003, 0x00020021, 0x00020021, 0x00020021, 0x00020021, }, + {0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, }, + {0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, }, + {0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, }, + {0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x0010ffff, 0x000bffff, 0x0009ffff, 0x000affff, 0x00000005, 0x00000010, 0x0000001b, 0x00000025, 0x0001002f, 0x0001002f, 0x00010038, 0x00010038, }, + {0x0002003a, 0x0002003a, 0x0002003a, 0x0002003a, 0x0002003b, 0x0002003b, 0x0002003b, 0x0002003b, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, }, + {0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, }, + {0x00000075, 0x00000076, 0x00000077, 0x00000078, 0x00010042, 0x00010042, 0x00010045, 0x00010045, 0x00020011, 0x00020011, 0x00020011, 0x00020011, 0x00020026, 0x00020026, 0x00020026, 0x00020026, }, + {0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x0000000a, 0x00000012, 0x00000013, 0x00000014, 0x00000015, 0x0000001c, 0x0000001d, 0x0000001e, 0x0000001f, 0x00000020, 0x00000027, 0x00000028, }, + {0x00000029, 0x0000002a, 0x0000002b, 0x00000031, 0x00000032, 0x00000033, 0x00000034, 0x00000035, 0x00000036, 0x0000003c, 0x0000003d, 0x0000003e, 0x0000003f, 0x00000040, 0x00000041, 0x00000043, }, + {0x00000044, 0x00000046, 0x00000047, 0x00000048, 0x00000049, 0x0000004a, 0x0000004b, 0x0000004c, 0x0000004d, 0x0000004e, 0x0000004f, 0x00000050, 0x00000051, 0x00000052, 0x00000053, 0x00000054, }, + {0x00000055, 0x00000056, 0x00000057, 0x00000058, 0x00000059, 0x0000005a, 0x0000005b, 0x0000005c, 0x0000005d, 0x0000005e, 0x0000005f, 0x00000060, 0x00000061, 0x00000062, 0x00000063, 0x00000064, }, + {0x00000065, 0x00000066, 0x00000067, 0x00000068, 0x00000069, 0x0000006a, 0x0000006b, 0x0000006c, 0x0000006d, 0x0000006e, 0x0000006f, 0x00000070, 0x00000071, 0x00000072, 0x00000073, 0x00000074, }, +}; + +const unsigned int c_aaiCQMFHuffEnc9[196][2] = +{ + {0x0003, 0x0002}, {0x0002, 0x0002}, {0x0004, 0x0001}, {0x0008, 0x0002}, {0x000b, 0x0003}, {0x000f, 0x000e}, {0x0010, 0x0016}, {0x0013, 0x0000}, + {0x0012, 0x004a}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, {0x0003, 0x0003}, {0x0002, 0x0003}, + {0x0004, 0x0002}, {0x0008, 0x0003}, {0x000b, 0x0004}, {0x000e, 0x0009}, {0x0011, 0x0028}, {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0013, 0x0008}, + {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0013, 0x000c}, {0x0005, 0x0001}, {0x0004, 0x0003}, {0x0007, 0x0003}, {0x0009, 0x0002}, + {0x000c, 0x0004}, {0x000e, 0x000a}, {0x0010, 0x0017}, {0x0012, 0x004b}, {0x0013, 0x000d}, {0x0013, 0x000e}, {0x0013, 0x000f}, {0x0013, 0x0010}, + {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0008, 0x0004}, {0x0008, 0x0005}, {0x0009, 0x0003}, {0x000b, 0x0005}, {0x000e, 0x000b}, {0x000f, 0x000f}, + {0x0011, 0x0029}, {0x0013, 0x0013}, {0x0013, 0x0014}, {0x0013, 0x0015}, {0x0013, 0x0016}, {0x0013, 0x0017}, {0x0013, 0x0018}, {0x0013, 0x0019}, + {0x000b, 0x0006}, {0x000b, 0x0007}, {0x000c, 0x0005}, {0x000e, 0x000c}, {0x000f, 0x0010}, {0x0011, 0x002a}, {0x0012, 0x004c}, {0x0013, 0x001a}, + {0x0013, 0x001b}, {0x0013, 0x001c}, {0x0013, 0x001d}, {0x0013, 0x001e}, {0x0013, 0x001f}, {0x0013, 0x0020}, {0x000e, 0x000d}, {0x000d, 0x0007}, + {0x000f, 0x0011}, {0x0010, 0x0018}, {0x0012, 0x004d}, {0x0013, 0x0021}, {0x0012, 0x004e}, {0x0013, 0x0022}, {0x0013, 0x0023}, {0x0013, 0x0024}, + {0x0013, 0x0025}, {0x0013, 0x0026}, {0x0013, 0x0027}, {0x0013, 0x0028}, {0x0010, 0x0019}, {0x0010, 0x001a}, {0x0010, 0x001b}, {0x0012, 0x004f}, + {0x0013, 0x0029}, {0x0013, 0x002a}, {0x0013, 0x002b}, {0x0013, 0x002c}, {0x0013, 0x002d}, {0x0013, 0x002e}, {0x0013, 0x002f}, {0x0013, 0x0030}, + {0x0013, 0x0031}, {0x0013, 0x0032}, {0x0013, 0x0033}, {0x0013, 0x0034}, {0x0011, 0x002b}, {0x0013, 0x0035}, {0x0013, 0x0036}, {0x0013, 0x0037}, + {0x0013, 0x0038}, {0x0013, 0x0039}, {0x0013, 0x003a}, {0x0013, 0x003b}, {0x0013, 0x003c}, {0x0013, 0x003d}, {0x0013, 0x003e}, {0x0013, 0x003f}, + {0x0013, 0x0040}, {0x0013, 0x0041}, {0x0013, 0x0042}, {0x0013, 0x0043}, {0x0013, 0x0044}, {0x0013, 0x0045}, {0x0013, 0x0046}, {0x0013, 0x0047}, + {0x0013, 0x0048}, {0x0013, 0x0049}, {0x0013, 0x004a}, {0x0013, 0x004b}, {0x0013, 0x004c}, {0x0013, 0x004d}, {0x0013, 0x004e}, {0x0013, 0x004f}, + {0x0013, 0x0050}, {0x0013, 0x0051}, {0x0013, 0x0052}, {0x0013, 0x0053}, {0x0013, 0x0054}, {0x0013, 0x0055}, {0x0013, 0x0056}, {0x0013, 0x0057}, + {0x0013, 0x0058}, {0x0013, 0x0059}, {0x0013, 0x005a}, {0x0013, 0x005b}, {0x0013, 0x005c}, {0x0013, 0x005d}, {0x0013, 0x005e}, {0x0013, 0x005f}, + {0x0013, 0x0060}, {0x0013, 0x0061}, {0x0013, 0x0062}, {0x0013, 0x0063}, {0x0013, 0x0064}, {0x0013, 0x0065}, {0x0013, 0x0066}, {0x0013, 0x0067}, + {0x0013, 0x0068}, {0x0013, 0x0069}, {0x0013, 0x006a}, {0x0013, 0x006b}, {0x0013, 0x006c}, {0x0013, 0x006d}, {0x0013, 0x006e}, {0x0013, 0x006f}, + {0x0013, 0x0070}, {0x0013, 0x0071}, {0x0013, 0x0072}, {0x0013, 0x0073}, {0x0013, 0x0074}, {0x0013, 0x0075}, {0x0013, 0x0076}, {0x0013, 0x0077}, + {0x0013, 0x0078}, {0x0013, 0x0079}, {0x0013, 0x007a}, {0x0013, 0x007b}, {0x0013, 0x007c}, {0x0013, 0x007d}, {0x0013, 0x007e}, {0x0013, 0x007f}, + {0x0013, 0x0080}, {0x0013, 0x0081}, {0x0013, 0x0082}, {0x0013, 0x0083}, {0x0013, 0x0084}, {0x0013, 0x0085}, {0x0013, 0x0086}, {0x0013, 0x0087}, + {0x0013, 0x0088}, {0x0013, 0x0089}, {0x0013, 0x008a}, {0x0013, 0x008b}, {0x0013, 0x008c}, {0x0013, 0x008d}, {0x0013, 0x008e}, {0x0013, 0x008f}, + {0x0013, 0x0090}, {0x0013, 0x0091}, {0x0013, 0x0092}, {0x0013, 0x0093}, + +}; + +const unsigned int c_aaiCQMFHuffDec9[30][16] = +{ + {0x0001ffff, 0x00000002, 0x00000010, 0x0000001d, 0x00010000, 0x00010000, 0x0001000e, 0x0001000e, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, }, + {0x0003ffff, 0x0002ffff, 0x00000003, 0x00000011, 0x0000002a, 0x0000002b, 0x0001001e, 0x0001001e, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, }, + {0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, }, + {0x000bffff, 0x0006ffff, 0x0005ffff, 0x0004ffff, 0x00000020, 0x0000003a, 0x00010004, 0x00010004, 0x00010012, 0x00010012, 0x0001002d, 0x0001002d, 0x00010038, 0x00010038, 0x00010039, 0x00010039, }, + {0x0002003b, 0x0002003b, 0x0002003b, 0x0002003b, 0x00020046, 0x00020046, 0x00020046, 0x00020046, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, }, + {0x0001003c, 0x0001003c, 0x00010048, 0x00010048, 0x00020013, 0x00020013, 0x00020013, 0x00020013, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, }, + {0x001cffff, 0x001dffff, 0x0009ffff, 0x000affff, 0x0007ffff, 0x0008ffff, 0x00000006, 0x00000022, 0x00000049, 0x00000054, 0x00000055, 0x00000056, 0x00010005, 0x00010005, 0x0001002f, 0x0001002f, }, + {0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, }, + {0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x00030064, 0x00030064, 0x00030064, 0x00030064, 0x00030064, 0x00030064, 0x00030064, 0x00030064, }, + {0x000100c0, 0x000100c0, 0x000100c1, 0x000100c1, 0x000100c2, 0x000100c2, 0x000100c3, 0x000100c3, 0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x00020023, 0x00020023, 0x00020023, 0x00020023, }, + {0x0002003e, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004c, 0x0002004c, 0x0002004c, 0x0002004c, 0x00020057, 0x00020057, 0x00020057, 0x00020057, }, + {0x000fffff, 0x000cffff, 0x000dffff, 0x000effff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x0019ffff, 0x001affff, 0x001bffff, }, + {0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x0001001a, 0x0001001a, 0x0001001b, 0x0001001b, 0x00010024, 0x00010024, 0x00010025, 0x00010025, 0x00010026, 0x00010026, }, + {0x00010027, 0x00010027, 0x00010028, 0x00010028, 0x00010029, 0x00010029, 0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, }, + {0x00010036, 0x00010036, 0x00010037, 0x00010037, 0x0001003f, 0x0001003f, 0x00010040, 0x00010040, 0x00010041, 0x00010041, 0x00010042, 0x00010042, 0x00010043, 0x00010043, 0x00010044, 0x00010044, }, + {0x00010007, 0x00010007, 0x00010009, 0x00010009, 0x0001000a, 0x0001000a, 0x0001000b, 0x0001000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x00010015, 0x00010015, 0x00010016, 0x00010016, }, + {0x00010045, 0x00010045, 0x0001004b, 0x0001004b, 0x0001004d, 0x0001004d, 0x0001004e, 0x0001004e, 0x0001004f, 0x0001004f, 0x00010050, 0x00010050, 0x00010051, 0x00010051, 0x00010052, 0x00010052, }, + {0x00010053, 0x00010053, 0x00010058, 0x00010058, 0x00010059, 0x00010059, 0x0001005a, 0x0001005a, 0x0001005b, 0x0001005b, 0x0001005c, 0x0001005c, 0x0001005d, 0x0001005d, 0x0001005e, 0x0001005e, }, + {0x0001005f, 0x0001005f, 0x00010060, 0x00010060, 0x00010061, 0x00010061, 0x00010062, 0x00010062, 0x00010063, 0x00010063, 0x00010065, 0x00010065, 0x00010066, 0x00010066, 0x00010067, 0x00010067, }, + {0x00010068, 0x00010068, 0x00010069, 0x00010069, 0x0001006a, 0x0001006a, 0x0001006b, 0x0001006b, 0x0001006c, 0x0001006c, 0x0001006d, 0x0001006d, 0x0001006e, 0x0001006e, 0x0001006f, 0x0001006f, }, + {0x00010070, 0x00010070, 0x00010071, 0x00010071, 0x00010072, 0x00010072, 0x00010073, 0x00010073, 0x00010074, 0x00010074, 0x00010075, 0x00010075, 0x00010076, 0x00010076, 0x00010077, 0x00010077, }, + {0x00010078, 0x00010078, 0x00010079, 0x00010079, 0x0001007a, 0x0001007a, 0x0001007b, 0x0001007b, 0x0001007c, 0x0001007c, 0x0001007d, 0x0001007d, 0x0001007e, 0x0001007e, 0x0001007f, 0x0001007f, }, + {0x00010080, 0x00010080, 0x00010081, 0x00010081, 0x00010082, 0x00010082, 0x00010083, 0x00010083, 0x00010084, 0x00010084, 0x00010085, 0x00010085, 0x00010086, 0x00010086, 0x00010087, 0x00010087, }, + {0x00010088, 0x00010088, 0x00010089, 0x00010089, 0x0001008a, 0x0001008a, 0x0001008b, 0x0001008b, 0x0001008c, 0x0001008c, 0x0001008d, 0x0001008d, 0x0001008e, 0x0001008e, 0x0001008f, 0x0001008f, }, + {0x00010090, 0x00010090, 0x00010091, 0x00010091, 0x00010092, 0x00010092, 0x00010093, 0x00010093, 0x00010094, 0x00010094, 0x00010095, 0x00010095, 0x00010096, 0x00010096, 0x00010097, 0x00010097, }, + {0x00010098, 0x00010098, 0x00010099, 0x00010099, 0x0001009a, 0x0001009a, 0x0001009b, 0x0001009b, 0x0001009c, 0x0001009c, 0x0001009d, 0x0001009d, 0x0001009e, 0x0001009e, 0x0001009f, 0x0001009f, }, + {0x000100a0, 0x000100a0, 0x000100a1, 0x000100a1, 0x000100a2, 0x000100a2, 0x000100a3, 0x000100a3, 0x000100a4, 0x000100a4, 0x000100a5, 0x000100a5, 0x000100a6, 0x000100a6, 0x000100a7, 0x000100a7, }, + {0x000100a8, 0x000100a8, 0x000100a9, 0x000100a9, 0x000100aa, 0x000100aa, 0x000100ab, 0x000100ab, 0x000100ac, 0x000100ac, 0x000100ad, 0x000100ad, 0x000100ae, 0x000100ae, 0x000100af, 0x000100af, }, + {0x000100b0, 0x000100b0, 0x000100b1, 0x000100b1, 0x000100b2, 0x000100b2, 0x000100b3, 0x000100b3, 0x000100b4, 0x000100b4, 0x000100b5, 0x000100b5, 0x000100b6, 0x000100b6, 0x000100b7, 0x000100b7, }, + {0x000100b8, 0x000100b8, 0x000100b9, 0x000100b9, 0x000100ba, 0x000100ba, 0x000100bb, 0x000100bb, 0x000100bc, 0x000100bc, 0x000100bd, 0x000100bd, 0x000100be, 0x000100be, 0x000100bf, 0x000100bf, }, +}; + +const unsigned int c_aaiCQMFHuffEnc10[196][2] = +{ + {0x0003, 0x0003}, {0x0003, 0x0004}, {0x0004, 0x0002}, {0x0006, 0x0002}, {0x0009, 0x0003}, {0x000c, 0x0005}, {0x000f, 0x000e}, {0x000f, 0x000f}, + {0x0012, 0x003f}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0003, 0x0005}, {0x0002, 0x0003}, + {0x0004, 0x0003}, {0x0006, 0x0003}, {0x0009, 0x0004}, {0x000c, 0x0006}, {0x000e, 0x000b}, {0x000f, 0x0010}, {0x0013, 0x0005}, {0x0013, 0x0006}, + {0x0013, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0005, 0x0003}, {0x0007, 0x0002}, + {0x000a, 0x0004}, {0x000c, 0x0007}, {0x000e, 0x000c}, {0x0011, 0x0026}, {0x0011, 0x0027}, {0x0013, 0x000b}, {0x0013, 0x000c}, {0x0013, 0x000d}, + {0x0013, 0x000e}, {0x0013, 0x000f}, {0x0006, 0x0004}, {0x0006, 0x0005}, {0x0007, 0x0003}, {0x0009, 0x0005}, {0x000b, 0x0005}, {0x000d, 0x0008}, + {0x000f, 0x0011}, {0x0011, 0x0028}, {0x0013, 0x0010}, {0x0012, 0x0040}, {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0013, 0x0014}, + {0x0009, 0x0006}, {0x0009, 0x0007}, {0x000a, 0x0005}, {0x000b, 0x0006}, {0x000d, 0x0009}, {0x000f, 0x0012}, {0x0010, 0x0016}, {0x0013, 0x0015}, + {0x0011, 0x0029}, {0x0013, 0x0016}, {0x0013, 0x0017}, {0x0013, 0x0018}, {0x0013, 0x0019}, {0x0013, 0x001a}, {0x000c, 0x0008}, {0x000b, 0x0007}, + {0x000c, 0x0009}, {0x000e, 0x000d}, {0x000f, 0x0013}, {0x0010, 0x0017}, {0x0011, 0x002a}, {0x0013, 0x001b}, {0x0013, 0x001c}, {0x0012, 0x0041}, + {0x0013, 0x001d}, {0x0013, 0x001e}, {0x0013, 0x001f}, {0x0013, 0x0020}, {0x000f, 0x0014}, {0x000e, 0x000e}, {0x000e, 0x000f}, {0x000f, 0x0015}, + {0x0012, 0x0042}, {0x0010, 0x0018}, {0x0013, 0x0021}, {0x0013, 0x0022}, {0x0013, 0x0023}, {0x0013, 0x0024}, {0x0013, 0x0025}, {0x0013, 0x0026}, + {0x0013, 0x0027}, {0x0013, 0x0028}, {0x0013, 0x0029}, {0x0010, 0x0019}, {0x0010, 0x001a}, {0x0011, 0x002b}, {0x0010, 0x001b}, {0x0012, 0x0043}, + {0x0013, 0x002a}, {0x0013, 0x002b}, {0x0013, 0x002c}, {0x0013, 0x002d}, {0x0013, 0x002e}, {0x0013, 0x002f}, {0x0013, 0x0030}, {0x0013, 0x0031}, + {0x0012, 0x0044}, {0x0012, 0x0045}, {0x0013, 0x0032}, {0x0013, 0x0033}, {0x0013, 0x0034}, {0x0012, 0x0046}, {0x0013, 0x0035}, {0x0013, 0x0036}, + {0x0013, 0x0037}, {0x0013, 0x0038}, {0x0013, 0x0039}, {0x0013, 0x003a}, {0x0013, 0x003b}, {0x0013, 0x003c}, {0x0013, 0x003d}, {0x0013, 0x003e}, + {0x0013, 0x003f}, {0x0013, 0x0040}, {0x0013, 0x0041}, {0x0013, 0x0042}, {0x0013, 0x0043}, {0x0013, 0x0044}, {0x0013, 0x0045}, {0x0013, 0x0046}, + {0x0013, 0x0047}, {0x0013, 0x0048}, {0x0013, 0x0049}, {0x0013, 0x004a}, {0x0013, 0x004b}, {0x0013, 0x004c}, {0x0013, 0x004d}, {0x0013, 0x004e}, + {0x0013, 0x004f}, {0x0013, 0x0050}, {0x0013, 0x0051}, {0x0013, 0x0052}, {0x0013, 0x0053}, {0x0013, 0x0054}, {0x0013, 0x0055}, {0x0013, 0x0056}, + {0x0013, 0x0057}, {0x0013, 0x0058}, {0x0013, 0x0059}, {0x0013, 0x005a}, {0x0013, 0x005b}, {0x0013, 0x005c}, {0x0013, 0x005d}, {0x0013, 0x005e}, + {0x0013, 0x005f}, {0x0013, 0x0060}, {0x0013, 0x0061}, {0x0013, 0x0062}, {0x0013, 0x0063}, {0x0013, 0x0064}, {0x0013, 0x0065}, {0x0013, 0x0066}, + {0x0013, 0x0067}, {0x0013, 0x0068}, {0x0013, 0x0069}, {0x0013, 0x006a}, {0x0013, 0x006b}, {0x0013, 0x006c}, {0x0013, 0x006d}, {0x0013, 0x006e}, + {0x0013, 0x006f}, {0x0013, 0x0070}, {0x0013, 0x0071}, {0x0013, 0x0072}, {0x0013, 0x0073}, {0x0013, 0x0074}, {0x0013, 0x0075}, {0x0013, 0x0076}, + {0x0013, 0x0077}, {0x0013, 0x0078}, {0x0013, 0x0079}, {0x0013, 0x007a}, {0x0013, 0x007b}, {0x0013, 0x007c}, {0x0013, 0x007d}, {0x0012, 0x0047}, + {0x0012, 0x0048}, {0x0012, 0x0049}, {0x0012, 0x004a}, {0x0012, 0x004b}, + +}; + +const unsigned int c_aaiCQMFHuffDec10[34][16] = +{ + {0x0002ffff, 0x0001ffff, 0x00000002, 0x00000010, 0x0000001c, 0x0000001d, 0x00010000, 0x00010000, 0x00010001, 0x00010001, 0x0001000e, 0x0001000e, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, }, + {0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002b, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, }, + {0x0006ffff, 0x0004ffff, 0x0003ffff, 0x0005ffff, 0x0001001f, 0x0001001f, 0x0001002c, 0x0001002c, 0x00020003, 0x00020003, 0x00020003, 0x00020003, 0x00020011, 0x00020011, 0x00020011, 0x00020011, }, + {0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, }, + {0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x0002003a, 0x0002003a, 0x0002003a, 0x0002003a, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, }, + {0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, }, + {0x000fffff, 0x000affff, 0x0008ffff, 0x0009ffff, 0x0007ffff, 0x00000005, 0x00000013, 0x00000021, 0x00000046, 0x00000048, 0x0001002e, 0x0001002e, 0x0001003b, 0x0001003b, 0x00010047, 0x00010047, }, + {0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, }, + {0x00010015, 0x00010015, 0x00010030, 0x00010030, 0x0001003d, 0x0001003d, 0x0001004a, 0x0001004a, 0x00010054, 0x00010054, 0x00010057, 0x00010057, 0x00020014, 0x00020014, 0x00020014, 0x00020014, }, + {0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x00020049, 0x00020049, 0x00020049, 0x00020049, 0x00020055, 0x00020055, 0x00020055, 0x00020055, 0x00020056, 0x00020056, 0x00020056, 0x00020056, }, + {0x000effff, 0x0011ffff, 0x0012ffff, 0x000dffff, 0x000bffff, 0x000cffff, 0x0000003e, 0x0000004b, 0x00000059, 0x00000063, 0x00000064, 0x00000066, 0x00010006, 0x00010006, 0x00010007, 0x00010007, }, + {0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, }, + {0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, }, + {0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, }, + {0x00020033, 0x00020033, 0x00020033, 0x00020033, 0x0002004f, 0x0002004f, 0x0002004f, 0x0002004f, 0x00020058, 0x00020058, 0x00020058, 0x00020058, 0x00020067, 0x00020067, 0x00020067, 0x00020067, }, + {0x0014ffff, 0x0013ffff, 0x0015ffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x0019ffff, 0x001affff, 0x001bffff, 0x001cffff, 0x001dffff, 0x001effff, 0x001fffff, 0x0020ffff, 0x0021ffff, 0x0010ffff, }, + {0x000100b9, 0x000100b9, 0x000100ba, 0x000100ba, 0x000100bb, 0x000100bb, 0x000100bc, 0x000100bc, 0x000100bd, 0x000100bd, 0x000100be, 0x000100be, 0x00020008, 0x00020008, 0x00020008, 0x00020008, }, + {0x00020070, 0x00020070, 0x00020070, 0x00020070, 0x00020071, 0x00020071, 0x00020071, 0x00020071, 0x00020075, 0x00020075, 0x00020075, 0x00020075, 0x000200bf, 0x000200bf, 0x000200bf, 0x000200bf, }, + {0x000200c0, 0x000200c0, 0x000200c0, 0x000200c0, 0x000200c1, 0x000200c1, 0x000200c1, 0x000200c1, 0x000200c2, 0x000200c2, 0x000200c2, 0x000200c2, 0x000200c3, 0x000200c3, 0x000200c3, 0x000200c3, }, + {0x00010019, 0x00010019, 0x0001001a, 0x0001001a, 0x0001001b, 0x0001001b, 0x00010025, 0x00010025, 0x00010026, 0x00010026, 0x00010027, 0x00010027, 0x00010028, 0x00010028, 0x00010029, 0x00010029, }, + {0x00010009, 0x00010009, 0x0001000a, 0x0001000a, 0x0001000b, 0x0001000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, }, + {0x00010032, 0x00010032, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x00010036, 0x00010036, 0x00010037, 0x00010037, 0x0001003f, 0x0001003f, 0x00010041, 0x00010041, 0x00010042, 0x00010042, }, + {0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, 0x0001004d, 0x0001004d, 0x0001004e, 0x0001004e, 0x00010050, 0x00010050, 0x00010051, 0x00010051, 0x00010052, 0x00010052, }, + {0x00010053, 0x00010053, 0x0001005a, 0x0001005a, 0x0001005b, 0x0001005b, 0x0001005c, 0x0001005c, 0x0001005d, 0x0001005d, 0x0001005e, 0x0001005e, 0x0001005f, 0x0001005f, 0x00010060, 0x00010060, }, + {0x00010061, 0x00010061, 0x00010062, 0x00010062, 0x00010068, 0x00010068, 0x00010069, 0x00010069, 0x0001006a, 0x0001006a, 0x0001006b, 0x0001006b, 0x0001006c, 0x0001006c, 0x0001006d, 0x0001006d, }, + {0x0001006e, 0x0001006e, 0x0001006f, 0x0001006f, 0x00010072, 0x00010072, 0x00010073, 0x00010073, 0x00010074, 0x00010074, 0x00010076, 0x00010076, 0x00010077, 0x00010077, 0x00010078, 0x00010078, }, + {0x00010079, 0x00010079, 0x0001007a, 0x0001007a, 0x0001007b, 0x0001007b, 0x0001007c, 0x0001007c, 0x0001007d, 0x0001007d, 0x0001007e, 0x0001007e, 0x0001007f, 0x0001007f, 0x00010080, 0x00010080, }, + {0x00010081, 0x00010081, 0x00010082, 0x00010082, 0x00010083, 0x00010083, 0x00010084, 0x00010084, 0x00010085, 0x00010085, 0x00010086, 0x00010086, 0x00010087, 0x00010087, 0x00010088, 0x00010088, }, + {0x00010089, 0x00010089, 0x0001008a, 0x0001008a, 0x0001008b, 0x0001008b, 0x0001008c, 0x0001008c, 0x0001008d, 0x0001008d, 0x0001008e, 0x0001008e, 0x0001008f, 0x0001008f, 0x00010090, 0x00010090, }, + {0x00010091, 0x00010091, 0x00010092, 0x00010092, 0x00010093, 0x00010093, 0x00010094, 0x00010094, 0x00010095, 0x00010095, 0x00010096, 0x00010096, 0x00010097, 0x00010097, 0x00010098, 0x00010098, }, + {0x00010099, 0x00010099, 0x0001009a, 0x0001009a, 0x0001009b, 0x0001009b, 0x0001009c, 0x0001009c, 0x0001009d, 0x0001009d, 0x0001009e, 0x0001009e, 0x0001009f, 0x0001009f, 0x000100a0, 0x000100a0, }, + {0x000100a1, 0x000100a1, 0x000100a2, 0x000100a2, 0x000100a3, 0x000100a3, 0x000100a4, 0x000100a4, 0x000100a5, 0x000100a5, 0x000100a6, 0x000100a6, 0x000100a7, 0x000100a7, 0x000100a8, 0x000100a8, }, + {0x000100a9, 0x000100a9, 0x000100aa, 0x000100aa, 0x000100ab, 0x000100ab, 0x000100ac, 0x000100ac, 0x000100ad, 0x000100ad, 0x000100ae, 0x000100ae, 0x000100af, 0x000100af, 0x000100b0, 0x000100b0, }, + {0x000100b1, 0x000100b1, 0x000100b2, 0x000100b2, 0x000100b3, 0x000100b3, 0x000100b4, 0x000100b4, 0x000100b5, 0x000100b5, 0x000100b6, 0x000100b6, 0x000100b7, 0x000100b7, 0x000100b8, 0x000100b8, }, +}; + +const unsigned int c_aaiCQMFHuffEnc11[256][2] = +{ + {0x0004, 0x0003}, {0x0003, 0x0003}, {0x0004, 0x0004}, {0x0006, 0x0002}, {0x0008, 0x0003}, {0x000b, 0x0004}, {0x000e, 0x000c}, {0x0010, 0x001e}, + {0x0013, 0x0000}, {0x0012, 0x005b}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, {0x0013, 0x0006}, + {0x0003, 0x0004}, {0x0003, 0x0005}, {0x0003, 0x0006}, {0x0005, 0x0003}, {0x0008, 0x0004}, {0x000a, 0x0004}, {0x000d, 0x0009}, {0x000f, 0x0011}, + {0x0013, 0x0007}, {0x0012, 0x005c}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0013, 0x000c}, {0x0013, 0x000d}, + {0x0004, 0x0005}, {0x0003, 0x0007}, {0x0005, 0x0004}, {0x0006, 0x0003}, {0x0009, 0x0004}, {0x000b, 0x0005}, {0x000e, 0x000d}, {0x000f, 0x0012}, + {0x0012, 0x005d}, {0x0013, 0x000e}, {0x0013, 0x000f}, {0x0013, 0x0010}, {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0013, 0x0014}, + {0x0006, 0x0004}, {0x0005, 0x0005}, {0x0006, 0x0005}, {0x0008, 0x0005}, {0x000a, 0x0005}, {0x000d, 0x000a}, {0x000f, 0x0013}, {0x0011, 0x0035}, + {0x0013, 0x0015}, {0x0013, 0x0016}, {0x0013, 0x0017}, {0x0013, 0x0018}, {0x0013, 0x0019}, {0x0013, 0x001a}, {0x0013, 0x001b}, {0x0013, 0x001c}, + {0x0008, 0x0006}, {0x0008, 0x0007}, {0x0009, 0x0005}, {0x000a, 0x0006}, {0x000c, 0x0006}, {0x000e, 0x000e}, {0x000f, 0x0014}, {0x0011, 0x0036}, + {0x0012, 0x005e}, {0x0013, 0x001d}, {0x0013, 0x001e}, {0x0013, 0x001f}, {0x0013, 0x0020}, {0x0013, 0x0021}, {0x0013, 0x0022}, {0x0013, 0x0023}, + {0x000b, 0x0006}, {0x000a, 0x0007}, {0x000b, 0x0007}, {0x000c, 0x0007}, {0x000e, 0x000f}, {0x000f, 0x0015}, {0x0011, 0x0037}, {0x0012, 0x005f}, + {0x0013, 0x0024}, {0x0013, 0x0025}, {0x0013, 0x0026}, {0x0013, 0x0027}, {0x0013, 0x0028}, {0x0013, 0x0029}, {0x0013, 0x002a}, {0x0013, 0x002b}, + {0x000e, 0x0010}, {0x000d, 0x000b}, {0x000e, 0x0011}, {0x000f, 0x0016}, {0x0010, 0x001f}, {0x0012, 0x0060}, {0x0011, 0x0038}, {0x0012, 0x0061}, + {0x0013, 0x002c}, {0x0013, 0x002d}, {0x0013, 0x002e}, {0x0013, 0x002f}, {0x0013, 0x0030}, {0x0013, 0x0031}, {0x0013, 0x0032}, {0x0013, 0x0033}, + {0x0010, 0x0020}, {0x000f, 0x0017}, {0x0010, 0x0021}, {0x0011, 0x0039}, {0x0011, 0x003a}, {0x0012, 0x0062}, {0x0013, 0x0034}, {0x0013, 0x0035}, + {0x0013, 0x0036}, {0x0013, 0x0037}, {0x0013, 0x0038}, {0x0013, 0x0039}, {0x0013, 0x003a}, {0x0013, 0x003b}, {0x0013, 0x003c}, {0x0013, 0x003d}, + {0x0012, 0x0063}, {0x0011, 0x003b}, {0x0012, 0x0064}, {0x0012, 0x0065}, {0x0013, 0x003e}, {0x0013, 0x003f}, {0x0013, 0x0040}, {0x0013, 0x0041}, + {0x0013, 0x0042}, {0x0013, 0x0043}, {0x0013, 0x0044}, {0x0013, 0x0045}, {0x0013, 0x0046}, {0x0013, 0x0047}, {0x0013, 0x0048}, {0x0013, 0x0049}, + {0x0013, 0x004a}, {0x0012, 0x0066}, {0x0013, 0x004b}, {0x0012, 0x0067}, {0x0012, 0x0068}, {0x0013, 0x004c}, {0x0013, 0x004d}, {0x0013, 0x004e}, + {0x0013, 0x004f}, {0x0013, 0x0050}, {0x0013, 0x0051}, {0x0013, 0x0052}, {0x0013, 0x0053}, {0x0013, 0x0054}, {0x0013, 0x0055}, {0x0013, 0x0056}, + {0x0013, 0x0057}, {0x0012, 0x0069}, {0x0013, 0x0058}, {0x0013, 0x0059}, {0x0013, 0x005a}, {0x0013, 0x005b}, {0x0013, 0x005c}, {0x0013, 0x005d}, + {0x0013, 0x005e}, {0x0013, 0x005f}, {0x0013, 0x0060}, {0x0013, 0x0061}, {0x0013, 0x0062}, {0x0013, 0x0063}, {0x0013, 0x0064}, {0x0013, 0x0065}, + {0x0013, 0x0066}, {0x0013, 0x0067}, {0x0013, 0x0068}, {0x0013, 0x0069}, {0x0013, 0x006a}, {0x0013, 0x006b}, {0x0013, 0x006c}, {0x0013, 0x006d}, + {0x0013, 0x006e}, {0x0013, 0x006f}, {0x0013, 0x0070}, {0x0013, 0x0071}, {0x0013, 0x0072}, {0x0013, 0x0073}, {0x0013, 0x0074}, {0x0013, 0x0075}, + {0x0013, 0x0076}, {0x0013, 0x0077}, {0x0013, 0x0078}, {0x0013, 0x0079}, {0x0013, 0x007a}, {0x0013, 0x007b}, {0x0013, 0x007c}, {0x0013, 0x007d}, + {0x0013, 0x007e}, {0x0013, 0x007f}, {0x0013, 0x0080}, {0x0013, 0x0081}, {0x0013, 0x0082}, {0x0013, 0x0083}, {0x0013, 0x0084}, {0x0013, 0x0085}, + {0x0013, 0x0086}, {0x0013, 0x0087}, {0x0013, 0x0088}, {0x0013, 0x0089}, {0x0013, 0x008a}, {0x0013, 0x008b}, {0x0013, 0x008c}, {0x0013, 0x008d}, + {0x0013, 0x008e}, {0x0013, 0x008f}, {0x0013, 0x0090}, {0x0013, 0x0091}, {0x0013, 0x0092}, {0x0013, 0x0093}, {0x0013, 0x0094}, {0x0013, 0x0095}, + {0x0013, 0x0096}, {0x0013, 0x0097}, {0x0013, 0x0098}, {0x0013, 0x0099}, {0x0013, 0x009a}, {0x0013, 0x009b}, {0x0013, 0x009c}, {0x0013, 0x009d}, + {0x0013, 0x009e}, {0x0013, 0x009f}, {0x0013, 0x00a0}, {0x0013, 0x00a1}, {0x0013, 0x00a2}, {0x0013, 0x00a3}, {0x0013, 0x00a4}, {0x0013, 0x00a5}, + {0x0013, 0x00a6}, {0x0013, 0x00a7}, {0x0013, 0x00a8}, {0x0013, 0x00a9}, {0x0013, 0x00aa}, {0x0013, 0x00ab}, {0x0013, 0x00ac}, {0x0013, 0x00ad}, + {0x0013, 0x00ae}, {0x0013, 0x00af}, {0x0013, 0x00b0}, {0x0013, 0x00b1}, {0x0013, 0x00b2}, {0x0013, 0x00b3}, {0x0013, 0x00b4}, {0x0013, 0x00b5}, +}; + +const unsigned int c_aaiCQMFHuffDec11[43][16] = +{ + {0x0003ffff, 0x0001ffff, 0x0002ffff, 0x00000000, 0x00000002, 0x00000020, 0x00010001, 0x00010001, 0x00010010, 0x00010010, 0x00010011, 0x00010011, 0x00010012, 0x00010012, 0x00010021, 0x00010021, }, + {0x00020030, 0x00020030, 0x00020030, 0x00020030, 0x00020032, 0x00020032, 0x00020032, 0x00020032, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, }, + {0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, }, + {0x0006ffff, 0x0005ffff, 0x0004ffff, 0x00000004, 0x00000014, 0x00000033, 0x00000040, 0x00000041, 0x00020003, 0x00020003, 0x00020003, 0x00020003, 0x00020023, 0x00020023, 0x00020023, 0x00020023, }, + {0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, }, + {0x00020015, 0x00020015, 0x00020015, 0x00020015, 0x00020034, 0x00020034, 0x00020034, 0x00020034, 0x00020043, 0x00020043, 0x00020043, 0x00020043, 0x00020051, 0x00020051, 0x00020051, 0x00020051, }, + {0x0014ffff, 0x000bffff, 0x000affff, 0x0009ffff, 0x0007ffff, 0x0008ffff, 0x00000044, 0x00000053, 0x00010005, 0x00010005, 0x00010025, 0x00010025, 0x00010050, 0x00010050, 0x00010052, 0x00010052, }, + {0x00020060, 0x00020060, 0x00020060, 0x00020060, 0x00020062, 0x00020062, 0x00020062, 0x00020062, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, }, + {0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, }, + {0x00020006, 0x00020006, 0x00020006, 0x00020006, 0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00020045, 0x00020045, 0x00020045, 0x00020045, 0x00020054, 0x00020054, 0x00020054, 0x00020054, }, + {0x00000070, 0x00000072, 0x00010017, 0x00010017, 0x00010027, 0x00010027, 0x00010036, 0x00010036, 0x00010046, 0x00010046, 0x00010055, 0x00010055, 0x00010063, 0x00010063, 0x00010071, 0x00010071, }, + {0x0025ffff, 0x0026ffff, 0x0027ffff, 0x0028ffff, 0x0029ffff, 0x002affff, 0x0011ffff, 0x0010ffff, 0x0012ffff, 0x0013ffff, 0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x00000007, 0x00000064, }, + {0x00020094, 0x00020094, 0x00020094, 0x00020094, 0x000200a1, 0x000200a1, 0x000200a1, 0x000200a1, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, }, + {0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, }, + {0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, }, + {0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, }, + {0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x00020028, 0x00020028, 0x00020028, 0x00020028, 0x00020048, 0x00020048, 0x00020048, 0x00020048, 0x00020057, 0x00020057, 0x00020057, 0x00020057, }, + {0x000100fa, 0x000100fa, 0x000100fb, 0x000100fb, 0x000100fc, 0x000100fc, 0x000100fd, 0x000100fd, 0x000100fe, 0x000100fe, 0x000100ff, 0x000100ff, 0x00020009, 0x00020009, 0x00020009, 0x00020009, }, + {0x00020065, 0x00020065, 0x00020065, 0x00020065, 0x00020067, 0x00020067, 0x00020067, 0x00020067, 0x00020075, 0x00020075, 0x00020075, 0x00020075, 0x00020080, 0x00020080, 0x00020080, 0x00020080, }, + {0x00020082, 0x00020082, 0x00020082, 0x00020082, 0x00020083, 0x00020083, 0x00020083, 0x00020083, 0x00020091, 0x00020091, 0x00020091, 0x00020091, 0x00020093, 0x00020093, 0x00020093, 0x00020093, }, + {0x0018ffff, 0x0017ffff, 0x0019ffff, 0x0015ffff, 0x0016ffff, 0x001affff, 0x001bffff, 0x001cffff, 0x001dffff, 0x001effff, 0x001fffff, 0x0020ffff, 0x0021ffff, 0x0022ffff, 0x0023ffff, 0x0024ffff, }, + {0x0001003b, 0x0001003b, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, 0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x00010049, 0x00010049, 0x0001004a, 0x0001004a, 0x0001004b, 0x0001004b, }, + {0x0001004c, 0x0001004c, 0x0001004d, 0x0001004d, 0x0001004e, 0x0001004e, 0x0001004f, 0x0001004f, 0x00010058, 0x00010058, 0x00010059, 0x00010059, 0x0001005a, 0x0001005a, 0x0001005b, 0x0001005b, }, + {0x0001001a, 0x0001001a, 0x0001001b, 0x0001001b, 0x0001001c, 0x0001001c, 0x0001001d, 0x0001001d, 0x0001001e, 0x0001001e, 0x0001001f, 0x0001001f, 0x00010029, 0x00010029, 0x0001002a, 0x0001002a, }, + {0x00010008, 0x00010008, 0x0001000a, 0x0001000a, 0x0001000b, 0x0001000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, 0x00010018, 0x00010018, }, + {0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, 0x0001002e, 0x0001002e, 0x0001002f, 0x0001002f, 0x00010038, 0x00010038, 0x00010039, 0x00010039, 0x0001003a, 0x0001003a, }, + {0x0001005c, 0x0001005c, 0x0001005d, 0x0001005d, 0x0001005e, 0x0001005e, 0x0001005f, 0x0001005f, 0x00010068, 0x00010068, 0x00010069, 0x00010069, 0x0001006a, 0x0001006a, 0x0001006b, 0x0001006b, }, + {0x0001006c, 0x0001006c, 0x0001006d, 0x0001006d, 0x0001006e, 0x0001006e, 0x0001006f, 0x0001006f, 0x00010076, 0x00010076, 0x00010077, 0x00010077, 0x00010078, 0x00010078, 0x00010079, 0x00010079, }, + {0x0001007a, 0x0001007a, 0x0001007b, 0x0001007b, 0x0001007c, 0x0001007c, 0x0001007d, 0x0001007d, 0x0001007e, 0x0001007e, 0x0001007f, 0x0001007f, 0x00010084, 0x00010084, 0x00010085, 0x00010085, }, + {0x00010086, 0x00010086, 0x00010087, 0x00010087, 0x00010088, 0x00010088, 0x00010089, 0x00010089, 0x0001008a, 0x0001008a, 0x0001008b, 0x0001008b, 0x0001008c, 0x0001008c, 0x0001008d, 0x0001008d, }, + {0x0001008e, 0x0001008e, 0x0001008f, 0x0001008f, 0x00010090, 0x00010090, 0x00010092, 0x00010092, 0x00010095, 0x00010095, 0x00010096, 0x00010096, 0x00010097, 0x00010097, 0x00010098, 0x00010098, }, + {0x00010099, 0x00010099, 0x0001009a, 0x0001009a, 0x0001009b, 0x0001009b, 0x0001009c, 0x0001009c, 0x0001009d, 0x0001009d, 0x0001009e, 0x0001009e, 0x0001009f, 0x0001009f, 0x000100a0, 0x000100a0, }, + {0x000100a2, 0x000100a2, 0x000100a3, 0x000100a3, 0x000100a4, 0x000100a4, 0x000100a5, 0x000100a5, 0x000100a6, 0x000100a6, 0x000100a7, 0x000100a7, 0x000100a8, 0x000100a8, 0x000100a9, 0x000100a9, }, + {0x000100aa, 0x000100aa, 0x000100ab, 0x000100ab, 0x000100ac, 0x000100ac, 0x000100ad, 0x000100ad, 0x000100ae, 0x000100ae, 0x000100af, 0x000100af, 0x000100b0, 0x000100b0, 0x000100b1, 0x000100b1, }, + {0x000100b2, 0x000100b2, 0x000100b3, 0x000100b3, 0x000100b4, 0x000100b4, 0x000100b5, 0x000100b5, 0x000100b6, 0x000100b6, 0x000100b7, 0x000100b7, 0x000100b8, 0x000100b8, 0x000100b9, 0x000100b9, }, + {0x000100ba, 0x000100ba, 0x000100bb, 0x000100bb, 0x000100bc, 0x000100bc, 0x000100bd, 0x000100bd, 0x000100be, 0x000100be, 0x000100bf, 0x000100bf, 0x000100c0, 0x000100c0, 0x000100c1, 0x000100c1, }, + {0x000100c2, 0x000100c2, 0x000100c3, 0x000100c3, 0x000100c4, 0x000100c4, 0x000100c5, 0x000100c5, 0x000100c6, 0x000100c6, 0x000100c7, 0x000100c7, 0x000100c8, 0x000100c8, 0x000100c9, 0x000100c9, }, + {0x000100ca, 0x000100ca, 0x000100cb, 0x000100cb, 0x000100cc, 0x000100cc, 0x000100cd, 0x000100cd, 0x000100ce, 0x000100ce, 0x000100cf, 0x000100cf, 0x000100d0, 0x000100d0, 0x000100d1, 0x000100d1, }, + {0x000100d2, 0x000100d2, 0x000100d3, 0x000100d3, 0x000100d4, 0x000100d4, 0x000100d5, 0x000100d5, 0x000100d6, 0x000100d6, 0x000100d7, 0x000100d7, 0x000100d8, 0x000100d8, 0x000100d9, 0x000100d9, }, + {0x000100da, 0x000100da, 0x000100db, 0x000100db, 0x000100dc, 0x000100dc, 0x000100dd, 0x000100dd, 0x000100de, 0x000100de, 0x000100df, 0x000100df, 0x000100e0, 0x000100e0, 0x000100e1, 0x000100e1, }, + {0x000100e2, 0x000100e2, 0x000100e3, 0x000100e3, 0x000100e4, 0x000100e4, 0x000100e5, 0x000100e5, 0x000100e6, 0x000100e6, 0x000100e7, 0x000100e7, 0x000100e8, 0x000100e8, 0x000100e9, 0x000100e9, }, + {0x000100ea, 0x000100ea, 0x000100eb, 0x000100eb, 0x000100ec, 0x000100ec, 0x000100ed, 0x000100ed, 0x000100ee, 0x000100ee, 0x000100ef, 0x000100ef, 0x000100f0, 0x000100f0, 0x000100f1, 0x000100f1, }, + {0x000100f2, 0x000100f2, 0x000100f3, 0x000100f3, 0x000100f4, 0x000100f4, 0x000100f5, 0x000100f5, 0x000100f6, 0x000100f6, 0x000100f7, 0x000100f7, 0x000100f8, 0x000100f8, 0x000100f9, 0x000100f9, }, +}; + +const unsigned int c_aaiCQMFHuffEnc12[400][2] = +{ + {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0004, 0x0006}, {0x0005, 0x0002}, {0x0007, 0x0003}, {0x000a, 0x0004}, {0x000d, 0x0009}, {0x000f, 0x0011}, + {0x0012, 0x0053}, {0x0013, 0x009b}, {0x0013, 0x009c}, {0x0014, 0x0000}, {0x0014, 0x0001}, {0x0014, 0x0002}, {0x0014, 0x0003}, {0x0014, 0x0004}, + {0x0014, 0x0005}, {0x0014, 0x0006}, {0x0014, 0x0007}, {0x0014, 0x0008}, {0x0004, 0x0007}, {0x0003, 0x0005}, {0x0003, 0x0006}, {0x0005, 0x0003}, + {0x0007, 0x0004}, {0x0009, 0x0004}, {0x000c, 0x0008}, {0x000e, 0x000c}, {0x0010, 0x001b}, {0x0011, 0x002e}, {0x0013, 0x009d}, {0x0014, 0x0009}, + {0x0014, 0x000a}, {0x0014, 0x000b}, {0x0014, 0x000c}, {0x0014, 0x000d}, {0x0014, 0x000e}, {0x0014, 0x000f}, {0x0014, 0x0010}, {0x0014, 0x0011}, + {0x0004, 0x0008}, {0x0003, 0x0007}, {0x0004, 0x0009}, {0x0005, 0x0004}, {0x0008, 0x0004}, {0x000a, 0x0005}, {0x000d, 0x000a}, {0x000f, 0x0012}, + {0x0011, 0x002f}, {0x0013, 0x009e}, {0x0014, 0x0012}, {0x0014, 0x0013}, {0x0014, 0x0014}, {0x0014, 0x0015}, {0x0014, 0x0016}, {0x0014, 0x0017}, + {0x0014, 0x0018}, {0x0014, 0x0019}, {0x0014, 0x001a}, {0x0014, 0x001b}, {0x0005, 0x0005}, {0x0005, 0x0006}, {0x0005, 0x0007}, {0x0007, 0x0005}, + {0x0009, 0x0005}, {0x000b, 0x0005}, {0x000e, 0x000d}, {0x000f, 0x0013}, {0x0011, 0x0030}, {0x0011, 0x0031}, {0x0014, 0x001c}, {0x0014, 0x001d}, + {0x0014, 0x001e}, {0x0014, 0x001f}, {0x0014, 0x0020}, {0x0014, 0x0021}, {0x0014, 0x0022}, {0x0014, 0x0023}, {0x0014, 0x0024}, {0x0014, 0x0025}, + {0x0007, 0x0006}, {0x0007, 0x0007}, {0x0008, 0x0005}, {0x0009, 0x0006}, {0x000b, 0x0006}, {0x000d, 0x000b}, {0x000e, 0x000e}, {0x0010, 0x001c}, + {0x0012, 0x0054}, {0x0013, 0x009f}, {0x0014, 0x0026}, {0x0014, 0x0027}, {0x0014, 0x0028}, {0x0014, 0x0029}, {0x0014, 0x002a}, {0x0014, 0x002b}, + {0x0014, 0x002c}, {0x0014, 0x002d}, {0x0014, 0x002e}, {0x0014, 0x002f}, {0x000a, 0x0006}, {0x0009, 0x0007}, {0x000a, 0x0007}, {0x000b, 0x0007}, + {0x000d, 0x000c}, {0x000e, 0x000f}, {0x000f, 0x0014}, {0x0011, 0x0032}, {0x0013, 0x00a0}, {0x0014, 0x0030}, {0x0014, 0x0031}, {0x0014, 0x0032}, + {0x0014, 0x0033}, {0x0014, 0x0034}, {0x0014, 0x0035}, {0x0014, 0x0036}, {0x0014, 0x0037}, {0x0014, 0x0038}, {0x0014, 0x0039}, {0x0014, 0x003a}, + {0x000d, 0x000d}, {0x000c, 0x0009}, {0x000d, 0x000e}, {0x000d, 0x000f}, {0x000e, 0x0010}, {0x0010, 0x001d}, {0x0010, 0x001e}, {0x0013, 0x00a1}, + {0x0013, 0x00a2}, {0x0014, 0x003b}, {0x0014, 0x003c}, {0x0014, 0x003d}, {0x0014, 0x003e}, {0x0014, 0x003f}, {0x0014, 0x0040}, {0x0014, 0x0041}, + {0x0014, 0x0042}, {0x0014, 0x0043}, {0x0014, 0x0044}, {0x0014, 0x0045}, {0x000f, 0x0015}, {0x000e, 0x0011}, {0x000f, 0x0016}, {0x000f, 0x0017}, + {0x0010, 0x001f}, {0x0011, 0x0033}, {0x0012, 0x0055}, {0x0014, 0x0046}, {0x0014, 0x0047}, {0x0014, 0x0048}, {0x0014, 0x0049}, {0x0014, 0x004a}, + {0x0014, 0x004b}, {0x0014, 0x004c}, {0x0014, 0x004d}, {0x0014, 0x004e}, {0x0014, 0x004f}, {0x0014, 0x0050}, {0x0014, 0x0051}, {0x0014, 0x0052}, + {0x0011, 0x0034}, {0x0010, 0x0020}, {0x0010, 0x0021}, {0x0011, 0x0035}, {0x0012, 0x0056}, {0x0013, 0x00a3}, {0x0014, 0x0053}, {0x0014, 0x0054}, + {0x0014, 0x0055}, {0x0014, 0x0056}, {0x0014, 0x0057}, {0x0014, 0x0058}, {0x0014, 0x0059}, {0x0014, 0x005a}, {0x0014, 0x005b}, {0x0014, 0x005c}, + {0x0014, 0x005d}, {0x0014, 0x005e}, {0x0014, 0x005f}, {0x0014, 0x0060}, {0x0012, 0x0057}, {0x0012, 0x0058}, {0x0014, 0x0061}, {0x0014, 0x0062}, + {0x0012, 0x0059}, {0x0014, 0x0063}, {0x0012, 0x005a}, {0x0014, 0x0064}, {0x0014, 0x0065}, {0x0014, 0x0066}, {0x0014, 0x0067}, {0x0014, 0x0068}, + {0x0014, 0x0069}, {0x0014, 0x006a}, {0x0014, 0x006b}, {0x0014, 0x006c}, {0x0014, 0x006d}, {0x0014, 0x006e}, {0x0014, 0x006f}, {0x0014, 0x0070}, + {0x0014, 0x0071}, {0x0012, 0x005b}, {0x0014, 0x0072}, {0x0013, 0x00a4}, {0x0014, 0x0073}, {0x0014, 0x0074}, {0x0014, 0x0075}, {0x0014, 0x0076}, + {0x0014, 0x0077}, {0x0014, 0x0078}, {0x0014, 0x0079}, {0x0014, 0x007a}, {0x0014, 0x007b}, {0x0014, 0x007c}, {0x0014, 0x007d}, {0x0014, 0x007e}, + {0x0014, 0x007f}, {0x0014, 0x0080}, {0x0014, 0x0081}, {0x0014, 0x0082}, {0x0014, 0x0083}, {0x0014, 0x0084}, {0x0014, 0x0085}, {0x0014, 0x0086}, + {0x0014, 0x0087}, {0x0013, 0x00a5}, {0x0014, 0x0088}, {0x0014, 0x0089}, {0x0014, 0x008a}, {0x0014, 0x008b}, {0x0014, 0x008c}, {0x0014, 0x008d}, + {0x0014, 0x008e}, {0x0014, 0x008f}, {0x0014, 0x0090}, {0x0014, 0x0091}, {0x0014, 0x0092}, {0x0014, 0x0093}, {0x0014, 0x0094}, {0x0014, 0x0095}, + {0x0014, 0x0096}, {0x0014, 0x0097}, {0x0014, 0x0098}, {0x0014, 0x0099}, {0x0014, 0x009a}, {0x0014, 0x009b}, {0x0014, 0x009c}, {0x0014, 0x009d}, + {0x0014, 0x009e}, {0x0014, 0x009f}, {0x0014, 0x00a0}, {0x0014, 0x00a1}, {0x0014, 0x00a2}, {0x0014, 0x00a3}, {0x0014, 0x00a4}, {0x0014, 0x00a5}, + {0x0014, 0x00a6}, {0x0014, 0x00a7}, {0x0014, 0x00a8}, {0x0014, 0x00a9}, {0x0014, 0x00aa}, {0x0014, 0x00ab}, {0x0014, 0x00ac}, {0x0014, 0x00ad}, + {0x0014, 0x00ae}, {0x0014, 0x00af}, {0x0014, 0x00b0}, {0x0014, 0x00b1}, {0x0014, 0x00b2}, {0x0014, 0x00b3}, {0x0014, 0x00b4}, {0x0014, 0x00b5}, + {0x0014, 0x00b6}, {0x0014, 0x00b7}, {0x0014, 0x00b8}, {0x0014, 0x00b9}, {0x0014, 0x00ba}, {0x0014, 0x00bb}, {0x0014, 0x00bc}, {0x0014, 0x00bd}, + {0x0014, 0x00be}, {0x0014, 0x00bf}, {0x0014, 0x00c0}, {0x0014, 0x00c1}, {0x0014, 0x00c2}, {0x0014, 0x00c3}, {0x0014, 0x00c4}, {0x0014, 0x00c5}, + {0x0014, 0x00c6}, {0x0014, 0x00c7}, {0x0014, 0x00c8}, {0x0014, 0x00c9}, {0x0014, 0x00ca}, {0x0014, 0x00cb}, {0x0014, 0x00cc}, {0x0014, 0x00cd}, + {0x0014, 0x00ce}, {0x0014, 0x00cf}, {0x0014, 0x00d0}, {0x0014, 0x00d1}, {0x0014, 0x00d2}, {0x0014, 0x00d3}, {0x0014, 0x00d4}, {0x0014, 0x00d5}, + {0x0014, 0x00d6}, {0x0014, 0x00d7}, {0x0014, 0x00d8}, {0x0014, 0x00d9}, {0x0014, 0x00da}, {0x0014, 0x00db}, {0x0014, 0x00dc}, {0x0014, 0x00dd}, + {0x0014, 0x00de}, {0x0014, 0x00df}, {0x0014, 0x00e0}, {0x0014, 0x00e1}, {0x0014, 0x00e2}, {0x0014, 0x00e3}, {0x0014, 0x00e4}, {0x0014, 0x00e5}, + {0x0014, 0x00e6}, {0x0014, 0x00e7}, {0x0014, 0x00e8}, {0x0014, 0x00e9}, {0x0014, 0x00ea}, {0x0014, 0x00eb}, {0x0014, 0x00ec}, {0x0014, 0x00ed}, + {0x0014, 0x00ee}, {0x0014, 0x00ef}, {0x0014, 0x00f0}, {0x0014, 0x00f1}, {0x0014, 0x00f2}, {0x0014, 0x00f3}, {0x0014, 0x00f4}, {0x0014, 0x00f5}, + {0x0014, 0x00f6}, {0x0014, 0x00f7}, {0x0014, 0x00f8}, {0x0014, 0x00f9}, {0x0014, 0x00fa}, {0x0014, 0x00fb}, {0x0014, 0x00fc}, {0x0014, 0x00fd}, + {0x0014, 0x00fe}, {0x0014, 0x00ff}, {0x0014, 0x0100}, {0x0014, 0x0101}, {0x0014, 0x0102}, {0x0014, 0x0103}, {0x0014, 0x0104}, {0x0014, 0x0105}, + {0x0014, 0x0106}, {0x0014, 0x0107}, {0x0014, 0x0108}, {0x0014, 0x0109}, {0x0014, 0x010a}, {0x0014, 0x010b}, {0x0014, 0x010c}, {0x0014, 0x010d}, + {0x0014, 0x010e}, {0x0014, 0x010f}, {0x0014, 0x0110}, {0x0014, 0x0111}, {0x0014, 0x0112}, {0x0014, 0x0113}, {0x0014, 0x0114}, {0x0014, 0x0115}, + {0x0014, 0x0116}, {0x0014, 0x0117}, {0x0014, 0x0118}, {0x0014, 0x0119}, {0x0014, 0x011a}, {0x0014, 0x011b}, {0x0014, 0x011c}, {0x0014, 0x011d}, + {0x0014, 0x011e}, {0x0014, 0x011f}, {0x0014, 0x0120}, {0x0014, 0x0121}, {0x0014, 0x0122}, {0x0014, 0x0123}, {0x0014, 0x0124}, {0x0014, 0x0125}, + {0x0014, 0x0126}, {0x0014, 0x0127}, {0x0014, 0x0128}, {0x0014, 0x0129}, {0x0014, 0x012a}, {0x0014, 0x012b}, {0x0014, 0x012c}, {0x0014, 0x012d}, + {0x0014, 0x012e}, {0x0014, 0x012f}, {0x0014, 0x0130}, {0x0014, 0x0131}, {0x0014, 0x0132}, {0x0014, 0x0133}, {0x0014, 0x0134}, {0x0014, 0x0135}, +}; + +const unsigned int c_aaiCQMFHuffDec12[44][16] = +{ + {0x0004ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x00000000, 0x00000001, 0x00000002, 0x00000014, 0x00000028, 0x0000002a, 0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010029, 0x00010029, }, + {0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, }, + {0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, }, + {0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, }, + {0x0008ffff, 0x0007ffff, 0x0005ffff, 0x0006ffff, 0x0000002c, 0x00000052, 0x00010004, 0x00010004, 0x00010018, 0x00010018, 0x0001003f, 0x0001003f, 0x00010050, 0x00010050, 0x00010051, 0x00010051, }, + {0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, }, + {0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, }, + {0x00020005, 0x00020005, 0x00020005, 0x00020005, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002d, 0x00020064, 0x00020064, 0x00020064, 0x00020064, 0x00020066, 0x00020066, 0x00020066, 0x00020066, }, + {0x0018ffff, 0x000fffff, 0x000effff, 0x000dffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x0000001a, 0x00000079, 0x00010041, 0x00010041, 0x00010054, 0x00010054, 0x00010067, 0x00010067, }, + {0x0002007c, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002008d, 0x0002008d, 0x0002008d, 0x0002008d, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, + {0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, }, + {0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, }, + {0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, }, + {0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x00020042, 0x00020042, 0x00020042, 0x00020042, 0x00020056, 0x00020056, 0x00020056, 0x00020056, 0x00020069, 0x00020069, 0x00020069, 0x00020069, }, + {0x000000a1, 0x000000a2, 0x00010007, 0x00010007, 0x0001002f, 0x0001002f, 0x00010043, 0x00010043, 0x0001006a, 0x0001006a, 0x0001008c, 0x0001008c, 0x0001008e, 0x0001008e, 0x0001008f, 0x0001008f, }, + {0x0029ffff, 0x002affff, 0x002bffff, 0x0017ffff, 0x0015ffff, 0x0014ffff, 0x0016ffff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0000001c, 0x00000057, 0x0000007d, 0x0000007e, 0x00000090, }, + {0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, }, + {0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, }, + {0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, }, + {0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, }, + {0x00020058, 0x00020058, 0x00020058, 0x00020058, 0x00020092, 0x00020092, 0x00020092, 0x00020092, 0x000200a4, 0x000200a4, 0x000200a4, 0x000200a4, 0x000200b4, 0x000200b4, 0x000200b4, 0x000200b4, }, + {0x0001006c, 0x0001006c, 0x0001007f, 0x0001007f, 0x00010080, 0x00010080, 0x000100a5, 0x000100a5, 0x000100cb, 0x000100cb, 0x000100e1, 0x000100e1, 0x00020008, 0x00020008, 0x00020008, 0x00020008, }, + {0x000200b5, 0x000200b5, 0x000200b5, 0x000200b5, 0x000200b8, 0x000200b8, 0x000200b8, 0x000200b8, 0x000200ba, 0x000200ba, 0x000200ba, 0x000200ba, 0x000200c9, 0x000200c9, 0x000200c9, 0x000200c9, }, + {0x0000018a, 0x0000018b, 0x0000018c, 0x0000018d, 0x0000018e, 0x0000018f, 0x00010009, 0x00010009, 0x0001000a, 0x0001000a, 0x0001001e, 0x0001001e, 0x00010031, 0x00010031, 0x00010059, 0x00010059, }, + {0x001affff, 0x001bffff, 0x0019ffff, 0x001cffff, 0x001dffff, 0x001effff, 0x001fffff, 0x0020ffff, 0x0021ffff, 0x0022ffff, 0x0023ffff, 0x0024ffff, 0x0025ffff, 0x0026ffff, 0x0027ffff, 0x0028ffff, }, + {0x0000004a, 0x0000004b, 0x0000004c, 0x0000004d, 0x0000004e, 0x0000004f, 0x0000005a, 0x0000005b, 0x0000005c, 0x0000005d, 0x0000005e, 0x0000005f, 0x00000060, 0x00000061, 0x00000062, 0x00000063, }, + {0x0000000b, 0x0000000c, 0x0000000d, 0x0000000e, 0x0000000f, 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x0000001f, 0x00000020, 0x00000021, 0x00000022, 0x00000023, 0x00000024, 0x00000025, }, + {0x00000026, 0x00000027, 0x00000032, 0x00000033, 0x00000034, 0x00000035, 0x00000036, 0x00000037, 0x00000038, 0x00000039, 0x0000003a, 0x0000003b, 0x00000046, 0x00000047, 0x00000048, 0x00000049, }, + {0x0000006d, 0x0000006e, 0x0000006f, 0x00000070, 0x00000071, 0x00000072, 0x00000073, 0x00000074, 0x00000075, 0x00000076, 0x00000077, 0x00000081, 0x00000082, 0x00000083, 0x00000084, 0x00000085, }, + {0x00000086, 0x00000087, 0x00000088, 0x00000089, 0x0000008a, 0x0000008b, 0x00000093, 0x00000094, 0x00000095, 0x00000096, 0x00000097, 0x00000098, 0x00000099, 0x0000009a, 0x0000009b, 0x0000009c, }, + {0x0000009d, 0x0000009e, 0x0000009f, 0x000000a6, 0x000000a7, 0x000000a8, 0x000000a9, 0x000000aa, 0x000000ab, 0x000000ac, 0x000000ad, 0x000000ae, 0x000000af, 0x000000b0, 0x000000b1, 0x000000b2, }, + {0x000000b3, 0x000000b6, 0x000000b7, 0x000000b9, 0x000000bb, 0x000000bc, 0x000000bd, 0x000000be, 0x000000bf, 0x000000c0, 0x000000c1, 0x000000c2, 0x000000c3, 0x000000c4, 0x000000c5, 0x000000c6, }, + {0x000000c7, 0x000000c8, 0x000000ca, 0x000000cc, 0x000000cd, 0x000000ce, 0x000000cf, 0x000000d0, 0x000000d1, 0x000000d2, 0x000000d3, 0x000000d4, 0x000000d5, 0x000000d6, 0x000000d7, 0x000000d8, }, + {0x000000d9, 0x000000da, 0x000000db, 0x000000dc, 0x000000dd, 0x000000de, 0x000000df, 0x000000e0, 0x000000e2, 0x000000e3, 0x000000e4, 0x000000e5, 0x000000e6, 0x000000e7, 0x000000e8, 0x000000e9, }, + {0x000000ea, 0x000000eb, 0x000000ec, 0x000000ed, 0x000000ee, 0x000000ef, 0x000000f0, 0x000000f1, 0x000000f2, 0x000000f3, 0x000000f4, 0x000000f5, 0x000000f6, 0x000000f7, 0x000000f8, 0x000000f9, }, + {0x000000fa, 0x000000fb, 0x000000fc, 0x000000fd, 0x000000fe, 0x000000ff, 0x00000100, 0x00000101, 0x00000102, 0x00000103, 0x00000104, 0x00000105, 0x00000106, 0x00000107, 0x00000108, 0x00000109, }, + {0x0000010a, 0x0000010b, 0x0000010c, 0x0000010d, 0x0000010e, 0x0000010f, 0x00000110, 0x00000111, 0x00000112, 0x00000113, 0x00000114, 0x00000115, 0x00000116, 0x00000117, 0x00000118, 0x00000119, }, + {0x0000011a, 0x0000011b, 0x0000011c, 0x0000011d, 0x0000011e, 0x0000011f, 0x00000120, 0x00000121, 0x00000122, 0x00000123, 0x00000124, 0x00000125, 0x00000126, 0x00000127, 0x00000128, 0x00000129, }, + {0x0000012a, 0x0000012b, 0x0000012c, 0x0000012d, 0x0000012e, 0x0000012f, 0x00000130, 0x00000131, 0x00000132, 0x00000133, 0x00000134, 0x00000135, 0x00000136, 0x00000137, 0x00000138, 0x00000139, }, + {0x0000013a, 0x0000013b, 0x0000013c, 0x0000013d, 0x0000013e, 0x0000013f, 0x00000140, 0x00000141, 0x00000142, 0x00000143, 0x00000144, 0x00000145, 0x00000146, 0x00000147, 0x00000148, 0x00000149, }, + {0x0000014a, 0x0000014b, 0x0000014c, 0x0000014d, 0x0000014e, 0x0000014f, 0x00000150, 0x00000151, 0x00000152, 0x00000153, 0x00000154, 0x00000155, 0x00000156, 0x00000157, 0x00000158, 0x00000159, }, + {0x0000015a, 0x0000015b, 0x0000015c, 0x0000015d, 0x0000015e, 0x0000015f, 0x00000160, 0x00000161, 0x00000162, 0x00000163, 0x00000164, 0x00000165, 0x00000166, 0x00000167, 0x00000168, 0x00000169, }, + {0x0000016a, 0x0000016b, 0x0000016c, 0x0000016d, 0x0000016e, 0x0000016f, 0x00000170, 0x00000171, 0x00000172, 0x00000173, 0x00000174, 0x00000175, 0x00000176, 0x00000177, 0x00000178, 0x00000179, }, + {0x0000017a, 0x0000017b, 0x0000017c, 0x0000017d, 0x0000017e, 0x0000017f, 0x00000180, 0x00000181, 0x00000182, 0x00000183, 0x00000184, 0x00000185, 0x00000186, 0x00000187, 0x00000188, 0x00000189, }, +}; + +const unsigned int c_aaiCQMFHuffEnc13[625][2] = +{ + {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0005, 0x0006}, {0x0005, 0x0007}, {0x0006, 0x0005}, {0x0008, 0x0006}, {0x000a, 0x0008}, {0x000c, 0x000c}, + {0x000e, 0x0019}, {0x0010, 0x0049}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, + {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0013, 0x000c}, {0x0013, 0x000d}, + {0x0013, 0x000e}, {0x0004, 0x0008}, {0x0003, 0x0007}, {0x0004, 0x0009}, {0x0004, 0x000a}, {0x0006, 0x0006}, {0x0007, 0x0006}, {0x0009, 0x0007}, + {0x000b, 0x0009}, {0x000d, 0x0011}, {0x000f, 0x002a}, {0x0010, 0x004a}, {0x0011, 0x0084}, {0x0012, 0x0100}, {0x0013, 0x000f}, {0x0013, 0x0010}, + {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0013, 0x0014}, {0x0013, 0x0015}, {0x0013, 0x0016}, {0x0013, 0x0017}, {0x0013, 0x0018}, + {0x0013, 0x0019}, {0x0013, 0x001a}, {0x0005, 0x0008}, {0x0004, 0x000b}, {0x0004, 0x000c}, {0x0005, 0x0009}, {0x0006, 0x0007}, {0x0008, 0x0007}, + {0x0009, 0x0008}, {0x000b, 0x000a}, {0x000d, 0x0012}, {0x000f, 0x002b}, {0x0012, 0x0101}, {0x0012, 0x0102}, {0x0013, 0x001b}, {0x0013, 0x001c}, + {0x0013, 0x001d}, {0x0013, 0x001e}, {0x0013, 0x001f}, {0x0013, 0x0020}, {0x0013, 0x0021}, {0x0013, 0x0022}, {0x0013, 0x0023}, {0x0013, 0x0024}, + {0x0013, 0x0025}, {0x0013, 0x0026}, {0x0013, 0x0027}, {0x0005, 0x000a}, {0x0004, 0x000d}, {0x0005, 0x000b}, {0x0006, 0x0008}, {0x0007, 0x0007}, + {0x0009, 0x0009}, {0x000a, 0x0009}, {0x000c, 0x000d}, {0x000d, 0x0013}, {0x0010, 0x004b}, {0x0010, 0x004c}, {0x0013, 0x0028}, {0x0013, 0x0029}, + {0x0013, 0x002a}, {0x0013, 0x002b}, {0x0013, 0x002c}, {0x0013, 0x002d}, {0x0013, 0x002e}, {0x0013, 0x002f}, {0x0013, 0x0030}, {0x0013, 0x0031}, + {0x0013, 0x0032}, {0x0013, 0x0033}, {0x0013, 0x0034}, {0x0013, 0x0035}, {0x0006, 0x0009}, {0x0006, 0x000a}, {0x0006, 0x000b}, {0x0007, 0x0008}, + {0x0008, 0x0008}, {0x000a, 0x000a}, {0x000b, 0x000b}, {0x000d, 0x0014}, {0x000e, 0x001a}, {0x0011, 0x0085}, {0x0010, 0x004d}, {0x0013, 0x0036}, + {0x0013, 0x0037}, {0x0013, 0x0038}, {0x0013, 0x0039}, {0x0013, 0x003a}, {0x0013, 0x003b}, {0x0013, 0x003c}, {0x0013, 0x003d}, {0x0013, 0x003e}, + {0x0013, 0x003f}, {0x0013, 0x0040}, {0x0013, 0x0041}, {0x0013, 0x0042}, {0x0013, 0x0043}, {0x0008, 0x0009}, {0x0007, 0x0009}, {0x0008, 0x000a}, + {0x0008, 0x000b}, {0x000a, 0x000b}, {0x000b, 0x000c}, {0x000c, 0x000e}, {0x000e, 0x001b}, {0x000f, 0x002c}, {0x0011, 0x0086}, {0x0013, 0x0044}, + {0x0013, 0x0045}, {0x0013, 0x0046}, {0x0013, 0x0047}, {0x0013, 0x0048}, {0x0013, 0x0049}, {0x0013, 0x004a}, {0x0013, 0x004b}, {0x0013, 0x004c}, + {0x0013, 0x004d}, {0x0013, 0x004e}, {0x0013, 0x004f}, {0x0013, 0x0050}, {0x0013, 0x0051}, {0x0013, 0x0052}, {0x000a, 0x000c}, {0x0009, 0x000a}, + {0x0009, 0x000b}, {0x000a, 0x000d}, {0x000b, 0x000d}, {0x000c, 0x000f}, {0x000e, 0x001c}, {0x000e, 0x001d}, {0x0011, 0x0087}, {0x0011, 0x0088}, + {0x0012, 0x0103}, {0x0012, 0x0104}, {0x0013, 0x0053}, {0x0013, 0x0054}, {0x0013, 0x0055}, {0x0013, 0x0056}, {0x0013, 0x0057}, {0x0013, 0x0058}, + {0x0013, 0x0059}, {0x0013, 0x005a}, {0x0013, 0x005b}, {0x0013, 0x005c}, {0x0013, 0x005d}, {0x0013, 0x005e}, {0x0013, 0x005f}, {0x000c, 0x0010}, + {0x000b, 0x000e}, {0x000b, 0x000f}, {0x000c, 0x0011}, {0x000d, 0x0015}, {0x000e, 0x001e}, {0x000f, 0x002d}, {0x0011, 0x0089}, {0x0011, 0x008a}, + {0x0013, 0x0060}, {0x0013, 0x0061}, {0x0013, 0x0062}, {0x0013, 0x0063}, {0x0013, 0x0064}, {0x0013, 0x0065}, {0x0013, 0x0066}, {0x0013, 0x0067}, + {0x0013, 0x0068}, {0x0013, 0x0069}, {0x0013, 0x006a}, {0x0013, 0x006b}, {0x0013, 0x006c}, {0x0013, 0x006d}, {0x0013, 0x006e}, {0x0013, 0x006f}, + {0x000e, 0x001f}, {0x000d, 0x0016}, {0x000d, 0x0017}, {0x000e, 0x0020}, {0x000e, 0x0021}, {0x000f, 0x002e}, {0x0010, 0x004e}, {0x0013, 0x0070}, + {0x0012, 0x0105}, {0x0012, 0x0106}, {0x0013, 0x0071}, {0x0013, 0x0072}, {0x0013, 0x0073}, {0x0013, 0x0074}, {0x0013, 0x0075}, {0x0013, 0x0076}, + {0x0013, 0x0077}, {0x0013, 0x0078}, {0x0013, 0x0079}, {0x0013, 0x007a}, {0x0013, 0x007b}, {0x0013, 0x007c}, {0x0013, 0x007d}, {0x0013, 0x007e}, + {0x0013, 0x007f}, {0x0010, 0x004f}, {0x000f, 0x002f}, {0x000f, 0x0030}, {0x000f, 0x0031}, {0x0010, 0x0050}, {0x0011, 0x008b}, {0x0011, 0x008c}, + {0x0013, 0x0080}, {0x0013, 0x0081}, {0x0013, 0x0082}, {0x0013, 0x0083}, {0x0013, 0x0084}, {0x0013, 0x0085}, {0x0013, 0x0086}, {0x0013, 0x0087}, + {0x0013, 0x0088}, {0x0013, 0x0089}, {0x0013, 0x008a}, {0x0013, 0x008b}, {0x0013, 0x008c}, {0x0013, 0x008d}, {0x0013, 0x008e}, {0x0013, 0x008f}, + {0x0013, 0x0090}, {0x0013, 0x0091}, {0x0012, 0x0107}, {0x0010, 0x0051}, {0x0010, 0x0052}, {0x0010, 0x0053}, {0x0011, 0x008d}, {0x0011, 0x008e}, + {0x0013, 0x0092}, {0x0013, 0x0093}, {0x0013, 0x0094}, {0x0013, 0x0095}, {0x0013, 0x0096}, {0x0013, 0x0097}, {0x0013, 0x0098}, {0x0013, 0x0099}, + {0x0013, 0x009a}, {0x0013, 0x009b}, {0x0013, 0x009c}, {0x0013, 0x009d}, {0x0013, 0x009e}, {0x0013, 0x009f}, {0x0013, 0x00a0}, {0x0013, 0x00a1}, + {0x0013, 0x00a2}, {0x0013, 0x00a3}, {0x0013, 0x00a4}, {0x0011, 0x008f}, {0x0011, 0x0090}, {0x0013, 0x00a5}, {0x0011, 0x0091}, {0x0013, 0x00a6}, + {0x0013, 0x00a7}, {0x0013, 0x00a8}, {0x0013, 0x00a9}, {0x0013, 0x00aa}, {0x0013, 0x00ab}, {0x0013, 0x00ac}, {0x0013, 0x00ad}, {0x0013, 0x00ae}, + {0x0013, 0x00af}, {0x0013, 0x00b0}, {0x0013, 0x00b1}, {0x0013, 0x00b2}, {0x0013, 0x00b3}, {0x0013, 0x00b4}, {0x0013, 0x00b5}, {0x0013, 0x00b6}, + {0x0013, 0x00b7}, {0x0013, 0x00b8}, {0x0013, 0x00b9}, {0x0013, 0x00ba}, {0x0013, 0x00bb}, {0x0013, 0x00bc}, {0x0013, 0x00bd}, {0x0013, 0x00be}, + {0x0013, 0x00bf}, {0x0013, 0x00c0}, {0x0013, 0x00c1}, {0x0013, 0x00c2}, {0x0013, 0x00c3}, {0x0013, 0x00c4}, {0x0013, 0x00c5}, {0x0013, 0x00c6}, + {0x0013, 0x00c7}, {0x0013, 0x00c8}, {0x0013, 0x00c9}, {0x0013, 0x00ca}, {0x0013, 0x00cb}, {0x0013, 0x00cc}, {0x0013, 0x00cd}, {0x0013, 0x00ce}, + {0x0013, 0x00cf}, {0x0013, 0x00d0}, {0x0013, 0x00d1}, {0x0013, 0x00d2}, {0x0013, 0x00d3}, {0x0013, 0x00d4}, {0x0013, 0x00d5}, {0x0013, 0x00d6}, + {0x0013, 0x00d7}, {0x0013, 0x00d8}, {0x0013, 0x00d9}, {0x0013, 0x00da}, {0x0013, 0x00db}, {0x0013, 0x00dc}, {0x0013, 0x00dd}, {0x0013, 0x00de}, + {0x0013, 0x00df}, {0x0013, 0x00e0}, {0x0013, 0x00e1}, {0x0013, 0x00e2}, {0x0013, 0x00e3}, {0x0013, 0x00e4}, {0x0013, 0x00e5}, {0x0013, 0x00e6}, + {0x0013, 0x00e7}, {0x0013, 0x00e8}, {0x0013, 0x00e9}, {0x0013, 0x00ea}, {0x0013, 0x00eb}, {0x0013, 0x00ec}, {0x0013, 0x00ed}, {0x0013, 0x00ee}, + {0x0013, 0x00ef}, {0x0013, 0x00f0}, {0x0013, 0x00f1}, {0x0013, 0x00f2}, {0x0013, 0x00f3}, {0x0013, 0x00f4}, {0x0013, 0x00f5}, {0x0013, 0x00f6}, + {0x0013, 0x00f7}, {0x0013, 0x00f8}, {0x0013, 0x00f9}, {0x0013, 0x00fa}, {0x0013, 0x00fb}, {0x0013, 0x00fc}, {0x0013, 0x00fd}, {0x0013, 0x00fe}, + {0x0013, 0x00ff}, {0x0013, 0x0100}, {0x0013, 0x0101}, {0x0013, 0x0102}, {0x0013, 0x0103}, {0x0013, 0x0104}, {0x0013, 0x0105}, {0x0013, 0x0106}, + {0x0013, 0x0107}, {0x0013, 0x0108}, {0x0013, 0x0109}, {0x0013, 0x010a}, {0x0013, 0x010b}, {0x0013, 0x010c}, {0x0013, 0x010d}, {0x0013, 0x010e}, + {0x0013, 0x010f}, {0x0013, 0x0110}, {0x0013, 0x0111}, {0x0013, 0x0112}, {0x0013, 0x0113}, {0x0013, 0x0114}, {0x0013, 0x0115}, {0x0013, 0x0116}, + {0x0013, 0x0117}, {0x0013, 0x0118}, {0x0013, 0x0119}, {0x0013, 0x011a}, {0x0013, 0x011b}, {0x0013, 0x011c}, {0x0013, 0x011d}, {0x0013, 0x011e}, + {0x0013, 0x011f}, {0x0013, 0x0120}, {0x0013, 0x0121}, {0x0013, 0x0122}, {0x0013, 0x0123}, {0x0013, 0x0124}, {0x0013, 0x0125}, {0x0013, 0x0126}, + {0x0013, 0x0127}, {0x0013, 0x0128}, {0x0013, 0x0129}, {0x0013, 0x012a}, {0x0013, 0x012b}, {0x0013, 0x012c}, {0x0013, 0x012d}, {0x0013, 0x012e}, + {0x0013, 0x012f}, {0x0013, 0x0130}, {0x0013, 0x0131}, {0x0013, 0x0132}, {0x0013, 0x0133}, {0x0013, 0x0134}, {0x0013, 0x0135}, {0x0013, 0x0136}, + {0x0013, 0x0137}, {0x0013, 0x0138}, {0x0013, 0x0139}, {0x0013, 0x013a}, {0x0013, 0x013b}, {0x0013, 0x013c}, {0x0013, 0x013d}, {0x0013, 0x013e}, + {0x0013, 0x013f}, {0x0013, 0x0140}, {0x0013, 0x0141}, {0x0013, 0x0142}, {0x0013, 0x0143}, {0x0013, 0x0144}, {0x0013, 0x0145}, {0x0013, 0x0146}, + {0x0013, 0x0147}, {0x0013, 0x0148}, {0x0013, 0x0149}, {0x0013, 0x014a}, {0x0013, 0x014b}, {0x0013, 0x014c}, {0x0013, 0x014d}, {0x0013, 0x014e}, + {0x0013, 0x014f}, {0x0013, 0x0150}, {0x0013, 0x0151}, {0x0013, 0x0152}, {0x0013, 0x0153}, {0x0013, 0x0154}, {0x0013, 0x0155}, {0x0013, 0x0156}, + {0x0013, 0x0157}, {0x0013, 0x0158}, {0x0013, 0x0159}, {0x0013, 0x015a}, {0x0013, 0x015b}, {0x0013, 0x015c}, {0x0013, 0x015d}, {0x0013, 0x015e}, + {0x0013, 0x015f}, {0x0013, 0x0160}, {0x0013, 0x0161}, {0x0013, 0x0162}, {0x0013, 0x0163}, {0x0013, 0x0164}, {0x0013, 0x0165}, {0x0013, 0x0166}, + {0x0013, 0x0167}, {0x0013, 0x0168}, {0x0013, 0x0169}, {0x0013, 0x016a}, {0x0013, 0x016b}, {0x0013, 0x016c}, {0x0013, 0x016d}, {0x0013, 0x016e}, + {0x0013, 0x016f}, {0x0013, 0x0170}, {0x0013, 0x0171}, {0x0013, 0x0172}, {0x0013, 0x0173}, {0x0013, 0x0174}, {0x0013, 0x0175}, {0x0013, 0x0176}, + {0x0013, 0x0177}, {0x0013, 0x0178}, {0x0013, 0x0179}, {0x0013, 0x017a}, {0x0013, 0x017b}, {0x0013, 0x017c}, {0x0013, 0x017d}, {0x0013, 0x017e}, + {0x0013, 0x017f}, {0x0013, 0x0180}, {0x0013, 0x0181}, {0x0013, 0x0182}, {0x0013, 0x0183}, {0x0013, 0x0184}, {0x0013, 0x0185}, {0x0013, 0x0186}, + {0x0013, 0x0187}, {0x0013, 0x0188}, {0x0013, 0x0189}, {0x0013, 0x018a}, {0x0013, 0x018b}, {0x0013, 0x018c}, {0x0013, 0x018d}, {0x0013, 0x018e}, + {0x0013, 0x018f}, {0x0013, 0x0190}, {0x0013, 0x0191}, {0x0013, 0x0192}, {0x0013, 0x0193}, {0x0013, 0x0194}, {0x0013, 0x0195}, {0x0013, 0x0196}, + {0x0013, 0x0197}, {0x0013, 0x0198}, {0x0013, 0x0199}, {0x0013, 0x019a}, {0x0013, 0x019b}, {0x0013, 0x019c}, {0x0013, 0x019d}, {0x0013, 0x019e}, + {0x0013, 0x019f}, {0x0013, 0x01a0}, {0x0013, 0x01a1}, {0x0013, 0x01a2}, {0x0013, 0x01a3}, {0x0013, 0x01a4}, {0x0013, 0x01a5}, {0x0013, 0x01a6}, + {0x0013, 0x01a7}, {0x0013, 0x01a8}, {0x0013, 0x01a9}, {0x0013, 0x01aa}, {0x0013, 0x01ab}, {0x0013, 0x01ac}, {0x0013, 0x01ad}, {0x0013, 0x01ae}, + {0x0013, 0x01af}, {0x0013, 0x01b0}, {0x0013, 0x01b1}, {0x0013, 0x01b2}, {0x0013, 0x01b3}, {0x0013, 0x01b4}, {0x0013, 0x01b5}, {0x0013, 0x01b6}, + {0x0013, 0x01b7}, {0x0013, 0x01b8}, {0x0013, 0x01b9}, {0x0013, 0x01ba}, {0x0013, 0x01bb}, {0x0013, 0x01bc}, {0x0013, 0x01bd}, {0x0013, 0x01be}, + {0x0013, 0x01bf}, {0x0013, 0x01c0}, {0x0013, 0x01c1}, {0x0013, 0x01c2}, {0x0013, 0x01c3}, {0x0013, 0x01c4}, {0x0013, 0x01c5}, {0x0013, 0x01c6}, + {0x0013, 0x01c7}, {0x0013, 0x01c8}, {0x0013, 0x01c9}, {0x0013, 0x01ca}, {0x0013, 0x01cb}, {0x0013, 0x01cc}, {0x0013, 0x01cd}, {0x0013, 0x01ce}, + {0x0013, 0x01cf}, {0x0013, 0x01d0}, {0x0013, 0x01d1}, {0x0013, 0x01d2}, {0x0013, 0x01d3}, {0x0013, 0x01d4}, {0x0013, 0x01d5}, {0x0013, 0x01d6}, + {0x0013, 0x01d7}, {0x0013, 0x01d8}, {0x0013, 0x01d9}, {0x0013, 0x01da}, {0x0013, 0x01db}, {0x0013, 0x01dc}, {0x0013, 0x01dd}, {0x0013, 0x01de}, + {0x0013, 0x01df}, {0x0013, 0x01e0}, {0x0013, 0x01e1}, {0x0013, 0x01e2}, {0x0013, 0x01e3}, {0x0013, 0x01e4}, {0x0013, 0x01e5}, {0x0013, 0x01e6}, + {0x0013, 0x01e7}, {0x0013, 0x01e8}, {0x0013, 0x01e9}, {0x0013, 0x01ea}, {0x0013, 0x01eb}, {0x0013, 0x01ec}, {0x0013, 0x01ed}, {0x0013, 0x01ee}, + {0x0013, 0x01ef}, {0x0013, 0x01f0}, {0x0013, 0x01f1}, {0x0013, 0x01f2}, {0x0013, 0x01f3}, {0x0013, 0x01f4}, {0x0013, 0x01f5}, {0x0013, 0x01f6}, + {0x0013, 0x01f7}, {0x0013, 0x01f8}, {0x0013, 0x01f9}, {0x0013, 0x01fa}, {0x0013, 0x01fb}, {0x0013, 0x01fc}, {0x0013, 0x01fd}, {0x0013, 0x01fe}, + {0x0013, 0x01ff}, + +}; + +const unsigned int c_aaiCQMFHuffDec13[98][16] = +{ + {0x0006ffff, 0x0004ffff, 0x0005ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x00000000, 0x00000001, 0x00000019, 0x0000001b, 0x0000001c, 0x00000033, 0x00000034, 0x0000004c, 0x0001001a, 0x0001001a, }, + {0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, }, + {0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, }, + {0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, }, + {0x00010067, 0x00010067, 0x0001007e, 0x0001007e, 0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, 0x00020036, 0x00020036, 0x00020036, 0x00020036, }, + {0x0002004e, 0x0002004e, 0x0002004e, 0x0002004e, 0x00020064, 0x00020064, 0x00020064, 0x00020064, 0x00020065, 0x00020065, 0x00020065, 0x00020065, 0x00020066, 0x00020066, 0x00020066, 0x00020066, }, + {0x000cffff, 0x000bffff, 0x000affff, 0x0008ffff, 0x0007ffff, 0x0009ffff, 0x00000005, 0x00000037, 0x00000068, 0x0000007d, 0x0000007f, 0x00000080, 0x0001001e, 0x0001001e, 0x0001004f, 0x0001004f, }, + {0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, }, + {0x00020096, 0x00020096, 0x00020096, 0x00020096, 0x00020099, 0x00020099, 0x00020099, 0x00020099, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, }, + {0x00030097, 0x00030097, 0x00030097, 0x00030097, 0x00030097, 0x00030097, 0x00030097, 0x00030097, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, }, + {0x00020006, 0x00020006, 0x00020006, 0x00020006, 0x00020051, 0x00020051, 0x00020051, 0x00020051, 0x00020069, 0x00020069, 0x00020069, 0x00020069, 0x00020081, 0x00020081, 0x00020081, 0x00020081, }, + {0x000000af, 0x000000b2, 0x00010020, 0x00010020, 0x00010039, 0x00010039, 0x0001006a, 0x0001006a, 0x00010082, 0x00010082, 0x0001009a, 0x0001009a, 0x000100b0, 0x000100b0, 0x000100b1, 0x000100b1, }, + {0x001effff, 0x002fffff, 0x0040ffff, 0x0051ffff, 0x0014ffff, 0x0013ffff, 0x0011ffff, 0x0012ffff, 0x000effff, 0x000dffff, 0x000fffff, 0x0010ffff, 0x00000007, 0x00000052, 0x00000083, 0x0000009b, }, + {0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, }, + {0x000200cb, 0x000200cb, 0x000200cb, 0x000200cb, 0x000200cc, 0x000200cc, 0x000200cc, 0x000200cc, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, }, + {0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x000300b3, 0x000300b3, 0x000300b3, 0x000300b3, 0x000300b3, 0x000300b3, 0x000300b3, 0x000300b3, }, + {0x000300c9, 0x000300c9, 0x000300c9, 0x000300c9, 0x000300c9, 0x000300c9, 0x000300c9, 0x000300c9, 0x000300ca, 0x000300ca, 0x000300ca, 0x000300ca, 0x000300ca, 0x000300ca, 0x000300ca, 0x000300ca, }, + {0x000100e3, 0x000100e3, 0x000100e4, 0x000100e4, 0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006c, 0x00020084, 0x00020084, 0x00020084, 0x00020084, }, + {0x0002009c, 0x0002009c, 0x0002009c, 0x0002009c, 0x0002009d, 0x0002009d, 0x0002009d, 0x0002009d, 0x000200b4, 0x000200b4, 0x000200b4, 0x000200b4, 0x000200c8, 0x000200c8, 0x000200c8, 0x000200c8, }, + {0x000000e5, 0x000000fb, 0x000000fc, 0x000000fd, 0x00010022, 0x00010022, 0x0001003b, 0x0001003b, 0x00010085, 0x00010085, 0x000100b5, 0x000100b5, 0x000100cd, 0x000100cd, 0x000100e2, 0x000100e2, }, + {0x001cffff, 0x001dffff, 0x0015ffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x0019ffff, 0x001affff, 0x001bffff, 0x00000009, 0x00000023, 0x00000054, 0x00000055, 0x0000006e, 0x000000ce, 0x000000e1, }, + {0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, }, + {0x00030086, 0x00030086, 0x00030086, 0x00030086, 0x00030086, 0x00030086, 0x00030086, 0x00030086, 0x0003009e, 0x0003009e, 0x0003009e, 0x0003009e, 0x0003009e, 0x0003009e, 0x0003009e, 0x0003009e, }, + {0x0003009f, 0x0003009f, 0x0003009f, 0x0003009f, 0x0003009f, 0x0003009f, 0x0003009f, 0x0003009f, 0x000300b6, 0x000300b6, 0x000300b6, 0x000300b6, 0x000300b6, 0x000300b6, 0x000300b6, 0x000300b6, }, + {0x000300b7, 0x000300b7, 0x000300b7, 0x000300b7, 0x000300b7, 0x000300b7, 0x000300b7, 0x000300b7, 0x000300e6, 0x000300e6, 0x000300e6, 0x000300e6, 0x000300e6, 0x000300e6, 0x000300e6, 0x000300e6, }, + {0x000300e7, 0x000300e7, 0x000300e7, 0x000300e7, 0x000300e7, 0x000300e7, 0x000300e7, 0x000300e7, 0x000300fe, 0x000300fe, 0x000300fe, 0x000300fe, 0x000300fe, 0x000300fe, 0x000300fe, 0x000300fe, }, + {0x000300ff, 0x000300ff, 0x000300ff, 0x000300ff, 0x000300ff, 0x000300ff, 0x000300ff, 0x000300ff, 0x00030113, 0x00030113, 0x00030113, 0x00030113, 0x00030113, 0x00030113, 0x00030113, 0x00030113, }, + {0x00030114, 0x00030114, 0x00030114, 0x00030114, 0x00030114, 0x00030114, 0x00030114, 0x00030114, 0x00030116, 0x00030116, 0x00030116, 0x00030116, 0x00030116, 0x00030116, 0x00030116, 0x00030116, }, + {0x00020025, 0x00020025, 0x00020025, 0x00020025, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003d, 0x000200a0, 0x000200a0, 0x000200a0, 0x000200a0, }, + {0x000200a1, 0x000200a1, 0x000200a1, 0x000200a1, 0x000200d0, 0x000200d0, 0x000200d0, 0x000200d0, 0x000200d1, 0x000200d1, 0x000200d1, 0x000200d1, 0x000200fa, 0x000200fa, 0x000200fa, 0x000200fa, }, + {0x0021ffff, 0x0023ffff, 0x0022ffff, 0x0025ffff, 0x0024ffff, 0x0026ffff, 0x0029ffff, 0x001fffff, 0x0020ffff, 0x0027ffff, 0x0028ffff, 0x002affff, 0x002bffff, 0x002cffff, 0x002dffff, 0x002effff, }, + {0x00010071, 0x00010071, 0x00010072, 0x00010072, 0x00010073, 0x00010073, 0x00010074, 0x00010074, 0x00010075, 0x00010075, 0x00010076, 0x00010076, 0x00010077, 0x00010077, 0x00010078, 0x00010078, }, + {0x00010079, 0x00010079, 0x0001007a, 0x0001007a, 0x0001007b, 0x0001007b, 0x0001007c, 0x0001007c, 0x00010087, 0x00010087, 0x00010088, 0x00010088, 0x00010089, 0x00010089, 0x0001008a, 0x0001008a, }, + {0x0001000a, 0x0001000a, 0x0001000b, 0x0001000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, 0x00010010, 0x00010010, 0x00010011, 0x00010011, }, + {0x00010027, 0x00010027, 0x00010028, 0x00010028, 0x00010029, 0x00010029, 0x0001002a, 0x0001002a, 0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, 0x0001002e, 0x0001002e, }, + {0x00010012, 0x00010012, 0x00010013, 0x00010013, 0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010026, 0x00010026, }, + {0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, 0x00010046, 0x00010046, 0x00010047, 0x00010047, 0x00010048, 0x00010048, 0x00010049, 0x00010049, 0x0001004a, 0x0001004a, }, + {0x0001002f, 0x0001002f, 0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x00010040, 0x00010040, 0x00010041, 0x00010041, 0x00010042, 0x00010042, }, + {0x00010056, 0x00010056, 0x00010057, 0x00010057, 0x00010058, 0x00010058, 0x00010059, 0x00010059, 0x0001005a, 0x0001005a, 0x0001005b, 0x0001005b, 0x0001005c, 0x0001005c, 0x0001005d, 0x0001005d, }, + {0x0001008b, 0x0001008b, 0x0001008c, 0x0001008c, 0x0001008d, 0x0001008d, 0x0001008e, 0x0001008e, 0x0001008f, 0x0001008f, 0x00010090, 0x00010090, 0x00010091, 0x00010091, 0x00010092, 0x00010092, }, + {0x00010093, 0x00010093, 0x00010094, 0x00010094, 0x00010095, 0x00010095, 0x000100a2, 0x000100a2, 0x000100a3, 0x000100a3, 0x000100a4, 0x000100a4, 0x000100a5, 0x000100a5, 0x000100a6, 0x000100a6, }, + {0x0001005e, 0x0001005e, 0x0001005f, 0x0001005f, 0x00010060, 0x00010060, 0x00010061, 0x00010061, 0x00010062, 0x00010062, 0x00010063, 0x00010063, 0x0001006f, 0x0001006f, 0x00010070, 0x00010070, }, + {0x000100a7, 0x000100a7, 0x000100a8, 0x000100a8, 0x000100a9, 0x000100a9, 0x000100aa, 0x000100aa, 0x000100ab, 0x000100ab, 0x000100ac, 0x000100ac, 0x000100ad, 0x000100ad, 0x000100ae, 0x000100ae, }, + {0x000100b8, 0x000100b8, 0x000100b9, 0x000100b9, 0x000100ba, 0x000100ba, 0x000100bb, 0x000100bb, 0x000100bc, 0x000100bc, 0x000100bd, 0x000100bd, 0x000100be, 0x000100be, 0x000100bf, 0x000100bf, }, + {0x000100c0, 0x000100c0, 0x000100c1, 0x000100c1, 0x000100c2, 0x000100c2, 0x000100c3, 0x000100c3, 0x000100c4, 0x000100c4, 0x000100c5, 0x000100c5, 0x000100c6, 0x000100c6, 0x000100c7, 0x000100c7, }, + {0x000100cf, 0x000100cf, 0x000100d2, 0x000100d2, 0x000100d3, 0x000100d3, 0x000100d4, 0x000100d4, 0x000100d5, 0x000100d5, 0x000100d6, 0x000100d6, 0x000100d7, 0x000100d7, 0x000100d8, 0x000100d8, }, + {0x000100d9, 0x000100d9, 0x000100da, 0x000100da, 0x000100db, 0x000100db, 0x000100dc, 0x000100dc, 0x000100dd, 0x000100dd, 0x000100de, 0x000100de, 0x000100df, 0x000100df, 0x000100e0, 0x000100e0, }, + {0x0030ffff, 0x0031ffff, 0x0032ffff, 0x0033ffff, 0x0034ffff, 0x0035ffff, 0x0036ffff, 0x0037ffff, 0x0038ffff, 0x0039ffff, 0x003affff, 0x003bffff, 0x003cffff, 0x003dffff, 0x003effff, 0x003fffff, }, + {0x000100e8, 0x000100e8, 0x000100e9, 0x000100e9, 0x000100ea, 0x000100ea, 0x000100eb, 0x000100eb, 0x000100ec, 0x000100ec, 0x000100ed, 0x000100ed, 0x000100ee, 0x000100ee, 0x000100ef, 0x000100ef, }, + {0x000100f0, 0x000100f0, 0x000100f1, 0x000100f1, 0x000100f2, 0x000100f2, 0x000100f3, 0x000100f3, 0x000100f4, 0x000100f4, 0x000100f5, 0x000100f5, 0x000100f6, 0x000100f6, 0x000100f7, 0x000100f7, }, + {0x000100f8, 0x000100f8, 0x000100f9, 0x000100f9, 0x00010100, 0x00010100, 0x00010101, 0x00010101, 0x00010102, 0x00010102, 0x00010103, 0x00010103, 0x00010104, 0x00010104, 0x00010105, 0x00010105, }, + {0x00010106, 0x00010106, 0x00010107, 0x00010107, 0x00010108, 0x00010108, 0x00010109, 0x00010109, 0x0001010a, 0x0001010a, 0x0001010b, 0x0001010b, 0x0001010c, 0x0001010c, 0x0001010d, 0x0001010d, }, + {0x0001010e, 0x0001010e, 0x0001010f, 0x0001010f, 0x00010110, 0x00010110, 0x00010111, 0x00010111, 0x00010112, 0x00010112, 0x00010115, 0x00010115, 0x00010117, 0x00010117, 0x00010118, 0x00010118, }, + {0x00010119, 0x00010119, 0x0001011a, 0x0001011a, 0x0001011b, 0x0001011b, 0x0001011c, 0x0001011c, 0x0001011d, 0x0001011d, 0x0001011e, 0x0001011e, 0x0001011f, 0x0001011f, 0x00010120, 0x00010120, }, + {0x00010121, 0x00010121, 0x00010122, 0x00010122, 0x00010123, 0x00010123, 0x00010124, 0x00010124, 0x00010125, 0x00010125, 0x00010126, 0x00010126, 0x00010127, 0x00010127, 0x00010128, 0x00010128, }, + {0x00010129, 0x00010129, 0x0001012a, 0x0001012a, 0x0001012b, 0x0001012b, 0x0001012c, 0x0001012c, 0x0001012d, 0x0001012d, 0x0001012e, 0x0001012e, 0x0001012f, 0x0001012f, 0x00010130, 0x00010130, }, + {0x00010131, 0x00010131, 0x00010132, 0x00010132, 0x00010133, 0x00010133, 0x00010134, 0x00010134, 0x00010135, 0x00010135, 0x00010136, 0x00010136, 0x00010137, 0x00010137, 0x00010138, 0x00010138, }, + {0x00010139, 0x00010139, 0x0001013a, 0x0001013a, 0x0001013b, 0x0001013b, 0x0001013c, 0x0001013c, 0x0001013d, 0x0001013d, 0x0001013e, 0x0001013e, 0x0001013f, 0x0001013f, 0x00010140, 0x00010140, }, + {0x00010141, 0x00010141, 0x00010142, 0x00010142, 0x00010143, 0x00010143, 0x00010144, 0x00010144, 0x00010145, 0x00010145, 0x00010146, 0x00010146, 0x00010147, 0x00010147, 0x00010148, 0x00010148, }, + {0x00010149, 0x00010149, 0x0001014a, 0x0001014a, 0x0001014b, 0x0001014b, 0x0001014c, 0x0001014c, 0x0001014d, 0x0001014d, 0x0001014e, 0x0001014e, 0x0001014f, 0x0001014f, 0x00010150, 0x00010150, }, + {0x00010151, 0x00010151, 0x00010152, 0x00010152, 0x00010153, 0x00010153, 0x00010154, 0x00010154, 0x00010155, 0x00010155, 0x00010156, 0x00010156, 0x00010157, 0x00010157, 0x00010158, 0x00010158, }, + {0x00010159, 0x00010159, 0x0001015a, 0x0001015a, 0x0001015b, 0x0001015b, 0x0001015c, 0x0001015c, 0x0001015d, 0x0001015d, 0x0001015e, 0x0001015e, 0x0001015f, 0x0001015f, 0x00010160, 0x00010160, }, + {0x00010161, 0x00010161, 0x00010162, 0x00010162, 0x00010163, 0x00010163, 0x00010164, 0x00010164, 0x00010165, 0x00010165, 0x00010166, 0x00010166, 0x00010167, 0x00010167, 0x00010168, 0x00010168, }, + {0x00010169, 0x00010169, 0x0001016a, 0x0001016a, 0x0001016b, 0x0001016b, 0x0001016c, 0x0001016c, 0x0001016d, 0x0001016d, 0x0001016e, 0x0001016e, 0x0001016f, 0x0001016f, 0x00010170, 0x00010170, }, + {0x0041ffff, 0x0042ffff, 0x0043ffff, 0x0044ffff, 0x0045ffff, 0x0046ffff, 0x0047ffff, 0x0048ffff, 0x0049ffff, 0x004affff, 0x004bffff, 0x004cffff, 0x004dffff, 0x004effff, 0x004fffff, 0x0050ffff, }, + {0x00010171, 0x00010171, 0x00010172, 0x00010172, 0x00010173, 0x00010173, 0x00010174, 0x00010174, 0x00010175, 0x00010175, 0x00010176, 0x00010176, 0x00010177, 0x00010177, 0x00010178, 0x00010178, }, + {0x00010179, 0x00010179, 0x0001017a, 0x0001017a, 0x0001017b, 0x0001017b, 0x0001017c, 0x0001017c, 0x0001017d, 0x0001017d, 0x0001017e, 0x0001017e, 0x0001017f, 0x0001017f, 0x00010180, 0x00010180, }, + {0x00010181, 0x00010181, 0x00010182, 0x00010182, 0x00010183, 0x00010183, 0x00010184, 0x00010184, 0x00010185, 0x00010185, 0x00010186, 0x00010186, 0x00010187, 0x00010187, 0x00010188, 0x00010188, }, + {0x00010189, 0x00010189, 0x0001018a, 0x0001018a, 0x0001018b, 0x0001018b, 0x0001018c, 0x0001018c, 0x0001018d, 0x0001018d, 0x0001018e, 0x0001018e, 0x0001018f, 0x0001018f, 0x00010190, 0x00010190, }, + {0x00010191, 0x00010191, 0x00010192, 0x00010192, 0x00010193, 0x00010193, 0x00010194, 0x00010194, 0x00010195, 0x00010195, 0x00010196, 0x00010196, 0x00010197, 0x00010197, 0x00010198, 0x00010198, }, + {0x00010199, 0x00010199, 0x0001019a, 0x0001019a, 0x0001019b, 0x0001019b, 0x0001019c, 0x0001019c, 0x0001019d, 0x0001019d, 0x0001019e, 0x0001019e, 0x0001019f, 0x0001019f, 0x000101a0, 0x000101a0, }, + {0x000101a1, 0x000101a1, 0x000101a2, 0x000101a2, 0x000101a3, 0x000101a3, 0x000101a4, 0x000101a4, 0x000101a5, 0x000101a5, 0x000101a6, 0x000101a6, 0x000101a7, 0x000101a7, 0x000101a8, 0x000101a8, }, + {0x000101a9, 0x000101a9, 0x000101aa, 0x000101aa, 0x000101ab, 0x000101ab, 0x000101ac, 0x000101ac, 0x000101ad, 0x000101ad, 0x000101ae, 0x000101ae, 0x000101af, 0x000101af, 0x000101b0, 0x000101b0, }, + {0x000101b1, 0x000101b1, 0x000101b2, 0x000101b2, 0x000101b3, 0x000101b3, 0x000101b4, 0x000101b4, 0x000101b5, 0x000101b5, 0x000101b6, 0x000101b6, 0x000101b7, 0x000101b7, 0x000101b8, 0x000101b8, }, + {0x000101b9, 0x000101b9, 0x000101ba, 0x000101ba, 0x000101bb, 0x000101bb, 0x000101bc, 0x000101bc, 0x000101bd, 0x000101bd, 0x000101be, 0x000101be, 0x000101bf, 0x000101bf, 0x000101c0, 0x000101c0, }, + {0x000101c1, 0x000101c1, 0x000101c2, 0x000101c2, 0x000101c3, 0x000101c3, 0x000101c4, 0x000101c4, 0x000101c5, 0x000101c5, 0x000101c6, 0x000101c6, 0x000101c7, 0x000101c7, 0x000101c8, 0x000101c8, }, + {0x000101c9, 0x000101c9, 0x000101ca, 0x000101ca, 0x000101cb, 0x000101cb, 0x000101cc, 0x000101cc, 0x000101cd, 0x000101cd, 0x000101ce, 0x000101ce, 0x000101cf, 0x000101cf, 0x000101d0, 0x000101d0, }, + {0x000101d1, 0x000101d1, 0x000101d2, 0x000101d2, 0x000101d3, 0x000101d3, 0x000101d4, 0x000101d4, 0x000101d5, 0x000101d5, 0x000101d6, 0x000101d6, 0x000101d7, 0x000101d7, 0x000101d8, 0x000101d8, }, + {0x000101d9, 0x000101d9, 0x000101da, 0x000101da, 0x000101db, 0x000101db, 0x000101dc, 0x000101dc, 0x000101dd, 0x000101dd, 0x000101de, 0x000101de, 0x000101df, 0x000101df, 0x000101e0, 0x000101e0, }, + {0x000101e1, 0x000101e1, 0x000101e2, 0x000101e2, 0x000101e3, 0x000101e3, 0x000101e4, 0x000101e4, 0x000101e5, 0x000101e5, 0x000101e6, 0x000101e6, 0x000101e7, 0x000101e7, 0x000101e8, 0x000101e8, }, + {0x000101e9, 0x000101e9, 0x000101ea, 0x000101ea, 0x000101eb, 0x000101eb, 0x000101ec, 0x000101ec, 0x000101ed, 0x000101ed, 0x000101ee, 0x000101ee, 0x000101ef, 0x000101ef, 0x000101f0, 0x000101f0, }, + {0x0052ffff, 0x0053ffff, 0x0054ffff, 0x0055ffff, 0x0056ffff, 0x0057ffff, 0x0058ffff, 0x0059ffff, 0x005affff, 0x005bffff, 0x005cffff, 0x005dffff, 0x005effff, 0x005fffff, 0x0060ffff, 0x0061ffff, }, + {0x000101f1, 0x000101f1, 0x000101f2, 0x000101f2, 0x000101f3, 0x000101f3, 0x000101f4, 0x000101f4, 0x000101f5, 0x000101f5, 0x000101f6, 0x000101f6, 0x000101f7, 0x000101f7, 0x000101f8, 0x000101f8, }, + {0x000101f9, 0x000101f9, 0x000101fa, 0x000101fa, 0x000101fb, 0x000101fb, 0x000101fc, 0x000101fc, 0x000101fd, 0x000101fd, 0x000101fe, 0x000101fe, 0x000101ff, 0x000101ff, 0x00010200, 0x00010200, }, + {0x00010201, 0x00010201, 0x00010202, 0x00010202, 0x00010203, 0x00010203, 0x00010204, 0x00010204, 0x00010205, 0x00010205, 0x00010206, 0x00010206, 0x00010207, 0x00010207, 0x00010208, 0x00010208, }, + {0x00010209, 0x00010209, 0x0001020a, 0x0001020a, 0x0001020b, 0x0001020b, 0x0001020c, 0x0001020c, 0x0001020d, 0x0001020d, 0x0001020e, 0x0001020e, 0x0001020f, 0x0001020f, 0x00010210, 0x00010210, }, + {0x00010211, 0x00010211, 0x00010212, 0x00010212, 0x00010213, 0x00010213, 0x00010214, 0x00010214, 0x00010215, 0x00010215, 0x00010216, 0x00010216, 0x00010217, 0x00010217, 0x00010218, 0x00010218, }, + {0x00010219, 0x00010219, 0x0001021a, 0x0001021a, 0x0001021b, 0x0001021b, 0x0001021c, 0x0001021c, 0x0001021d, 0x0001021d, 0x0001021e, 0x0001021e, 0x0001021f, 0x0001021f, 0x00010220, 0x00010220, }, + {0x00010221, 0x00010221, 0x00010222, 0x00010222, 0x00010223, 0x00010223, 0x00010224, 0x00010224, 0x00010225, 0x00010225, 0x00010226, 0x00010226, 0x00010227, 0x00010227, 0x00010228, 0x00010228, }, + {0x00010229, 0x00010229, 0x0001022a, 0x0001022a, 0x0001022b, 0x0001022b, 0x0001022c, 0x0001022c, 0x0001022d, 0x0001022d, 0x0001022e, 0x0001022e, 0x0001022f, 0x0001022f, 0x00010230, 0x00010230, }, + {0x00010231, 0x00010231, 0x00010232, 0x00010232, 0x00010233, 0x00010233, 0x00010234, 0x00010234, 0x00010235, 0x00010235, 0x00010236, 0x00010236, 0x00010237, 0x00010237, 0x00010238, 0x00010238, }, + {0x00010239, 0x00010239, 0x0001023a, 0x0001023a, 0x0001023b, 0x0001023b, 0x0001023c, 0x0001023c, 0x0001023d, 0x0001023d, 0x0001023e, 0x0001023e, 0x0001023f, 0x0001023f, 0x00010240, 0x00010240, }, + {0x00010241, 0x00010241, 0x00010242, 0x00010242, 0x00010243, 0x00010243, 0x00010244, 0x00010244, 0x00010245, 0x00010245, 0x00010246, 0x00010246, 0x00010247, 0x00010247, 0x00010248, 0x00010248, }, + {0x00010249, 0x00010249, 0x0001024a, 0x0001024a, 0x0001024b, 0x0001024b, 0x0001024c, 0x0001024c, 0x0001024d, 0x0001024d, 0x0001024e, 0x0001024e, 0x0001024f, 0x0001024f, 0x00010250, 0x00010250, }, + {0x00010251, 0x00010251, 0x00010252, 0x00010252, 0x00010253, 0x00010253, 0x00010254, 0x00010254, 0x00010255, 0x00010255, 0x00010256, 0x00010256, 0x00010257, 0x00010257, 0x00010258, 0x00010258, }, + {0x00010259, 0x00010259, 0x0001025a, 0x0001025a, 0x0001025b, 0x0001025b, 0x0001025c, 0x0001025c, 0x0001025d, 0x0001025d, 0x0001025e, 0x0001025e, 0x0001025f, 0x0001025f, 0x00010260, 0x00010260, }, + {0x00010261, 0x00010261, 0x00010262, 0x00010262, 0x00010263, 0x00010263, 0x00010264, 0x00010264, 0x00010265, 0x00010265, 0x00010266, 0x00010266, 0x00010267, 0x00010267, 0x00010268, 0x00010268, }, + {0x00010269, 0x00010269, 0x0001026a, 0x0001026a, 0x0001026b, 0x0001026b, 0x0001026c, 0x0001026c, 0x0001026d, 0x0001026d, 0x0001026e, 0x0001026e, 0x0001026f, 0x0001026f, 0x00010270, 0x00010270, }, +}; + +const unsigned int c_aaiCQMFHuffEnc14[625][2] = +{ + {0x0005, 0x0007}, {0x0005, 0x0008}, {0x0005, 0x0009}, {0x0005, 0x000a}, {0x0006, 0x0007}, {0x0007, 0x0007}, {0x0009, 0x0009}, {0x000a, 0x000a}, + {0x000c, 0x000e}, {0x000e, 0x0019}, {0x000f, 0x0029}, {0x0010, 0x0046}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, + {0x0013, 0x0004}, {0x0013, 0x0005}, {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0013, 0x000b}, + {0x0013, 0x000c}, {0x0005, 0x000b}, {0x0004, 0x000a}, {0x0004, 0x000b}, {0x0004, 0x000c}, {0x0005, 0x000c}, {0x0006, 0x0008}, {0x0008, 0x0008}, + {0x0009, 0x000a}, {0x000b, 0x000c}, {0x000c, 0x000f}, {0x000e, 0x001a}, {0x0010, 0x0047}, {0x0010, 0x0048}, {0x0012, 0x00f1}, {0x0013, 0x000d}, + {0x0013, 0x000e}, {0x0013, 0x000f}, {0x0013, 0x0010}, {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0013, 0x0014}, {0x0013, 0x0015}, + {0x0013, 0x0016}, {0x0013, 0x0017}, {0x0005, 0x000d}, {0x0004, 0x000d}, {0x0004, 0x000e}, {0x0005, 0x000e}, {0x0006, 0x0009}, {0x0007, 0x0008}, + {0x0008, 0x0009}, {0x000a, 0x000b}, {0x000b, 0x000d}, {0x000d, 0x0013}, {0x000e, 0x001b}, {0x0010, 0x0049}, {0x0013, 0x0018}, {0x0013, 0x0019}, + {0x0013, 0x001a}, {0x0013, 0x001b}, {0x0013, 0x001c}, {0x0013, 0x001d}, {0x0013, 0x001e}, {0x0013, 0x001f}, {0x0013, 0x0020}, {0x0013, 0x0021}, + {0x0013, 0x0022}, {0x0013, 0x0023}, {0x0013, 0x0024}, {0x0005, 0x000f}, {0x0004, 0x000f}, {0x0005, 0x0010}, {0x0005, 0x0011}, {0x0006, 0x000a}, + {0x0007, 0x0009}, {0x0009, 0x000b}, {0x000a, 0x000c}, {0x000c, 0x0010}, {0x000d, 0x0014}, {0x000f, 0x002a}, {0x0012, 0x00f2}, {0x0013, 0x0025}, + {0x0013, 0x0026}, {0x0013, 0x0027}, {0x0013, 0x0028}, {0x0013, 0x0029}, {0x0013, 0x002a}, {0x0013, 0x002b}, {0x0013, 0x002c}, {0x0013, 0x002d}, + {0x0013, 0x002e}, {0x0013, 0x002f}, {0x0013, 0x0030}, {0x0013, 0x0031}, {0x0006, 0x000b}, {0x0005, 0x0012}, {0x0005, 0x0013}, {0x0006, 0x000c}, + {0x0007, 0x000a}, {0x0008, 0x000a}, {0x000a, 0x000d}, {0x000b, 0x000e}, {0x000c, 0x0011}, {0x000e, 0x001c}, {0x000f, 0x002b}, {0x0011, 0x0081}, + {0x0013, 0x0032}, {0x0012, 0x00f3}, {0x0013, 0x0033}, {0x0013, 0x0034}, {0x0013, 0x0035}, {0x0013, 0x0036}, {0x0013, 0x0037}, {0x0013, 0x0038}, + {0x0013, 0x0039}, {0x0013, 0x003a}, {0x0013, 0x003b}, {0x0013, 0x003c}, {0x0013, 0x003d}, {0x0007, 0x000b}, {0x0006, 0x000d}, {0x0007, 0x000c}, + {0x0007, 0x000d}, {0x0008, 0x000b}, {0x0009, 0x000c}, {0x000b, 0x000f}, {0x000c, 0x0012}, {0x000d, 0x0015}, {0x000e, 0x001d}, {0x0010, 0x004a}, + {0x0011, 0x0082}, {0x0013, 0x003e}, {0x0013, 0x003f}, {0x0013, 0x0040}, {0x0013, 0x0041}, {0x0013, 0x0042}, {0x0013, 0x0043}, {0x0013, 0x0044}, + {0x0013, 0x0045}, {0x0013, 0x0046}, {0x0013, 0x0047}, {0x0013, 0x0048}, {0x0013, 0x0049}, {0x0013, 0x004a}, {0x0009, 0x000d}, {0x0008, 0x000c}, + {0x0008, 0x000d}, {0x0009, 0x000e}, {0x000a, 0x000e}, {0x000b, 0x0010}, {0x000c, 0x0013}, {0x000d, 0x0016}, {0x000e, 0x001e}, {0x000f, 0x002c}, + {0x0010, 0x004b}, {0x0012, 0x00f4}, {0x0012, 0x00f5}, {0x0013, 0x004b}, {0x0013, 0x004c}, {0x0013, 0x004d}, {0x0013, 0x004e}, {0x0013, 0x004f}, + {0x0013, 0x0050}, {0x0013, 0x0051}, {0x0013, 0x0052}, {0x0013, 0x0053}, {0x0013, 0x0054}, {0x0013, 0x0055}, {0x0013, 0x0056}, {0x000a, 0x000f}, + {0x0009, 0x000f}, {0x000a, 0x0010}, {0x000a, 0x0011}, {0x000b, 0x0011}, {0x000c, 0x0014}, {0x000d, 0x0017}, {0x000e, 0x001f}, {0x000f, 0x002d}, + {0x0010, 0x004c}, {0x0011, 0x0083}, {0x0011, 0x0084}, {0x0013, 0x0057}, {0x0013, 0x0058}, {0x0013, 0x0059}, {0x0013, 0x005a}, {0x0013, 0x005b}, + {0x0013, 0x005c}, {0x0013, 0x005d}, {0x0013, 0x005e}, {0x0013, 0x005f}, {0x0013, 0x0060}, {0x0013, 0x0061}, {0x0013, 0x0062}, {0x0013, 0x0063}, + {0x000c, 0x0015}, {0x000b, 0x0012}, {0x000b, 0x0013}, {0x000c, 0x0016}, {0x000c, 0x0017}, {0x000d, 0x0018}, {0x000e, 0x0020}, {0x000f, 0x002e}, + {0x0011, 0x0085}, {0x0010, 0x004d}, {0x0013, 0x0064}, {0x0013, 0x0065}, {0x0013, 0x0066}, {0x0013, 0x0067}, {0x0013, 0x0068}, {0x0013, 0x0069}, + {0x0013, 0x006a}, {0x0013, 0x006b}, {0x0013, 0x006c}, {0x0013, 0x006d}, {0x0013, 0x006e}, {0x0013, 0x006f}, {0x0013, 0x0070}, {0x0013, 0x0071}, + {0x0013, 0x0072}, {0x000e, 0x0021}, {0x000d, 0x0019}, {0x000d, 0x001a}, {0x000d, 0x001b}, {0x000e, 0x0022}, {0x000f, 0x002f}, {0x0010, 0x004e}, + {0x0011, 0x0086}, {0x0011, 0x0087}, {0x0013, 0x0073}, {0x0012, 0x00f6}, {0x0013, 0x0074}, {0x0013, 0x0075}, {0x0013, 0x0076}, {0x0013, 0x0077}, + {0x0013, 0x0078}, {0x0013, 0x0079}, {0x0013, 0x007a}, {0x0013, 0x007b}, {0x0013, 0x007c}, {0x0013, 0x007d}, {0x0013, 0x007e}, {0x0013, 0x007f}, + {0x0013, 0x0080}, {0x0013, 0x0081}, {0x000f, 0x0030}, {0x000e, 0x0023}, {0x000e, 0x0024}, {0x000e, 0x0025}, {0x0010, 0x004f}, {0x0012, 0x00f7}, + {0x0011, 0x0088}, {0x0012, 0x00f8}, {0x0012, 0x00f9}, {0x0012, 0x00fa}, {0x0013, 0x0082}, {0x0013, 0x0083}, {0x0013, 0x0084}, {0x0013, 0x0085}, + {0x0013, 0x0086}, {0x0013, 0x0087}, {0x0013, 0x0088}, {0x0013, 0x0089}, {0x0013, 0x008a}, {0x0013, 0x008b}, {0x0013, 0x008c}, {0x0013, 0x008d}, + {0x0013, 0x008e}, {0x0013, 0x008f}, {0x0013, 0x0090}, {0x0012, 0x00fb}, {0x0010, 0x0050}, {0x0010, 0x0051}, {0x000f, 0x0031}, {0x0012, 0x00fc}, + {0x0012, 0x00fd}, {0x0012, 0x00fe}, {0x0013, 0x0091}, {0x0013, 0x0092}, {0x0013, 0x0093}, {0x0013, 0x0094}, {0x0013, 0x0095}, {0x0013, 0x0096}, + {0x0013, 0x0097}, {0x0013, 0x0098}, {0x0013, 0x0099}, {0x0013, 0x009a}, {0x0013, 0x009b}, {0x0013, 0x009c}, {0x0013, 0x009d}, {0x0013, 0x009e}, + {0x0013, 0x009f}, {0x0013, 0x00a0}, {0x0013, 0x00a1}, {0x0013, 0x00a2}, {0x0013, 0x00a3}, {0x0013, 0x00a4}, {0x0011, 0x0089}, {0x0011, 0x008a}, + {0x0013, 0x00a5}, {0x0013, 0x00a6}, {0x0011, 0x008b}, {0x0013, 0x00a7}, {0x0013, 0x00a8}, {0x0013, 0x00a9}, {0x0013, 0x00aa}, {0x0013, 0x00ab}, + {0x0013, 0x00ac}, {0x0013, 0x00ad}, {0x0013, 0x00ae}, {0x0013, 0x00af}, {0x0013, 0x00b0}, {0x0013, 0x00b1}, {0x0013, 0x00b2}, {0x0013, 0x00b3}, + {0x0013, 0x00b4}, {0x0013, 0x00b5}, {0x0013, 0x00b6}, {0x0013, 0x00b7}, {0x0013, 0x00b8}, {0x0013, 0x00b9}, {0x0012, 0x00ff}, {0x0013, 0x00ba}, + {0x0012, 0x0100}, {0x0013, 0x00bb}, {0x0013, 0x00bc}, {0x0013, 0x00bd}, {0x0013, 0x00be}, {0x0013, 0x00bf}, {0x0013, 0x00c0}, {0x0013, 0x00c1}, + {0x0013, 0x00c2}, {0x0013, 0x00c3}, {0x0013, 0x00c4}, {0x0013, 0x00c5}, {0x0013, 0x00c6}, {0x0013, 0x00c7}, {0x0013, 0x00c8}, {0x0013, 0x00c9}, + {0x0013, 0x00ca}, {0x0013, 0x00cb}, {0x0013, 0x00cc}, {0x0013, 0x00cd}, {0x0013, 0x00ce}, {0x0013, 0x00cf}, {0x0013, 0x00d0}, {0x0013, 0x00d1}, + {0x0013, 0x00d2}, {0x0013, 0x00d3}, {0x0013, 0x00d4}, {0x0013, 0x00d5}, {0x0013, 0x00d6}, {0x0013, 0x00d7}, {0x0013, 0x00d8}, {0x0013, 0x00d9}, + {0x0013, 0x00da}, {0x0013, 0x00db}, {0x0013, 0x00dc}, {0x0013, 0x00dd}, {0x0013, 0x00de}, {0x0013, 0x00df}, {0x0013, 0x00e0}, {0x0013, 0x00e1}, + {0x0013, 0x00e2}, {0x0013, 0x00e3}, {0x0013, 0x00e4}, {0x0013, 0x00e5}, {0x0013, 0x00e6}, {0x0013, 0x00e7}, {0x0013, 0x00e8}, {0x0013, 0x00e9}, + {0x0013, 0x00ea}, {0x0013, 0x00eb}, {0x0013, 0x00ec}, {0x0013, 0x00ed}, {0x0013, 0x00ee}, {0x0013, 0x00ef}, {0x0013, 0x00f0}, {0x0013, 0x00f1}, + {0x0013, 0x00f2}, {0x0013, 0x00f3}, {0x0013, 0x00f4}, {0x0013, 0x00f5}, {0x0013, 0x00f6}, {0x0013, 0x00f7}, {0x0013, 0x00f8}, {0x0013, 0x00f9}, + {0x0013, 0x00fa}, {0x0013, 0x00fb}, {0x0013, 0x00fc}, {0x0013, 0x00fd}, {0x0013, 0x00fe}, {0x0013, 0x00ff}, {0x0013, 0x0100}, {0x0013, 0x0101}, + {0x0013, 0x0102}, {0x0013, 0x0103}, {0x0013, 0x0104}, {0x0013, 0x0105}, {0x0013, 0x0106}, {0x0013, 0x0107}, {0x0013, 0x0108}, {0x0013, 0x0109}, + {0x0013, 0x010a}, {0x0013, 0x010b}, {0x0013, 0x010c}, {0x0013, 0x010d}, {0x0013, 0x010e}, {0x0013, 0x010f}, {0x0013, 0x0110}, {0x0013, 0x0111}, + {0x0013, 0x0112}, {0x0013, 0x0113}, {0x0013, 0x0114}, {0x0013, 0x0115}, {0x0013, 0x0116}, {0x0013, 0x0117}, {0x0013, 0x0118}, {0x0013, 0x0119}, + {0x0013, 0x011a}, {0x0013, 0x011b}, {0x0013, 0x011c}, {0x0013, 0x011d}, {0x0013, 0x011e}, {0x0013, 0x011f}, {0x0013, 0x0120}, {0x0013, 0x0121}, + {0x0013, 0x0122}, {0x0013, 0x0123}, {0x0013, 0x0124}, {0x0013, 0x0125}, {0x0013, 0x0126}, {0x0013, 0x0127}, {0x0013, 0x0128}, {0x0013, 0x0129}, + {0x0013, 0x012a}, {0x0013, 0x012b}, {0x0013, 0x012c}, {0x0013, 0x012d}, {0x0013, 0x012e}, {0x0013, 0x012f}, {0x0013, 0x0130}, {0x0013, 0x0131}, + {0x0013, 0x0132}, {0x0013, 0x0133}, {0x0013, 0x0134}, {0x0013, 0x0135}, {0x0013, 0x0136}, {0x0013, 0x0137}, {0x0013, 0x0138}, {0x0013, 0x0139}, + {0x0013, 0x013a}, {0x0013, 0x013b}, {0x0013, 0x013c}, {0x0013, 0x013d}, {0x0013, 0x013e}, {0x0013, 0x013f}, {0x0013, 0x0140}, {0x0013, 0x0141}, + {0x0013, 0x0142}, {0x0013, 0x0143}, {0x0013, 0x0144}, {0x0013, 0x0145}, {0x0013, 0x0146}, {0x0013, 0x0147}, {0x0013, 0x0148}, {0x0013, 0x0149}, + {0x0013, 0x014a}, {0x0013, 0x014b}, {0x0013, 0x014c}, {0x0013, 0x014d}, {0x0013, 0x014e}, {0x0013, 0x014f}, {0x0013, 0x0150}, {0x0013, 0x0151}, + {0x0013, 0x0152}, {0x0013, 0x0153}, {0x0013, 0x0154}, {0x0013, 0x0155}, {0x0013, 0x0156}, {0x0013, 0x0157}, {0x0013, 0x0158}, {0x0013, 0x0159}, + {0x0013, 0x015a}, {0x0013, 0x015b}, {0x0013, 0x015c}, {0x0013, 0x015d}, {0x0013, 0x015e}, {0x0013, 0x015f}, {0x0013, 0x0160}, {0x0013, 0x0161}, + {0x0013, 0x0162}, {0x0013, 0x0163}, {0x0013, 0x0164}, {0x0013, 0x0165}, {0x0013, 0x0166}, {0x0013, 0x0167}, {0x0013, 0x0168}, {0x0013, 0x0169}, + {0x0013, 0x016a}, {0x0013, 0x016b}, {0x0013, 0x016c}, {0x0013, 0x016d}, {0x0013, 0x016e}, {0x0013, 0x016f}, {0x0013, 0x0170}, {0x0013, 0x0171}, + {0x0013, 0x0172}, {0x0013, 0x0173}, {0x0013, 0x0174}, {0x0013, 0x0175}, {0x0013, 0x0176}, {0x0013, 0x0177}, {0x0013, 0x0178}, {0x0013, 0x0179}, + {0x0013, 0x017a}, {0x0013, 0x017b}, {0x0013, 0x017c}, {0x0013, 0x017d}, {0x0013, 0x017e}, {0x0013, 0x017f}, {0x0013, 0x0180}, {0x0013, 0x0181}, + {0x0013, 0x0182}, {0x0013, 0x0183}, {0x0013, 0x0184}, {0x0013, 0x0185}, {0x0013, 0x0186}, {0x0013, 0x0187}, {0x0013, 0x0188}, {0x0013, 0x0189}, + {0x0013, 0x018a}, {0x0013, 0x018b}, {0x0013, 0x018c}, {0x0013, 0x018d}, {0x0013, 0x018e}, {0x0013, 0x018f}, {0x0013, 0x0190}, {0x0013, 0x0191}, + {0x0013, 0x0192}, {0x0013, 0x0193}, {0x0013, 0x0194}, {0x0013, 0x0195}, {0x0013, 0x0196}, {0x0013, 0x0197}, {0x0013, 0x0198}, {0x0013, 0x0199}, + {0x0013, 0x019a}, {0x0013, 0x019b}, {0x0013, 0x019c}, {0x0013, 0x019d}, {0x0013, 0x019e}, {0x0013, 0x019f}, {0x0013, 0x01a0}, {0x0013, 0x01a1}, + {0x0013, 0x01a2}, {0x0013, 0x01a3}, {0x0013, 0x01a4}, {0x0013, 0x01a5}, {0x0013, 0x01a6}, {0x0013, 0x01a7}, {0x0013, 0x01a8}, {0x0013, 0x01a9}, + {0x0013, 0x01aa}, {0x0013, 0x01ab}, {0x0013, 0x01ac}, {0x0013, 0x01ad}, {0x0013, 0x01ae}, {0x0013, 0x01af}, {0x0013, 0x01b0}, {0x0013, 0x01b1}, + {0x0013, 0x01b2}, {0x0013, 0x01b3}, {0x0013, 0x01b4}, {0x0013, 0x01b5}, {0x0013, 0x01b6}, {0x0013, 0x01b7}, {0x0013, 0x01b8}, {0x0013, 0x01b9}, + {0x0013, 0x01ba}, {0x0013, 0x01bb}, {0x0013, 0x01bc}, {0x0013, 0x01bd}, {0x0013, 0x01be}, {0x0013, 0x01bf}, {0x0013, 0x01c0}, {0x0013, 0x01c1}, + {0x0013, 0x01c2}, {0x0013, 0x01c3}, {0x0013, 0x01c4}, {0x0013, 0x01c5}, {0x0013, 0x01c6}, {0x0013, 0x01c7}, {0x0013, 0x01c8}, {0x0013, 0x01c9}, + {0x0013, 0x01ca}, {0x0013, 0x01cb}, {0x0013, 0x01cc}, {0x0013, 0x01cd}, {0x0013, 0x01ce}, {0x0013, 0x01cf}, {0x0013, 0x01d0}, {0x0013, 0x01d1}, + {0x0013, 0x01d2}, {0x0013, 0x01d3}, {0x0013, 0x01d4}, {0x0013, 0x01d5}, {0x0013, 0x01d6}, {0x0013, 0x01d7}, {0x0013, 0x01d8}, {0x0013, 0x01d9}, + {0x0013, 0x01da}, {0x0013, 0x01db}, {0x0013, 0x01dc}, {0x0013, 0x01dd}, {0x0013, 0x01de}, {0x0013, 0x01df}, {0x0013, 0x01e0}, {0x0013, 0x01e1}, + {0x0012, 0x0101}, + +}; + +const unsigned int c_aaiCQMFHuffDec14[103][16] = +{ + {0x000affff, 0x0009ffff, 0x0008ffff, 0x0002ffff, 0x0003ffff, 0x0001ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0000001a, 0x0000001b, 0x0000001c, 0x00000033, 0x00000034, 0x0000004c, }, + {0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, }, + {0x00020067, 0x00020067, 0x00020067, 0x00020067, 0x0002007e, 0x0002007e, 0x0002007e, 0x0002007e, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, }, + {0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, }, + {0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, }, + {0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, }, + {0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, }, + {0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, 0x00020036, 0x00020036, 0x00020036, 0x00020036, 0x0002004f, 0x0002004f, 0x0002004f, 0x0002004f, 0x00020064, 0x00020064, 0x00020064, 0x00020064, }, + {0x00010037, 0x00010037, 0x00010050, 0x00010050, 0x00010068, 0x00010068, 0x0001007d, 0x0001007d, 0x0001007f, 0x0001007f, 0x00010080, 0x00010080, 0x00020004, 0x00020004, 0x00020004, 0x00020004, }, + {0x0012ffff, 0x0011ffff, 0x000fffff, 0x0010ffff, 0x000cffff, 0x000bffff, 0x000dffff, 0x000effff, 0x0000001f, 0x00000038, 0x00000069, 0x00000081, 0x00000097, 0x00000098, 0x00010005, 0x00010005, }, + {0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, }, + {0x000200b1, 0x000200b1, 0x000200b1, 0x000200b1, 0x000200b2, 0x000200b2, 0x000200b2, 0x000200b2, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, + {0x00030082, 0x00030082, 0x00030082, 0x00030082, 0x00030082, 0x00030082, 0x00030082, 0x00030082, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, }, + {0x00030099, 0x00030099, 0x00030099, 0x00030099, 0x00030099, 0x00030099, 0x00030099, 0x00030099, 0x000300b0, 0x000300b0, 0x000300b0, 0x000300b0, 0x000300b0, 0x000300b0, 0x000300b0, 0x000300b0, }, + {0x0001009b, 0x0001009b, 0x000100b3, 0x000100b3, 0x000100c9, 0x000100c9, 0x000100ca, 0x000100ca, 0x00020007, 0x00020007, 0x00020007, 0x00020007, 0x00020039, 0x00020039, 0x00020039, 0x00020039, }, + {0x00020052, 0x00020052, 0x00020052, 0x00020052, 0x0002006a, 0x0002006a, 0x0002006a, 0x0002006a, 0x0002009a, 0x0002009a, 0x0002009a, 0x0002009a, 0x000200af, 0x000200af, 0x000200af, 0x000200af, }, + {0x00000053, 0x0000006c, 0x00000084, 0x0000009c, 0x000000b4, 0x000000c8, 0x000000cb, 0x000000cc, 0x00010021, 0x00010021, 0x0001003a, 0x0001003a, 0x0001006b, 0x0001006b, 0x00010083, 0x00010083, }, + {0x0028ffff, 0x0039ffff, 0x004affff, 0x0023ffff, 0x001cffff, 0x001bffff, 0x0019ffff, 0x0018ffff, 0x001affff, 0x0015ffff, 0x0013ffff, 0x0014ffff, 0x0016ffff, 0x0017ffff, 0x00000008, 0x00000022, }, + {0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030085, 0x00030085, 0x00030085, 0x00030085, 0x00030085, 0x00030085, 0x00030085, 0x00030085, }, + {0x0003009d, 0x0003009d, 0x0003009d, 0x0003009d, 0x0003009d, 0x0003009d, 0x0003009d, 0x0003009d, 0x000300b5, 0x000300b5, 0x000300b5, 0x000300b5, 0x000300b5, 0x000300b5, 0x000300b5, 0x000300b5, }, + {0x000200fc, 0x000200fc, 0x000200fc, 0x000200fc, 0x000200fd, 0x000200fd, 0x000200fd, 0x000200fd, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, }, + {0x000300cd, 0x000300cd, 0x000300cd, 0x000300cd, 0x000300cd, 0x000300cd, 0x000300cd, 0x000300cd, 0x000300e2, 0x000300e2, 0x000300e2, 0x000300e2, 0x000300e2, 0x000300e2, 0x000300e2, 0x000300e2, }, + {0x000300e3, 0x000300e3, 0x000300e3, 0x000300e3, 0x000300e3, 0x000300e3, 0x000300e3, 0x000300e3, 0x000300e4, 0x000300e4, 0x000300e4, 0x000300e4, 0x000300e4, 0x000300e4, 0x000300e4, 0x000300e4, }, + {0x0002006d, 0x0002006d, 0x0002006d, 0x0002006d, 0x00020086, 0x00020086, 0x00020086, 0x00020086, 0x0002009e, 0x0002009e, 0x0002009e, 0x0002009e, 0x000200b6, 0x000200b6, 0x000200b6, 0x000200b6, }, + {0x000100fa, 0x000100fa, 0x00010116, 0x00010116, 0x00020009, 0x00020009, 0x00020009, 0x00020009, 0x00020023, 0x00020023, 0x00020023, 0x00020023, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003c, }, + {0x000200ce, 0x000200ce, 0x000200ce, 0x000200ce, 0x000200e1, 0x000200e1, 0x000200e1, 0x000200e1, 0x000200e5, 0x000200e5, 0x000200e5, 0x000200e5, 0x000200fb, 0x000200fb, 0x000200fb, 0x000200fb, }, + {0x00000114, 0x00000115, 0x0001000a, 0x0001000a, 0x00010055, 0x00010055, 0x0001006e, 0x0001006e, 0x0001009f, 0x0001009f, 0x000100b7, 0x000100b7, 0x000100cf, 0x000100cf, 0x000100e6, 0x000100e6, }, + {0x001fffff, 0x001dffff, 0x001effff, 0x0020ffff, 0x0021ffff, 0x0022ffff, 0x0000000b, 0x00000024, 0x00000025, 0x0000003d, 0x00000087, 0x000000a0, 0x000000b8, 0x000000d1, 0x000000e7, 0x000000fe, }, + {0x00030088, 0x00030088, 0x00030088, 0x00030088, 0x00030088, 0x00030088, 0x00030088, 0x00030088, 0x000300b9, 0x000300b9, 0x000300b9, 0x000300b9, 0x000300b9, 0x000300b9, 0x000300b9, 0x000300b9, }, + {0x000300ba, 0x000300ba, 0x000300ba, 0x000300ba, 0x000300ba, 0x000300ba, 0x000300ba, 0x000300ba, 0x000300d0, 0x000300d0, 0x000300d0, 0x000300d0, 0x000300d0, 0x000300d0, 0x000300d0, 0x000300d0, }, + {0x00020148, 0x00020148, 0x00020148, 0x00020148, 0x00020270, 0x00020270, 0x00020270, 0x00020270, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, }, + {0x000300e8, 0x000300e8, 0x000300e8, 0x000300e8, 0x000300e8, 0x000300e8, 0x000300e8, 0x000300e8, 0x000300e9, 0x000300e9, 0x000300e9, 0x000300e9, 0x000300e9, 0x000300e9, 0x000300e9, 0x000300e9, }, + {0x00030100, 0x00030100, 0x00030100, 0x00030100, 0x00030100, 0x00030100, 0x00030100, 0x00030100, 0x0003012e, 0x0003012e, 0x0003012e, 0x0003012e, 0x0003012e, 0x0003012e, 0x0003012e, 0x0003012e, }, + {0x0003012f, 0x0003012f, 0x0003012f, 0x0003012f, 0x0003012f, 0x0003012f, 0x0003012f, 0x0003012f, 0x00030132, 0x00030132, 0x00030132, 0x00030132, 0x00030132, 0x00030132, 0x00030132, 0x00030132, }, + {0x005bffff, 0x005cffff, 0x005dffff, 0x005effff, 0x005fffff, 0x0060ffff, 0x0061ffff, 0x0062ffff, 0x0063ffff, 0x0064ffff, 0x0065ffff, 0x0066ffff, 0x0024ffff, 0x0025ffff, 0x0026ffff, 0x0027ffff, }, + {0x0001026e, 0x0001026e, 0x0001026f, 0x0001026f, 0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00020056, 0x00020056, 0x00020056, 0x00020056, 0x00020071, 0x00020071, 0x00020071, 0x00020071, }, + {0x000200a1, 0x000200a1, 0x000200a1, 0x000200a1, 0x000200a2, 0x000200a2, 0x000200a2, 0x000200a2, 0x000200eb, 0x000200eb, 0x000200eb, 0x000200eb, 0x000200ff, 0x000200ff, 0x000200ff, 0x000200ff, }, + {0x00020101, 0x00020101, 0x00020101, 0x00020101, 0x00020102, 0x00020102, 0x00020102, 0x00020102, 0x00020103, 0x00020103, 0x00020103, 0x00020103, 0x00020113, 0x00020113, 0x00020113, 0x00020113, }, + {0x00020117, 0x00020117, 0x00020117, 0x00020117, 0x00020118, 0x00020118, 0x00020118, 0x00020118, 0x00020119, 0x00020119, 0x00020119, 0x00020119, 0x00020146, 0x00020146, 0x00020146, 0x00020146, }, + {0x0031ffff, 0x002dffff, 0x002bffff, 0x002cffff, 0x002effff, 0x002fffff, 0x0032ffff, 0x0037ffff, 0x0029ffff, 0x002affff, 0x0030ffff, 0x0033ffff, 0x0034ffff, 0x0035ffff, 0x0036ffff, 0x0038ffff, }, + {0x0001008b, 0x0001008b, 0x0001008c, 0x0001008c, 0x0001008d, 0x0001008d, 0x0001008e, 0x0001008e, 0x0001008f, 0x0001008f, 0x00010090, 0x00010090, 0x00010091, 0x00010091, 0x00010092, 0x00010092, }, + {0x00010093, 0x00010093, 0x00010094, 0x00010094, 0x00010095, 0x00010095, 0x000100a3, 0x000100a3, 0x000100a4, 0x000100a4, 0x000100a5, 0x000100a5, 0x000100a6, 0x000100a6, 0x000100a7, 0x000100a7, }, + {0x0001002a, 0x0001002a, 0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, 0x0001002e, 0x0001002e, 0x0001002f, 0x0001002f, 0x00010030, 0x00010030, 0x00010031, 0x00010031, }, + {0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x00010040, 0x00010040, 0x00010041, 0x00010041, 0x00010042, 0x00010042, 0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, }, + {0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010027, 0x00010027, 0x00010028, 0x00010028, 0x00010029, 0x00010029, }, + {0x00010046, 0x00010046, 0x00010047, 0x00010047, 0x00010048, 0x00010048, 0x00010049, 0x00010049, 0x0001004a, 0x0001004a, 0x00010057, 0x00010057, 0x00010058, 0x00010058, 0x00010059, 0x00010059, }, + {0x0001005a, 0x0001005a, 0x0001005b, 0x0001005b, 0x0001005c, 0x0001005c, 0x0001005d, 0x0001005d, 0x0001005e, 0x0001005e, 0x0001005f, 0x0001005f, 0x00010060, 0x00010060, 0x00010061, 0x00010061, }, + {0x000100a8, 0x000100a8, 0x000100a9, 0x000100a9, 0x000100aa, 0x000100aa, 0x000100ab, 0x000100ab, 0x000100ac, 0x000100ac, 0x000100ad, 0x000100ad, 0x000100ae, 0x000100ae, 0x000100bb, 0x000100bb, }, + {0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, 0x00010010, 0x00010010, 0x00010011, 0x00010011, 0x00010012, 0x00010012, 0x00010013, 0x00010013, }, + {0x00010062, 0x00010062, 0x00010063, 0x00010063, 0x00010070, 0x00010070, 0x00010072, 0x00010072, 0x00010073, 0x00010073, 0x00010074, 0x00010074, 0x00010075, 0x00010075, 0x00010076, 0x00010076, }, + {0x000100bc, 0x000100bc, 0x000100bd, 0x000100bd, 0x000100be, 0x000100be, 0x000100bf, 0x000100bf, 0x000100c0, 0x000100c0, 0x000100c1, 0x000100c1, 0x000100c2, 0x000100c2, 0x000100c3, 0x000100c3, }, + {0x000100c4, 0x000100c4, 0x000100c5, 0x000100c5, 0x000100c6, 0x000100c6, 0x000100c7, 0x000100c7, 0x000100d2, 0x000100d2, 0x000100d3, 0x000100d3, 0x000100d4, 0x000100d4, 0x000100d5, 0x000100d5, }, + {0x000100d6, 0x000100d6, 0x000100d7, 0x000100d7, 0x000100d8, 0x000100d8, 0x000100d9, 0x000100d9, 0x000100da, 0x000100da, 0x000100db, 0x000100db, 0x000100dc, 0x000100dc, 0x000100dd, 0x000100dd, }, + {0x000100de, 0x000100de, 0x000100df, 0x000100df, 0x000100e0, 0x000100e0, 0x000100ea, 0x000100ea, 0x000100ec, 0x000100ec, 0x000100ed, 0x000100ed, 0x000100ee, 0x000100ee, 0x000100ef, 0x000100ef, }, + {0x00010077, 0x00010077, 0x00010078, 0x00010078, 0x00010079, 0x00010079, 0x0001007a, 0x0001007a, 0x0001007b, 0x0001007b, 0x0001007c, 0x0001007c, 0x00010089, 0x00010089, 0x0001008a, 0x0001008a, }, + {0x000100f0, 0x000100f0, 0x000100f1, 0x000100f1, 0x000100f2, 0x000100f2, 0x000100f3, 0x000100f3, 0x000100f4, 0x000100f4, 0x000100f5, 0x000100f5, 0x000100f6, 0x000100f6, 0x000100f7, 0x000100f7, }, + {0x003affff, 0x003bffff, 0x003cffff, 0x003dffff, 0x003effff, 0x003fffff, 0x0040ffff, 0x0041ffff, 0x0042ffff, 0x0043ffff, 0x0044ffff, 0x0045ffff, 0x0046ffff, 0x0047ffff, 0x0048ffff, 0x0049ffff, }, + {0x000100f8, 0x000100f8, 0x000100f9, 0x000100f9, 0x00010104, 0x00010104, 0x00010105, 0x00010105, 0x00010106, 0x00010106, 0x00010107, 0x00010107, 0x00010108, 0x00010108, 0x00010109, 0x00010109, }, + {0x0001010a, 0x0001010a, 0x0001010b, 0x0001010b, 0x0001010c, 0x0001010c, 0x0001010d, 0x0001010d, 0x0001010e, 0x0001010e, 0x0001010f, 0x0001010f, 0x00010110, 0x00010110, 0x00010111, 0x00010111, }, + {0x00010112, 0x00010112, 0x0001011a, 0x0001011a, 0x0001011b, 0x0001011b, 0x0001011c, 0x0001011c, 0x0001011d, 0x0001011d, 0x0001011e, 0x0001011e, 0x0001011f, 0x0001011f, 0x00010120, 0x00010120, }, + {0x00010121, 0x00010121, 0x00010122, 0x00010122, 0x00010123, 0x00010123, 0x00010124, 0x00010124, 0x00010125, 0x00010125, 0x00010126, 0x00010126, 0x00010127, 0x00010127, 0x00010128, 0x00010128, }, + {0x00010129, 0x00010129, 0x0001012a, 0x0001012a, 0x0001012b, 0x0001012b, 0x0001012c, 0x0001012c, 0x0001012d, 0x0001012d, 0x00010130, 0x00010130, 0x00010131, 0x00010131, 0x00010133, 0x00010133, }, + {0x00010134, 0x00010134, 0x00010135, 0x00010135, 0x00010136, 0x00010136, 0x00010137, 0x00010137, 0x00010138, 0x00010138, 0x00010139, 0x00010139, 0x0001013a, 0x0001013a, 0x0001013b, 0x0001013b, }, + {0x0001013c, 0x0001013c, 0x0001013d, 0x0001013d, 0x0001013e, 0x0001013e, 0x0001013f, 0x0001013f, 0x00010140, 0x00010140, 0x00010141, 0x00010141, 0x00010142, 0x00010142, 0x00010143, 0x00010143, }, + {0x00010144, 0x00010144, 0x00010145, 0x00010145, 0x00010147, 0x00010147, 0x00010149, 0x00010149, 0x0001014a, 0x0001014a, 0x0001014b, 0x0001014b, 0x0001014c, 0x0001014c, 0x0001014d, 0x0001014d, }, + {0x0001014e, 0x0001014e, 0x0001014f, 0x0001014f, 0x00010150, 0x00010150, 0x00010151, 0x00010151, 0x00010152, 0x00010152, 0x00010153, 0x00010153, 0x00010154, 0x00010154, 0x00010155, 0x00010155, }, + {0x00010156, 0x00010156, 0x00010157, 0x00010157, 0x00010158, 0x00010158, 0x00010159, 0x00010159, 0x0001015a, 0x0001015a, 0x0001015b, 0x0001015b, 0x0001015c, 0x0001015c, 0x0001015d, 0x0001015d, }, + {0x0001015e, 0x0001015e, 0x0001015f, 0x0001015f, 0x00010160, 0x00010160, 0x00010161, 0x00010161, 0x00010162, 0x00010162, 0x00010163, 0x00010163, 0x00010164, 0x00010164, 0x00010165, 0x00010165, }, + {0x00010166, 0x00010166, 0x00010167, 0x00010167, 0x00010168, 0x00010168, 0x00010169, 0x00010169, 0x0001016a, 0x0001016a, 0x0001016b, 0x0001016b, 0x0001016c, 0x0001016c, 0x0001016d, 0x0001016d, }, + {0x0001016e, 0x0001016e, 0x0001016f, 0x0001016f, 0x00010170, 0x00010170, 0x00010171, 0x00010171, 0x00010172, 0x00010172, 0x00010173, 0x00010173, 0x00010174, 0x00010174, 0x00010175, 0x00010175, }, + {0x00010176, 0x00010176, 0x00010177, 0x00010177, 0x00010178, 0x00010178, 0x00010179, 0x00010179, 0x0001017a, 0x0001017a, 0x0001017b, 0x0001017b, 0x0001017c, 0x0001017c, 0x0001017d, 0x0001017d, }, + {0x0001017e, 0x0001017e, 0x0001017f, 0x0001017f, 0x00010180, 0x00010180, 0x00010181, 0x00010181, 0x00010182, 0x00010182, 0x00010183, 0x00010183, 0x00010184, 0x00010184, 0x00010185, 0x00010185, }, + {0x00010186, 0x00010186, 0x00010187, 0x00010187, 0x00010188, 0x00010188, 0x00010189, 0x00010189, 0x0001018a, 0x0001018a, 0x0001018b, 0x0001018b, 0x0001018c, 0x0001018c, 0x0001018d, 0x0001018d, }, + {0x004bffff, 0x004cffff, 0x004dffff, 0x004effff, 0x004fffff, 0x0050ffff, 0x0051ffff, 0x0052ffff, 0x0053ffff, 0x0054ffff, 0x0055ffff, 0x0056ffff, 0x0057ffff, 0x0058ffff, 0x0059ffff, 0x005affff, }, + {0x0001018e, 0x0001018e, 0x0001018f, 0x0001018f, 0x00010190, 0x00010190, 0x00010191, 0x00010191, 0x00010192, 0x00010192, 0x00010193, 0x00010193, 0x00010194, 0x00010194, 0x00010195, 0x00010195, }, + {0x00010196, 0x00010196, 0x00010197, 0x00010197, 0x00010198, 0x00010198, 0x00010199, 0x00010199, 0x0001019a, 0x0001019a, 0x0001019b, 0x0001019b, 0x0001019c, 0x0001019c, 0x0001019d, 0x0001019d, }, + {0x0001019e, 0x0001019e, 0x0001019f, 0x0001019f, 0x000101a0, 0x000101a0, 0x000101a1, 0x000101a1, 0x000101a2, 0x000101a2, 0x000101a3, 0x000101a3, 0x000101a4, 0x000101a4, 0x000101a5, 0x000101a5, }, + {0x000101a6, 0x000101a6, 0x000101a7, 0x000101a7, 0x000101a8, 0x000101a8, 0x000101a9, 0x000101a9, 0x000101aa, 0x000101aa, 0x000101ab, 0x000101ab, 0x000101ac, 0x000101ac, 0x000101ad, 0x000101ad, }, + {0x000101ae, 0x000101ae, 0x000101af, 0x000101af, 0x000101b0, 0x000101b0, 0x000101b1, 0x000101b1, 0x000101b2, 0x000101b2, 0x000101b3, 0x000101b3, 0x000101b4, 0x000101b4, 0x000101b5, 0x000101b5, }, + {0x000101b6, 0x000101b6, 0x000101b7, 0x000101b7, 0x000101b8, 0x000101b8, 0x000101b9, 0x000101b9, 0x000101ba, 0x000101ba, 0x000101bb, 0x000101bb, 0x000101bc, 0x000101bc, 0x000101bd, 0x000101bd, }, + {0x000101be, 0x000101be, 0x000101bf, 0x000101bf, 0x000101c0, 0x000101c0, 0x000101c1, 0x000101c1, 0x000101c2, 0x000101c2, 0x000101c3, 0x000101c3, 0x000101c4, 0x000101c4, 0x000101c5, 0x000101c5, }, + {0x000101c6, 0x000101c6, 0x000101c7, 0x000101c7, 0x000101c8, 0x000101c8, 0x000101c9, 0x000101c9, 0x000101ca, 0x000101ca, 0x000101cb, 0x000101cb, 0x000101cc, 0x000101cc, 0x000101cd, 0x000101cd, }, + {0x000101ce, 0x000101ce, 0x000101cf, 0x000101cf, 0x000101d0, 0x000101d0, 0x000101d1, 0x000101d1, 0x000101d2, 0x000101d2, 0x000101d3, 0x000101d3, 0x000101d4, 0x000101d4, 0x000101d5, 0x000101d5, }, + {0x000101d6, 0x000101d6, 0x000101d7, 0x000101d7, 0x000101d8, 0x000101d8, 0x000101d9, 0x000101d9, 0x000101da, 0x000101da, 0x000101db, 0x000101db, 0x000101dc, 0x000101dc, 0x000101dd, 0x000101dd, }, + {0x000101de, 0x000101de, 0x000101df, 0x000101df, 0x000101e0, 0x000101e0, 0x000101e1, 0x000101e1, 0x000101e2, 0x000101e2, 0x000101e3, 0x000101e3, 0x000101e4, 0x000101e4, 0x000101e5, 0x000101e5, }, + {0x000101e6, 0x000101e6, 0x000101e7, 0x000101e7, 0x000101e8, 0x000101e8, 0x000101e9, 0x000101e9, 0x000101ea, 0x000101ea, 0x000101eb, 0x000101eb, 0x000101ec, 0x000101ec, 0x000101ed, 0x000101ed, }, + {0x000101ee, 0x000101ee, 0x000101ef, 0x000101ef, 0x000101f0, 0x000101f0, 0x000101f1, 0x000101f1, 0x000101f2, 0x000101f2, 0x000101f3, 0x000101f3, 0x000101f4, 0x000101f4, 0x000101f5, 0x000101f5, }, + {0x000101f6, 0x000101f6, 0x000101f7, 0x000101f7, 0x000101f8, 0x000101f8, 0x000101f9, 0x000101f9, 0x000101fa, 0x000101fa, 0x000101fb, 0x000101fb, 0x000101fc, 0x000101fc, 0x000101fd, 0x000101fd, }, + {0x000101fe, 0x000101fe, 0x000101ff, 0x000101ff, 0x00010200, 0x00010200, 0x00010201, 0x00010201, 0x00010202, 0x00010202, 0x00010203, 0x00010203, 0x00010204, 0x00010204, 0x00010205, 0x00010205, }, + {0x00010206, 0x00010206, 0x00010207, 0x00010207, 0x00010208, 0x00010208, 0x00010209, 0x00010209, 0x0001020a, 0x0001020a, 0x0001020b, 0x0001020b, 0x0001020c, 0x0001020c, 0x0001020d, 0x0001020d, }, + {0x0001020e, 0x0001020e, 0x0001020f, 0x0001020f, 0x00010210, 0x00010210, 0x00010211, 0x00010211, 0x00010212, 0x00010212, 0x00010213, 0x00010213, 0x00010214, 0x00010214, 0x00010215, 0x00010215, }, + {0x00010216, 0x00010216, 0x00010217, 0x00010217, 0x00010218, 0x00010218, 0x00010219, 0x00010219, 0x0001021a, 0x0001021a, 0x0001021b, 0x0001021b, 0x0001021c, 0x0001021c, 0x0001021d, 0x0001021d, }, + {0x0001021e, 0x0001021e, 0x0001021f, 0x0001021f, 0x00010220, 0x00010220, 0x00010221, 0x00010221, 0x00010222, 0x00010222, 0x00010223, 0x00010223, 0x00010224, 0x00010224, 0x00010225, 0x00010225, }, + {0x00010226, 0x00010226, 0x00010227, 0x00010227, 0x00010228, 0x00010228, 0x00010229, 0x00010229, 0x0001022a, 0x0001022a, 0x0001022b, 0x0001022b, 0x0001022c, 0x0001022c, 0x0001022d, 0x0001022d, }, + {0x0001022e, 0x0001022e, 0x0001022f, 0x0001022f, 0x00010230, 0x00010230, 0x00010231, 0x00010231, 0x00010232, 0x00010232, 0x00010233, 0x00010233, 0x00010234, 0x00010234, 0x00010235, 0x00010235, }, + {0x00010236, 0x00010236, 0x00010237, 0x00010237, 0x00010238, 0x00010238, 0x00010239, 0x00010239, 0x0001023a, 0x0001023a, 0x0001023b, 0x0001023b, 0x0001023c, 0x0001023c, 0x0001023d, 0x0001023d, }, + {0x0001023e, 0x0001023e, 0x0001023f, 0x0001023f, 0x00010240, 0x00010240, 0x00010241, 0x00010241, 0x00010242, 0x00010242, 0x00010243, 0x00010243, 0x00010244, 0x00010244, 0x00010245, 0x00010245, }, + {0x00010246, 0x00010246, 0x00010247, 0x00010247, 0x00010248, 0x00010248, 0x00010249, 0x00010249, 0x0001024a, 0x0001024a, 0x0001024b, 0x0001024b, 0x0001024c, 0x0001024c, 0x0001024d, 0x0001024d, }, + {0x0001024e, 0x0001024e, 0x0001024f, 0x0001024f, 0x00010250, 0x00010250, 0x00010251, 0x00010251, 0x00010252, 0x00010252, 0x00010253, 0x00010253, 0x00010254, 0x00010254, 0x00010255, 0x00010255, }, + {0x00010256, 0x00010256, 0x00010257, 0x00010257, 0x00010258, 0x00010258, 0x00010259, 0x00010259, 0x0001025a, 0x0001025a, 0x0001025b, 0x0001025b, 0x0001025c, 0x0001025c, 0x0001025d, 0x0001025d, }, + {0x0001025e, 0x0001025e, 0x0001025f, 0x0001025f, 0x00010260, 0x00010260, 0x00010261, 0x00010261, 0x00010262, 0x00010262, 0x00010263, 0x00010263, 0x00010264, 0x00010264, 0x00010265, 0x00010265, }, + {0x00010266, 0x00010266, 0x00010267, 0x00010267, 0x00010268, 0x00010268, 0x00010269, 0x00010269, 0x0001026a, 0x0001026a, 0x0001026b, 0x0001026b, 0x0001026c, 0x0001026c, 0x0001026d, 0x0001026d, }, +}; + +const unsigned int c_aaiCQMFHuffEnc15[28][2] = +{ + {0x0003, 0x0001}, {0x0002, 0x0002}, {0x0002, 0x0003}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0004, 0x0001}, {0x0005, 0x0001}, {0x0006, 0x0001}, + {0x0007, 0x0001}, {0x0008, 0x0001}, {0x0009, 0x0001}, {0x000a, 0x0001}, {0x000b, 0x0001}, {0x000c, 0x0001}, {0x000d, 0x0001}, {0x000f, 0x0003}, + {0x0011, 0x0000}, {0x0011, 0x0001}, {0x0011, 0x0002}, {0x0011, 0x0003}, {0x0011, 0x0004}, {0x0011, 0x0005}, {0x0011, 0x0006}, {0x0011, 0x0007}, + {0x0011, 0x0008}, {0x0011, 0x0009}, {0x0011, 0x000a}, {0x0011, 0x000b}, + +}; + +const unsigned int c_aaiCQMFHuffDec15[10][16] = +{ + {0x0001ffff, 0x00000005, 0x00010000, 0x00010000, 0x00010003, 0x00010003, 0x00010004, 0x00010004, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00020002, 0x00020002, 0x00020002, 0x00020002, }, + {0x0002ffff, 0x00000009, 0x00010008, 0x00010008, 0x00020007, 0x00020007, 0x00020007, 0x00020007, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, + {0x0003ffff, 0x0000000d, 0x0001000c, 0x0001000c, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, }, + {0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x0001000f, 0x0001000f, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, + {0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, + {0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, }, + {0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, }, + {0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, }, + {0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, }, + {0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, }, +}; + +const unsigned int c_aaiCQMFHuffEnc16[32][2] = +{ + {0x0003, 0x0001}, {0x0002, 0x0003}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0003, 0x0004}, {0x0003, 0x0005}, {0x0004, 0x0001}, {0x0005, 0x0001}, + {0x0006, 0x0001}, {0x0007, 0x0001}, {0x0008, 0x0001}, {0x0009, 0x0001}, {0x000a, 0x0001}, {0x000b, 0x0001}, {0x000c, 0x0001}, {0x000d, 0x0001}, + {0x0010, 0x0007}, {0x0011, 0x0001}, {0x0012, 0x0000}, {0x0012, 0x0001}, {0x0011, 0x0002}, {0x0011, 0x0003}, {0x0011, 0x0004}, {0x0011, 0x0005}, + {0x0011, 0x0006}, {0x0011, 0x0007}, {0x0011, 0x0008}, {0x0011, 0x0009}, {0x0011, 0x000a}, {0x0011, 0x000b}, {0x0011, 0x000c}, {0x0011, 0x000d}, +}; + +const unsigned int c_aaiCQMFHuffDec16[11][16] = +{ + {0x0001ffff, 0x00000006, 0x00010000, 0x00010000, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00010004, 0x00010004, 0x00010005, 0x00010005, 0x00020001, 0x00020001, 0x00020001, 0x00020001, }, + {0x0002ffff, 0x0000000a, 0x00010009, 0x00010009, 0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, }, + {0x0003ffff, 0x0000000e, 0x0001000d, 0x0001000d, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, + {0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x00000010, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, + {0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00020013, 0x00020013, 0x00020013, 0x00020013, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, + {0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, }, + {0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, }, + {0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, }, + {0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, }, + {0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, }, + {0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, }, +}; + +const unsigned int c_aaiCQMFHuffEnc17[41][2] = +{ + {0x0004, 0x0001}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0003, 0x0004}, {0x0003, 0x0005}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0002}, + {0x0004, 0x0003}, {0x0005, 0x0001}, {0x0006, 0x0001}, {0x0007, 0x0001}, {0x0008, 0x0001}, {0x0009, 0x0001}, {0x000a, 0x0001}, {0x000b, 0x0001}, + {0x000c, 0x0001}, {0x000d, 0x0001}, {0x000e, 0x0001}, {0x0010, 0x0003}, {0x0011, 0x0005}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, + {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, + {0x0013, 0x000b}, {0x0013, 0x000c}, {0x0013, 0x000d}, {0x0013, 0x000e}, {0x0013, 0x000f}, {0x0013, 0x0010}, {0x0013, 0x0011}, {0x0013, 0x0012}, + {0x0013, 0x0013}, + +}; + +const unsigned int c_aaiCQMFHuffDec17[7][16] = +{ + {0x0001ffff, 0x00000000, 0x00000007, 0x00000008, 0x00010001, 0x00010001, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00010004, 0x00010004, 0x00010005, 0x00010005, 0x00010006, 0x00010006, }, + {0x0002ffff, 0x0000000c, 0x0001000b, 0x0001000b, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, + {0x0003ffff, 0x00000010, 0x0001000f, 0x0001000f, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, }, + {0x0005ffff, 0x0006ffff, 0x0004ffff, 0x00000013, 0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, + {0x00010025, 0x00010025, 0x00010026, 0x00010026, 0x00010027, 0x00010027, 0x00010028, 0x00010028, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, }, + {0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x0001001a, 0x0001001a, 0x0001001b, 0x0001001b, 0x0001001c, 0x0001001c, }, + {0x0001001d, 0x0001001d, 0x0001001e, 0x0001001e, 0x0001001f, 0x0001001f, 0x00010020, 0x00010020, 0x00010021, 0x00010021, 0x00010022, 0x00010022, 0x00010023, 0x00010023, 0x00010024, 0x00010024, }, +}; + +const unsigned int c_aaiCQMFHuffEnc18[40][2] = +{ + {0x0004, 0x0002}, {0x0003, 0x0003}, {0x0003, 0x0004}, {0x0003, 0x0005}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0003}, {0x0004, 0x0004}, + {0x0004, 0x0005}, {0x0005, 0x0001}, {0x0005, 0x0002}, {0x0005, 0x0003}, {0x0006, 0x0001}, {0x0007, 0x0001}, {0x0008, 0x0001}, {0x0009, 0x0001}, + {0x000a, 0x0001}, {0x000b, 0x0001}, {0x000c, 0x0001}, {0x000d, 0x0001}, {0x000e, 0x0001}, {0x000f, 0x0001}, {0x0011, 0x0003}, {0x0012, 0x0004}, + {0x0014, 0x0000}, {0x0014, 0x0001}, {0x0014, 0x0002}, {0x0012, 0x0005}, {0x0014, 0x0003}, {0x0014, 0x0004}, {0x0014, 0x0005}, {0x0014, 0x0006}, + {0x0014, 0x0007}, {0x0014, 0x0008}, {0x0014, 0x0009}, {0x0014, 0x000a}, {0x0014, 0x000b}, {0x0014, 0x000c}, {0x0014, 0x000d}, {0x0013, 0x0007}, +}; + +const unsigned int c_aaiCQMFHuffDec18[7][16] = +{ + {0x0001ffff, 0x0002ffff, 0x00000000, 0x00000006, 0x00000007, 0x00000008, 0x00010001, 0x00010001, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00010004, 0x00010004, 0x00010005, 0x00010005, }, + {0x0003ffff, 0x0000000e, 0x0001000d, 0x0001000d, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, + {0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, + {0x0004ffff, 0x00000012, 0x00010011, 0x00010011, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, + {0x0006ffff, 0x0005ffff, 0x00010015, 0x00010015, 0x00020014, 0x00020014, 0x00020014, 0x00020014, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, }, + {0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, }, + {0x00000018, 0x00000019, 0x0000001a, 0x0000001c, 0x0000001d, 0x0000001e, 0x0000001f, 0x00000020, 0x00000021, 0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000026, 0x00010027, 0x00010027, }, +}; + +const unsigned int c_aaiCQMFHuffEnc19[47][2] = +{ + {0x0004, 0x0002}, {0x0003, 0x0004}, {0x0003, 0x0005}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0003}, {0x0004, 0x0004}, {0x0004, 0x0005}, + {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0005, 0x0002}, {0x0005, 0x0003}, {0x0006, 0x0002}, {0x0006, 0x0003}, {0x0007, 0x0001}, {0x0007, 0x0002}, + {0x0007, 0x0003}, {0x0008, 0x0001}, {0x0009, 0x0001}, {0x000a, 0x0001}, {0x000b, 0x0001}, {0x000c, 0x0001}, {0x000e, 0x0002}, {0x000e, 0x0003}, + {0x0010, 0x0005}, {0x0010, 0x0006}, {0x0010, 0x0007}, {0x0011, 0x0009}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0012, 0x0001}, {0x0012, 0x0002}, + {0x0012, 0x0003}, {0x0012, 0x0004}, {0x0012, 0x0005}, {0x0012, 0x0006}, {0x0012, 0x0007}, {0x0012, 0x0008}, {0x0012, 0x0009}, {0x0012, 0x000a}, + {0x0012, 0x000b}, {0x0012, 0x000c}, {0x0012, 0x000d}, {0x0012, 0x000e}, {0x0012, 0x000f}, {0x0012, 0x0010}, {0x0012, 0x0011}, + +}; + +const unsigned int c_aaiCQMFHuffDec19[10][16] = +{ + {0x0002ffff, 0x0001ffff, 0x00000000, 0x00000005, 0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x00010001, 0x00010001, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00010004, 0x00010004, }, + {0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, + {0x0003ffff, 0x00000011, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, 0x00010010, 0x00010010, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, }, + {0x0004ffff, 0x00000015, 0x00010014, 0x00010014, 0x00020013, 0x00020013, 0x00020013, 0x00020013, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, }, + {0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x0005ffff, 0x00000018, 0x00000019, 0x0000001a, 0x00020016, 0x00020016, 0x00020016, 0x00020016, 0x00020017, 0x00020017, 0x00020017, 0x00020017, }, + {0x0002002d, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, }, + {0x0001001c, 0x0001001c, 0x0001001d, 0x0001001d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x00020020, 0x00020020, 0x00020020, 0x00020020, }, + {0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x00020023, 0x00020023, 0x00020023, 0x00020023, 0x00020024, 0x00020024, 0x00020024, 0x00020024, }, + {0x00020025, 0x00020025, 0x00020025, 0x00020025, 0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00020027, 0x00020027, 0x00020027, 0x00020027, 0x00020028, 0x00020028, 0x00020028, 0x00020028, }, + {0x00020029, 0x00020029, 0x00020029, 0x00020029, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, }, +}; + +const unsigned int c_aaiCQMFHuffEnc20[58][2] = +{ + {0x0004, 0x0002}, {0x0003, 0x0005}, {0x0004, 0x0003}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0004, 0x0006}, + {0x0004, 0x0007}, {0x0004, 0x0008}, {0x0004, 0x0009}, {0x0005, 0x0002}, {0x0005, 0x0003}, {0x0006, 0x0002}, {0x0006, 0x0003}, {0x0007, 0x0002}, + {0x0007, 0x0003}, {0x0008, 0x0002}, {0x0008, 0x0003}, {0x0009, 0x0002}, {0x0009, 0x0003}, {0x000a, 0x0002}, {0x000a, 0x0003}, {0x000b, 0x0002}, + {0x000b, 0x0003}, {0x000c, 0x0002}, {0x000c, 0x0003}, {0x000d, 0x0002}, {0x000d, 0x0003}, {0x000e, 0x0003}, {0x000f, 0x0005}, {0x0011, 0x0007}, + {0x0012, 0x0000}, {0x0012, 0x0001}, {0x0012, 0x0002}, {0x0012, 0x0003}, {0x0011, 0x0008}, {0x0012, 0x0004}, {0x0012, 0x0005}, {0x0012, 0x0006}, + {0x0012, 0x0007}, {0x0012, 0x0008}, {0x0012, 0x0009}, {0x0012, 0x000a}, {0x0012, 0x000b}, {0x0012, 0x000c}, {0x0012, 0x000d}, {0x0011, 0x0009}, + {0x0011, 0x000a}, {0x0011, 0x000b}, {0x0011, 0x000c}, {0x0011, 0x000d}, {0x0011, 0x000e}, {0x0011, 0x000f}, {0x0011, 0x0010}, {0x0011, 0x0011}, + {0x0011, 0x0012}, {0x0011, 0x0013}, + +}; + +const unsigned int c_aaiCQMFHuffDec20[17][16] = +{ + {0x0002ffff, 0x0001ffff, 0x00000000, 0x00000002, 0x00000005, 0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x0000000a, 0x00010001, 0x00010001, 0x00010003, 0x00010003, 0x00010004, 0x00010004, }, + {0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, + {0x0004ffff, 0x0003ffff, 0x00000011, 0x00000012, 0x0001000f, 0x0001000f, 0x00010010, 0x00010010, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, }, + {0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, }, + {0x0006ffff, 0x0005ffff, 0x00000019, 0x0000001a, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00020015, 0x00020015, 0x00020015, 0x00020015, 0x00020016, 0x00020016, 0x00020016, 0x00020016, }, + {0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, }, + {0x000fffff, 0x0010ffff, 0x000effff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000dffff, 0x0001001e, 0x0001001e, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, }, + {0x0002002d, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, }, + {0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, }, + {0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, }, + {0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, }, + {0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, }, + {0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, }, + {0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, }, + {0x00020029, 0x00020029, 0x00020029, 0x00020029, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, }, + {0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x00020023, 0x00020023, 0x00020023, 0x00020023, }, + {0x00020025, 0x00020025, 0x00020025, 0x00020025, 0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00020027, 0x00020027, 0x00020027, 0x00020027, 0x00020028, 0x00020028, 0x00020028, 0x00020028, }, +}; + +const unsigned int c_aaiCQMFHuffEnc21[70][2] = +{ + {0x0005, 0x0003}, {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0004, 0x0008}, {0x0004, 0x0009}, {0x0004, 0x000a}, + {0x0004, 0x000b}, {0x0004, 0x000c}, {0x0004, 0x000d}, {0x0004, 0x000e}, {0x0004, 0x000f}, {0x0005, 0x0004}, {0x0005, 0x0005}, {0x0005, 0x0006}, + {0x0005, 0x0007}, {0x0006, 0x0003}, {0x0006, 0x0004}, {0x0006, 0x0005}, {0x0007, 0x0002}, {0x0007, 0x0003}, {0x0007, 0x0004}, {0x0007, 0x0005}, + {0x0008, 0x0002}, {0x0008, 0x0003}, {0x0009, 0x0002}, {0x0009, 0x0003}, {0x000a, 0x0002}, {0x000a, 0x0003}, {0x000b, 0x0002}, {0x000b, 0x0003}, + {0x000c, 0x0003}, {0x000d, 0x0003}, {0x000d, 0x0004}, {0x000d, 0x0005}, {0x000e, 0x0004}, {0x000f, 0x0007}, {0x000e, 0x0005}, {0x0011, 0x0004}, + {0x0010, 0x000d}, {0x0011, 0x0005}, {0x0012, 0x0000}, {0x0012, 0x0001}, {0x0012, 0x0002}, {0x0012, 0x0003}, {0x0012, 0x0004}, {0x0012, 0x0005}, + {0x0012, 0x0006}, {0x0012, 0x0007}, {0x0011, 0x0006}, {0x0011, 0x0007}, {0x0011, 0x0008}, {0x0011, 0x0009}, {0x0011, 0x000a}, {0x0011, 0x000b}, + {0x0011, 0x000c}, {0x0011, 0x000d}, {0x0011, 0x000e}, {0x0011, 0x000f}, {0x0011, 0x0010}, {0x0011, 0x0011}, {0x0011, 0x0012}, {0x0011, 0x0013}, + {0x0011, 0x0014}, {0x0011, 0x0015}, {0x0011, 0x0016}, {0x0011, 0x0017}, {0x0011, 0x0018}, {0x0011, 0x0019}, + +}; + +const unsigned int c_aaiCQMFHuffDec21[23][16] = +{ + {0x0004ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0000000c, }, + {0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00020013, 0x00020013, 0x00020013, 0x00020013, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, + {0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, }, + {0x0006ffff, 0x0005ffff, 0x00000018, 0x00000019, 0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00020011, 0x00020011, 0x00020011, 0x00020011, }, + {0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, }, + {0x0009ffff, 0x0007ffff, 0x0008ffff, 0x00000020, 0x0001001e, 0x0001001e, 0x0001001f, 0x0001001f, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, }, + {0x00020024, 0x00020024, 0x00020024, 0x00020024, 0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, }, + {0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, }, + {0x0016ffff, 0x0015ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, 0x00000028, 0x00010025, 0x00010025, }, + {0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, }, + {0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, }, + {0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, }, + {0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, }, + {0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, }, + {0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, }, + {0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, }, + {0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, }, + {0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, }, + {0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, }, + {0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, }, + {0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002f, 0x0002002f, 0x0002002f, 0x0002002f, 0x00020030, 0x00020030, 0x00020030, 0x00020030, 0x00020031, 0x00020031, 0x00020031, 0x00020031, }, + {0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002d, }, +}; + +const unsigned int c_aaiCQMFHuffEnc22[81][2] = +{ + {0x0005, 0x0004}, {0x0004, 0x0006}, {0x0005, 0x0005}, {0x0005, 0x0006}, {0x0004, 0x0007}, {0x0003, 0x0005}, {0x0003, 0x0006}, {0x0005, 0x0007}, + {0x0005, 0x0008}, {0x0005, 0x0009}, {0x0004, 0x0008}, {0x0003, 0x0007}, {0x0004, 0x0009}, {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0006, 0x0003}, + {0x0006, 0x0004}, {0x0006, 0x0005}, {0x0006, 0x0006}, {0x0006, 0x0007}, {0x0007, 0x0003}, {0x0007, 0x0004}, {0x0007, 0x0005}, {0x0008, 0x0003}, + {0x0008, 0x0004}, {0x0008, 0x0005}, {0x0009, 0x0003}, {0x0009, 0x0004}, {0x0009, 0x0005}, {0x000a, 0x0003}, {0x000a, 0x0004}, {0x000a, 0x0005}, + {0x000b, 0x0003}, {0x000b, 0x0004}, {0x000b, 0x0005}, {0x000c, 0x0003}, {0x000c, 0x0004}, {0x000c, 0x0005}, {0x000d, 0x0005}, {0x000e, 0x0005}, + {0x000e, 0x0006}, {0x000e, 0x0007}, {0x000e, 0x0008}, {0x000e, 0x0009}, {0x0010, 0x0011}, {0x0010, 0x0012}, {0x0011, 0x0000}, {0x0011, 0x0001}, + {0x0011, 0x0002}, {0x0010, 0x0013}, {0x0011, 0x0003}, {0x0011, 0x0004}, {0x0011, 0x0005}, {0x0011, 0x0006}, {0x0011, 0x0007}, {0x0011, 0x0008}, + {0x0011, 0x0009}, {0x0011, 0x000a}, {0x0011, 0x000b}, {0x0011, 0x000c}, {0x0011, 0x000d}, {0x0011, 0x000e}, {0x0011, 0x000f}, {0x0011, 0x0010}, + {0x0011, 0x0011}, {0x0011, 0x0012}, {0x0011, 0x0013}, {0x0011, 0x0014}, {0x0011, 0x0015}, {0x0011, 0x0016}, {0x0011, 0x0017}, {0x0011, 0x0018}, + {0x0011, 0x0019}, {0x0011, 0x001a}, {0x0011, 0x001b}, {0x0011, 0x001c}, {0x0011, 0x001d}, {0x0011, 0x001e}, {0x0011, 0x001f}, {0x0011, 0x0020}, + {0x0011, 0x0021}, + +}; + +const unsigned int c_aaiCQMFHuffDec22[30][16] = +{ + {0x0005ffff, 0x0006ffff, 0x0003ffff, 0x0001ffff, 0x0002ffff, 0x0004ffff, 0x00000001, 0x00000004, 0x0000000a, 0x0000000c, 0x00010005, 0x00010005, 0x00010006, 0x00010006, 0x0001000b, 0x0001000b, }, + {0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, }, + {0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, + {0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, }, + {0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, + {0x0009ffff, 0x0007ffff, 0x0008ffff, 0x00000017, 0x00000018, 0x00000019, 0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, }, + {0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x00020011, 0x00020011, 0x00020011, 0x00020011, 0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00020013, 0x00020013, 0x00020013, 0x00020013, }, + {0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, }, + {0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, }, + {0x000cffff, 0x000bffff, 0x000affff, 0x00000023, 0x00000024, 0x00000025, 0x00010020, 0x00010020, 0x00010021, 0x00010021, 0x00010022, 0x00010022, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, }, + {0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002b, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, }, + {0x001dffff, 0x0000002c, 0x0000002d, 0x00000031, 0x00020027, 0x00020027, 0x00020027, 0x00020027, 0x00020028, 0x00020028, 0x00020028, 0x00020028, 0x00020029, 0x00020029, 0x00020029, 0x00020029, }, + {0x000dffff, 0x000effff, 0x000fffff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x0019ffff, 0x001affff, 0x001bffff, 0x001cffff, }, + {0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, }, + {0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, }, + {0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, }, + {0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, }, + {0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, }, + {0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, }, + {0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, }, + {0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, }, + {0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, }, + {0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, }, + {0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, }, + {0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, }, + {0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, }, + {0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, }, + {0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, }, + {0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, }, + {0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, }, +}; + +const unsigned int c_aaiCQMFHuffEnc23[93][2] = +{ + {0x0005, 0x0004}, {0x0004, 0x0007}, {0x0004, 0x0008}, {0x0004, 0x0009}, {0x0004, 0x000a}, {0x0004, 0x000b}, {0x0004, 0x000c}, {0x0004, 0x000d}, + {0x0004, 0x000e}, {0x0004, 0x000f}, {0x0005, 0x0005}, {0x0005, 0x0006}, {0x0005, 0x0007}, {0x0005, 0x0008}, {0x0005, 0x0009}, {0x0005, 0x000a}, + {0x0005, 0x000b}, {0x0005, 0x000c}, {0x0005, 0x000d}, {0x0006, 0x0003}, {0x0006, 0x0004}, {0x0006, 0x0005}, {0x0006, 0x0006}, {0x0006, 0x0007}, + {0x0007, 0x0003}, {0x0007, 0x0004}, {0x0007, 0x0005}, {0x0008, 0x0003}, {0x0008, 0x0004}, {0x0008, 0x0005}, {0x0009, 0x0003}, {0x0009, 0x0004}, + {0x0009, 0x0005}, {0x000a, 0x0003}, {0x000a, 0x0004}, {0x000b, 0x0003}, {0x000a, 0x0005}, {0x000b, 0x0004}, {0x000b, 0x0005}, {0x000c, 0x0004}, + {0x000c, 0x0005}, {0x000d, 0x0005}, {0x000d, 0x0006}, {0x000d, 0x0007}, {0x000e, 0x0008}, {0x000e, 0x0009}, {0x0010, 0x0014}, {0x000f, 0x000b}, + {0x000f, 0x000c}, {0x000f, 0x000d}, {0x000f, 0x000e}, {0x0011, 0x0000}, {0x0011, 0x0001}, {0x000f, 0x000f}, {0x0011, 0x0002}, {0x0011, 0x0003}, + {0x0011, 0x0004}, {0x0011, 0x0005}, {0x0011, 0x0006}, {0x0011, 0x0007}, {0x0011, 0x0008}, {0x0011, 0x0009}, {0x0011, 0x000a}, {0x0011, 0x000b}, + {0x0011, 0x000c}, {0x0011, 0x000d}, {0x0011, 0x000e}, {0x0011, 0x000f}, {0x0011, 0x0010}, {0x0011, 0x0011}, {0x0011, 0x0012}, {0x0011, 0x0013}, + {0x0011, 0x0014}, {0x0011, 0x0015}, {0x0011, 0x0016}, {0x0011, 0x0017}, {0x0011, 0x0018}, {0x0011, 0x0019}, {0x0011, 0x001a}, {0x0011, 0x001b}, + {0x0011, 0x001c}, {0x0011, 0x001d}, {0x0011, 0x001e}, {0x0011, 0x001f}, {0x0011, 0x0020}, {0x0011, 0x0021}, {0x0011, 0x0022}, {0x0011, 0x0023}, + {0x0011, 0x0024}, {0x0011, 0x0025}, {0x0011, 0x0026}, {0x0011, 0x0027}, {0x0010, 0x0015}, + +}; + +const unsigned int c_aaiCQMFHuffDec23[35][16] = +{ + {0x0006ffff, 0x0007ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, 0x00000008, 0x00000009, }, + {0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, }, + {0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, + {0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, + {0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, }, + {0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, }, + {0x000affff, 0x0008ffff, 0x0009ffff, 0x0000001b, 0x0000001c, 0x0000001d, 0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x0001001a, 0x0001001a, 0x00020013, 0x00020013, 0x00020013, 0x00020013, }, + {0x00020014, 0x00020014, 0x00020014, 0x00020014, 0x00020015, 0x00020015, 0x00020015, 0x00020015, 0x00020016, 0x00020016, 0x00020016, 0x00020016, 0x00020017, 0x00020017, 0x00020017, 0x00020017, }, + {0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x00020024, 0x00020024, 0x00020024, 0x00020024, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, }, + {0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, }, + {0x000effff, 0x000dffff, 0x000bffff, 0x000cffff, 0x00000027, 0x00000028, 0x00010023, 0x00010023, 0x00010025, 0x00010025, 0x00010026, 0x00010026, 0x00020021, 0x00020021, 0x00020021, 0x00020021, }, + {0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002d, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, }, + {0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, }, + {0x001fffff, 0x0020ffff, 0x0021ffff, 0x0022ffff, 0x0000002e, 0x0000005c, 0x0001002f, 0x0001002f, 0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010035, 0x00010035, }, + {0x000fffff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x0019ffff, 0x001affff, 0x001bffff, 0x001cffff, 0x001dffff, 0x001effff, }, + {0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, }, + {0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, }, + {0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, }, + {0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, }, + {0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, }, + {0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, }, + {0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, }, + {0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, }, + {0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, }, + {0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, }, + {0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, }, + {0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, }, + {0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, }, + {0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, }, + {0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, }, + {0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, }, + {0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, }, + {0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, }, + {0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, }, + {0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, }, +}; + +const unsigned int c_aaiCQMFHuffEnc24[121][2] = +{ + {0x0006, 0x0005}, {0x0004, 0x000d}, {0x0004, 0x000e}, {0x0004, 0x000f}, {0x0005, 0x0006}, {0x0005, 0x0007}, {0x0005, 0x0008}, {0x0005, 0x0009}, + {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0005, 0x000c}, {0x0005, 0x000d}, {0x0005, 0x000e}, {0x0005, 0x000f}, {0x0005, 0x0010}, {0x0005, 0x0011}, + {0x0005, 0x0012}, {0x0005, 0x0013}, {0x0005, 0x0014}, {0x0005, 0x0015}, {0x0005, 0x0016}, {0x0005, 0x0017}, {0x0005, 0x0018}, {0x0005, 0x0019}, + {0x0006, 0x0006}, {0x0006, 0x0007}, {0x0006, 0x0008}, {0x0006, 0x0009}, {0x0006, 0x000a}, {0x0006, 0x000b}, {0x0007, 0x0004}, {0x0007, 0x0005}, + {0x0007, 0x0006}, {0x0007, 0x0007}, {0x0007, 0x0008}, {0x0007, 0x0009}, {0x0008, 0x0004}, {0x0008, 0x0005}, {0x0008, 0x0006}, {0x0008, 0x0007}, + {0x0009, 0x0004}, {0x0009, 0x0005}, {0x0009, 0x0006}, {0x0009, 0x0007}, {0x000a, 0x0004}, {0x000a, 0x0005}, {0x000a, 0x0006}, {0x000a, 0x0007}, + {0x000b, 0x0004}, {0x000b, 0x0005}, {0x000b, 0x0006}, {0x000b, 0x0007}, {0x000c, 0x0004}, {0x000c, 0x0005}, {0x000c, 0x0006}, {0x000d, 0x0004}, + {0x000c, 0x0007}, {0x000d, 0x0005}, {0x000d, 0x0006}, {0x000d, 0x0007}, {0x000e, 0x0007}, {0x000f, 0x0009}, {0x000f, 0x000a}, {0x000f, 0x000b}, + {0x0010, 0x000f}, {0x000f, 0x000c}, {0x0011, 0x0016}, {0x0010, 0x0010}, {0x000f, 0x000d}, {0x0010, 0x0011}, {0x0012, 0x0000}, {0x0011, 0x0017}, + {0x0012, 0x0001}, {0x0012, 0x0002}, {0x0012, 0x0003}, {0x0012, 0x0004}, {0x0012, 0x0005}, {0x0012, 0x0006}, {0x0012, 0x0007}, {0x0012, 0x0008}, + {0x0012, 0x0009}, {0x0012, 0x000a}, {0x0012, 0x000b}, {0x0012, 0x000c}, {0x0012, 0x000d}, {0x0012, 0x000e}, {0x0012, 0x000f}, {0x0012, 0x0010}, + {0x0012, 0x0011}, {0x0012, 0x0012}, {0x0012, 0x0013}, {0x0012, 0x0014}, {0x0012, 0x0015}, {0x0012, 0x0016}, {0x0012, 0x0017}, {0x0012, 0x0018}, + {0x0012, 0x0019}, {0x0012, 0x001a}, {0x0012, 0x001b}, {0x0012, 0x001c}, {0x0012, 0x001d}, {0x0012, 0x001e}, {0x0012, 0x001f}, {0x0012, 0x0020}, + {0x0012, 0x0021}, {0x0012, 0x0022}, {0x0012, 0x0023}, {0x0012, 0x0024}, {0x0012, 0x0025}, {0x0012, 0x0026}, {0x0012, 0x0027}, {0x0012, 0x0028}, + {0x0012, 0x0029}, {0x0012, 0x002a}, {0x0012, 0x002b}, {0x0011, 0x0018}, {0x0011, 0x0019}, {0x0011, 0x001a}, {0x0011, 0x001b}, {0x0011, 0x001c}, + {0x0011, 0x001d}, + +}; + +const unsigned int c_aaiCQMFHuffDec24[37][16] = +{ + {0x000dffff, 0x000bffff, 0x000cffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x00000001, 0x00000002, 0x00000003, }, + {0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, }, + {0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, }, + {0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, + {0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, + {0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, }, + {0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, + {0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, + {0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, }, + {0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, }, + {0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, }, + {0x00010022, 0x00010022, 0x00010023, 0x00010023, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x00020019, 0x00020019, 0x00020019, 0x00020019, }, + {0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, }, + {0x0011ffff, 0x0010ffff, 0x000effff, 0x000fffff, 0x00000024, 0x00000025, 0x00000026, 0x00000027, 0x0001001e, 0x0001001e, 0x0001001f, 0x0001001f, 0x00010020, 0x00010020, 0x00010021, 0x00010021, }, + {0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, }, + {0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, }, + {0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002f, 0x0002002f, 0x0002002f, 0x0002002f, }, + {0x0015ffff, 0x0014ffff, 0x0012ffff, 0x0013ffff, 0x00000034, 0x00000035, 0x00000036, 0x00000038, 0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010033, 0x00010033, }, + {0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, }, + {0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, }, + {0x00000043, 0x00000045, 0x0001003d, 0x0001003d, 0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x00010041, 0x00010041, 0x00010044, 0x00010044, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003c, }, + {0x0024ffff, 0x001affff, 0x001bffff, 0x001cffff, 0x001dffff, 0x001effff, 0x001fffff, 0x0020ffff, 0x0021ffff, 0x0022ffff, 0x0023ffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x0019ffff, 0x00000040, }, + {0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, }, + {0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, }, + {0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, }, + {0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, }, + {0x0002004b, 0x0002004b, 0x0002004b, 0x0002004b, 0x0002004c, 0x0002004c, 0x0002004c, 0x0002004c, 0x0002004d, 0x0002004d, 0x0002004d, 0x0002004d, 0x0002004e, 0x0002004e, 0x0002004e, 0x0002004e, }, + {0x0002004f, 0x0002004f, 0x0002004f, 0x0002004f, 0x00020050, 0x00020050, 0x00020050, 0x00020050, 0x00020051, 0x00020051, 0x00020051, 0x00020051, 0x00020052, 0x00020052, 0x00020052, 0x00020052, }, + {0x00020053, 0x00020053, 0x00020053, 0x00020053, 0x00020054, 0x00020054, 0x00020054, 0x00020054, 0x00020055, 0x00020055, 0x00020055, 0x00020055, 0x00020056, 0x00020056, 0x00020056, 0x00020056, }, + {0x00020057, 0x00020057, 0x00020057, 0x00020057, 0x00020058, 0x00020058, 0x00020058, 0x00020058, 0x00020059, 0x00020059, 0x00020059, 0x00020059, 0x0002005a, 0x0002005a, 0x0002005a, 0x0002005a, }, + {0x0002005b, 0x0002005b, 0x0002005b, 0x0002005b, 0x0002005c, 0x0002005c, 0x0002005c, 0x0002005c, 0x0002005d, 0x0002005d, 0x0002005d, 0x0002005d, 0x0002005e, 0x0002005e, 0x0002005e, 0x0002005e, }, + {0x0002005f, 0x0002005f, 0x0002005f, 0x0002005f, 0x00020060, 0x00020060, 0x00020060, 0x00020060, 0x00020061, 0x00020061, 0x00020061, 0x00020061, 0x00020062, 0x00020062, 0x00020062, 0x00020062, }, + {0x00020063, 0x00020063, 0x00020063, 0x00020063, 0x00020064, 0x00020064, 0x00020064, 0x00020064, 0x00020065, 0x00020065, 0x00020065, 0x00020065, 0x00020066, 0x00020066, 0x00020066, 0x00020066, }, + {0x00020067, 0x00020067, 0x00020067, 0x00020067, 0x00020068, 0x00020068, 0x00020068, 0x00020068, 0x00020069, 0x00020069, 0x00020069, 0x00020069, 0x0002006a, 0x0002006a, 0x0002006a, 0x0002006a, }, + {0x0002006b, 0x0002006b, 0x0002006b, 0x0002006b, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006d, 0x0002006d, 0x0002006d, 0x0002006d, 0x0002006e, 0x0002006e, 0x0002006e, 0x0002006e, }, + {0x0002006f, 0x0002006f, 0x0002006f, 0x0002006f, 0x00020070, 0x00020070, 0x00020070, 0x00020070, 0x00020071, 0x00020071, 0x00020071, 0x00020071, 0x00020072, 0x00020072, 0x00020072, 0x00020072, }, + {0x00020046, 0x00020046, 0x00020046, 0x00020046, 0x00020048, 0x00020048, 0x00020048, 0x00020048, 0x00020049, 0x00020049, 0x00020049, 0x00020049, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, }, +}; + +const unsigned int c_aaiCQMFHuffEnc25[136][2] = +{ + {0x0006, 0x0006}, {0x0005, 0x000b}, {0x0005, 0x000c}, {0x0005, 0x000d}, {0x0005, 0x000e}, {0x0005, 0x000f}, {0x0005, 0x0010}, {0x0005, 0x0011}, + {0x0005, 0x0012}, {0x0005, 0x0013}, {0x0005, 0x0014}, {0x0005, 0x0015}, {0x0005, 0x0016}, {0x0005, 0x0017}, {0x0005, 0x0018}, {0x0005, 0x0019}, + {0x0005, 0x001a}, {0x0005, 0x001b}, {0x0005, 0x001c}, {0x0005, 0x001d}, {0x0005, 0x001e}, {0x0005, 0x001f}, {0x0006, 0x0007}, {0x0006, 0x0008}, + {0x0006, 0x0009}, {0x0006, 0x000a}, {0x0006, 0x000b}, {0x0006, 0x000c}, {0x0006, 0x000d}, {0x0006, 0x000e}, {0x0006, 0x000f}, {0x0006, 0x0010}, + {0x0006, 0x0011}, {0x0006, 0x0012}, {0x0006, 0x0013}, {0x0006, 0x0014}, {0x0006, 0x0015}, {0x0007, 0x0005}, {0x0007, 0x0006}, {0x0007, 0x0007}, + {0x0007, 0x0008}, {0x0007, 0x0009}, {0x0007, 0x000a}, {0x0007, 0x000b}, {0x0008, 0x0005}, {0x0008, 0x0006}, {0x0008, 0x0007}, {0x0008, 0x0008}, + {0x0008, 0x0009}, {0x0009, 0x0005}, {0x0009, 0x0006}, {0x0009, 0x0007}, {0x0009, 0x0008}, {0x0009, 0x0009}, {0x000a, 0x0004}, {0x000a, 0x0005}, + {0x000a, 0x0006}, {0x000a, 0x0007}, {0x000a, 0x0008}, {0x000a, 0x0009}, {0x000b, 0x0005}, {0x000b, 0x0006}, {0x000b, 0x0007}, {0x000c, 0x0005}, + {0x000c, 0x0006}, {0x000c, 0x0007}, {0x000c, 0x0008}, {0x000c, 0x0009}, {0x000d, 0x0006}, {0x000d, 0x0007}, {0x000d, 0x0008}, {0x000d, 0x0009}, + {0x000e, 0x0009}, {0x000e, 0x000a}, {0x000f, 0x0010}, {0x000e, 0x000b}, {0x000f, 0x0011}, {0x0010, 0x001b}, {0x0010, 0x001c}, {0x0010, 0x001d}, + {0x0010, 0x001e}, {0x0011, 0x0000}, {0x0011, 0x0001}, {0x0011, 0x0002}, {0x0011, 0x0003}, {0x0011, 0x0004}, {0x0011, 0x0005}, {0x0011, 0x0006}, + {0x0011, 0x0007}, {0x0011, 0x0008}, {0x0010, 0x001f}, {0x0011, 0x0009}, {0x0011, 0x000a}, {0x0011, 0x000b}, {0x0011, 0x000c}, {0x0011, 0x000d}, + {0x0011, 0x000e}, {0x0011, 0x000f}, {0x0011, 0x0010}, {0x0011, 0x0011}, {0x0011, 0x0012}, {0x0011, 0x0013}, {0x0011, 0x0014}, {0x0011, 0x0015}, + {0x0011, 0x0016}, {0x0011, 0x0017}, {0x0011, 0x0018}, {0x0011, 0x0019}, {0x0011, 0x001a}, {0x0011, 0x001b}, {0x0011, 0x001c}, {0x0011, 0x001d}, + {0x0011, 0x001e}, {0x0011, 0x001f}, {0x0011, 0x0020}, {0x0011, 0x0021}, {0x0011, 0x0022}, {0x0011, 0x0023}, {0x0011, 0x0024}, {0x0011, 0x0025}, + {0x0011, 0x0026}, {0x0011, 0x0027}, {0x0011, 0x0028}, {0x0011, 0x0029}, {0x0011, 0x002a}, {0x0011, 0x002b}, {0x0011, 0x002c}, {0x0011, 0x002d}, + {0x0011, 0x002e}, {0x0011, 0x002f}, {0x0011, 0x0030}, {0x0011, 0x0031}, {0x0011, 0x0032}, {0x0011, 0x0033}, {0x0011, 0x0034}, {0x0011, 0x0035}, +}; + +const unsigned int c_aaiCQMFHuffDec25[54][16] = +{ + {0x0010ffff, 0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, }, + {0x00020023, 0x00020023, 0x00020023, 0x00020023, 0x00020024, 0x00020024, 0x00020024, 0x00020024, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, }, + {0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, }, + {0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, }, + {0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, }, + {0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, + {0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, + {0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, }, + {0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, + {0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, + {0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, }, + {0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, }, + {0x00010028, 0x00010028, 0x00010029, 0x00010029, 0x0001002a, 0x0001002a, 0x0001002b, 0x0001002b, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020016, 0x00020016, 0x00020016, 0x00020016, }, + {0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, }, + {0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, }, + {0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, }, + {0x0015ffff, 0x0014ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0000002c, 0x0000002d, 0x0000002e, 0x0000002f, 0x00000030, 0x00010025, 0x00010025, 0x00010026, 0x00010026, 0x00010027, 0x00010027, }, + {0x0002003a, 0x0002003a, 0x0002003a, 0x0002003a, 0x0002003b, 0x0002003b, 0x0002003b, 0x0002003b, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, }, + {0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, }, + {0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, }, + {0x00020036, 0x00020036, 0x00020036, 0x00020036, 0x00020037, 0x00020037, 0x00020037, 0x00020037, 0x00020038, 0x00020038, 0x00020038, 0x00020038, 0x00020039, 0x00020039, 0x00020039, 0x00020039, }, + {0x001affff, 0x0019ffff, 0x0018ffff, 0x0016ffff, 0x0017ffff, 0x0000003f, 0x00000040, 0x00000041, 0x00000042, 0x00000043, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, 0x0001003e, 0x0001003e, }, + {0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, }, + {0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, }, + {0x0001004a, 0x0001004a, 0x0001004c, 0x0001004c, 0x00020048, 0x00020048, 0x00020048, 0x00020048, 0x00020049, 0x00020049, 0x00020049, 0x00020049, 0x0002004b, 0x0002004b, 0x0002004b, 0x0002004b, }, + {0x002bffff, 0x002cffff, 0x002dffff, 0x002effff, 0x002fffff, 0x0030ffff, 0x0031ffff, 0x0032ffff, 0x0033ffff, 0x0034ffff, 0x0035ffff, 0x0000004d, 0x0000004e, 0x0000004f, 0x00000050, 0x0000005a, }, + {0x001bffff, 0x001cffff, 0x001dffff, 0x001effff, 0x001fffff, 0x0020ffff, 0x0021ffff, 0x0022ffff, 0x0023ffff, 0x0024ffff, 0x0025ffff, 0x0026ffff, 0x0027ffff, 0x0028ffff, 0x0029ffff, 0x002affff, }, + {0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, }, + {0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, }, + {0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, }, + {0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, }, + {0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, }, + {0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, }, + {0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005f, 0x0003005f, 0x0003005f, 0x0003005f, 0x0003005f, 0x0003005f, 0x0003005f, 0x0003005f, }, + {0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, }, + {0x00030062, 0x00030062, 0x00030062, 0x00030062, 0x00030062, 0x00030062, 0x00030062, 0x00030062, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, }, + {0x00030064, 0x00030064, 0x00030064, 0x00030064, 0x00030064, 0x00030064, 0x00030064, 0x00030064, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, }, + {0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, }, + {0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, }, + {0x0003006a, 0x0003006a, 0x0003006a, 0x0003006a, 0x0003006a, 0x0003006a, 0x0003006a, 0x0003006a, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, }, + {0x0003006c, 0x0003006c, 0x0003006c, 0x0003006c, 0x0003006c, 0x0003006c, 0x0003006c, 0x0003006c, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, }, + {0x0003006e, 0x0003006e, 0x0003006e, 0x0003006e, 0x0003006e, 0x0003006e, 0x0003006e, 0x0003006e, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, }, + {0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, }, + {0x00030072, 0x00030072, 0x00030072, 0x00030072, 0x00030072, 0x00030072, 0x00030072, 0x00030072, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, }, + {0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, }, + {0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, }, + {0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, }, + {0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, }, + {0x0003007c, 0x0003007c, 0x0003007c, 0x0003007c, 0x0003007c, 0x0003007c, 0x0003007c, 0x0003007c, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, }, + {0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007f, 0x0003007f, 0x0003007f, 0x0003007f, 0x0003007f, 0x0003007f, 0x0003007f, 0x0003007f, }, + {0x00030080, 0x00030080, 0x00030080, 0x00030080, 0x00030080, 0x00030080, 0x00030080, 0x00030080, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, }, + {0x00030082, 0x00030082, 0x00030082, 0x00030082, 0x00030082, 0x00030082, 0x00030082, 0x00030082, 0x00030083, 0x00030083, 0x00030083, 0x00030083, 0x00030083, 0x00030083, 0x00030083, 0x00030083, }, + {0x00030084, 0x00030084, 0x00030084, 0x00030084, 0x00030084, 0x00030084, 0x00030084, 0x00030084, 0x00030085, 0x00030085, 0x00030085, 0x00030085, 0x00030085, 0x00030085, 0x00030085, 0x00030085, }, + {0x00030086, 0x00030086, 0x00030086, 0x00030086, 0x00030086, 0x00030086, 0x00030086, 0x00030086, 0x00030087, 0x00030087, 0x00030087, 0x00030087, 0x00030087, 0x00030087, 0x00030087, 0x00030087, }, +}; + +const unsigned int c_aaiCQMFHuffEnc26[164][2] = +{ + {0x0006, 0x0008}, {0x0005, 0x0010}, {0x0005, 0x0011}, {0x0005, 0x0012}, {0x0005, 0x0013}, {0x0005, 0x0014}, {0x0005, 0x0015}, {0x0005, 0x0016}, + {0x0005, 0x0017}, {0x0005, 0x0018}, {0x0005, 0x0019}, {0x0005, 0x001a}, {0x0005, 0x001b}, {0x0005, 0x001c}, {0x0005, 0x001d}, {0x0005, 0x001e}, + {0x0006, 0x0009}, {0x0006, 0x000a}, {0x0005, 0x001f}, {0x0006, 0x000b}, {0x0006, 0x000c}, {0x0006, 0x000d}, {0x0006, 0x000e}, {0x0006, 0x000f}, + {0x0006, 0x0010}, {0x0006, 0x0011}, {0x0006, 0x0012}, {0x0006, 0x0013}, {0x0006, 0x0014}, {0x0006, 0x0015}, {0x0006, 0x0016}, {0x0006, 0x0017}, + {0x0006, 0x0018}, {0x0006, 0x0019}, {0x0006, 0x001a}, {0x0006, 0x001b}, {0x0006, 0x001c}, {0x0006, 0x001d}, {0x0006, 0x001e}, {0x0006, 0x001f}, + {0x0007, 0x0006}, {0x0007, 0x0007}, {0x0007, 0x0008}, {0x0007, 0x0009}, {0x0007, 0x000a}, {0x0007, 0x000b}, {0x0007, 0x000c}, {0x0007, 0x000d}, + {0x0007, 0x000e}, {0x0007, 0x000f}, {0x0008, 0x0005}, {0x0008, 0x0006}, {0x0008, 0x0007}, {0x0008, 0x0008}, {0x0008, 0x0009}, {0x0008, 0x000a}, + {0x0008, 0x000b}, {0x0009, 0x0005}, {0x0009, 0x0006}, {0x0009, 0x0007}, {0x0009, 0x0008}, {0x0009, 0x0009}, {0x000a, 0x0005}, {0x000a, 0x0006}, + {0x000a, 0x0007}, {0x000a, 0x0008}, {0x000a, 0x0009}, {0x000b, 0x0005}, {0x000b, 0x0006}, {0x000b, 0x0007}, {0x000b, 0x0008}, {0x000b, 0x0009}, + {0x000c, 0x0005}, {0x000c, 0x0006}, {0x000c, 0x0007}, {0x000c, 0x0008}, {0x000c, 0x0009}, {0x000d, 0x0005}, {0x000d, 0x0006}, {0x000d, 0x0007}, + {0x000d, 0x0008}, {0x000e, 0x0006}, {0x000d, 0x0009}, {0x000e, 0x0007}, {0x000e, 0x0008}, {0x000e, 0x0009}, {0x000f, 0x0008}, {0x000f, 0x0009}, + {0x000f, 0x000a}, {0x0011, 0x0014}, {0x0010, 0x000b}, {0x000f, 0x000b}, {0x0010, 0x000c}, {0x0012, 0x001b}, {0x0010, 0x000d}, {0x0010, 0x000e}, + {0x0011, 0x0015}, {0x0012, 0x001c}, {0x0012, 0x001d}, {0x0010, 0x000f}, {0x0012, 0x001e}, {0x0013, 0x0000}, {0x0012, 0x001f}, {0x0013, 0x0001}, + {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0012, 0x0020}, {0x0013, 0x0005}, {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0013, 0x0008}, + {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0013, 0x000c}, {0x0013, 0x000d}, {0x0013, 0x000e}, {0x0013, 0x000f}, {0x0013, 0x0010}, + {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0013, 0x0014}, {0x0013, 0x0015}, {0x0013, 0x0016}, {0x0013, 0x0017}, {0x0013, 0x0018}, + {0x0013, 0x0019}, {0x0013, 0x001a}, {0x0013, 0x001b}, {0x0013, 0x001c}, {0x0013, 0x001d}, {0x0013, 0x001e}, {0x0013, 0x001f}, {0x0013, 0x0020}, + {0x0013, 0x0021}, {0x0013, 0x0022}, {0x0013, 0x0023}, {0x0013, 0x0024}, {0x0013, 0x0025}, {0x0013, 0x0026}, {0x0013, 0x0027}, {0x0013, 0x0028}, + {0x0013, 0x0029}, {0x0013, 0x002a}, {0x0013, 0x002b}, {0x0013, 0x002c}, {0x0013, 0x002d}, {0x0013, 0x002e}, {0x0013, 0x002f}, {0x0013, 0x0030}, + {0x0013, 0x0031}, {0x0013, 0x0032}, {0x0013, 0x0033}, {0x0013, 0x0034}, {0x0013, 0x0035}, {0x0012, 0x0021}, {0x0012, 0x0022}, {0x0012, 0x0023}, + {0x0012, 0x0024}, {0x0012, 0x0025}, {0x0012, 0x0026}, {0x0012, 0x0027}, + +}; + +const unsigned int c_aaiCQMFHuffDec26[38][16] = +{ + {0x000fffff, 0x0010ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000dffff, 0x000effff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, }, + {0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, }, + {0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, }, + {0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, + {0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, }, + {0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, }, + {0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, + {0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, + {0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, }, + {0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x00020011, 0x00020011, 0x00020011, 0x00020011, 0x00020013, 0x00020013, 0x00020013, 0x00020013, }, + {0x00020014, 0x00020014, 0x00020014, 0x00020014, 0x00020015, 0x00020015, 0x00020015, 0x00020015, 0x00020016, 0x00020016, 0x00020016, 0x00020016, 0x00020017, 0x00020017, 0x00020017, 0x00020017, }, + {0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, }, + {0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, }, + {0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x00020023, 0x00020023, 0x00020023, 0x00020023, }, + {0x00020024, 0x00020024, 0x00020024, 0x00020024, 0x00020025, 0x00020025, 0x00020025, 0x00020025, 0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00020027, 0x00020027, 0x00020027, 0x00020027, }, + {0x0015ffff, 0x0014ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x00000032, 0x00000033, 0x00000034, 0x00000035, 0x00000036, 0x00000037, 0x00000038, 0x00010028, 0x00010028, 0x00010029, 0x00010029, }, + {0x0001002a, 0x0001002a, 0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, 0x0001002e, 0x0001002e, 0x0001002f, 0x0001002f, 0x00010030, 0x00010030, 0x00010031, 0x00010031, }, + {0x00020041, 0x00020041, 0x00020041, 0x00020041, 0x00020042, 0x00020042, 0x00020042, 0x00020042, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, }, + {0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, }, + {0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, }, + {0x00010046, 0x00010046, 0x00010047, 0x00010047, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002003f, 0x0002003f, 0x0002003f, 0x0002003f, 0x00020040, 0x00020040, 0x00020040, 0x00020040, }, + {0x001affff, 0x0019ffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x00000048, 0x00000049, 0x0000004a, 0x0000004b, 0x0000004c, 0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, }, + {0x00020054, 0x00020054, 0x00020054, 0x00020054, 0x00020055, 0x00020055, 0x00020055, 0x00020055, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, }, + {0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, }, + {0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, }, + {0x00010056, 0x00010056, 0x00010057, 0x00010057, 0x00010058, 0x00010058, 0x0001005b, 0x0001005b, 0x00020051, 0x00020051, 0x00020051, 0x00020051, 0x00020053, 0x00020053, 0x00020053, 0x00020053, }, + {0x0020ffff, 0x0021ffff, 0x0022ffff, 0x0023ffff, 0x0024ffff, 0x0025ffff, 0x001dffff, 0x001cffff, 0x001effff, 0x001fffff, 0x001bffff, 0x0000005a, 0x0000005c, 0x0000005e, 0x0000005f, 0x00000063, }, + {0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, }, + {0x00020061, 0x00020061, 0x00020061, 0x00020061, 0x00020062, 0x00020062, 0x00020062, 0x00020062, 0x00020064, 0x00020064, 0x00020064, 0x00020064, 0x00020066, 0x00020066, 0x00020066, 0x00020066, }, + {0x00010097, 0x00010097, 0x00010098, 0x00010098, 0x00010099, 0x00010099, 0x0001009a, 0x0001009a, 0x0001009b, 0x0001009b, 0x0001009c, 0x0001009c, 0x0002005d, 0x0002005d, 0x0002005d, 0x0002005d, }, + {0x0002006b, 0x0002006b, 0x0002006b, 0x0002006b, 0x0002009d, 0x0002009d, 0x0002009d, 0x0002009d, 0x0002009e, 0x0002009e, 0x0002009e, 0x0002009e, 0x0002009f, 0x0002009f, 0x0002009f, 0x0002009f, }, + {0x000200a0, 0x000200a0, 0x000200a0, 0x000200a0, 0x000200a1, 0x000200a1, 0x000200a1, 0x000200a1, 0x000200a2, 0x000200a2, 0x000200a2, 0x000200a2, 0x000200a3, 0x000200a3, 0x000200a3, 0x000200a3, }, + {0x00010065, 0x00010065, 0x00010067, 0x00010067, 0x00010068, 0x00010068, 0x00010069, 0x00010069, 0x0001006a, 0x0001006a, 0x0001006c, 0x0001006c, 0x0001006d, 0x0001006d, 0x0001006e, 0x0001006e, }, + {0x0001006f, 0x0001006f, 0x00010070, 0x00010070, 0x00010071, 0x00010071, 0x00010072, 0x00010072, 0x00010073, 0x00010073, 0x00010074, 0x00010074, 0x00010075, 0x00010075, 0x00010076, 0x00010076, }, + {0x00010077, 0x00010077, 0x00010078, 0x00010078, 0x00010079, 0x00010079, 0x0001007a, 0x0001007a, 0x0001007b, 0x0001007b, 0x0001007c, 0x0001007c, 0x0001007d, 0x0001007d, 0x0001007e, 0x0001007e, }, + {0x0001007f, 0x0001007f, 0x00010080, 0x00010080, 0x00010081, 0x00010081, 0x00010082, 0x00010082, 0x00010083, 0x00010083, 0x00010084, 0x00010084, 0x00010085, 0x00010085, 0x00010086, 0x00010086, }, + {0x00010087, 0x00010087, 0x00010088, 0x00010088, 0x00010089, 0x00010089, 0x0001008a, 0x0001008a, 0x0001008b, 0x0001008b, 0x0001008c, 0x0001008c, 0x0001008d, 0x0001008d, 0x0001008e, 0x0001008e, }, + {0x0001008f, 0x0001008f, 0x00010090, 0x00010090, 0x00010091, 0x00010091, 0x00010092, 0x00010092, 0x00010093, 0x00010093, 0x00010094, 0x00010094, 0x00010095, 0x00010095, 0x00010096, 0x00010096, }, +}; + +extern const unsigned int (*GetHuffEncTable(const int iAlloc))[2]; + +extern const unsigned int (*GetHuffDecTable(const int iAlloc))[16]; + diff --git a/lib_rend/ivas_cldfb_trans_codec/CQMFHuff.h b/lib_rend/ivas_cldfb_trans_codec/CQMFHuff.h new file mode 100644 index 0000000000..b8103689fe --- /dev/null +++ b/lib_rend/ivas_cldfb_trans_codec/CQMFHuff.h @@ -0,0 +1,305 @@ +#ifndef _CQMF_HUFF_H_ +#define _CQMF_HUFF_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#ifndef HUFF_READ_SIZE +#define HUFF_READ_SIZE (4) +#endif + +#ifndef HUFF_DEC_TABLE_SIZE +#define HUFF_DEC_TABLE_SIZE (16) +#endif + +#include // For NULL + +extern const unsigned int c_aaiCQMFHuffEnc1[16][2]; + +extern const unsigned int c_aaiCQMFHuffDec1[4][HUFF_DEC_TABLE_SIZE]; + +extern const unsigned int c_aaiCQMFHuffEnc2[25][2]; + +extern const unsigned int c_aaiCQMFHuffDec2[4][HUFF_DEC_TABLE_SIZE]; + +extern const unsigned int c_aaiCQMFHuffEnc3[36][2]; + +extern const unsigned int c_aaiCQMFHuffDec3[14][HUFF_DEC_TABLE_SIZE]; + +extern const unsigned int c_aaiCQMFHuffEnc4[49][2]; + +extern const unsigned int c_aaiCQMFHuffDec4[9][HUFF_DEC_TABLE_SIZE]; + +extern const unsigned int c_aaiCQMFHuffEnc5[64][2]; + +extern const unsigned int c_aaiCQMFHuffDec5[27][HUFF_DEC_TABLE_SIZE]; + +extern const unsigned int c_aaiCQMFHuffEnc6[81][2]; + +extern const unsigned int c_aaiCQMFHuffDec6[21][HUFF_DEC_TABLE_SIZE]; + +extern const unsigned int c_aaiCQMFHuffEnc7[81][2]; + +extern const unsigned int c_aaiCQMFHuffDec7[23][HUFF_DEC_TABLE_SIZE]; + +extern const unsigned int c_aaiCQMFHuffEnc8[121][2]; + +extern const unsigned int c_aaiCQMFHuffDec8[17][HUFF_DEC_TABLE_SIZE]; + +extern const unsigned int c_aaiCQMFHuffEnc9[196][2]; + +extern const unsigned int c_aaiCQMFHuffDec9[30][HUFF_DEC_TABLE_SIZE]; + +extern const unsigned int c_aaiCQMFHuffEnc10[196][2]; + +extern const unsigned int c_aaiCQMFHuffDec10[34][HUFF_DEC_TABLE_SIZE]; + +extern const unsigned int c_aaiCQMFHuffEnc11[256][2]; + +extern const unsigned int c_aaiCQMFHuffDec11[43][HUFF_DEC_TABLE_SIZE]; + +extern const unsigned int c_aaiCQMFHuffEnc12[400][2]; + +extern const unsigned int c_aaiCQMFHuffDec12[44][HUFF_DEC_TABLE_SIZE]; + +extern const unsigned int c_aaiCQMFHuffEnc13[625][2]; + +extern const unsigned int c_aaiCQMFHuffDec13[98][HUFF_DEC_TABLE_SIZE]; + +extern const unsigned int c_aaiCQMFHuffEnc14[625][2]; + +extern const unsigned int c_aaiCQMFHuffDec14[103][HUFF_DEC_TABLE_SIZE]; + +extern const unsigned int c_aaiCQMFHuffEnc15[28][2]; + +extern const unsigned int c_aaiCQMFHuffDec15[10][HUFF_DEC_TABLE_SIZE]; + +extern const unsigned int c_aaiCQMFHuffEnc16[32][2]; + +extern const unsigned int c_aaiCQMFHuffDec16[11][HUFF_DEC_TABLE_SIZE]; + +extern const unsigned int c_aaiCQMFHuffEnc17[41][2]; + +extern const unsigned int c_aaiCQMFHuffDec17[7][HUFF_DEC_TABLE_SIZE]; + +extern const unsigned int c_aaiCQMFHuffEnc18[40][2]; + +extern const unsigned int c_aaiCQMFHuffDec18[7][HUFF_DEC_TABLE_SIZE]; + +extern const unsigned int c_aaiCQMFHuffEnc19[47][2]; + +extern const unsigned int c_aaiCQMFHuffDec19[10][HUFF_DEC_TABLE_SIZE]; + +extern const unsigned int c_aaiCQMFHuffEnc20[58][2]; + +extern const unsigned int c_aaiCQMFHuffDec20[17][HUFF_DEC_TABLE_SIZE]; + +extern const unsigned int c_aaiCQMFHuffEnc21[70][2]; + +extern const unsigned int c_aaiCQMFHuffDec21[23][HUFF_DEC_TABLE_SIZE]; + +extern const unsigned int c_aaiCQMFHuffEnc22[81][2]; + +extern const unsigned int c_aaiCQMFHuffDec22[30][HUFF_DEC_TABLE_SIZE]; + +extern const unsigned int c_aaiCQMFHuffEnc23[93][2]; + +extern const unsigned int c_aaiCQMFHuffDec23[35][HUFF_DEC_TABLE_SIZE]; + +extern const unsigned int c_aaiCQMFHuffEnc24[121][2]; + +extern const unsigned int c_aaiCQMFHuffDec24[37][HUFF_DEC_TABLE_SIZE]; + +extern const unsigned int c_aaiCQMFHuffEnc25[136][2]; + +extern const unsigned int c_aaiCQMFHuffDec25[54][HUFF_DEC_TABLE_SIZE]; + +extern const unsigned int c_aaiCQMFHuffEnc26[164][2]; + +extern const unsigned int c_aaiCQMFHuffDec26[38][HUFF_DEC_TABLE_SIZE]; + +inline const unsigned int (*GetHuffEncTable(const int iAlloc))[2] +{ + const unsigned int (*pauiHuffmanTable)[2] = NULL; + + switch(iAlloc){ + case 1: + pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc1; + break; + case 2: + pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc2; + break; + case 3: + pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc3; + break; + case 4: + pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc4; + break; + case 5: + pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc5; + break; + case 6: + pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc6; + break; + case 7: + pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc7; + break; + case 8: + pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc8; + break; + case 9: + pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc9; + break; + case 10: + pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc10; + break; + case 11: + pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc11; + break; + case 12: + pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc12; + break; + case 13: + pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc13; + break; + case 14: + pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc14; + break; + case 15: + pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc15; + break; + case 16: + pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc16; + break; + case 17: + pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc17; + break; + case 18: + pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc18; + break; + case 19: + pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc19; + break; + case 20: + pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc20; + break; + case 21: + pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc21; + break; + case 22: + pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc22; + break; + case 23: + pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc23; + break; + case 24: + pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc24; + break; + case 25: + pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc25; + break; + case 26: + pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc26; + break; + + } + + return pauiHuffmanTable; +} + +inline const unsigned int (*GetHuffDecTable(const int iAlloc))[16] +{ + const unsigned int (*pauiHuffmanTable)[16] = NULL; + + switch(iAlloc){ + case 1: + pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec1; + break; + case 2: + pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec2; + break; + case 3: + pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec3; + break; + case 4: + pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec4; + break; + case 5: + pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec5; + break; + case 6: + pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec6; + break; + case 7: + pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec7; + break; + case 8: + pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec8; + break; + case 9: + pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec9; + break; + case 10: + pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec10; + break; + case 11: + pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec11; + break; + case 12: + pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec12; + break; + case 13: + pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec13; + break; + case 14: + pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec14; + break; + case 15: + pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec15; + break; + case 16: + pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec16; + break; + case 17: + pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec17; + break; + case 18: + pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec18; + break; + case 19: + pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec19; + break; + case 20: + pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec20; + break; + case 21: + pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec21; + break; + case 22: + pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec22; + break; + case 23: + pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec23; + break; + case 24: + pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec24; + break; + case 25: + pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec25; + break; + case 26: + pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec26; + break; + + } + + return pauiHuffmanTable; +} + +#ifdef __cplusplus +} +#endif + +#endif /* _CQMF_HUFF_H_ */ diff --git a/lib_rend/ivas_cldfb_trans_codec/NoiseGen.c b/lib_rend/ivas_cldfb_trans_codec/NoiseGen.c new file mode 100644 index 0000000000..e2f7ea62b1 --- /dev/null +++ b/lib_rend/ivas_cldfb_trans_codec/NoiseGen.c @@ -0,0 +1,47 @@ +#include "NoiseGen.h" +#include +#include +#include +#include "wmops.h" + +NoiseGen* CreateNoiseGen() +{ + int n; + + NoiseGen *psNoiseGen = NULL; + + psNoiseGen = (NoiseGen*)malloc(sizeof(NoiseGen)); + psNoiseGen->iNoiseBufferLength = 2048; + psNoiseGen->iNoiseBufferMask = 2047; + psNoiseGen->iNoiseBufferIndex = 0; + + psNoiseGen->pfNoiseBuffer = (float*)malloc(psNoiseGen->iNoiseBufferLength * sizeof(float)); + + /* Generate Laplacian distributed noise */ + for(n = 0; n < psNoiseGen->iNoiseBufferLength; n ++){ + float fNoise = 0.0; + float fScale = 0.707f; + fNoise = (float)((rand() & (RAND_MAX - 1)) - (RAND_MAX >> 1)) / (float)RAND_MAX; + + if(fNoise < 0.0){ + fNoise = fScale * logf(1.0f + 1.9999999f * fNoise); + } + else{ + fNoise = -fScale * logf(1.0f - 1.9999999f * fNoise); + } + + psNoiseGen->pfNoiseBuffer[n] = fNoise; + } + + return psNoiseGen; +} + +void DeleteNoiseGen(NoiseGen *psNoiseGen) +{ + free(psNoiseGen->pfNoiseBuffer); + free(psNoiseGen); +} + +extern float GetNoise(NoiseGen *psNoiseGen); + + diff --git a/lib_rend/ivas_cldfb_trans_codec/NoiseGen.h b/lib_rend/ivas_cldfb_trans_codec/NoiseGen.h new file mode 100644 index 0000000000..1a4ccb924c --- /dev/null +++ b/lib_rend/ivas_cldfb_trans_codec/NoiseGen.h @@ -0,0 +1,35 @@ +#ifndef _NOISE_GEN_H_ +#define _NOISE_GEN_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +typedef struct NOISE_GEN{ + int iNoiseBufferLength; + int iNoiseBufferMask; + int iNoiseBufferIndex; + float *pfNoiseBuffer; +}NoiseGen; + +NoiseGen* CreateNoiseGen(); + +void DeleteNoiseGen(NoiseGen *psNoiseGen); + +inline float GetNoise(NoiseGen *psNoiseGen) +{ + float fNoiseSample; + + fNoiseSample = psNoiseGen->pfNoiseBuffer[psNoiseGen->iNoiseBufferIndex]; + psNoiseGen->iNoiseBufferIndex ++; + psNoiseGen->iNoiseBufferIndex &= psNoiseGen->iNoiseBufferMask; + + return fNoiseSample; +} + +#ifdef __cplusplus +} +#endif + +#endif /* _NOISE_GEN_H_ */ diff --git a/lib_rend/ivas_cldfb_trans_codec/PerceptualModel.c b/lib_rend/ivas_cldfb_trans_codec/PerceptualModel.c new file mode 100644 index 0000000000..2e7e8568e7 --- /dev/null +++ b/lib_rend/ivas_cldfb_trans_codec/PerceptualModel.c @@ -0,0 +1,160 @@ +#include "PerceptualModel.h" +#include "Tables.h" +#include "wmops.h" + +#define LOG_ADD_TABLE_LENGTH (512) + +const int c_aiLogAddTable[LOG_ADD_TABLE_LENGTH] = { + 0x40, 0x40, 0x3F, 0x3F, 0x3E, 0x3E, 0x3D, 0x3D, 0x3C, 0x3C, 0x3B, 0x3B, 0x3A, 0x3A, 0x39, 0x39, + 0x38, 0x38, 0x37, 0x37, 0x37, 0x36, 0x36, 0x35, 0x35, 0x34, 0x34, 0x33, 0x33, 0x33, 0x32, 0x32, + 0x31, 0x31, 0x31, 0x30, 0x30, 0x2F, 0x2F, 0x2F, 0x2E, 0x2E, 0x2D, 0x2D, 0x2D, 0x2C, 0x2C, 0x2B, + 0x2B, 0x2B, 0x2A, 0x2A, 0x2A, 0x29, 0x29, 0x29, 0x28, 0x28, 0x27, 0x27, 0x27, 0x26, 0x26, 0x26, + 0x25, 0x25, 0x25, 0x24, 0x24, 0x24, 0x23, 0x23, 0x23, 0x23, 0x22, 0x22, 0x22, 0x21, 0x21, 0x21, + 0x20, 0x20, 0x20, 0x20, 0x1F, 0x1F, 0x1F, 0x1E, 0x1E, 0x1E, 0x1E, 0x1D, 0x1D, 0x1D, 0x1C, 0x1C, + 0x1C, 0x1C, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x1A, 0x1A, 0x19, 0x19, 0x19, 0x19, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x17, 0x17, 0x17, 0x17, 0x16, 0x16, 0x16, 0x16, 0x16, 0x15, 0x15, 0x15, 0x15, + 0x15, 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x12, 0x12, 0x12, 0x12, + 0x12, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0F, 0x0F, 0x0F, + 0x0F, 0x0F, 0x0F, 0x0F, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, + 0x0D, 0x0D, 0x0D, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, + 0x0B, 0x0B, 0x0B, 0x0B, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + + +static inline int LogAdd(int iVal1,int iVal2) +{ + int iRetVal; + + if(iVal1 > iVal2){ + iRetVal = iVal1 - iVal2; + iRetVal = (iRetVal < (LOG_ADD_TABLE_LENGTH - 1)) ? iRetVal : (LOG_ADD_TABLE_LENGTH - 1); + iRetVal = iVal1 + c_aiLogAddTable[iRetVal]; + } + else{ + iRetVal = iVal2 - iVal1; + iRetVal = (iRetVal < (LOG_ADD_TABLE_LENGTH - 1)) ? iRetVal : (LOG_ADD_TABLE_LENGTH - 1); + iRetVal = iVal2 + c_aiLogAddTable[iRetVal]; + } + + return iRetVal; +} + +const int c_aiBandwidthAdjust48[MAX_BANDS_48] = { + 0,0,0,0,0,0,0,0,0,0,0,64,64,64,64,64, + 101,101,128,165,165,180,213,}; + +const int c_aiAbsoluteThresh48[MAX_BANDS_48] = { + -1787,-1787,-1787,-1787,-1787,-1787,-1787,-1787,-1782,-1761,-1737,-1679,-1638,-1613,-1590,-1568, + -1516,-1459,-1395,-1289,-671,-409,-401,}; + +const int c_aiDefaultTheta48[MAX_BANDS_48] = { + 7,7,6,5,5,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4, +}; + +const int c_aaiSpreadFunction48[MAX_BANDS_48][MAX_BANDS_48] = { + 0,-1561,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552, + -2552,-2552,-2552,-2552,-2552,-2552,-2552,-289,-4,-1234,-2295,-2552,-2552,-2552,-2552,-2552, + -2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-569,-229, + -8,-905,-1705,-2324,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552, + -2552,-2552,-2552,-2552,-2552,-789,-445,-173,-16,-656,-1271,-1765,-2172,-2520,-2552,-2552, + -2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-961,-616,-340,-136, + -28,-488,-976,-1382,-1729,-2032,-2305,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552, + -2552,-2552,-2552,-1088,-743,-465,-257,-148,-31,-371,-769,-1114,-1417,-1689,-2054,-2483, + -2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-1198,-852,-574,-364,-209,-148, + -42,-300,-635,-936,-1207,-1572,-2000,-2376,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552, + -2552,-1293,-948,-669,-458,-301,-183,-145,-56,-258,-547,-816,-1179,-1606,-1982,-2311, + -2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-1375,-1029,-750,-539,-381,-260,-180,-142, + -68,-231,-487,-846,-1272,-1647,-1976,-2261,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-1444, + -1099,-820,-608,-449,-328,-233,-194,-138,-77,-213,-555,-978,-1352,-1681,-1966,-2268, + -2552,-2552,-2552,-2552,-2552,-2552,-1501,-1155,-876,-665,-505,-383,-287,-210,-193,-130, + -79,-298,-711,-1083,-1411,-1696,-1997,-2288,-2550,-2552,-2552,-2552,-2552,-1567,-1221,-942, + -730,-570,-448,-351,-272,-206,-189,-151,-72,-349,-713,-1039,-1324,-1625,-1915,-2177, + -2448,-2552,-2552,-2552,-1650,-1304,-1025,-813,-653,-530,-432,-352,-285,-227,-177,-163, + -69,-297,-613,-895,-1195,-1485,-1746,-2017,-2238,-2401,-2545,-1727,-1381,-1102,-890,-730, + -607,-509,-428,-360,-301,-249,-180,-153,-72,-257,-527,-824,-1112,-1373,-1643,-1865, + -2028,-2171,-1798,-1452,-1173,-960,-800,-677,-579,-498,-430,-370,-317,-246,-192,-145, + -76,-224,-505,-790,-1050,-1320,-1540,-1703,-1847,-1860,-1514,-1234,-1022,-862,-738,-640, + -559,-490,-430,-377,-306,-224,-197,-136,-81,-242,-515,-771,-1040,-1260,-1422,-1566, + -1923,-1577,-1297,-1085,-925,-801,-703,-621,-553,-492,-439,-367,-284,-213,-198,-144, + -83,-235,-479,-744,-963,-1125,-1268,-1986,-1640,-1360,-1148,-988,-864,-766,-684,-615, + -555,-501,-429,-345,-273,-211,-204,-146,-89,-216,-465,-680,-841,-984,-2043,-1697, + -1417,-1205,-1044,-921,-822,-741,-672,-611,-557,-485,-401,-328,-264,-211,-205,-140, + -93,-227,-430,-588,-729,-2104,-1758,-1479,-1266,-1106,-982,-884,-802,-733,-673,-619, + -546,-461,-388,-324,-269,-212,-211,-151,-100,-195,-336,-472,-2163,-1817,-1537,-1324, + -1164,-1040,-942,-860,-791,-731,-676,-604,-519,-445,-380,-325,-268,-226,-219,-147, + -114,-167,-280,-2203,-1857,-1577,-1365,-1205,-1081,-982,-901,-831,-771,-717,-644,-559, + -485,-420,-364,-306,-252,-239,-206,-132,-122,-163,-2224,-1878,-1598,-1386,-1225,-1102, + -1003,-921,-852,-792,-737,-665,-580,-505,-441,-385,-326,-271,-222,-224,-176,-121,-114, +}; + +#define PERCEPTUAL_MODEL_SCALE (64) + +#define PERCEPTUAL_MODEL_SCALE_SHIFT (6) + +#define PERCEPTUAL_MODEL_ALPHA_SCALE (614) + +#define PERCEPTUAL_MODEL_ALPHA_INV_SCALE (6827) + +#define PERCEPTUAL_MODEL_ALPHA_SHIFT (11) + +#define PERCEPTUAL_MODEL_SLGAIN_SHIFT (4) + +void PerceptualModel(const int iMaxQuantBands, + const int *piRMSEnvelope, + int *piExcitation, + int *piSMR) +{ + int n; + + for(n = 0; n < iMaxQuantBands; n ++){ + int iSLOffset; + + piExcitation[n] = PERCEPTUAL_MODEL_SCALE * piRMSEnvelope[n] + c_aiBandwidthAdjust48[n]; + // Calculate sensation level offset + iSLOffset = c_aiDefaultTheta48[n] * (piExcitation[n] - c_aiAbsoluteThresh48[n]) >> PERCEPTUAL_MODEL_SLGAIN_SHIFT; + //iSLOffset = (iSLOffset > 0) ? iSLOffset : 0; + // Offset envelope by sensation level offset + piExcitation[n] -= iSLOffset; + // Convert to loudness domain (x^0.3) + piExcitation[n] = PERCEPTUAL_MODEL_ALPHA_SCALE * piExcitation[n] >> PERCEPTUAL_MODEL_ALPHA_SHIFT; + } + + // Spread excitation function + for(n = 0; n < iMaxQuantBands; n ++){ + int k; + const int *piSpread; + + piSpread = c_aaiSpreadFunction48[n]; + piSMR[n] = piExcitation[n] + piSpread[n]; + for(k = 0; k < iMaxQuantBands; k ++){ + if(k != n){ + piSMR[n] = LogAdd(piSMR[n],piExcitation[k] + piSpread[k]); + } + } + } + + for(n = 0; n < iMaxQuantBands; n ++){ + piSMR[n] = PERCEPTUAL_MODEL_ALPHA_INV_SCALE * piSMR[n] >> PERCEPTUAL_MODEL_ALPHA_SHIFT; + piSMR[n] = PERCEPTUAL_MODEL_SCALE * piRMSEnvelope[n] + c_aiBandwidthAdjust48[n] - piSMR[n]; + } +} diff --git a/lib_rend/ivas_cldfb_trans_codec/PerceptualModel.h b/lib_rend/ivas_cldfb_trans_codec/PerceptualModel.h new file mode 100644 index 0000000000..e9d62c8106 --- /dev/null +++ b/lib_rend/ivas_cldfb_trans_codec/PerceptualModel.h @@ -0,0 +1,18 @@ +#ifndef _PERCEPTUAL_MODEL_H_ +#define _PERCEPTUAL_MODEL_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +void PerceptualModel(const int iMaxQuantBands, + const int *piRMSEnvelope, + int *piExcitation, + int *piSMR); + +#ifdef __cplusplus +} +#endif + +#endif /* _PERCEPTUAL_MODEL_H_ */ diff --git a/lib_rend/ivas_cldfb_trans_codec/RMSEnvDeltaHuff.c b/lib_rend/ivas_cldfb_trans_codec/RMSEnvDeltaHuff.c new file mode 100644 index 0000000000..9e314fcd08 --- /dev/null +++ b/lib_rend/ivas_cldfb_trans_codec/RMSEnvDeltaHuff.c @@ -0,0 +1,31 @@ +#include "RMSEnvDeltaHuff.h" +#include "wmops.h" + +const unsigned int c_aaiRMSEnvHuffEnc[64][2] = +{ + {0x0014, 0x0000}, {0x0014, 0x0001}, {0x0014, 0x0002}, {0x0014, 0x0003}, {0x0014, 0x0004}, {0x0014, 0x0005}, {0x0013, 0x0003}, {0x0013, 0x0004}, + {0x0013, 0x0005}, {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0012, 0x000b}, {0x000d, 0x0002}, {0x000e, 0x0001}, {0x000e, 0x0002}, {0x000d, 0x0003}, + {0x000b, 0x0002}, {0x000a, 0x0003}, {0x000a, 0x0004}, {0x000a, 0x0005}, {0x0009, 0x0004}, {0x0009, 0x0005}, {0x0009, 0x0006}, {0x0008, 0x0005}, + {0x0008, 0x0006}, {0x0007, 0x0004}, {0x0006, 0x0003}, {0x0006, 0x0004}, {0x0005, 0x0003}, {0x0004, 0x0002}, {0x0003, 0x0002}, {0x0002, 0x0002}, + {0x0002, 0x0003}, {0x0003, 0x0003}, {0x0004, 0x0003}, {0x0006, 0x0005}, {0x0007, 0x0005}, {0x0008, 0x0007}, {0x0009, 0x0007}, {0x0009, 0x0008}, + {0x0009, 0x0009}, {0x000a, 0x0006}, {0x000a, 0x0007}, {0x000b, 0x0003}, {0x000c, 0x0002}, {0x000c, 0x0003}, {0x000b, 0x0004}, {0x000b, 0x0005}, + {0x000e, 0x0003}, {0x0010, 0x0003}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0013, 0x000c}, {0x0013, 0x000d}, + {0x0013, 0x000e}, {0x0013, 0x000f}, {0x0013, 0x0010}, {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0013, 0x0014}, {0x0013, 0x0015}, +}; + +const unsigned int c_aaiRMSEnvHuffDec[13][HUFF_DEC_TABLE_SIZE] = +{ + {0x0002ffff, 0x0001ffff, 0x0000001d, 0x00000022, 0x0001001e, 0x0001001e, 0x00010021, 0x00010021, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x00020020, 0x00020020, 0x00020020, 0x00020020, }, + {0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x00020023, 0x00020023, 0x00020023, 0x00020023, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, }, + {0x0006ffff, 0x0007ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x00000017, 0x00000018, 0x00000025, 0x00010019, 0x00010019, 0x00010024, 0x00010024, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, }, + {0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, }, + {0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, }, + {0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, }, + {0x0009ffff, 0x0008ffff, 0x0000002c, 0x0000002d, 0x00010010, 0x00010010, 0x0001002b, 0x0001002b, 0x0001002e, 0x0001002e, 0x0001002f, 0x0001002f, 0x00020011, 0x00020011, 0x00020011, 0x00020011, }, + {0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00020013, 0x00020013, 0x00020013, 0x00020013, 0x00020029, 0x00020029, 0x00020029, 0x00020029, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, }, + {0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, + {0x000bffff, 0x000cffff, 0x000affff, 0x00000031, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x00020030, 0x00020030, 0x00020030, 0x00020030, }, + {0x0001003a, 0x0001003a, 0x0001003b, 0x0001003b, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, 0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, }, + {0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00010006, 0x00010006, 0x00010007, 0x00010007, 0x00010008, 0x00010008, 0x00010009, 0x00010009, 0x0001000a, 0x0001000a, }, + {0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x00010036, 0x00010036, 0x00010037, 0x00010037, 0x00010038, 0x00010038, 0x00010039, 0x00010039, }, +}; diff --git a/lib_rend/ivas_cldfb_trans_codec/RMSEnvDeltaHuff.h b/lib_rend/ivas_cldfb_trans_codec/RMSEnvDeltaHuff.h new file mode 100644 index 0000000000..e7e1059384 --- /dev/null +++ b/lib_rend/ivas_cldfb_trans_codec/RMSEnvDeltaHuff.h @@ -0,0 +1,25 @@ +#ifndef _RMS_ENV_DELTA_HUFF_H_ +#define _RMS_ENV_DELTA_HUFF_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#ifndef HUFF_READ_SIZE +#define HUFF_READ_SIZE (4) +#endif + +#ifndef HUFF_DEC_TABLE_SIZE +#define HUFF_DEC_TABLE_SIZE (16) +#endif + +extern const unsigned int c_aaiRMSEnvHuffEnc[64][2]; + +extern const unsigned int c_aaiRMSEnvHuffDec[13][HUFF_DEC_TABLE_SIZE]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RMS_ENV_DELTA_HUFF_H_ */ diff --git a/lib_rend/ivas_cldfb_trans_codec/RMSEnvGrouping.c b/lib_rend/ivas_cldfb_trans_codec/RMSEnvGrouping.c new file mode 100644 index 0000000000..f51051d52d --- /dev/null +++ b/lib_rend/ivas_cldfb_trans_codec/RMSEnvGrouping.c @@ -0,0 +1,378 @@ +#include "RMSEnvGrouping.h" + +/* Double check cost function calculation */ + +#include +#include +#include +#include +#include "wmops.h" +#include "Tables.h" + +typedef struct GMNODE{ + int iGroupStart; + int iGroupLength; + float *pfMergedEnergydB; + struct GMNODE *psNext; +}GMNode; + +typedef struct RMS_ENVELOPE_GROUPING +{ + int iNumBlocks; + int iMaxGroups; + float **ppfBandEnergy; + float **ppfBandEnergydB; + float **ppfWeight; + GMNode *psGMNodes; +}RMSEnvelopeGrouping; + +RMSEnvelopeGrouping* CreateRMSEnvelopeGrouping(int iNumBlocks) +{ + int n; + assert((iNumBlocks & 0x1) == 0); // remove this + + RMSEnvelopeGrouping *psRMSEnvelopeGrouping; + + psRMSEnvelopeGrouping = (RMSEnvelopeGrouping*)malloc(sizeof(RMSEnvelopeGrouping)); + psRMSEnvelopeGrouping->iNumBlocks = iNumBlocks; + psRMSEnvelopeGrouping->iMaxGroups = iNumBlocks >> 1; // Change this + + psRMSEnvelopeGrouping->ppfBandEnergy = (float**)malloc(psRMSEnvelopeGrouping->iNumBlocks * sizeof(float*)); + psRMSEnvelopeGrouping->ppfBandEnergydB = (float**)malloc(psRMSEnvelopeGrouping->iNumBlocks * sizeof(float*)); + psRMSEnvelopeGrouping->ppfWeight = (float**)malloc(psRMSEnvelopeGrouping->iNumBlocks * sizeof(float*)); + for(n = 0; n < psRMSEnvelopeGrouping->iNumBlocks; n ++){ + psRMSEnvelopeGrouping->ppfBandEnergy[n] = (float*)malloc(MAX_BANDS * 2 * sizeof(float)); /* 2 for stereo joint group calc */ + psRMSEnvelopeGrouping->ppfBandEnergydB[n] = (float*)malloc(MAX_BANDS * 2 * sizeof(float)); + psRMSEnvelopeGrouping->ppfWeight[n] = (float*)malloc(MAX_BANDS * 2 * sizeof(float)); + } + + psRMSEnvelopeGrouping->psGMNodes = (GMNode*)malloc(psRMSEnvelopeGrouping->iNumBlocks * sizeof(GMNode)); + for(n = 0; n < psRMSEnvelopeGrouping->iNumBlocks; n ++){ + psRMSEnvelopeGrouping->psGMNodes[n].pfMergedEnergydB = (float*)malloc(MAX_BANDS * 2 * sizeof(float)); + } + + return psRMSEnvelopeGrouping; +} + +void DeleteRMSEnvelopeGrouping(RMSEnvelopeGrouping *psRMSEnvelopeGrouping) +{ + int n; + + for(n = 0; n < psRMSEnvelopeGrouping->iNumBlocks; n ++){ + free(psRMSEnvelopeGrouping->ppfBandEnergy[n]); + free(psRMSEnvelopeGrouping->ppfBandEnergydB[n]); + free(psRMSEnvelopeGrouping->ppfWeight[n]); + } + free(psRMSEnvelopeGrouping->ppfBandEnergy); + free(psRMSEnvelopeGrouping->ppfBandEnergydB); + free(psRMSEnvelopeGrouping->ppfWeight); + + for(n = 0; n < psRMSEnvelopeGrouping->iNumBlocks; n ++){ + free(psRMSEnvelopeGrouping->psGMNodes[n].pfMergedEnergydB); + } + free(psRMSEnvelopeGrouping->psGMNodes); + + free(psRMSEnvelopeGrouping); +} + + +void ComputeBandEnergy(const int iChannels, + const int iNumBlocks, + const int iNumBands, + const int *piBandwidths, + const float ***pppfReal, + const float ***pppfImag, + float **ppfBandEnergy, + float **ppfBandEnergydB, + float **ppfWeight) +{ + int n; + + for(n = 0; n < iChannels; n ++){ + int k; + int iChanOffset; + + iChanOffset = n * iNumBands; + for(k = 0; k < iNumBlocks; k ++){ + int b; + int iFBOffset; + iFBOffset = 0; + for(b = 0; b < iNumBands; b ++){ + int m; + float fEnergy = 1e-12f; + //float fWeight; + + for(m = 0; m < piBandwidths[b]; m ++){ + fEnergy += (pppfReal[n][k][iFBOffset] * pppfReal[n][k][iFBOffset] + pppfImag[n][k][iFBOffset] * pppfImag[n][k][iFBOffset]); + iFBOffset ++; + } + fEnergy /= (float)(2 * piBandwidths[b]); + ppfBandEnergy[k][iChanOffset + b] = fEnergy; + ppfBandEnergydB[k][iChanOffset + b] = 10.0f * log10f(fEnergy); + + ppfWeight[k][iChanOffset + b] = 1.0; + } + } + } +} + +/* THis is temporary cost function */ +float TryMerge(const int iNumBands, + const int iStartBlock, + const int iGroupLength, + const float fMaxAllowedDiffdB, + const float **ppfBandEnergy, + const float **ppfBandEnergydB, + float *pfMegredEnergydB) +{ + int b; + int n; + float fMeanCost; + float fMaxCost; + float fInvGroupSize = 1.0f / (float)iGroupLength; + float fInvNumBands = 1.0f / (float)iNumBands; + + for(b = 0; b < iNumBands; b ++){ + float fGroupEnergy; + + + fGroupEnergy = 0.0; + for(n = iStartBlock; n < (iStartBlock + iGroupLength); n ++){ + fGroupEnergy += ppfBandEnergy[n][b]; + } + fGroupEnergy *= fInvGroupSize; + fGroupEnergy = 10.0f * log10f(fGroupEnergy); //Note epsolon was added when computing BandEnergy; + + pfMegredEnergydB[b] = fGroupEnergy; + } + + fMeanCost = 0.0; + fMaxCost = 0.0; + for(n = iStartBlock; n < (iStartBlock + iGroupLength); n ++){ + float fMeanAbsDiff; + float fMaxAbsDiff; + + fMeanAbsDiff = 0.0; + fMaxAbsDiff = 0.0; + for(b = 0; b < iNumBands; b ++){ + float fAbsDiff; + + fAbsDiff = fabsf(ppfBandEnergydB[n][b] - pfMegredEnergydB[b]); + fMeanAbsDiff += fAbsDiff; + fMaxAbsDiff = (fMaxAbsDiff > fAbsDiff) ? fMaxAbsDiff : fAbsDiff; + } + fMeanAbsDiff *= fInvNumBands; + + fMeanCost = (fMeanCost > fMeanAbsDiff) ? fMeanCost : fMeanAbsDiff; + fMaxCost = (fMaxCost > fMaxAbsDiff) ? fMaxCost : fMaxAbsDiff; + } + + //printf("%f\t%f\n",fMeanCost,fMaxCost); + + if(fMaxCost > fMaxAllowedDiffdB){ + fMeanCost = 1e12f; //Some large value + } + + return fMeanCost; +} + +void ComputeGreedyGroups(RMSEnvelopeGrouping *psRMSEnvelopeGrouping, + const int iChannels, + const int iNumBands, + const float fMeanAllowedDiffdB, + const float fMaxAllowedDiffdB) +{ + float fBestMeanCost; + + fBestMeanCost = 0.0; + while(fBestMeanCost < fMeanAllowedDiffdB){ + GMNode *psGMNode; + GMNode *psBestGMNode; + + fBestMeanCost = fMeanAllowedDiffdB; + psGMNode = &psRMSEnvelopeGrouping->psGMNodes[0]; + psBestGMNode = NULL; + while(psGMNode->psNext != NULL){ + float fMeanCost; + int iGroupLength; + + iGroupLength = psGMNode->iGroupLength + psGMNode->psNext->iGroupLength; + + fMeanCost = TryMerge(iNumBands * iChannels, + psGMNode->iGroupStart, + psGMNode->iGroupLength, + fMaxAllowedDiffdB, + (const float**)psRMSEnvelopeGrouping->ppfBandEnergy, + (const float**)psRMSEnvelopeGrouping->ppfBandEnergydB, + psGMNode->pfMergedEnergydB); + + + if(fMeanCost < fBestMeanCost){ + fBestMeanCost = fMeanCost; + psBestGMNode = psGMNode; + } + + psGMNode = psGMNode->psNext; + } + + if(fBestMeanCost < fMeanAllowedDiffdB && psBestGMNode != NULL && psBestGMNode->psNext != NULL){ + psBestGMNode->iGroupLength += psBestGMNode->psNext->iGroupLength; + psBestGMNode->psNext = psBestGMNode->psNext->psNext; + } + } +} + + +void ComputeRMSEnvelope(const int iChannels, + const int iNumBands, + const int iNumGroups, + const int *piGroupLengths, + const float **ppfBandEnergy, + int ***pppiRMSEnvelope) +{ + int n; + + for(n = 0; n < iChannels; n ++){ + int b; + int iChanOffset; + + iChanOffset = n * iNumBands; + for(b = 0; b < iNumBands; b ++){ + int k; + int iBlockOffset; + + iBlockOffset = 0; + for(k = 0; k < iNumGroups; k ++){ + int m; + float fGroupEnergy; + fGroupEnergy = 0.0; + for(m = 0; m < piGroupLengths[k]; m ++){ + fGroupEnergy += ppfBandEnergy[iBlockOffset][b + iChanOffset]; + iBlockOffset ++; + } + fGroupEnergy /= (float)piGroupLengths[k]; + + pppiRMSEnvelope[n][k][b] = (int)(log2f(fGroupEnergy) + 0.5); + pppiRMSEnvelope[n][k][b] = (pppiRMSEnvelope[n][k][b] > ENV_MIN) ? pppiRMSEnvelope[n][k][b] : ENV_MIN; + pppiRMSEnvelope[n][k][b] = (pppiRMSEnvelope[n][k][b] < ENV_MAX) ? pppiRMSEnvelope[n][k][b] : ENV_MAX; + } + } + } +} + +void LimitRMSEnvelope(const int iBandCount, + const int iRMSDeltaMax, + const int iRMSDeltaMin, + int *piRMSEnvelope) +{ + int iBand; + int iLastSCF; + + /* Increase low envelope values to ensure that the scale factors traces the large values correctly (checking for max deltas) */ + iLastSCF = piRMSEnvelope[iBandCount - 1]; + for(iBand = iBandCount - 2; iBand > -1; iBand --) + { + int iDelta; + + iDelta = iLastSCF - piRMSEnvelope[iBand]; + + if(iDelta > iRMSDeltaMax){ +#ifdef DEBUG_VERBOSE + printf("WARNING ScaleFactor Delta limited\n"); +#endif + piRMSEnvelope[iBand] += (iDelta - iRMSDeltaMax); + } + + iLastSCF = piRMSEnvelope[iBand]; + } + + /* Increase low envelope values to ensure that the envelope traces the large values correctly (checking for min deltas)*/ + iLastSCF = piRMSEnvelope[0]; + for(iBand = 1; iBand < iBandCount; iBand ++){ + int iDelta; + + iDelta = piRMSEnvelope[iBand] - iLastSCF; + + if(iDelta < iRMSDeltaMin){ +#ifdef DEBUG_VERBOSE + printf("WARNING ScaleFactor Delta limited\n"); +#endif + piRMSEnvelope[iBand] += (iRMSDeltaMin - iDelta); + } + + iLastSCF = piRMSEnvelope[iBand]; + } +} + +void ComputeEnvelopeGrouping( RMSEnvelopeGrouping *psRMSEnvelopeGrouping, + const int iChannels, + const int iNumBands, + const int *piBandwidths, + const float ***pppfReal, + const float ***pppfImag, + const float fMeanAllowedDiffdB, + const float fMaxAllowedDiffdB, + int *piNumGroups, + int *piGroupLengths, + int ***pppiRMSEnvelope) +{ + int n; + GMNode *psGMNode; + + /* Compute Band Energies */ + ComputeBandEnergy(iChannels, + psRMSEnvelopeGrouping->iNumBlocks, + iNumBands, + piBandwidths, + pppfReal, + pppfImag, + psRMSEnvelopeGrouping->ppfBandEnergy, + psRMSEnvelopeGrouping->ppfBandEnergydB, + psRMSEnvelopeGrouping->ppfWeight); + + /* Init GMNodes */ + psRMSEnvelopeGrouping->psGMNodes[0].iGroupStart = 0; + psRMSEnvelopeGrouping->psGMNodes[0].iGroupLength = 2; + psRMSEnvelopeGrouping->psGMNodes[0].psNext = NULL; + for(n = 1; n < psRMSEnvelopeGrouping->iMaxGroups; n ++){ + psRMSEnvelopeGrouping->psGMNodes[n - 1].psNext = &psRMSEnvelopeGrouping->psGMNodes[n]; + psRMSEnvelopeGrouping->psGMNodes[n].iGroupStart = n * 2; // change this + psRMSEnvelopeGrouping->psGMNodes[n].iGroupLength = 2; // change this + psRMSEnvelopeGrouping->psGMNodes[n].psNext = NULL; + } + + /* Perform grouping via Greedy Merge */ + ComputeGreedyGroups(psRMSEnvelopeGrouping, + iChannels, + iNumBands, + fMeanAllowedDiffdB, + fMaxAllowedDiffdB); + + /* Calc Groups from Merge Results */ + *piNumGroups = 0; + psGMNode = &psRMSEnvelopeGrouping->psGMNodes[0]; + while(psGMNode != NULL){ + piGroupLengths[*piNumGroups] = psGMNode->iGroupLength; + *piNumGroups += 1; + psGMNode = psGMNode->psNext; + } + + /* Compute RMS Envelope given group lengths */ + ComputeRMSEnvelope(iChannels, + iNumBands, + *piNumGroups, + piGroupLengths, + (const float**)psRMSEnvelopeGrouping->ppfBandEnergy, + pppiRMSEnvelope); + + /* Envelope Tenting */ + for(n = 0; n < iChannels; n ++){ + int k; + for(k = 0; k < *piNumGroups; k ++){ + LimitRMSEnvelope(iNumBands, + ENV_DELTA_MAX, + ENV_DELTA_MIN, + pppiRMSEnvelope[n][k]); + } + } +} diff --git a/lib_rend/ivas_cldfb_trans_codec/RMSEnvGrouping.h b/lib_rend/ivas_cldfb_trans_codec/RMSEnvGrouping.h new file mode 100644 index 0000000000..fa7506935f --- /dev/null +++ b/lib_rend/ivas_cldfb_trans_codec/RMSEnvGrouping.h @@ -0,0 +1,31 @@ +#ifndef _RMS_ENV_GROUPING_H_ +#define _RMS_ENV_GROUPING_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +typedef struct RMS_ENVELOPE_GROUPING RMSEnvelopeGrouping; + +RMSEnvelopeGrouping* CreateRMSEnvelopeGrouping(int iNumBlocks); + +void DeleteRMSEnvelopeGrouping(RMSEnvelopeGrouping *psRMSEnvelopeGrouping); + +void ComputeEnvelopeGrouping(RMSEnvelopeGrouping *psRMSEnvelopeGrouping, + const int iChannels, + const int iNumBands, + const int *piBandwidths, + const float ***pppfReal, + const float ***pppfImag, + const float fMeanAllowedDiffdB, + const float fMaxAllowedDiffdB, + int *piNumGroups, + int *piGroupLengths, + int ***pppiRMSEnvelope); + +#ifdef __cplusplus +} +#endif + +#endif /* _RMS_ENV_GROUPING_H_ */ diff --git a/lib_rend/ivas_cldfb_trans_codec/Tables.c b/lib_rend/ivas_cldfb_trans_codec/Tables.c new file mode 100644 index 0000000000..735c8d21f2 --- /dev/null +++ b/lib_rend/ivas_cldfb_trans_codec/Tables.c @@ -0,0 +1,116 @@ +#include "Tables.h" +#include "wmops.h" + +/* Move this to perceptual model ? */ +const int c_aiBandwidths48[MAX_BANDS_48] = { + 1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,4,6,6,7,10, +}; + + +const float c_afScaleFactor[ALLOC_TABLE_SIZE] = { + 0.0f, + 0.353553390593f, + 0.420448207627f, + 0.500000000000f, + 0.594603557501f, + 0.707106781187f, + 0.840896415254f, + 1.000000000000f, + 1.189207115003f, + 1.414213562373f, + 1.681792830507f, + 2.000000000000f, + 2.378414230005f, + 2.828427124746f, + 3.363585661015f, + 4.0f, + 4.756828460011f, + 5.656854249492f, + 6.727171322030f, + 8.0f, + 9.513656920022f, + 11.31370849898f, + 13.45434264406f, + 16.00000000000f, + 19.02731384004f, + 22.62741699797f, + 26.90868528812f, //~40dB SNR +}; + +const float c_afInvScaleFactor[ALLOC_TABLE_SIZE] = { + 0.0f, + 2.367513562373095f, + 2.046407115002721f, + 1.775900000000000f, + 1.536446415253715f, + 1.323056781186548f, + 1.132903557501360f, + 0.965800000000000f, + 0.821348207626857f, + 0.695103390593274f, + 0.587801778750680f, + 0.495800000000000f, + 0.418124103813429f, + 0.352176695296637f, + 0.296200889375340f, + 0.249400000000000f, + 0.209812051906714f, + 0.176538347648318f, + 0.148525444687670f, + 0.124900000000000f, + 0.105056025953357f, + 0.088388347648318f, + 0.074325444687670f, + 0.062500000000000f, + 0.052556025953357f, + 0.044194173824159f, + 0.037162722343835f, +}; + +const float c_afRMSEnvReconstructTable[ENV_RECONSTRUCT_TABLE_SIZE] = { + 2.32830644e-10f, 3.29272254e-10f, 4.65661287e-10f, 6.58544508e-10f, 9.31322575e-10f, 1.31708902e-09f, 1.86264515e-09f, 2.63417803e-09f, + 3.72529030e-09f, 5.26835606e-09f, 7.45058060e-09f, 1.05367121e-08f, 1.49011612e-08f, 2.10734243e-08f, 2.98023224e-08f, 4.21468485e-08f, + 5.96046448e-08f, 8.42936970e-08f, 1.19209290e-07f, 1.68587394e-07f, 2.38418579e-07f, 3.37174788e-07f, 4.76837158e-07f, 6.74349576e-07f, + 9.53674316e-07f, 1.34869915e-06f, 1.90734863e-06f, 2.69739830e-06f, 3.81469727e-06f, 5.39479661e-06f, 7.62939453e-06f, 1.07895932e-05f, + 1.52587891e-05f, 2.15791864e-05f, 3.05175781e-05f, 4.31583729e-05f, 6.10351562e-05f, 8.63167458e-05f, 1.22070312e-04f, 1.72633492e-04f, + 2.44140625e-04f, 3.45266983e-04f, 4.88281250e-04f, 6.90533966e-04f, 9.76562500e-04f, 1.38106793e-03f, 1.95312500e-03f, 2.76213586e-03f, + 3.90625000e-03f, 5.52427173e-03f, 7.81250000e-03f, 1.10485435e-02f, 1.56250000e-02f, 2.20970869e-02f, 3.12500000e-02f, 4.41941738e-02f, + 6.25000000e-02f, 8.83883476e-02f, 1.25000000e-01f, 1.76776695e-01f, 2.50000000e-01f, 3.53553391e-01f, 5.00000000e-01f, 7.07106781e-01f, + 1.00000000e+00f, 1.41421356e+00f, 2.00000000e+00f, 2.82842712e+00f, 4.00000000e+00f, 5.65685425e+00f, 8.00000000e+00f, 1.13137085e+01f, + 1.60000000e+01f, 2.26274170e+01f, 3.20000000e+01f, 4.52548340e+01f, 6.40000000e+01f, 9.05096680e+01f, 1.28000000e+02f, 1.81019336e+02f, + 2.56000000e+02f, 3.62038672e+02f, 5.12000000e+02f, 7.24077344e+02f, 1.02400000e+03f, 1.44815469e+03f, 2.04800000e+03f, 2.89630938e+03f, + 4.09600000e+03f, 5.79261875e+03f, 8.19200000e+03f, 1.15852375e+04f, 1.63840000e+04f, 2.31704750e+04f, 3.27680000e+04f, 4.63409500e+04f, + 6.55360000e+04f, 9.26819000e+04f, 1.31072000e+05f, 1.85363800e+05f, 2.62144000e+05f, 3.70727600e+05f, 5.24288000e+05f, 7.41455200e+05f, + 1.04857600e+06f, 1.48291040e+06f, 2.09715200e+06f, 2.96582080e+06f, 4.19430400e+06f, 5.93164160e+06f, 8.38860800e+06f, 1.18632832e+07f, + 1.67772160e+07f, 2.37265664e+07f, 3.35544320e+07f, 4.74531328e+07f, 6.71088640e+07f, 9.49062656e+07f, 1.34217728e+08f, 1.89812531e+08f, + 2.68435456e+08f, 3.79625062e+08f, 5.36870912e+08f, 7.59250125e+08f, 1.07374182e+09f, 1.51850025e+09f, 2.14748365e+09f, 3.03700050e+09f, + 4.29496730e+09f, +}; + +const int c_aiQuantMaxValues[ALLOC_TABLE_SIZE] = { + 0, 3, 4, 5, 6, 7, 8, 8, + 10, 13, 13, 15, 19, 24, 24, 27, + 31, 40, 39, 46, 57, 69, 80, 92, + 120, 135, 163, +}; + +const int c_aiHuffmanDim[ALLOC_TABLE_SIZE] = { + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, +}; + +const int c_aiHuffmanMod[ALLOC_TABLE_SIZE] = { + 0, 4, 5, 6, 7, 8, 9, 9, + 11, 14, 14, 16, 20, 25, 25, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, +}; + +const int c_aiHuffmanSize[ALLOC_TABLE_SIZE] = { + 1, 16, 25, 36, 49, 64, 81, 81, + 121, 196, 196, 256, 400, 625, 625, 28, + 32, 41, 40, 47, 58, 70, 81, 93, + 121, 136, 164, +}; diff --git a/lib_rend/ivas_cldfb_trans_codec/Tables.h b/lib_rend/ivas_cldfb_trans_codec/Tables.h new file mode 100644 index 0000000000..960ee0d231 --- /dev/null +++ b/lib_rend/ivas_cldfb_trans_codec/Tables.h @@ -0,0 +1,65 @@ +#ifndef _TABLES_H_ +#define _TABLES_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#define DEBUG_VERBOSE + +#define CQMF_BLOCKS_PER_FRAME (16) +#define CQMF_MAX_BLOCKS_PER_FRAME (16) +#define CQMF_BANDS (60) + +#define MAX_BANDS (23) +#define MAX_BANDS_48 (23) + +extern const int c_aiBandwidths48[MAX_BANDS_48]; // move this + + +#define ENV_MIN (-64) +#define ENV_MAX (64) + +#define ENV0_BITS (7) + +#define ENV_DELTA_MIN (-32) +#define ENV_DELTA_MAX (31) + +#define ENV_RECONSTRUCT_TABLE_SIZE (129) + +#define ENV_RECONSTRUCT_TABLE_CENTER (64) + +#define MIN_ALLOC (0) +#define MAX_ALLOC (26) + +#define ALLOC_OFFSET_SCALE (8) + +#define ALLOC_OFFSET_BITS (8) + +#define MIN_ALLOC_OFFSET (-128) +#define MAX_ALLOC_OFFSET (127) + + + +#define ALLOC_TABLE_SIZE (27) + +extern const float c_afScaleFactor[ALLOC_TABLE_SIZE]; + +extern const float c_afInvScaleFactor[ALLOC_TABLE_SIZE]; + +extern const float c_afRMSEnvReconstructTable[ENV_RECONSTRUCT_TABLE_SIZE]; + +extern const int c_aiQuantMaxValues[ALLOC_TABLE_SIZE]; + +extern const int c_aiHuffmanDim[ALLOC_TABLE_SIZE]; + +extern const int c_aiHuffmanMod[ALLOC_TABLE_SIZE]; + +extern const int c_aiHuffmanSize[ALLOC_TABLE_SIZE]; + +#ifdef __cplusplus +} +#endif + +#endif /* _TABLES_H_ */ diff --git a/lib_rend/ivas_splitRend_lcld_dec.c b/lib_rend/ivas_splitRend_lcld_dec.c index 249acceea7..f89564fffc 100644 --- a/lib_rend/ivas_splitRend_lcld_dec.c +++ b/lib_rend/ivas_splitRend_lcld_dec.c @@ -50,7 +50,9 @@ #ifdef SPLIT_REND_WITH_HEAD_ROT ivas_error ivas_splitBinLCLDDecOpen( - BIN_HR_SPLIT_LCLD_DEC_HANDLE *hSplitBinLCLDDec ) + BIN_HR_SPLIT_LCLD_DEC_HANDLE *hSplitBinLCLDDec, + int32_t iSampleRate, + int32_t iChannels ) { ivas_error error; BIN_HR_SPLIT_LCLD_DEC_HANDLE splitBinLCLDDec; @@ -62,6 +64,30 @@ ivas_error ivas_splitBinLCLDDecOpen( splitBinLCLDDec->pLcld_dec = NULL; // place holder for CLDFB decoder handle + splitBinLCLDDec->iChannels = iChannels; + splitBinLCLDDec->psCQMFDecoder = CreateCQMFDecoder( iSampleRate, iChannels ); + + splitBinLCLDDec->pppfDecCQMFReal = (float ***) malloc( iChannels * sizeof( float ** ) ); + splitBinLCLDDec->pppfDecCQMFImag = (float ***) malloc( iChannels * sizeof( float ** ) ); + for ( int32_t n = 0; n < splitBinLCLDDec->iChannels; n++ ) + { + splitBinLCLDDec->pppfDecCQMFReal[n] = (float **) malloc( CLDFB_NO_COL_MAX * sizeof( float * ) ); + splitBinLCLDDec->pppfDecCQMFImag[n] = (float **) malloc( CLDFB_NO_COL_MAX * sizeof( float * ) ); + } + +#ifdef CLDFB_DEBUG + splitBinLCLDDec->numFrame = 0; + char cldfbFilename[50] = "cldfb_out.bin"; + if ( ( splitBinLCLDDec->cldfbOut = fopen( cldfbFilename, "wb" ) ) == NULL ) + { + fprintf( stderr, "Error: CLDFB bitstream file %s could not be opened\n\n", cldfbFilename ); + exit( -1 ); + } + int num_bands = CLDFB_NO_CHANNELS_MAX; + fwrite( &iChannels, sizeof( int ), 1, splitBinLCLDDec->cldfbOut ); + fwrite( &num_bands, sizeof( int ), 1, splitBinLCLDDec->cldfbOut ); +#endif + *hSplitBinLCLDDec = splitBinLCLDDec; return error; } @@ -71,6 +97,26 @@ void ivas_splitBinLCLDDecClose( { if ( ( *hSplitBinLCLDDec ) != NULL ) { + if ( ( *hSplitBinLCLDDec )->psCQMFDecoder != NULL ) + { + DeleteCQMFDecoder( ( *hSplitBinLCLDDec )->psCQMFDecoder ); + } + + for ( int32_t n = 0; n < ( *hSplitBinLCLDDec )->iChannels; n++ ) + { + free( ( *hSplitBinLCLDDec )->pppfDecCQMFReal[n] ); + free( ( *hSplitBinLCLDDec )->pppfDecCQMFImag[n] ); + } + free( ( *hSplitBinLCLDDec )->pppfDecCQMFReal ); + free( ( *hSplitBinLCLDDec )->pppfDecCQMFImag ); + +#ifdef CLDFB_DEBUG + if ( ( *hSplitBinLCLDDec )->cldfbOut != NULL ) + { + fclose( ( *hSplitBinLCLDDec )->cldfbOut ); + } +#endif + count_free( *hSplitBinLCLDDec ); *hSplitBinLCLDDec = NULL; } @@ -87,6 +133,67 @@ void ivas_splitBinLCLDDecProcess( assert( Cldfb_Out_Real != NULL ); assert( Cldfb_Out_Imag != NULL ); assert( pBits != NULL ); + + int32_t iBytesWritten; + unsigned char auchData[4096]; + unsigned char *bval; + + iBytesWritten = ivas_split_rend_bitstream_read_int32( pBits, 8 * sizeof( uint16_t ) ); +#ifdef CLDFB_DEBUG + printf( "Bytes read = %d\n", iBytesWritten ); +#endif + bval = auchData; + for ( int32_t bytesCount = 0; bytesCount < iBytesWritten; bytesCount++ ) + { + *bval = (uint8_t) ivas_split_rend_bitstream_read_int32( pBits, 8 ); + bval++; + } + + // A conversion is needed for the 3d pointer interface here ........ :( + for ( int32_t n = 0; n < hSplitBinLCLDDec->iChannels; n++ ) + { + for ( int32_t k = 0; k < CLDFB_NO_COL_MAX; k++ ) + { + hSplitBinLCLDDec->pppfDecCQMFReal[n][k] = Cldfb_Out_Real[n][k]; + hSplitBinLCLDDec->pppfDecCQMFImag[n][k] = Cldfb_Out_Imag[n][k]; + } + } + + // Initialized with zeros....... :( + for ( int k = 0; k < CLDFB_NO_COL_MAX; k++ ) + { + for ( int b = 0; b < CLDFB_NO_CHANNELS_MAX; b++ ) + { + for ( int n = 0; n < hSplitBinLCLDDec->iChannels; n++ ) + { + hSplitBinLCLDDec->pppfDecCQMFReal[n][k][b] = 0.0; + hSplitBinLCLDDec->pppfDecCQMFImag[n][k][b] = 0.0; + } + } + } + + DecodeFrame( hSplitBinLCLDDec->psCQMFDecoder, iBytesWritten, auchData, hSplitBinLCLDDec->pppfDecCQMFReal, hSplitBinLCLDDec->pppfDecCQMFImag ); + +#ifdef CLDFB_DEBUG + printf( "Frame Decoded = %d\n", ++hSplitBinLCLDDec->numFrame ); + int writeByte = 0; + for ( int k = 0; k < CLDFB_NO_COL_MAX; k++ ) + { + for ( int b = 0; b < CLDFB_NO_CHANNELS_MAX; b++ ) + { + for ( int n = 0; n < hSplitBinLCLDDec->iChannels; n++ ) + { + writeByte = fwrite( &hSplitBinLCLDDec->pppfDecCQMFReal[n][k][b], sizeof( float ), 1, hSplitBinLCLDDec->cldfbOut ); + if ( writeByte != 1 ) + exit( -1 ); + writeByte = fwrite( &hSplitBinLCLDDec->pppfDecCQMFImag[n][k][b], sizeof( float ), 1, hSplitBinLCLDDec->cldfbOut ); + if ( writeByte != 1 ) + exit( -1 ); + } + } + } +#endif + return; } -#endif \ No newline at end of file +#endif diff --git a/lib_rend/ivas_splitRend_lcld_enc.c b/lib_rend/ivas_splitRend_lcld_enc.c index 355712e327..97da222528 100644 --- a/lib_rend/ivas_splitRend_lcld_enc.c +++ b/lib_rend/ivas_splitRend_lcld_enc.c @@ -50,7 +50,10 @@ #ifdef SPLIT_REND_WITH_HEAD_ROT ivas_error ivas_splitBinLCLDEncOpen( - BIN_HR_SPLIT_LCLD_ENC_HANDLE *hSplitBinLCLDEnc ) + BIN_HR_SPLIT_LCLD_ENC_HANDLE *hSplitBinLCLDEnc, + int32_t iSampleRate, + int32_t iChannels, + int32_t iDataRate ) { ivas_error error; BIN_HR_SPLIT_LCLD_ENC_HANDLE splitBinLCLDEnc; @@ -62,6 +65,30 @@ ivas_error ivas_splitBinLCLDEncOpen( splitBinLCLDEnc->pLcld_enc = NULL; // place holder for CLDFB encoder handle + splitBinLCLDEnc->iChannels = iChannels; + splitBinLCLDEnc->psCQMFEncoder = CreateCQMFEncoder( iSampleRate, iChannels, iDataRate ); + + splitBinLCLDEnc->pppfCQMFReal = (float ***) malloc( iChannels * sizeof( float ** ) ); + splitBinLCLDEnc->pppfCQMFImag = (float ***) malloc( iChannels * sizeof( float ** ) ); + for ( int32_t n = 0; n < splitBinLCLDEnc->iChannels; n++ ) + { + splitBinLCLDEnc->pppfCQMFReal[n] = (float **) malloc( CLDFB_NO_COL_MAX * sizeof( float * ) ); + splitBinLCLDEnc->pppfCQMFImag[n] = (float **) malloc( CLDFB_NO_COL_MAX * sizeof( float * ) ); + } + +#ifdef CLDFB_DEBUG + splitBinLCLDEnc->numFrame = 0; + char cldfbFilename[50] = "cldfb_in_ref.qmf"; + if ( ( splitBinLCLDEnc->cldfbIn = fopen( cldfbFilename, "rb" ) ) == NULL ) + { + fprintf( stderr, "Error: CLDFB bitstream file %s could not be opened\n\n", cldfbFilename ); + exit( -1 ); + } + int chan, band; + fread( &chan, sizeof( int ), 1, splitBinLCLDEnc->cldfbIn ); + fread( &band, sizeof( int ), 1, splitBinLCLDEnc->cldfbIn ); +#endif + *hSplitBinLCLDEnc = splitBinLCLDEnc; return error; } @@ -71,6 +98,23 @@ void ivas_splitBinLCLDEncClose( { if ( ( *hSplitBinLCLDEnc ) != NULL ) { + DeleteCQMFEncoder( ( *hSplitBinLCLDEnc )->psCQMFEncoder ); + + for ( int32_t n = 0; n < ( *hSplitBinLCLDEnc )->iChannels; n++ ) + { + free( ( *hSplitBinLCLDEnc )->pppfCQMFReal[n] ); + free( ( *hSplitBinLCLDEnc )->pppfCQMFImag[n] ); + } + free( ( *hSplitBinLCLDEnc )->pppfCQMFReal ); + free( ( *hSplitBinLCLDEnc )->pppfCQMFImag ); + +#ifdef CLDFB_DEBUG + if ( ( *hSplitBinLCLDEnc )->cldfbIn != NULL ) + { + fclose( ( *hSplitBinLCLDEnc )->cldfbIn ); + } +#endif + count_free( *hSplitBinLCLDEnc ); *hSplitBinLCLDEnc = NULL; } @@ -87,6 +131,85 @@ void ivas_splitBinLCLDEncProcess( assert( Cldfb_In_Real != NULL ); assert( Cldfb_In_Imag != NULL ); assert( pBits != NULL ); + + int32_t iBytesWritten; + uint16_t ushBytes; + unsigned char auchData[4096]; + unsigned char *bval; + int32_t code; + + iBytesWritten = 4096; + + // A conversion is needed for the 3d pointer interface here ........ :( + for ( int32_t n = 0; n < hSplitBinLCLDEnc->iChannels; n++ ) + { + for ( int32_t k = 0; k < CLDFB_NO_COL_MAX; k++ ) + { + hSplitBinLCLDEnc->pppfCQMFReal[n][k] = Cldfb_In_Real[n][k]; + hSplitBinLCLDEnc->pppfCQMFImag[n][k] = Cldfb_In_Imag[n][k]; + } + } + +#ifdef CLDFB_DEBUG + int readByte = 0; + for ( int k = 0; k < CLDFB_NO_COL_MAX; k++ ) + { + for ( int b = 0; b < CLDFB_NO_CHANNELS_MAX; b++ ) + { + for ( int n = 0; n < hSplitBinLCLDEnc->iChannels; n++ ) + { +#if 0 + readByte = fread(&hSplitBinLCLDEnc->pppfCQMFReal[n][k][b], sizeof(float), 1, hSplitBinLCLDEnc->cldfbIn); + if ( readByte != 1 ) + break; + readByte = fread(&hSplitBinLCLDEnc->pppfCQMFImag[n][k][b], sizeof(float), 1, hSplitBinLCLDEnc->cldfbIn); +#else + readByte = fread( &Cldfb_In_Real[n][k][b], sizeof( float ), 1, hSplitBinLCLDEnc->cldfbIn ); + if ( readByte != 1 ) + break; + readByte = fread( &Cldfb_In_Imag[n][k][b], sizeof( float ), 1, hSplitBinLCLDEnc->cldfbIn ); +#endif + } + } + } + + if ( readByte == 1 ) + { + printf( "Frame Read = %d\n", ++hSplitBinLCLDEnc->numFrame ); + } + else + { + printf( "Writing zeroes...\n" ); + for ( int k = 0; k < CLDFB_NO_COL_MAX; k++ ) + { + for ( int b = 0; b < CLDFB_NO_CHANNELS_MAX; b++ ) + { + for ( int n = 0; n < hSplitBinLCLDEnc->iChannels; n++ ) + { + hSplitBinLCLDEnc->pppfCQMFReal[n][k][b] = 0.f; + hSplitBinLCLDEnc->pppfCQMFImag[n][k][b] = 0.f; + } + } + } + } +#endif + + EncodeFrame( hSplitBinLCLDEnc->psCQMFEncoder, hSplitBinLCLDEnc->pppfCQMFReal, hSplitBinLCLDEnc->pppfCQMFImag, &iBytesWritten, auchData ); + + bval = auchData; + ushBytes = (uint16_t) iBytesWritten; + ivas_split_rend_bitstream_write_int32( pBits, (int32_t) ushBytes, 8 * sizeof( uint16_t ) ); + for ( int32_t bytesCount = 0; bytesCount < iBytesWritten; bytesCount++ ) + { + code = (int32_t) *bval; + ivas_split_rend_bitstream_write_int32( pBits, code, 8 ); + bval++; + } + +#ifdef CLDFB_DEBUG + printf( "Bytes written = %d\n", iBytesWritten ); +#endif + return; } -#endif \ No newline at end of file +#endif diff --git a/lib_rend/ivas_splitRendererPre.c b/lib_rend/ivas_splitRendererPre.c index 8c37efcef3..f5f34302f9 100644 --- a/lib_rend/ivas_splitRendererPre.c +++ b/lib_rend/ivas_splitRendererPre.c @@ -1169,7 +1169,7 @@ ivas_error ivas_split_renderer_open( SPLIT_REND_WRAPPER *hSplitRendWrapper, cons { return error; } - error = ivas_splitBinLCLDEncOpen( &hSplitRendWrapper->hSplitBinLCLDEnc ); + error = ivas_splitBinLCLDEncOpen( &hSplitRendWrapper->hSplitBinLCLDEnc, OutSampleRate, 2, 384000 ); break; case SPLIT_REND_POST: error = ivas_splitBinPostRendOpen( &hSplitRendWrapper->hBinHrSplitPostRend, OutSampleRate ); @@ -1177,7 +1177,7 @@ ivas_error ivas_split_renderer_open( SPLIT_REND_WRAPPER *hSplitRendWrapper, cons { return error; } - error = ivas_splitBinLCLDDecOpen( &hSplitRendWrapper->hSplitBinLCLDDec ); + error = ivas_splitBinLCLDDecOpen( &hSplitRendWrapper->hSplitBinLCLDDec, OutSampleRate, 2 ); if ( error != IVAS_ERR_OK ) { return error; @@ -1194,7 +1194,7 @@ ivas_error ivas_split_renderer_open( SPLIT_REND_WRAPPER *hSplitRendWrapper, cons { return error; } - error = ivas_splitBinLCLDEncOpen( &hSplitRendWrapper->hSplitBinLCLDEnc ); + error = ivas_splitBinLCLDEncOpen( &hSplitRendWrapper->hSplitBinLCLDEnc, OutSampleRate, 2, 384000 ); if ( error != IVAS_ERR_OK ) { return error; @@ -1204,7 +1204,7 @@ ivas_error ivas_split_renderer_open( SPLIT_REND_WRAPPER *hSplitRendWrapper, cons { return error; } - error = ivas_splitBinLCLDDecOpen( &hSplitRendWrapper->hSplitBinLCLDDec ); + error = ivas_splitBinLCLDDecOpen( &hSplitRendWrapper->hSplitBinLCLDDec, OutSampleRate, 2 ); break; default: return IVAS_ERR_INVALID_OUTPUT_FORMAT; @@ -1296,12 +1296,6 @@ ivas_error ivas_renderMultiBinToSplitBinaural( /*CLFDB decoding and SPLIT post rendering MD based adjustments*/ { - ivas_splitBinLCLDDecProcess( - hSplitBin->hSplitBinLCLDDec, - pBits, - Cldfb_In_BinReal[0], - Cldfb_In_BinImag[0] ); - ivas_splitBinPostRendMdDec( pBits, hSplitBin->hBinHrSplitPostRend, @@ -1310,6 +1304,12 @@ ivas_error ivas_renderMultiBinToSplitBinaural( #endif MAX_SPLIT_REND_MD_BANDS ); + ivas_splitBinLCLDDecProcess( + hSplitBin->hSplitBinLCLDDec, + pBits, + Cldfb_In_BinReal[0], + Cldfb_In_BinImag[0] ); + ivas_rend_CldfbSplitPostRendProcess( hSplitBin->hBinHrSplitPostRend, QuaternionsPre, diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index f604c309e9..098ecf562b 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -1003,6 +1003,7 @@ static CREND_WRAPPER defaultCrendWrapper( return w; } + static ivas_error setRendInputActiveIsm( void *input, const IVAS_REND_AudioConfig inConfig, @@ -1829,7 +1830,8 @@ static ivas_error initSbaPanGainsForSbaOut( return error; } -static ivas_error updateSbaPanGains( +static ivas_error +updateSbaPanGains( input_sba *inputSba, const IVAS_REND_AudioConfig outConfig, RENDER_CONFIG_DATA *hRendCfg ) @@ -3155,7 +3157,11 @@ ivas_error IVAS_REND_GetDelay( latency_ns += IVAS_FB_DEC_DELAY_NS; *nSamples = max( *nSamples, NS2SA( *timeScale, latency_ns ) ); } - else + else if ( hIvasRend->inputsSba[i].cldfbRendWrapper.hCldfbRend != NULL ) + { + latency_ns = 0; + *nSamples = max( *nSamples, NS2SA( *timeScale, latency_ns ) ); + } #endif { latency_ns = hIvasRend->inputsSba[i].crendWrapper.binaural_latency_ns; -- GitLab From 7e1872b6c3b4c0c15182120ad1b9260a98a25b24 Mon Sep 17 00:00:00 2001 From: Shanush Prema Thasarathan Date: Wed, 18 Jan 2023 11:08:25 +1100 Subject: [PATCH 03/31] Rename ivas_cldfb_trans_codec/Bitstream.* to ivas_cldfb_trans_codec/cldfb_codec_bitstream.* to avoid name clash --- .../{Bitstream.c => cldfb_codec_bitstream.c} | 0 .../{Bitstream.h => cldfb_codec_bitstream.h} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename lib_rend/ivas_cldfb_trans_codec/{Bitstream.c => cldfb_codec_bitstream.c} (100%) rename lib_rend/ivas_cldfb_trans_codec/{Bitstream.h => cldfb_codec_bitstream.h} (100%) diff --git a/lib_rend/ivas_cldfb_trans_codec/Bitstream.c b/lib_rend/ivas_cldfb_trans_codec/cldfb_codec_bitstream.c similarity index 100% rename from lib_rend/ivas_cldfb_trans_codec/Bitstream.c rename to lib_rend/ivas_cldfb_trans_codec/cldfb_codec_bitstream.c diff --git a/lib_rend/ivas_cldfb_trans_codec/Bitstream.h b/lib_rend/ivas_cldfb_trans_codec/cldfb_codec_bitstream.h similarity index 100% rename from lib_rend/ivas_cldfb_trans_codec/Bitstream.h rename to lib_rend/ivas_cldfb_trans_codec/cldfb_codec_bitstream.h -- GitLab From 84c7598ae14642ed85f08f17f8aecc6e92e541a2 Mon Sep 17 00:00:00 2001 From: Shanush Prema Thasarathan Date: Wed, 18 Jan 2023 11:18:37 +1100 Subject: [PATCH 04/31] Fix makefile such that code will compile on Mac (and therefore Linux?) --- Makefile | 2 +- lib_rend/ivas_cldfb_trans_codec/CQMFDecoder.c | 2 +- lib_rend/ivas_cldfb_trans_codec/CQMFEncoder.c | 2 +- lib_rend/ivas_cldfb_trans_codec/cldfb_codec_bitstream.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 141a607b07..d5b9a8781a 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ SRC_LIBCOM = lib_com SRC_LIBDEBUG = lib_debug SRC_LIBDEC = lib_dec SRC_LIBENC = lib_enc -SRC_LIBREND = lib_rend +SRC_LIBREND = lib_rend lib_rend/ivas_cldfb_trans_codec SRC_LIBUTIL = lib_util SRC_APP = apps BUILD = build diff --git a/lib_rend/ivas_cldfb_trans_codec/CQMFDecoder.c b/lib_rend/ivas_cldfb_trans_codec/CQMFDecoder.c index 40d627e612..370aa0dbd1 100644 --- a/lib_rend/ivas_cldfb_trans_codec/CQMFDecoder.c +++ b/lib_rend/ivas_cldfb_trans_codec/CQMFDecoder.c @@ -10,7 +10,7 @@ #include "RMSEnvDeltaHuff.h" #include "CQMFHuff.h" #include "NoiseGen.h" -#include "Bitstream.h" +#include "cldfb_codec_bitstream.h" typedef struct CQMF_DECODER{ int iSampleRate; diff --git a/lib_rend/ivas_cldfb_trans_codec/CQMFEncoder.c b/lib_rend/ivas_cldfb_trans_codec/CQMFEncoder.c index a7db7969e9..6795f9327c 100644 --- a/lib_rend/ivas_cldfb_trans_codec/CQMFEncoder.c +++ b/lib_rend/ivas_cldfb_trans_codec/CQMFEncoder.c @@ -10,7 +10,7 @@ #include "PerceptualModel.h" #include "RMSEnvDeltaHuff.h" #include "CQMFHuff.h" -#include "Bitstream.h" +#include "cldfb_codec_bitstream.h" typedef struct CQMF_ENCODER{ int iSampleRate; diff --git a/lib_rend/ivas_cldfb_trans_codec/cldfb_codec_bitstream.c b/lib_rend/ivas_cldfb_trans_codec/cldfb_codec_bitstream.c index e542fcb15e..4317e0ec12 100644 --- a/lib_rend/ivas_cldfb_trans_codec/cldfb_codec_bitstream.c +++ b/lib_rend/ivas_cldfb_trans_codec/cldfb_codec_bitstream.c @@ -1,4 +1,4 @@ -#include "Bitstream.h" +#include "cldfb_codec_bitstream.h" #include #include -- GitLab From 649f4a5d250a0b7b30fc72992becfa00b4f3efc6 Mon Sep 17 00:00:00 2001 From: rtyag Date: Wed, 18 Jan 2023 15:04:44 +1100 Subject: [PATCH 05/31] fixing the msvs project file with new file name --- Workspace_msvc/lib_rend.vcxproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Workspace_msvc/lib_rend.vcxproj b/Workspace_msvc/lib_rend.vcxproj index 0cef2758b9..979e35246c 100644 --- a/Workspace_msvc/lib_rend.vcxproj +++ b/Workspace_msvc/lib_rend.vcxproj @@ -197,7 +197,7 @@ - + -- GitLab From 295920de2e2c65c546f2f763648f6e56c897db46 Mon Sep 17 00:00:00 2001 From: rtyag Date: Fri, 20 Jan 2023 11:52:44 +1100 Subject: [PATCH 06/31] debugging switch for CLDFB codec --- lib_com/options.h | 1 + lib_rend/ivas_splitRendererPre.c | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/lib_com/options.h b/lib_com/options.h index 1f12475cfb..486d61584e 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -159,6 +159,7 @@ //#define SPLIT_REND_WITH_HEAD_ROT_DEBUG // only for debugging purposes #define SPLIT_REND_BASE2_CODING //#define SPLIT_REND_SKIP_POST_REND +//#define SPLIT_REND_SKIP_CLDFB_CODEC #endif /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ diff --git a/lib_rend/ivas_splitRendererPre.c b/lib_rend/ivas_splitRendererPre.c index f5f34302f9..0ad960cc4a 100644 --- a/lib_rend/ivas_splitRendererPre.c +++ b/lib_rend/ivas_splitRendererPre.c @@ -1286,11 +1286,13 @@ ivas_error ivas_renderMultiBinToSplitBinaural( max_bands, pBits ); +#ifndef SPLIT_REND_SKIP_CLDFB_CODEC ivas_splitBinLCLDEncProcess( hSplitBin->hSplitBinLCLDEnc, Cldfb_In_BinReal[0], Cldfb_In_BinImag[0], pBits ); +#endif /*CLFDB decoding and SPLIT post rendering MD based adjustments*/ @@ -1304,11 +1306,13 @@ ivas_error ivas_renderMultiBinToSplitBinaural( #endif MAX_SPLIT_REND_MD_BANDS ); +#ifndef SPLIT_REND_SKIP_CLDFB_CODEC ivas_splitBinLCLDDecProcess( hSplitBin->hSplitBinLCLDDec, pBits, Cldfb_In_BinReal[0], Cldfb_In_BinImag[0] ); +#endif ivas_rend_CldfbSplitPostRendProcess( hSplitBin->hBinHrSplitPostRend, -- GitLab From 12a463d124a70c63dd650e9ae0abb212e79864a9 Mon Sep 17 00:00:00 2001 From: rtyag Date: Mon, 23 Jan 2023 16:57:06 +1100 Subject: [PATCH 07/31] instrumentation error fixes --- Workspace_msvc/lib_rend.vcxproj | 6 +- lib_rend/ivas_cldfb_trans_codec/CQMFDecoder.c | 120 +- lib_rend/ivas_cldfb_trans_codec/CQMFEncoder.c | 1667 +++++++++-------- lib_rend/ivas_cldfb_trans_codec/NoiseGen.c | 10 +- .../ivas_cldfb_trans_codec/RMSEnvGrouping.c | 40 +- .../cldfb_codec_bitstream.c | 10 +- lib_rend/ivas_splitRend_lcld_dec.c | 16 +- lib_rend/ivas_splitRend_lcld_enc.c | 16 +- 8 files changed, 1007 insertions(+), 878 deletions(-) diff --git a/Workspace_msvc/lib_rend.vcxproj b/Workspace_msvc/lib_rend.vcxproj index 979e35246c..1749b8e038 100644 --- a/Workspace_msvc/lib_rend.vcxproj +++ b/Workspace_msvc/lib_rend.vcxproj @@ -89,7 +89,7 @@ Disabled - ivas_cldfb_trans_codec;..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;%(AdditionalIncludeDirectories) + ivas_cldfb_trans_codec;..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;..\lib_util;..\lib_rend;%(AdditionalIncludeDirectories) _CRT_SECURE_NO_WARNINGS;$(Macros);WIN32;%(PreprocessorDefinitions) EnableFastChecks @@ -126,7 +126,7 @@ Disabled - ivas_cldfb_trans_codec;..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;..\lib_util;%(AdditionalIncludeDirectories) + ivas_cldfb_trans_codec;..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;..\lib_util;..\lib_rend;%(AdditionalIncludeDirectories) _CRT_SECURE_NO_WARNINGS;$(Macros);WIN32;%(PreprocessorDefinitions) @@ -169,7 +169,7 @@ Neither false false - ivas_cldfb_trans_codec;..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;%(AdditionalIncludeDirectories) + ivas_cldfb_trans_codec;..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;..\lib_util;..\lib_rend;%(AdditionalIncludeDirectories) _CRT_SECURE_NO_WARNINGS;$(Macros);WIN32;%(PreprocessorDefinitions) true diff --git a/lib_rend/ivas_cldfb_trans_codec/CQMFDecoder.c b/lib_rend/ivas_cldfb_trans_codec/CQMFDecoder.c index 370aa0dbd1..7e388d8242 100644 --- a/lib_rend/ivas_cldfb_trans_codec/CQMFDecoder.c +++ b/lib_rend/ivas_cldfb_trans_codec/CQMFDecoder.c @@ -5,6 +5,8 @@ #include #include #include "Tables.h" +#include "options.h" +#include "prot.h" #include "wmops.h" #include "PerceptualModel.h" #include "RMSEnvDeltaHuff.h" @@ -54,7 +56,7 @@ CQMFDecoder* CreateCQMFDecoder(const int iSampleRate, assert(iSampleRate == 48000); //Fix - psCQMFDecoder = (CQMFDecoder*)malloc(sizeof(CQMFDecoder)); + psCQMFDecoder = (CQMFDecoder*)count_malloc(sizeof(CQMFDecoder)); psCQMFDecoder->iSampleRate = iSampleRate; psCQMFDecoder->iChannels = iChannels; psCQMFDecoder->iNumBlocks = CQMF_BLOCKS_PER_FRAME; @@ -64,42 +66,42 @@ CQMFDecoder* CreateCQMFDecoder(const int iSampleRate, psCQMFDecoder->piBandwidths = c_aiBandwidths48; //Fix psCQMFDecoder->iMSMode = 0; - psCQMFDecoder->piMSFlags = (int*)malloc(MAX_BANDS * sizeof(int)); + psCQMFDecoder->piMSFlags = (int*)count_malloc(MAX_BANDS * sizeof(int)); psCQMFDecoder->iCommonGrouping = 1; // Common grouping always on only impacts stereo - psCQMFDecoder->piNumGroups = (int*)malloc(psCQMFDecoder->iChannels * sizeof(int)); - psCQMFDecoder->ppiGroupLengths = (int**)malloc(psCQMFDecoder->iChannels * sizeof(int*)); - psCQMFDecoder->pppiRMSEnvelope = (int***)malloc(psCQMFDecoder->iChannels * sizeof(int**)); - psCQMFDecoder->pppiSMR = (int***)malloc(psCQMFDecoder->iChannels * sizeof(int**)); - psCQMFDecoder->pppiExcitation = (int***)malloc(psCQMFDecoder->iChannels * sizeof(int**)); - psCQMFDecoder->pppiAlloc = (int***)malloc(psCQMFDecoder->iChannels * sizeof(int**)); - - psCQMFDecoder->pppiCQMFSignReal = (int***)malloc(psCQMFDecoder->iChannels * sizeof(int**)); - psCQMFDecoder->pppiCQMFSignImag = (int***)malloc(psCQMFDecoder->iChannels * sizeof(int**)); - psCQMFDecoder->pppiQCQMFReal = (int***)malloc(psCQMFDecoder->iChannels * sizeof(int**)); - psCQMFDecoder->pppiQCQMFImag = (int***)malloc(psCQMFDecoder->iChannels * sizeof(int**)); + psCQMFDecoder->piNumGroups = (int*)count_malloc(psCQMFDecoder->iChannels * sizeof(int)); + psCQMFDecoder->ppiGroupLengths = (int**)count_malloc(psCQMFDecoder->iChannels * sizeof(int*)); + psCQMFDecoder->pppiRMSEnvelope = (int***)count_malloc(psCQMFDecoder->iChannels * sizeof(int**)); + psCQMFDecoder->pppiSMR = (int***)count_malloc(psCQMFDecoder->iChannels * sizeof(int**)); + psCQMFDecoder->pppiExcitation = (int***)count_malloc(psCQMFDecoder->iChannels * sizeof(int**)); + psCQMFDecoder->pppiAlloc = (int***)count_malloc(psCQMFDecoder->iChannels * sizeof(int**)); + + psCQMFDecoder->pppiCQMFSignReal = (int***)count_malloc(psCQMFDecoder->iChannels * sizeof(int**)); + psCQMFDecoder->pppiCQMFSignImag = (int***)count_malloc(psCQMFDecoder->iChannels * sizeof(int**)); + psCQMFDecoder->pppiQCQMFReal = (int***)count_malloc(psCQMFDecoder->iChannels * sizeof(int**)); + psCQMFDecoder->pppiQCQMFImag = (int***)count_malloc(psCQMFDecoder->iChannels * sizeof(int**)); for(n = 0; n < iChannels ; n ++){ int k; - psCQMFDecoder->ppiGroupLengths[n] = (int*)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int)); - psCQMFDecoder->pppiRMSEnvelope[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); - psCQMFDecoder->pppiSMR[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); - psCQMFDecoder->pppiExcitation[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); - psCQMFDecoder->pppiAlloc[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); + psCQMFDecoder->ppiGroupLengths[n] = (int*)count_malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int)); + psCQMFDecoder->pppiRMSEnvelope[n] = (int**)count_malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); + psCQMFDecoder->pppiSMR[n] = (int**)count_malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); + psCQMFDecoder->pppiExcitation[n] = (int**)count_malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); + psCQMFDecoder->pppiAlloc[n] = (int**)count_malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); - psCQMFDecoder->pppiCQMFSignReal[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); - psCQMFDecoder->pppiCQMFSignImag[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); - psCQMFDecoder->pppiQCQMFReal[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); - psCQMFDecoder->pppiQCQMFImag[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); + psCQMFDecoder->pppiCQMFSignReal[n] = (int**)count_malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); + psCQMFDecoder->pppiCQMFSignImag[n] = (int**)count_malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); + psCQMFDecoder->pppiQCQMFReal[n] = (int**)count_malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); + psCQMFDecoder->pppiQCQMFImag[n] = (int**)count_malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - psCQMFDecoder->pppiRMSEnvelope[n][k] = (int*)malloc(MAX_BANDS * sizeof(int)); - psCQMFDecoder->pppiSMR[n][k] = (int*)malloc(MAX_BANDS * sizeof(int)); - psCQMFDecoder->pppiExcitation[n][k] = (int*)malloc(MAX_BANDS * sizeof(int)); - psCQMFDecoder->pppiAlloc[n][k] = (int*)malloc(MAX_BANDS * sizeof(int)); + psCQMFDecoder->pppiRMSEnvelope[n][k] = (int*)count_malloc(MAX_BANDS * sizeof(int)); + psCQMFDecoder->pppiSMR[n][k] = (int*)count_malloc(MAX_BANDS * sizeof(int)); + psCQMFDecoder->pppiExcitation[n][k] = (int*)count_malloc(MAX_BANDS * sizeof(int)); + psCQMFDecoder->pppiAlloc[n][k] = (int*)count_malloc(MAX_BANDS * sizeof(int)); - psCQMFDecoder->pppiCQMFSignReal[n][k] = (int*)malloc(CQMF_BANDS * sizeof(int)); - psCQMFDecoder->pppiCQMFSignImag[n][k] = (int*)malloc(CQMF_BANDS * sizeof(int)); - psCQMFDecoder->pppiQCQMFReal[n][k] = (int*)malloc(CQMF_BANDS * sizeof(int)); - psCQMFDecoder->pppiQCQMFImag[n][k] = (int*)malloc(CQMF_BANDS * sizeof(int)); + psCQMFDecoder->pppiCQMFSignReal[n][k] = (int*)count_malloc(CQMF_BANDS * sizeof(int)); + psCQMFDecoder->pppiCQMFSignImag[n][k] = (int*)count_malloc(CQMF_BANDS * sizeof(int)); + psCQMFDecoder->pppiQCQMFReal[n][k] = (int*)count_malloc(CQMF_BANDS * sizeof(int)); + psCQMFDecoder->pppiQCQMFImag[n][k] = (int*)count_malloc(CQMF_BANDS * sizeof(int)); } } @@ -117,19 +119,19 @@ void DeleteCQMFDecoder(CQMFDecoder *psCQMFDecoder) if(psCQMFDecoder != NULL){ if(psCQMFDecoder->piMSFlags != NULL){ - free(psCQMFDecoder->piMSFlags); + count_free(psCQMFDecoder->piMSFlags); } if(psCQMFDecoder->piNumGroups != NULL){ - free(psCQMFDecoder->piNumGroups); + count_free(psCQMFDecoder->piNumGroups); } if(psCQMFDecoder->ppiGroupLengths != NULL){ int n; for(n = 0; n < psCQMFDecoder->iChannels; n ++){ - free(psCQMFDecoder->ppiGroupLengths[n]); + count_free(psCQMFDecoder->ppiGroupLengths[n]); } - free(psCQMFDecoder->ppiGroupLengths); + count_free(psCQMFDecoder->ppiGroupLengths); } if(psCQMFDecoder->pppiRMSEnvelope != NULL){ @@ -137,11 +139,11 @@ void DeleteCQMFDecoder(CQMFDecoder *psCQMFDecoder) for(n = 0; n < psCQMFDecoder->iChannels; n ++){ int k; for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFDecoder->pppiRMSEnvelope[n][k]); + count_free(psCQMFDecoder->pppiRMSEnvelope[n][k]); } - free(psCQMFDecoder->pppiRMSEnvelope[n]); + count_free(psCQMFDecoder->pppiRMSEnvelope[n]); } - free(psCQMFDecoder->pppiRMSEnvelope); + count_free(psCQMFDecoder->pppiRMSEnvelope); } if(psCQMFDecoder->pppiSMR != NULL){ @@ -149,11 +151,11 @@ void DeleteCQMFDecoder(CQMFDecoder *psCQMFDecoder) for(n = 0; n < psCQMFDecoder->iChannels; n ++){ int k; for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFDecoder->pppiSMR[n][k]); + count_free(psCQMFDecoder->pppiSMR[n][k]); } - free(psCQMFDecoder->pppiSMR[n]); + count_free(psCQMFDecoder->pppiSMR[n]); } - free(psCQMFDecoder->pppiSMR); + count_free(psCQMFDecoder->pppiSMR); } if(psCQMFDecoder->pppiExcitation != NULL){ @@ -161,11 +163,11 @@ void DeleteCQMFDecoder(CQMFDecoder *psCQMFDecoder) for(n = 0; n < psCQMFDecoder->iChannels; n ++){ int k; for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFDecoder->pppiExcitation[n][k]); + count_free(psCQMFDecoder->pppiExcitation[n][k]); } - free(psCQMFDecoder->pppiExcitation[n]); + count_free(psCQMFDecoder->pppiExcitation[n]); } - free(psCQMFDecoder->pppiExcitation); + count_free(psCQMFDecoder->pppiExcitation); } if(psCQMFDecoder->pppiAlloc != NULL){ @@ -173,11 +175,11 @@ void DeleteCQMFDecoder(CQMFDecoder *psCQMFDecoder) for(n = 0; n < psCQMFDecoder->iChannels; n ++){ int k; for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFDecoder->pppiAlloc[n][k]); + count_free(psCQMFDecoder->pppiAlloc[n][k]); } - free(psCQMFDecoder->pppiAlloc[n]); + count_free(psCQMFDecoder->pppiAlloc[n]); } - free(psCQMFDecoder->pppiAlloc); + count_free(psCQMFDecoder->pppiAlloc); } if(psCQMFDecoder->pppiCQMFSignReal != NULL){ @@ -185,11 +187,11 @@ void DeleteCQMFDecoder(CQMFDecoder *psCQMFDecoder) for(n = 0; n < psCQMFDecoder->iChannels; n ++){ int k; for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFDecoder->pppiCQMFSignReal[n][k]); + count_free(psCQMFDecoder->pppiCQMFSignReal[n][k]); } - free(psCQMFDecoder->pppiCQMFSignReal[n]); + count_free(psCQMFDecoder->pppiCQMFSignReal[n]); } - free(psCQMFDecoder->pppiCQMFSignReal); + count_free(psCQMFDecoder->pppiCQMFSignReal); } if(psCQMFDecoder->pppiCQMFSignImag != NULL){ @@ -197,11 +199,11 @@ void DeleteCQMFDecoder(CQMFDecoder *psCQMFDecoder) for(n = 0; n < psCQMFDecoder->iChannels; n ++){ int k; for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFDecoder->pppiCQMFSignImag[n][k]); + count_free(psCQMFDecoder->pppiCQMFSignImag[n][k]); } - free(psCQMFDecoder->pppiCQMFSignImag[n]); + count_free(psCQMFDecoder->pppiCQMFSignImag[n]); } - free(psCQMFDecoder->pppiCQMFSignImag); + count_free(psCQMFDecoder->pppiCQMFSignImag); } if(psCQMFDecoder->pppiQCQMFReal != NULL){ @@ -209,11 +211,11 @@ void DeleteCQMFDecoder(CQMFDecoder *psCQMFDecoder) for(n = 0; n < psCQMFDecoder->iChannels; n ++){ int k; for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFDecoder->pppiQCQMFReal[n][k]); + count_free(psCQMFDecoder->pppiQCQMFReal[n][k]); } - free(psCQMFDecoder->pppiQCQMFReal[n]); + count_free(psCQMFDecoder->pppiQCQMFReal[n]); } - free(psCQMFDecoder->pppiQCQMFReal); + count_free(psCQMFDecoder->pppiQCQMFReal); } if(psCQMFDecoder->pppiQCQMFImag != NULL){ @@ -221,11 +223,11 @@ void DeleteCQMFDecoder(CQMFDecoder *psCQMFDecoder) for(n = 0; n < psCQMFDecoder->iChannels; n ++){ int k; for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFDecoder->pppiQCQMFImag[n][k]); + count_free(psCQMFDecoder->pppiQCQMFImag[n][k]); } - free(psCQMFDecoder->pppiQCQMFImag[n]); + count_free(psCQMFDecoder->pppiQCQMFImag[n]); } - free(psCQMFDecoder->pppiQCQMFImag); + count_free(psCQMFDecoder->pppiQCQMFImag); } if(psCQMFDecoder->psBSRead != NULL){ @@ -236,7 +238,7 @@ void DeleteCQMFDecoder(CQMFDecoder *psCQMFDecoder) DeleteNoiseGen(psCQMFDecoder->psNoiseGen); } - free(psCQMFDecoder); + count_free(psCQMFDecoder); } } diff --git a/lib_rend/ivas_cldfb_trans_codec/CQMFEncoder.c b/lib_rend/ivas_cldfb_trans_codec/CQMFEncoder.c index 6795f9327c..5aa13f0fba 100644 --- a/lib_rend/ivas_cldfb_trans_codec/CQMFEncoder.c +++ b/lib_rend/ivas_cldfb_trans_codec/CQMFEncoder.c @@ -5,6 +5,8 @@ #include #include #include "Tables.h" +#include "options.h" +#include "prot.h" #include "wmops.h" #include "RMSEnvGrouping.h" #include "PerceptualModel.h" @@ -12,511 +14,554 @@ #include "CQMFHuff.h" #include "cldfb_codec_bitstream.h" -typedef struct CQMF_ENCODER{ - int iSampleRate; - int iChannels; - int iNumBlocks; - - int iTargetBitRate; - int iTargetBitsPerFrame; - - int iNumBands; - const int *piBandwidths; - - int iMSMode; - int *piMSFlags; - +typedef struct CQMF_ENCODER +{ + int iSampleRate; + int iChannels; + int iNumBlocks; + + int iTargetBitRate; + int iTargetBitsPerFrame; + + int iNumBands; + const int *piBandwidths; + + int iMSMode; + int *piMSFlags; + RMSEnvelopeGrouping *psRMSEnvelopeGrouping; - int iCommonGrouping; - int *piNumGroups; - int **ppiGroupLengths; - - int ***pppiRMSEnvelope; - int ***pppiSMR; - int ***pppiExcitation; - int ***pppiAlloc; - - int iAllocOffset; - - int ***pppiCQMFSignReal; - int ***pppiCQMFSignImag; - int ***pppiQCQMFReal; - int ***pppiQCQMFImag; - - Bitstream *psBSWrite; - - int iLastError; -}CQMFEncoder; - -CQMFEncoder* CreateCQMFEncoder(const int iSampleRate, - const int iChannels, - const int iTargetBitRate) + int iCommonGrouping; + int *piNumGroups; + int **ppiGroupLengths; + + int ***pppiRMSEnvelope; + int ***pppiSMR; + int ***pppiExcitation; + int ***pppiAlloc; + + int iAllocOffset; + + int ***pppiCQMFSignReal; + int ***pppiCQMFSignImag; + int ***pppiQCQMFReal; + int ***pppiQCQMFImag; + + Bitstream *psBSWrite; + + int iLastError; +} CQMFEncoder; + +CQMFEncoder *CreateCQMFEncoder( const int iSampleRate, + const int iChannels, + const int iTargetBitRate ) { int n; CQMFEncoder *psCQMFEncoder = NULL; - - assert(iSampleRate == 48000); //Fix - - psCQMFEncoder = (CQMFEncoder*)malloc(sizeof(CQMFEncoder)); + + assert( iSampleRate == 48000 ); // Fix + + psCQMFEncoder = (CQMFEncoder *) count_malloc( sizeof( CQMFEncoder ) ); psCQMFEncoder->iSampleRate = iSampleRate; psCQMFEncoder->iChannels = iChannels; psCQMFEncoder->iNumBlocks = CQMF_BLOCKS_PER_FRAME; psCQMFEncoder->iAllocOffset = 0; - + psCQMFEncoder->iTargetBitRate = iTargetBitRate; psCQMFEncoder->iTargetBitsPerFrame = iTargetBitRate * CQMF_BLOCKS_PER_FRAME * CQMF_BANDS / iSampleRate; - - psCQMFEncoder->iNumBands = MAX_BANDS_48 - 1; //Fix - psCQMFEncoder->piBandwidths = c_aiBandwidths48; //Fix - + + psCQMFEncoder->iNumBands = MAX_BANDS_48 - 1; // Fix + psCQMFEncoder->piBandwidths = c_aiBandwidths48; // Fix + psCQMFEncoder->iMSMode = 0; - psCQMFEncoder->piMSFlags = (int*)malloc(MAX_BANDS * sizeof(int)); - - psCQMFEncoder->psRMSEnvelopeGrouping = CreateRMSEnvelopeGrouping(psCQMFEncoder->iNumBlocks); - + psCQMFEncoder->piMSFlags = (int *) count_malloc( MAX_BANDS * sizeof( int ) ); + + psCQMFEncoder->psRMSEnvelopeGrouping = CreateRMSEnvelopeGrouping( psCQMFEncoder->iNumBlocks ); + psCQMFEncoder->iCommonGrouping = 1; // Common grouping always on only impacts stereo - psCQMFEncoder->piNumGroups = (int*)malloc(psCQMFEncoder->iChannels * sizeof(int)); - psCQMFEncoder->ppiGroupLengths = (int**)malloc(psCQMFEncoder->iChannels * sizeof(int*)); - psCQMFEncoder->pppiRMSEnvelope = (int***)malloc(psCQMFEncoder->iChannels * sizeof(int**)); - psCQMFEncoder->pppiSMR = (int***)malloc(psCQMFEncoder->iChannels * sizeof(int**)); - psCQMFEncoder->pppiExcitation = (int***)malloc(psCQMFEncoder->iChannels * sizeof(int**)); - psCQMFEncoder->pppiAlloc = (int***)malloc(psCQMFEncoder->iChannels * sizeof(int**)); - - psCQMFEncoder->pppiCQMFSignReal = (int***)malloc(psCQMFEncoder->iChannels * sizeof(int**)); - psCQMFEncoder->pppiCQMFSignImag = (int***)malloc(psCQMFEncoder->iChannels * sizeof(int**)); - psCQMFEncoder->pppiQCQMFReal = (int***)malloc(psCQMFEncoder->iChannels * sizeof(int**)); - psCQMFEncoder->pppiQCQMFImag = (int***)malloc(psCQMFEncoder->iChannels * sizeof(int**)); - for(n = 0; n < iChannels ; n ++){ + psCQMFEncoder->piNumGroups = (int *) count_malloc( psCQMFEncoder->iChannels * sizeof( int ) ); + psCQMFEncoder->ppiGroupLengths = (int **) count_malloc( psCQMFEncoder->iChannels * sizeof( int * ) ); + psCQMFEncoder->pppiRMSEnvelope = (int ***) count_malloc( psCQMFEncoder->iChannels * sizeof( int ** ) ); + psCQMFEncoder->pppiSMR = (int ***) count_malloc( psCQMFEncoder->iChannels * sizeof( int ** ) ); + psCQMFEncoder->pppiExcitation = (int ***) count_malloc( psCQMFEncoder->iChannels * sizeof( int ** ) ); + psCQMFEncoder->pppiAlloc = (int ***) count_malloc( psCQMFEncoder->iChannels * sizeof( int ** ) ); + + psCQMFEncoder->pppiCQMFSignReal = (int ***) count_malloc( psCQMFEncoder->iChannels * sizeof( int ** ) ); + psCQMFEncoder->pppiCQMFSignImag = (int ***) count_malloc( psCQMFEncoder->iChannels * sizeof( int ** ) ); + psCQMFEncoder->pppiQCQMFReal = (int ***) count_malloc( psCQMFEncoder->iChannels * sizeof( int ** ) ); + psCQMFEncoder->pppiQCQMFImag = (int ***) count_malloc( psCQMFEncoder->iChannels * sizeof( int ** ) ); + for ( n = 0; n < iChannels; n++ ) + { int k; - psCQMFEncoder->ppiGroupLengths[n] = (int*)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int)); - psCQMFEncoder->pppiRMSEnvelope[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); - psCQMFEncoder->pppiSMR[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); - psCQMFEncoder->pppiExcitation[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); - psCQMFEncoder->pppiAlloc[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); - - psCQMFEncoder->pppiCQMFSignReal[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); - psCQMFEncoder->pppiCQMFSignImag[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); - psCQMFEncoder->pppiQCQMFReal[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); - psCQMFEncoder->pppiQCQMFImag[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); - for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - psCQMFEncoder->pppiRMSEnvelope[n][k] = (int*)malloc(MAX_BANDS * sizeof(int)); - psCQMFEncoder->pppiSMR[n][k] = (int*)malloc(MAX_BANDS * sizeof(int)); - psCQMFEncoder->pppiExcitation[n][k] = (int*)malloc(MAX_BANDS * sizeof(int)); - psCQMFEncoder->pppiAlloc[n][k] = (int*)malloc(MAX_BANDS * sizeof(int)); - - psCQMFEncoder->pppiCQMFSignReal[n][k] = (int*)malloc(CQMF_BANDS * sizeof(int)); - psCQMFEncoder->pppiCQMFSignImag[n][k] = (int*)malloc(CQMF_BANDS * sizeof(int)); - psCQMFEncoder->pppiQCQMFReal[n][k] = (int*)malloc(CQMF_BANDS * sizeof(int)); - psCQMFEncoder->pppiQCQMFImag[n][k] = (int*)malloc(CQMF_BANDS * sizeof(int)); + psCQMFEncoder->ppiGroupLengths[n] = (int *) count_malloc( CQMF_BLOCKS_PER_FRAME * sizeof( int ) ); + psCQMFEncoder->pppiRMSEnvelope[n] = (int **) count_malloc( CQMF_BLOCKS_PER_FRAME * sizeof( int * ) ); + psCQMFEncoder->pppiSMR[n] = (int **) count_malloc( CQMF_BLOCKS_PER_FRAME * sizeof( int * ) ); + psCQMFEncoder->pppiExcitation[n] = (int **) count_malloc( CQMF_BLOCKS_PER_FRAME * sizeof( int * ) ); + psCQMFEncoder->pppiAlloc[n] = (int **) count_malloc( CQMF_BLOCKS_PER_FRAME * sizeof( int * ) ); + + psCQMFEncoder->pppiCQMFSignReal[n] = (int **) count_malloc( CQMF_BLOCKS_PER_FRAME * sizeof( int * ) ); + psCQMFEncoder->pppiCQMFSignImag[n] = (int **) count_malloc( CQMF_BLOCKS_PER_FRAME * sizeof( int * ) ); + psCQMFEncoder->pppiQCQMFReal[n] = (int **) count_malloc( CQMF_BLOCKS_PER_FRAME * sizeof( int * ) ); + psCQMFEncoder->pppiQCQMFImag[n] = (int **) count_malloc( CQMF_BLOCKS_PER_FRAME * sizeof( int * ) ); + for ( k = 0; k < CQMF_BLOCKS_PER_FRAME; k++ ) + { + psCQMFEncoder->pppiRMSEnvelope[n][k] = (int *) count_malloc( MAX_BANDS * sizeof( int ) ); + psCQMFEncoder->pppiSMR[n][k] = (int *) count_malloc( MAX_BANDS * sizeof( int ) ); + psCQMFEncoder->pppiExcitation[n][k] = (int *) count_malloc( MAX_BANDS * sizeof( int ) ); + psCQMFEncoder->pppiAlloc[n][k] = (int *) count_malloc( MAX_BANDS * sizeof( int ) ); + + psCQMFEncoder->pppiCQMFSignReal[n][k] = (int *) count_malloc( CQMF_BANDS * sizeof( int ) ); + psCQMFEncoder->pppiCQMFSignImag[n][k] = (int *) count_malloc( CQMF_BANDS * sizeof( int ) ); + psCQMFEncoder->pppiQCQMFReal[n][k] = (int *) count_malloc( CQMF_BANDS * sizeof( int ) ); + psCQMFEncoder->pppiQCQMFImag[n][k] = (int *) count_malloc( CQMF_BANDS * sizeof( int ) ); } } - - psCQMFEncoder->psBSWrite = CreateBitstream(BS_WRITE,4096); + + psCQMFEncoder->psBSWrite = CreateBitstream( BS_WRITE, 4096 ); psCQMFEncoder->iLastError = ENCODER_ERROR_NONE; - + return psCQMFEncoder; } -void DeleteCQMFEncoder(CQMFEncoder *psCQMFEncoder) +void DeleteCQMFEncoder( CQMFEncoder *psCQMFEncoder ) { - if(psCQMFEncoder != NULL){ - - if(psCQMFEncoder->piMSFlags != NULL){ - free(psCQMFEncoder->piMSFlags); + if ( psCQMFEncoder != NULL ) + { + + if ( psCQMFEncoder->piMSFlags != NULL ) + { + count_free( psCQMFEncoder->piMSFlags ); } - - if(psCQMFEncoder->piNumGroups != NULL){ - free(psCQMFEncoder->piNumGroups); + + if ( psCQMFEncoder->piNumGroups != NULL ) + { + count_free( psCQMFEncoder->piNumGroups ); } - - if(psCQMFEncoder->psRMSEnvelopeGrouping != NULL){ - DeleteRMSEnvelopeGrouping(psCQMFEncoder->psRMSEnvelopeGrouping); + + if ( psCQMFEncoder->psRMSEnvelopeGrouping != NULL ) + { + DeleteRMSEnvelopeGrouping( psCQMFEncoder->psRMSEnvelopeGrouping ); } - - if(psCQMFEncoder->ppiGroupLengths != NULL){ + + if ( psCQMFEncoder->ppiGroupLengths != NULL ) + { int n; - for(n = 0; n < psCQMFEncoder->iChannels; n ++){ - free(psCQMFEncoder->ppiGroupLengths[n]); + for ( n = 0; n < psCQMFEncoder->iChannels; n++ ) + { + count_free( psCQMFEncoder->ppiGroupLengths[n] ); } - free(psCQMFEncoder->ppiGroupLengths); + count_free( psCQMFEncoder->ppiGroupLengths ); } - - if(psCQMFEncoder->pppiRMSEnvelope != NULL){ + + if ( psCQMFEncoder->pppiRMSEnvelope != NULL ) + { int n; - for(n = 0; n < psCQMFEncoder->iChannels; n ++){ + for ( n = 0; n < psCQMFEncoder->iChannels; n++ ) + { int k; - for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFEncoder->pppiRMSEnvelope[n][k]); + for ( k = 0; k < CQMF_BLOCKS_PER_FRAME; k++ ) + { + count_free( psCQMFEncoder->pppiRMSEnvelope[n][k] ); } - free(psCQMFEncoder->pppiRMSEnvelope[n]); + count_free( psCQMFEncoder->pppiRMSEnvelope[n] ); } - free(psCQMFEncoder->pppiRMSEnvelope); + count_free( psCQMFEncoder->pppiRMSEnvelope ); } - - if(psCQMFEncoder->pppiSMR != NULL){ + + if ( psCQMFEncoder->pppiSMR != NULL ) + { int n; - for(n = 0; n < psCQMFEncoder->iChannels; n ++){ + for ( n = 0; n < psCQMFEncoder->iChannels; n++ ) + { int k; - for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFEncoder->pppiSMR[n][k]); + for ( k = 0; k < CQMF_BLOCKS_PER_FRAME; k++ ) + { + count_free( psCQMFEncoder->pppiSMR[n][k] ); } - free(psCQMFEncoder->pppiSMR[n]); + count_free( psCQMFEncoder->pppiSMR[n] ); } - free(psCQMFEncoder->pppiSMR); + count_free( psCQMFEncoder->pppiSMR ); } - - if(psCQMFEncoder->pppiExcitation != NULL){ + + if ( psCQMFEncoder->pppiExcitation != NULL ) + { int n; - for(n = 0; n < psCQMFEncoder->iChannels; n ++){ + for ( n = 0; n < psCQMFEncoder->iChannels; n++ ) + { int k; - for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFEncoder->pppiExcitation[n][k]); + for ( k = 0; k < CQMF_BLOCKS_PER_FRAME; k++ ) + { + count_free( psCQMFEncoder->pppiExcitation[n][k] ); } - free(psCQMFEncoder->pppiExcitation[n]); + count_free( psCQMFEncoder->pppiExcitation[n] ); } - free(psCQMFEncoder->pppiExcitation); + count_free( psCQMFEncoder->pppiExcitation ); } - - if(psCQMFEncoder->pppiAlloc != NULL){ + + if ( psCQMFEncoder->pppiAlloc != NULL ) + { int n; - for(n = 0; n < psCQMFEncoder->iChannels; n ++){ + for ( n = 0; n < psCQMFEncoder->iChannels; n++ ) + { int k; - for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFEncoder->pppiAlloc[n][k]); + for ( k = 0; k < CQMF_BLOCKS_PER_FRAME; k++ ) + { + count_free( psCQMFEncoder->pppiAlloc[n][k] ); } - free(psCQMFEncoder->pppiAlloc[n]); + count_free( psCQMFEncoder->pppiAlloc[n] ); } - free(psCQMFEncoder->pppiAlloc); + count_free( psCQMFEncoder->pppiAlloc ); } - - if(psCQMFEncoder->pppiCQMFSignReal != NULL){ + + if ( psCQMFEncoder->pppiCQMFSignReal != NULL ) + { int n; - for(n = 0; n < psCQMFEncoder->iChannels; n ++){ + for ( n = 0; n < psCQMFEncoder->iChannels; n++ ) + { int k; - for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFEncoder->pppiCQMFSignReal[n][k]); + for ( k = 0; k < CQMF_BLOCKS_PER_FRAME; k++ ) + { + count_free( psCQMFEncoder->pppiCQMFSignReal[n][k] ); } - free(psCQMFEncoder->pppiCQMFSignReal[n]); + count_free( psCQMFEncoder->pppiCQMFSignReal[n] ); } - free(psCQMFEncoder->pppiCQMFSignReal); + count_free( psCQMFEncoder->pppiCQMFSignReal ); } - - if(psCQMFEncoder->pppiCQMFSignImag != NULL){ + + if ( psCQMFEncoder->pppiCQMFSignImag != NULL ) + { int n; - for(n = 0; n < psCQMFEncoder->iChannels; n ++){ + for ( n = 0; n < psCQMFEncoder->iChannels; n++ ) + { int k; - for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFEncoder->pppiCQMFSignImag[n][k]); + for ( k = 0; k < CQMF_BLOCKS_PER_FRAME; k++ ) + { + count_free( psCQMFEncoder->pppiCQMFSignImag[n][k] ); } - free(psCQMFEncoder->pppiCQMFSignImag[n]); + count_free( psCQMFEncoder->pppiCQMFSignImag[n] ); } - free(psCQMFEncoder->pppiCQMFSignImag); + count_free( psCQMFEncoder->pppiCQMFSignImag ); } - - if(psCQMFEncoder->pppiQCQMFReal != NULL){ + + if ( psCQMFEncoder->pppiQCQMFReal != NULL ) + { int n; - for(n = 0; n < psCQMFEncoder->iChannels; n ++){ + for ( n = 0; n < psCQMFEncoder->iChannels; n++ ) + { int k; - for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFEncoder->pppiQCQMFReal[n][k]); + for ( k = 0; k < CQMF_BLOCKS_PER_FRAME; k++ ) + { + count_free( psCQMFEncoder->pppiQCQMFReal[n][k] ); } - free(psCQMFEncoder->pppiQCQMFReal[n]); + count_free( psCQMFEncoder->pppiQCQMFReal[n] ); } - free(psCQMFEncoder->pppiQCQMFReal); + count_free( psCQMFEncoder->pppiQCQMFReal ); } - - if(psCQMFEncoder->pppiQCQMFImag != NULL){ + + if ( psCQMFEncoder->pppiQCQMFImag != NULL ) + { int n; - for(n = 0; n < psCQMFEncoder->iChannels; n ++){ + for ( n = 0; n < psCQMFEncoder->iChannels; n++ ) + { int k; - for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFEncoder->pppiQCQMFImag[n][k]); + for ( k = 0; k < CQMF_BLOCKS_PER_FRAME; k++ ) + { + count_free( psCQMFEncoder->pppiQCQMFImag[n][k] ); } - free(psCQMFEncoder->pppiQCQMFImag[n]); + count_free( psCQMFEncoder->pppiQCQMFImag[n] ); } - free(psCQMFEncoder->pppiQCQMFImag); + count_free( psCQMFEncoder->pppiQCQMFImag ); } - - DeleteBitstream(psCQMFEncoder->psBSWrite); - - free(psCQMFEncoder); + + DeleteBitstream( psCQMFEncoder->psBSWrite ); + + count_free( psCQMFEncoder ); } } -int CQMFEncoderGetError(CQMFEncoder *psCQMFEncoder) +int CQMFEncoderGetError( CQMFEncoder *psCQMFEncoder ) { return psCQMFEncoder->iLastError; } -static void MSModeCalculation(const int iNumBlocks, - const int iNumBands, - const int *piBandwidths, - float ***pppfReal, - float ***pppfImag, - int *piMSMode, - int *piMSFlags); - -static void RemoveRMSEnvelope(const int iNumBands, - const int *piBandwidths, - const int iNumGroups, - const int *piGroupLengths, - const int **ppiRMSEnvelope, - float **ppfReal, - float **ppfImag); - -static void RemoveSign(const int iNumBlocks, - const int iNumCQMFBands, - float **ppfReal, - float **ppfImag, - int **ppiSignReal, - int **ppiSignImag); - -static int CountCQMFBits(const int iNumGroups, - const int *piGroupLengths, - const int iNumBands, - const int *piBandwidths, - const int **ppiAlloc, - const int **ppiQReal, - const int **ppiQImag); +static void MSModeCalculation( const int iNumBlocks, + const int iNumBands, + const int *piBandwidths, + float ***pppfReal, + float ***pppfImag, + int *piMSMode, + int *piMSFlags ); + +static void RemoveRMSEnvelope( const int iNumBands, + const int *piBandwidths, + const int iNumGroups, + const int *piGroupLengths, + const int **ppiRMSEnvelope, + float **ppfReal, + float **ppfImag ); + +static void RemoveSign( const int iNumBlocks, + const int iNumCQMFBands, + float **ppfReal, + float **ppfImag, + int **ppiSignReal, + int **ppiSignImag ); + +static int CountCQMFBits( const int iNumGroups, + const int *piGroupLengths, + const int iNumBands, + const int *piBandwidths, + const int **ppiAlloc, + const int **ppiQReal, + const int **ppiQImag ); /* Currently only the number of bands in frame */ -static int WriteHeaderInformation(const int iNumBands, - Bitstream *psBSWrite); - -static int WriteMSInformation(const int iNumBands, - const int iMSMode, - const int *piMSFlags, - Bitstream *psBSWrite); - -static int WriteGroupInformation(const int iChannels, - const int iCommonGrouping, - const int *piNumGroups, - const int **ppiGroupLengths, - Bitstream *psBSWrite); - -static int WriteRMSEnvelope(const int iChannels, - const int *piNumGroups, - const int iNumBands, - const int ***pppiRMSEnvelope, - Bitstream *psBSWrite); - -static int WriteAllocInformation(const int iAllocOffset, - Bitstream *psBSWrite); - -static int WriteCQMFData(const int iNumGroups, - const int *piGroupLengths, - const int iNumBands, - const int *piBandwidths, - const int **ppiAlloc, - const int **ppiSignReal, - const int **ppiSignImag, - const int **ppiQReal, - const int **ppiQImag, - Bitstream *psBSWrite); - -static int ComputeAllocation(const int iChannels, - const int *piNumGroups, - const int **ppiGroupLengths, - const int iNumBands, - const int *piBandwidths, - const float ***pppfReal, - const float ***pppfImag, - const int ***pppiSMR, - const int iAvailableBits, - int *piAllocOffset, - int ***pppiAlloc, - int ***pppiQReal, - int ***pppiQImag); - -static int ComputeAllocationByPass(const int iChannels, - const int *piNumGroups, - const int **ppiGroupLengths, - const int iNumBands, - const int *piBandwidths, - const float ***pppfReal, - const float ***pppfImag, - const int ***pppiSMR, - const int iAllocOffset, - int ***pppiAlloc, - int ***pppiQReal, - int ***pppiQImag); - - - -int EncodeFrame(CQMFEncoder *psCQMFEncoder, - float ***pppfCQMFReal, - float ***pppfCQMFImag, - int *piNumiBytes, - unsigned char *puchData) +static int WriteHeaderInformation( const int iNumBands, + Bitstream *psBSWrite ); + +static int WriteMSInformation( const int iNumBands, + const int iMSMode, + const int *piMSFlags, + Bitstream *psBSWrite ); + +static int WriteGroupInformation( const int iChannels, + const int iCommonGrouping, + const int *piNumGroups, + const int **ppiGroupLengths, + Bitstream *psBSWrite ); + +static int WriteRMSEnvelope( const int iChannels, + const int *piNumGroups, + const int iNumBands, + const int ***pppiRMSEnvelope, + Bitstream *psBSWrite ); + +static int WriteAllocInformation( const int iAllocOffset, + Bitstream *psBSWrite ); + +static int WriteCQMFData( const int iNumGroups, + const int *piGroupLengths, + const int iNumBands, + const int *piBandwidths, + const int **ppiAlloc, + const int **ppiSignReal, + const int **ppiSignImag, + const int **ppiQReal, + const int **ppiQImag, + Bitstream *psBSWrite ); + +static int ComputeAllocation( const int iChannels, + const int *piNumGroups, + const int **ppiGroupLengths, + const int iNumBands, + const int *piBandwidths, + const float ***pppfReal, + const float ***pppfImag, + const int ***pppiSMR, + const int iAvailableBits, + int *piAllocOffset, + int ***pppiAlloc, + int ***pppiQReal, + int ***pppiQImag ); + +static int ComputeAllocationByPass( const int iChannels, + const int *piNumGroups, + const int **ppiGroupLengths, + const int iNumBands, + const int *piBandwidths, + const float ***pppfReal, + const float ***pppfImag, + const int ***pppiSMR, + const int iAllocOffset, + int ***pppiAlloc, + int ***pppiQReal, + int ***pppiQImag ); + + +int EncodeFrame( CQMFEncoder *psCQMFEncoder, + float ***pppfCQMFReal, + float ***pppfCQMFImag, + int *piNumiBytes, + unsigned char *puchData ) { int n; int iAvailableBits; int iBitsWritten; int iCQMFBits; - + iAvailableBits = psCQMFEncoder->iTargetBitsPerFrame; // HCBR for now iBitsWritten = 0; - + /* Do MS calc here */ - if(psCQMFEncoder->iChannels == 2){ - MSModeCalculation(psCQMFEncoder->iNumBlocks, - psCQMFEncoder->iNumBands, - psCQMFEncoder->piBandwidths, - pppfCQMFReal, - pppfCQMFImag, - &psCQMFEncoder->iMSMode, - psCQMFEncoder->piMSFlags); - - if(psCQMFEncoder->iMSMode > 0){ + if ( psCQMFEncoder->iChannels == 2 ) + { + MSModeCalculation( psCQMFEncoder->iNumBlocks, + psCQMFEncoder->iNumBands, + psCQMFEncoder->piBandwidths, + pppfCQMFReal, + pppfCQMFImag, + &psCQMFEncoder->iMSMode, + psCQMFEncoder->piMSFlags ); + + if ( psCQMFEncoder->iMSMode > 0 ) + { psCQMFEncoder->iCommonGrouping = 1; // Make sure common grouping is enabled when MS is in use } } - - + + /* Compute Grouping and RMS Envelopes */ - if(psCQMFEncoder->iChannels == 2 && psCQMFEncoder->iCommonGrouping == 1){ - ComputeEnvelopeGrouping(psCQMFEncoder->psRMSEnvelopeGrouping, - psCQMFEncoder->iChannels, - psCQMFEncoder->iNumBands, - psCQMFEncoder->piBandwidths, - (const float***)pppfCQMFReal, - (const float***)pppfCQMFImag, - 8.0, - 20.0, // Use these to trade off RMS Env bits and quantizer loading - &psCQMFEncoder->piNumGroups[0], - psCQMFEncoder->ppiGroupLengths[0], - psCQMFEncoder->pppiRMSEnvelope); - + if ( psCQMFEncoder->iChannels == 2 && psCQMFEncoder->iCommonGrouping == 1 ) + { + ComputeEnvelopeGrouping( psCQMFEncoder->psRMSEnvelopeGrouping, + psCQMFEncoder->iChannels, + psCQMFEncoder->iNumBands, + psCQMFEncoder->piBandwidths, + (const float ***) pppfCQMFReal, + (const float ***) pppfCQMFImag, + 8.0, + 20.0, // Use these to trade off RMS Env bits and quantizer loading + &psCQMFEncoder->piNumGroups[0], + psCQMFEncoder->ppiGroupLengths[0], + psCQMFEncoder->pppiRMSEnvelope ); + psCQMFEncoder->piNumGroups[1] = psCQMFEncoder->piNumGroups[0]; - for(n = 0; n < psCQMFEncoder->piNumGroups[0]; n ++){ + for ( n = 0; n < psCQMFEncoder->piNumGroups[0]; n++ ) + { psCQMFEncoder->ppiGroupLengths[1][n] = psCQMFEncoder->ppiGroupLengths[0][n]; } } - else{ - for(n = 0; n < psCQMFEncoder->iChannels; n ++){ - ComputeEnvelopeGrouping(psCQMFEncoder->psRMSEnvelopeGrouping, - psCQMFEncoder->iChannels, - psCQMFEncoder->iNumBands, - psCQMFEncoder->piBandwidths, - (const float***)&pppfCQMFReal[n], - (const float***)&pppfCQMFImag[n], - 8.0, - 20.0, // Use these to trade off RMS Env bits and quantizer loading - &psCQMFEncoder->piNumGroups[n], - psCQMFEncoder->ppiGroupLengths[n], - &psCQMFEncoder->pppiRMSEnvelope[n]); + else + { + for ( n = 0; n < psCQMFEncoder->iChannels; n++ ) + { + ComputeEnvelopeGrouping( psCQMFEncoder->psRMSEnvelopeGrouping, + psCQMFEncoder->iChannels, + psCQMFEncoder->iNumBands, + psCQMFEncoder->piBandwidths, + (const float ***) &pppfCQMFReal[n], + (const float ***) &pppfCQMFImag[n], + 8.0, + 20.0, // Use these to trade off RMS Env bits and quantizer loading + &psCQMFEncoder->piNumGroups[n], + psCQMFEncoder->ppiGroupLengths[n], + &psCQMFEncoder->pppiRMSEnvelope[n] ); } } - - for(n = 0; n < psCQMFEncoder->iChannels; n ++){ - RemoveSign(psCQMFEncoder->iNumBlocks, - CQMF_BANDS, - pppfCQMFReal[n], - pppfCQMFImag[n], - psCQMFEncoder->pppiCQMFSignReal[n], - psCQMFEncoder->pppiCQMFSignImag[n]); - - RemoveRMSEnvelope(psCQMFEncoder->iNumBands, - psCQMFEncoder->piBandwidths, - psCQMFEncoder->piNumGroups[n], - (const int*)psCQMFEncoder->ppiGroupLengths[n], - (const int **)psCQMFEncoder->pppiRMSEnvelope[n], - pppfCQMFReal[n], - pppfCQMFImag[n]); + + for ( n = 0; n < psCQMFEncoder->iChannels; n++ ) + { + RemoveSign( psCQMFEncoder->iNumBlocks, + CQMF_BANDS, + pppfCQMFReal[n], + pppfCQMFImag[n], + psCQMFEncoder->pppiCQMFSignReal[n], + psCQMFEncoder->pppiCQMFSignImag[n] ); + + RemoveRMSEnvelope( psCQMFEncoder->iNumBands, + psCQMFEncoder->piBandwidths, + psCQMFEncoder->piNumGroups[n], + (const int *) psCQMFEncoder->ppiGroupLengths[n], + (const int **) psCQMFEncoder->pppiRMSEnvelope[n], + pppfCQMFReal[n], + pppfCQMFImag[n] ); } - - BSFlushBuffer(psCQMFEncoder->psBSWrite); - iBitsWritten += WriteHeaderInformation(psCQMFEncoder->iNumBands, - psCQMFEncoder->psBSWrite); - - if(psCQMFEncoder->iChannels == 2){ - iBitsWritten += WriteMSInformation(psCQMFEncoder->iNumBands, - psCQMFEncoder->iMSMode, - (const int*)psCQMFEncoder->piMSFlags, - psCQMFEncoder->psBSWrite); + + BSFlushBuffer( psCQMFEncoder->psBSWrite ); + iBitsWritten += WriteHeaderInformation( psCQMFEncoder->iNumBands, + psCQMFEncoder->psBSWrite ); + + if ( psCQMFEncoder->iChannels == 2 ) + { + iBitsWritten += WriteMSInformation( psCQMFEncoder->iNumBands, + psCQMFEncoder->iMSMode, + (const int *) psCQMFEncoder->piMSFlags, + psCQMFEncoder->psBSWrite ); } - - iBitsWritten += WriteGroupInformation(psCQMFEncoder->iChannels, - psCQMFEncoder->iCommonGrouping, - (const int*)psCQMFEncoder->piNumGroups, - (const int**)psCQMFEncoder->ppiGroupLengths, - psCQMFEncoder->psBSWrite); - - iBitsWritten += WriteRMSEnvelope(psCQMFEncoder->iChannels, - (const int*)psCQMFEncoder->piNumGroups, - psCQMFEncoder->iNumBands, - (const int***)psCQMFEncoder->pppiRMSEnvelope, - psCQMFEncoder->psBSWrite); - - for(n = 0; n < psCQMFEncoder->iChannels; n ++){ // This will be updated to support multiple sample rates + + iBitsWritten += WriteGroupInformation( psCQMFEncoder->iChannels, + psCQMFEncoder->iCommonGrouping, + (const int *) psCQMFEncoder->piNumGroups, + (const int **) psCQMFEncoder->ppiGroupLengths, + psCQMFEncoder->psBSWrite ); + + iBitsWritten += WriteRMSEnvelope( psCQMFEncoder->iChannels, + (const int *) psCQMFEncoder->piNumGroups, + psCQMFEncoder->iNumBands, + (const int ***) psCQMFEncoder->pppiRMSEnvelope, + psCQMFEncoder->psBSWrite ); + + for ( n = 0; n < psCQMFEncoder->iChannels; n++ ) + { // This will be updated to support multiple sample rates int k; - for(k = 0; k < psCQMFEncoder->piNumGroups[n]; k ++){ - PerceptualModel(psCQMFEncoder->iNumBands, - psCQMFEncoder->pppiRMSEnvelope[n][k], - psCQMFEncoder->pppiExcitation[n][k], - psCQMFEncoder->pppiSMR[n][k]); - + for ( k = 0; k < psCQMFEncoder->piNumGroups[n]; k++ ) + { + PerceptualModel( psCQMFEncoder->iNumBands, + psCQMFEncoder->pppiRMSEnvelope[n][k], + psCQMFEncoder->pppiExcitation[n][k], + psCQMFEncoder->pppiSMR[n][k] ); } } - + iAvailableBits -= iBitsWritten; - iCQMFBits = ComputeAllocation(psCQMFEncoder->iChannels, - (const int*)psCQMFEncoder->piNumGroups, - (const int**)psCQMFEncoder->ppiGroupLengths, - psCQMFEncoder->iNumBands, - psCQMFEncoder->piBandwidths, - (const float***)pppfCQMFReal, - (const float***)pppfCQMFImag, - (const int***)psCQMFEncoder->pppiSMR, - iAvailableBits, - &psCQMFEncoder->iAllocOffset, - psCQMFEncoder->pppiAlloc, - psCQMFEncoder->pppiQCQMFReal, - psCQMFEncoder->pppiQCQMFImag); - - iBitsWritten += WriteAllocInformation(psCQMFEncoder->iAllocOffset,psCQMFEncoder->psBSWrite); - - for(n = 0; n < psCQMFEncoder->iChannels; n ++){ - iBitsWritten += WriteCQMFData(psCQMFEncoder->piNumGroups[n], - (const int*)psCQMFEncoder->ppiGroupLengths[n], - psCQMFEncoder->iNumBands, - psCQMFEncoder->piBandwidths, - (const int**)psCQMFEncoder->pppiAlloc[n], - (const int**)psCQMFEncoder->pppiCQMFSignReal[n], - (const int**)psCQMFEncoder->pppiCQMFSignImag[n], - (const int**)psCQMFEncoder->pppiQCQMFReal[n], - (const int**)psCQMFEncoder->pppiQCQMFImag[n], - psCQMFEncoder->psBSWrite); + iCQMFBits = ComputeAllocation( psCQMFEncoder->iChannels, + (const int *) psCQMFEncoder->piNumGroups, + (const int **) psCQMFEncoder->ppiGroupLengths, + psCQMFEncoder->iNumBands, + psCQMFEncoder->piBandwidths, + (const float ***) pppfCQMFReal, + (const float ***) pppfCQMFImag, + (const int ***) psCQMFEncoder->pppiSMR, + iAvailableBits, + &psCQMFEncoder->iAllocOffset, + psCQMFEncoder->pppiAlloc, + psCQMFEncoder->pppiQCQMFReal, + psCQMFEncoder->pppiQCQMFImag ); + + iBitsWritten += WriteAllocInformation( psCQMFEncoder->iAllocOffset, psCQMFEncoder->psBSWrite ); + + for ( n = 0; n < psCQMFEncoder->iChannels; n++ ) + { + iBitsWritten += WriteCQMFData( psCQMFEncoder->piNumGroups[n], + (const int *) psCQMFEncoder->ppiGroupLengths[n], + psCQMFEncoder->iNumBands, + psCQMFEncoder->piBandwidths, + (const int **) psCQMFEncoder->pppiAlloc[n], + (const int **) psCQMFEncoder->pppiCQMFSignReal[n], + (const int **) psCQMFEncoder->pppiCQMFSignImag[n], + (const int **) psCQMFEncoder->pppiQCQMFReal[n], + (const int **) psCQMFEncoder->pppiQCQMFImag[n], + psCQMFEncoder->psBSWrite ); } - - BSByteAlign(psCQMFEncoder->psBSWrite); - *piNumiBytes = BSGetByteCount(psCQMFEncoder->psBSWrite); - BSGetBytes(psCQMFEncoder->psBSWrite,puchData,*piNumiBytes); - - //printf("Bits Written %d\n",iBitsWritten); - + + BSByteAlign( psCQMFEncoder->psBSWrite ); + *piNumiBytes = BSGetByteCount( psCQMFEncoder->psBSWrite ); + BSGetBytes( psCQMFEncoder->psBSWrite, puchData, *piNumiBytes ); + + // printf("Bits Written %d\n",iBitsWritten); + return psCQMFEncoder->iLastError; } -static void MSModeCalculation(const int iNumBlocks, - const int iNumBands, - const int *piBandwidths, - float ***pppfReal, - float ***pppfImag, - int *piMSMode, - int *piMSFlags) +static void MSModeCalculation( const int iNumBlocks, + const int iNumBands, + const int *piBandwidths, + float ***pppfReal, + float ***pppfImag, + int *piMSMode, + int *piMSFlags ) { int b; int iFBOffset; int iNumMSBands; - + *piMSMode = 0; iFBOffset = 0; iNumMSBands = 0; - for(b = 0; b < iNumBands; b ++){ + for ( b = 0; b < iNumBands; b++ ) + { int n; float fLeftEnergy; float fRightEnergy; @@ -524,163 +569,190 @@ static void MSModeCalculation(const int iNumBlocks, float fSideEnergy; float fLRRatio; float fMSRatio; - + fLeftEnergy = 0.0; fRightEnergy = 0.0; fMidEnergy = 0.0; fSideEnergy = 0.0; - - for(n = 0; n < piBandwidths[b]; n ++){ + + for ( n = 0; n < piBandwidths[b]; n++ ) + { int k; - for(k = 0; k < iNumBlocks; k ++){ + for ( k = 0; k < iNumBlocks; k++ ) + { float fMidReal; float fMidImag; float fSideReal; float fSideImag; - - fMidReal = 0.5f * (pppfReal[0][k][iFBOffset] + pppfReal[1][k][iFBOffset]); - fMidImag = 0.5f * (pppfImag[0][k][iFBOffset] + pppfImag[1][k][iFBOffset]); - fSideReal = 0.5f * (pppfReal[0][k][iFBOffset] - pppfReal[1][k][iFBOffset]); - fSideImag = 0.5f * (pppfImag[0][k][iFBOffset] - pppfImag[1][k][iFBOffset]); - - fLeftEnergy += (pppfReal[0][k][iFBOffset] * pppfReal[0][k][iFBOffset] + pppfImag[0][k][iFBOffset] * pppfImag[0][k][iFBOffset]); - fRightEnergy += (pppfReal[1][k][iFBOffset] * pppfReal[1][k][iFBOffset] + pppfImag[1][k][iFBOffset] * pppfImag[1][k][iFBOffset]); - fMidEnergy += (fMidReal * fMidReal + fMidImag * fMidImag); - fSideEnergy += (fSideReal * fSideReal + fSideImag * fSideImag); + + fMidReal = 0.5f * ( pppfReal[0][k][iFBOffset] + pppfReal[1][k][iFBOffset] ); + fMidImag = 0.5f * ( pppfImag[0][k][iFBOffset] + pppfImag[1][k][iFBOffset] ); + fSideReal = 0.5f * ( pppfReal[0][k][iFBOffset] - pppfReal[1][k][iFBOffset] ); + fSideImag = 0.5f * ( pppfImag[0][k][iFBOffset] - pppfImag[1][k][iFBOffset] ); + + fLeftEnergy += ( pppfReal[0][k][iFBOffset] * pppfReal[0][k][iFBOffset] + pppfImag[0][k][iFBOffset] * pppfImag[0][k][iFBOffset] ); + fRightEnergy += ( pppfReal[1][k][iFBOffset] * pppfReal[1][k][iFBOffset] + pppfImag[1][k][iFBOffset] * pppfImag[1][k][iFBOffset] ); + fMidEnergy += ( fMidReal * fMidReal + fMidImag * fMidImag ); + fSideEnergy += ( fSideReal * fSideReal + fSideImag * fSideImag ); } - - iFBOffset ++; + + iFBOffset++; } - - fLeftEnergy = log10f(fLeftEnergy + 1e-12f); - fRightEnergy = log10f(fRightEnergy + 1e-12f); - fMidEnergy = log10f(fMidEnergy + 1e-12f); - fSideEnergy = log10f(fSideEnergy + 1e-12f); - - if(fLeftEnergy > fRightEnergy){ + + fLeftEnergy = log10f( fLeftEnergy + 1e-12f ); + fRightEnergy = log10f( fRightEnergy + 1e-12f ); + fMidEnergy = log10f( fMidEnergy + 1e-12f ); + fSideEnergy = log10f( fSideEnergy + 1e-12f ); + + if ( fLeftEnergy > fRightEnergy ) + { fLRRatio = fLeftEnergy - fRightEnergy; } - else{ + else + { fLRRatio = fRightEnergy - fLeftEnergy; } - - if(fMidEnergy > fSideEnergy){ + + if ( fMidEnergy > fSideEnergy ) + { fMSRatio = fMidEnergy - fSideEnergy; } - else{ + else + { fMSRatio = fSideEnergy - fMidEnergy; } - - if(fMSRatio > fLRRatio){ - iNumMSBands ++; + + if ( fMSRatio > fLRRatio ) + { + iNumMSBands++; piMSFlags[b] = 1; } - else{ + else + { piMSFlags[b] = 0; } } - - if(iNumMSBands == iNumBands){ + + if ( iNumMSBands == iNumBands ) + { *piMSMode = 1; } - else if(iNumMSBands > 0){ + else if ( iNumMSBands > 0 ) + { *piMSMode = 2; } - else{ + else + { *piMSMode = 0; } - - if(*piMSMode > 0){ + + if ( *piMSMode > 0 ) + { iFBOffset = 0; - for(b = 0; b < iNumBands; b ++){ - if(piMSFlags[b] == 1){ + for ( b = 0; b < iNumBands; b++ ) + { + if ( piMSFlags[b] == 1 ) + { int n; - for(n = 0; n < piBandwidths[b]; n ++){ + for ( n = 0; n < piBandwidths[b]; n++ ) + { int k; - for(k = 0; k < iNumBlocks; k ++){ + for ( k = 0; k < iNumBlocks; k++ ) + { float fMidReal; float fMidImag; float fSideReal; float fSideImag; - - fMidReal = 0.5f * (pppfReal[0][k][iFBOffset] + pppfReal[1][k][iFBOffset]); - fMidImag = 0.5f * (pppfImag[0][k][iFBOffset] + pppfImag[1][k][iFBOffset]); - fSideReal = 0.5f * (pppfReal[0][k][iFBOffset] - pppfReal[1][k][iFBOffset]); - fSideImag = 0.5f * (pppfImag[0][k][iFBOffset] - pppfImag[1][k][iFBOffset]); - + + fMidReal = 0.5f * ( pppfReal[0][k][iFBOffset] + pppfReal[1][k][iFBOffset] ); + fMidImag = 0.5f * ( pppfImag[0][k][iFBOffset] + pppfImag[1][k][iFBOffset] ); + fSideReal = 0.5f * ( pppfReal[0][k][iFBOffset] - pppfReal[1][k][iFBOffset] ); + fSideImag = 0.5f * ( pppfImag[0][k][iFBOffset] - pppfImag[1][k][iFBOffset] ); + pppfReal[0][k][iFBOffset] = fMidReal; pppfReal[1][k][iFBOffset] = fSideReal; pppfImag[0][k][iFBOffset] = fMidImag; pppfImag[1][k][iFBOffset] = fSideImag; } - iFBOffset ++; + iFBOffset++; } } - else{ + else + { iFBOffset += piBandwidths[b]; } } } } -static void RemoveRMSEnvelope(const int iNumBands, - const int *piBandwidths, - const int iNumGroups, - const int *piGroupLengths, - const int **ppiRMSEnvelope, - float **ppfReal, - float **ppfImag) +static void RemoveRMSEnvelope( const int iNumBands, + const int *piBandwidths, + const int iNumGroups, + const int *piGroupLengths, + const int **ppiRMSEnvelope, + float **ppfReal, + float **ppfImag ) { int n; int iBlockOffset; - + iBlockOffset = 0; - for(n = 0; n < iNumGroups; n ++){ + for ( n = 0; n < iNumGroups; n++ ) + { int k; - for(k = 0; k < piGroupLengths[n]; k ++){ + for ( k = 0; k < piGroupLengths[n]; k++ ) + { int b; int iFBOffset; iFBOffset = 0; - for(b = 0; b < iNumBands; b ++){ - int m; - int iRMSEnv; + for ( b = 0; b < iNumBands; b++ ) + { + int m; + int iRMSEnv; float fGain; - + iRMSEnv = ppiRMSEnvelope[n][b]; fGain = c_afRMSEnvReconstructTable[ENV_RECONSTRUCT_TABLE_CENTER - iRMSEnv]; - for(m = 0; m < piBandwidths[b]; m ++){ + for ( m = 0; m < piBandwidths[b]; m++ ) + { ppfReal[iBlockOffset][iFBOffset] *= fGain; ppfImag[iBlockOffset][iFBOffset] *= fGain; - iFBOffset ++; + iFBOffset++; } } - iBlockOffset ++; + iBlockOffset++; } } } -static void RemoveSign(const int iNumBlocks, - const int iNumCQMFBands, - float **ppfReal, - float **ppfImag, - int **ppiSignReal, - int **ppiSignImag) +static void RemoveSign( const int iNumBlocks, + const int iNumCQMFBands, + float **ppfReal, + float **ppfImag, + int **ppiSignReal, + int **ppiSignImag ) { int n; - for(n = 0; n < iNumBlocks; n ++){ + for ( n = 0; n < iNumBlocks; n++ ) + { int b; - for(b = 0; b < iNumCQMFBands; b ++){ - if(ppfReal[n][b] > 0.0){ + for ( b = 0; b < iNumCQMFBands; b++ ) + { + if ( ppfReal[n][b] > 0.0 ) + { ppiSignReal[n][b] = 0; } - else{ + else + { ppfReal[n][b] = -ppfReal[n][b]; ppiSignReal[n][b] = 1; } - if(ppfImag[n][b] > 0.0){ + if ( ppfImag[n][b] > 0.0 ) + { ppiSignImag[n][b] = 0; } - else{ + else + { ppfImag[n][b] = -ppfImag[n][b]; ppiSignImag[n][b] = 1; } @@ -689,538 +761,587 @@ static void RemoveSign(const int iNumBlocks, } /* Rename */ -static void QuantizeSpectrum(const int iNumGroups, - const int *piGroupLengths, - const int iNumBands, - const int *piBandwidths, - const int **ppiAlloc, - const float **ppfReal, - const float **ppfImag, - int **ppiQReal, - int **ppiQImag) +static void QuantizeCQMFSpectrum( const int iNumGroups, + const int *piGroupLengths, + const int iNumBands, + const int *piBandwidths, + const int **ppiAlloc, + const float **ppfReal, + const float **ppfImag, + int **ppiQReal, + int **ppiQImag ) { int n; int iBlockOffest; - + iBlockOffest = 0; - for(n = 0; n < iNumGroups; n ++){ + for ( n = 0; n < iNumGroups; n++ ) + { int k; - for(k = 0; k < piGroupLengths[n]; k ++){ + for ( k = 0; k < piGroupLengths[n]; k++ ) + { int b; int iFBOffset; - + iFBOffset = 0; - for(b = 0; b < iNumBands; b ++){ - int m; - int iAlloc; - int iMaxQuantVal; - float fSCFGain; - + for ( b = 0; b < iNumBands; b++ ) + { + int m; + int iAlloc; + int iMaxQuantVal; + float fSCFGain; + iAlloc = ppiAlloc[n][b]; fSCFGain = c_afScaleFactor[iAlloc]; iMaxQuantVal = c_aiQuantMaxValues[iAlloc]; - for(m = 0; m < piBandwidths[b]; m ++){ + for ( m = 0; m < piBandwidths[b]; m++ ) + { int iQuantValue; - - iQuantValue = (int)(fSCFGain * ppfReal[iBlockOffest][iFBOffset] + 0.5); + + iQuantValue = (int) ( fSCFGain * ppfReal[iBlockOffest][iFBOffset] + 0.5 ); #ifdef _DEBUG_VERBOSE - if(iQuantValue > iMaxQuantVal){ - printf("Value out of range %d\t%d\t%d\n",iAlloc,iQuantValue,iMaxQuantVal); + if ( iQuantValue > iMaxQuantVal ) + { + printf( "Value out of range %d\t%d\t%d\n", iAlloc, iQuantValue, iMaxQuantVal ); iQuantValue = iMaxQuantVal; } #else - iQuantValue = (iQuantValue < iMaxQuantVal) ? iQuantValue : iMaxQuantVal; + iQuantValue = ( iQuantValue < iMaxQuantVal ) ? iQuantValue : iMaxQuantVal; #endif ppiQReal[iBlockOffest][iFBOffset] = iQuantValue; - - iQuantValue = (int)(fSCFGain * ppfImag[iBlockOffest][iFBOffset] + 0.5); + + iQuantValue = (int) ( fSCFGain * ppfImag[iBlockOffest][iFBOffset] + 0.5 ); #ifdef _DEBUG_VERBOSE - if(iQuantValue > iMaxQuantVal){ - printf("Value out of range %d\t%d\t%d\n",iAlloc,iQuantValue,iMaxQuantVal); + if ( iQuantValue > iMaxQuantVal ) + { + printf( "Value out of range %d\t%d\t%d\n", iAlloc, iQuantValue, iMaxQuantVal ); iQuantValue = iMaxQuantVal; } #else - iQuantValue = (iQuantValue < iMaxQuantVal) ? iQuantValue : iMaxQuantVal; + iQuantValue = ( iQuantValue < iMaxQuantVal ) ? iQuantValue : iMaxQuantVal; #endif ppiQImag[iBlockOffest][iFBOffset] = iQuantValue; - - iFBOffset ++; + + iFBOffset++; } - } - - iBlockOffest ++; + + iBlockOffest++; } } } -static int CountCQMFBits(const int iNumGroups, - const int *piGroupLengths, - const int iNumBands, - const int *piBandwidths, - const int **ppiAlloc, - const int **ppiQReal, - const int **ppiQImag) +static int CountCQMFBits( const int iNumGroups, + const int *piGroupLengths, + const int iNumBands, + const int *piBandwidths, + const int **ppiAlloc, + const int **ppiQReal, + const int **ppiQImag ) { int n; int iBits; int iBlockOffest; - + iBits = 0; iBlockOffest = 0; - for(n = 0; n < iNumGroups; n ++){ + for ( n = 0; n < iNumGroups; n++ ) + { int k; - for(k = 0; k < piGroupLengths[n]; k ++){ + for ( k = 0; k < piGroupLengths[n]; k++ ) + { int b; int iFBOffset; - + iFBOffset = 0; - for(b = 0; b < iNumBands; b ++){ - int m; - int iAlloc; - int iHuffDim; - int iHuffMod; - + for ( b = 0; b < iNumBands; b++ ) + { + int m; + int iAlloc; + int iHuffDim; + int iHuffMod; + iAlloc = ppiAlloc[n][b]; - + iHuffDim = c_aiHuffmanDim[iAlloc]; iHuffMod = c_aiHuffmanMod[iAlloc]; - - - if(iAlloc > 0){ - const unsigned int (*pauiHuffmanTable)[2] = NULL; //const? - - pauiHuffmanTable = GetHuffEncTable(iAlloc); - for(m = 0; m < piBandwidths[b]; m ++){ + + + if ( iAlloc > 0 ) + { + const unsigned int( *pauiHuffmanTable )[2] = NULL; // const? + + pauiHuffmanTable = GetHuffEncTable( iAlloc ); + for ( m = 0; m < piBandwidths[b]; m++ ) + { int iQuantValue1; int iQuantValue2; - + iQuantValue1 = ppiQReal[iBlockOffest][iFBOffset]; iQuantValue2 = ppiQImag[iBlockOffest][iFBOffset]; - - iBits += (iQuantValue1 > 0) ? 1 : 0; //Sign bit for vals > 0 - iBits += (iQuantValue2 > 0) ? 1 : 0; //Sign bit for vals > 0 - if(iHuffDim == 2){ + + iBits += ( iQuantValue1 > 0 ) ? 1 : 0; // Sign bit for vals > 0 + iBits += ( iQuantValue2 > 0 ) ? 1 : 0; // Sign bit for vals > 0 + if ( iHuffDim == 2 ) + { iQuantValue1 *= iHuffMod; iQuantValue1 += iQuantValue2; iBits += pauiHuffmanTable[iQuantValue1][0]; } - else{ + else + { iBits += pauiHuffmanTable[iQuantValue1][0]; iBits += pauiHuffmanTable[iQuantValue2][0]; } - - iFBOffset ++; + + iFBOffset++; } } - else{ + else + { iFBOffset += piBandwidths[b]; } - } - - iBlockOffest ++; + + iBlockOffest++; } } - + return iBits; } /* Currently only the number of bands in frame */ -static int WriteHeaderInformation(const int iNumBands, - Bitstream *psBSWrite) +static int WriteHeaderInformation( const int iNumBands, + Bitstream *psBSWrite ) { int iBitsWritten; - + iBitsWritten = 0; - BSPutBits(psBSWrite,iNumBands,5); + BSPutBits( psBSWrite, iNumBands, 5 ); iBitsWritten += 5; - + return iBitsWritten; } -static int WriteMSInformation(const int iNumBands, - const int iMSMode, - const int *piMSFlags, - Bitstream *psBSWrite) +static int WriteMSInformation( const int iNumBands, + const int iMSMode, + const int *piMSFlags, + Bitstream *psBSWrite ) { int iBitsWritten; - + iBitsWritten = 0; - - BSPutBits(psBSWrite,iMSMode,2); + + BSPutBits( psBSWrite, iMSMode, 2 ); iBitsWritten += 2; - if(iMSMode == 2){ + if ( iMSMode == 2 ) + { int n; - for(n = 0; n < iNumBands; n ++){ - BSPutBits(psBSWrite,piMSFlags[n],1); + for ( n = 0; n < iNumBands; n++ ) + { + BSPutBits( psBSWrite, piMSFlags[n], 1 ); iBitsWritten += 1; } } - + return iBitsWritten; } -static int WriteGroupInformation(const int iChannels, - const int iCommonGrouping, - const int *piNumGroups, - const int **ppiGroupLengths, - Bitstream *psBSWrite) +static int WriteGroupInformation( const int iChannels, + const int iCommonGrouping, + const int *piNumGroups, + const int **ppiGroupLengths, + Bitstream *psBSWrite ) { int iBitsWritten; - + iBitsWritten = 0; - if(iChannels == 2 && iCommonGrouping == 1){ + if ( iChannels == 2 && iCommonGrouping == 1 ) + { int k; - - BSPutBits(psBSWrite,iCommonGrouping,1); + + BSPutBits( psBSWrite, iCommonGrouping, 1 ); iBitsWritten += 1; - - BSPutBits(psBSWrite,(piNumGroups[0] - 1),4); + + BSPutBits( psBSWrite, ( piNumGroups[0] - 1 ), 4 ); iBitsWritten += 4; - - for(k = 0; k < piNumGroups[0]; k ++){ - BSPutBits(psBSWrite,(ppiGroupLengths[0][k] - 1),4); + + for ( k = 0; k < piNumGroups[0]; k++ ) + { + BSPutBits( psBSWrite, ( ppiGroupLengths[0][k] - 1 ), 4 ); iBitsWritten += 4; } } - else if(iChannels == 2){ + else if ( iChannels == 2 ) + { int n; - - BSPutBits(psBSWrite,iCommonGrouping,1); + + BSPutBits( psBSWrite, iCommonGrouping, 1 ); iBitsWritten += 1; - - for(n = 0; n < iChannels; n ++){ + + for ( n = 0; n < iChannels; n++ ) + { int k; - - BSPutBits(psBSWrite,(piNumGroups[n] - 1),4); + + BSPutBits( psBSWrite, ( piNumGroups[n] - 1 ), 4 ); iBitsWritten += 4; - - for(k = 0; k < piNumGroups[n]; k ++){ - BSPutBits(psBSWrite,(ppiGroupLengths[n][k] - 1),4); + + for ( k = 0; k < piNumGroups[n]; k++ ) + { + BSPutBits( psBSWrite, ( ppiGroupLengths[n][k] - 1 ), 4 ); iBitsWritten += 4; } } } - else{ + else + { int n; - - for(n = 0; n < iChannels; n ++){ + + for ( n = 0; n < iChannels; n++ ) + { int k; - - BSPutBits(psBSWrite,(piNumGroups[n] - 1),4); + + BSPutBits( psBSWrite, ( piNumGroups[n] - 1 ), 4 ); iBitsWritten += 4; - - for(k = 0; k < piNumGroups[n]; k ++){ - BSPutBits(psBSWrite,(ppiGroupLengths[n][k] - 1),4); + + for ( k = 0; k < piNumGroups[n]; k++ ) + { + BSPutBits( psBSWrite, ( ppiGroupLengths[n][k] - 1 ), 4 ); iBitsWritten += 4; } } } - + return iBitsWritten; } -static int WriteRMSEnvelope(const int iChannels, - const int *piNumGroups, - const int iNumBands, - const int ***pppiRMSEnvelope, - Bitstream *psBSWrite) +static int WriteRMSEnvelope( const int iChannels, + const int *piNumGroups, + const int iNumBands, + const int ***pppiRMSEnvelope, + Bitstream *psBSWrite ) { int n; int iBitsWritten; - + iBitsWritten = 0; - for(n = 0; n < iChannels; n ++){ + for ( n = 0; n < iChannels; n++ ) + { int k; - for(k = 0; k < piNumGroups[n]; k ++){ + for ( k = 0; k < piNumGroups[n]; k++ ) + { int b; int iLastRMSVal; - + iLastRMSVal = pppiRMSEnvelope[n][k][0]; - iLastRMSVal = (iLastRMSVal > ENV_MIN) ? iLastRMSVal : ENV_MIN; - iLastRMSVal = (iLastRMSVal < ENV_MAX) ? iLastRMSVal : ENV_MAX; - BSPutBits(psBSWrite,(iLastRMSVal - ENV_MIN),ENV0_BITS); + iLastRMSVal = ( iLastRMSVal > ENV_MIN ) ? iLastRMSVal : ENV_MIN; + iLastRMSVal = ( iLastRMSVal < ENV_MAX ) ? iLastRMSVal : ENV_MAX; + BSPutBits( psBSWrite, ( iLastRMSVal - ENV_MIN ), ENV0_BITS ); iBitsWritten += ENV0_BITS; - - for(b = 1; b < iNumBands; b ++){ + + for ( b = 1; b < iNumBands; b++ ) + { int iDelta; - + iDelta = pppiRMSEnvelope[n][k][b] - iLastRMSVal; - iDelta = (iDelta > ENV_DELTA_MIN) ? iDelta : ENV_DELTA_MIN; - iDelta = (iDelta < ENV_DELTA_MAX) ? iDelta : ENV_DELTA_MAX; + iDelta = ( iDelta > ENV_DELTA_MIN ) ? iDelta : ENV_DELTA_MIN; + iDelta = ( iDelta < ENV_DELTA_MAX ) ? iDelta : ENV_DELTA_MAX; iDelta -= ENV_DELTA_MIN; - - BSPutBits(psBSWrite,c_aaiRMSEnvHuffEnc[iDelta][1],c_aaiRMSEnvHuffEnc[iDelta][0]); + + BSPutBits( psBSWrite, c_aaiRMSEnvHuffEnc[iDelta][1], c_aaiRMSEnvHuffEnc[iDelta][0] ); iBitsWritten += c_aaiRMSEnvHuffEnc[iDelta][0]; - + iLastRMSVal = pppiRMSEnvelope[n][k][b]; } } } - + return iBitsWritten; } -static int WriteAllocInformation(const int iAllocOffset, - Bitstream *psBSWrite) +static int WriteAllocInformation( const int iAllocOffset, + Bitstream *psBSWrite ) { int iBitsWritten; - + iBitsWritten = 0; - - if(iAllocOffset < MIN_ALLOC_OFFSET || iAllocOffset > MAX_ALLOC_OFFSET){ - printf("Serious error\n"); + + if ( iAllocOffset < MIN_ALLOC_OFFSET || iAllocOffset > MAX_ALLOC_OFFSET ) + { + printf( "Serious error\n" ); } - - BSPutBits(psBSWrite,(iAllocOffset - MIN_ALLOC_OFFSET),ALLOC_OFFSET_BITS); + + BSPutBits( psBSWrite, ( iAllocOffset - MIN_ALLOC_OFFSET ), ALLOC_OFFSET_BITS ); iBitsWritten += ALLOC_OFFSET_BITS; - + return iBitsWritten; } -static int WriteCQMFData(const int iNumGroups, - const int *piGroupLengths, - const int iNumBands, - const int *piBandwidths, - const int **ppiAlloc, - const int **ppiSignReal, - const int **ppiSignImag, - const int **ppiQReal, - const int **ppiQImag, - Bitstream *psBSWrite) +static int WriteCQMFData( const int iNumGroups, + const int *piGroupLengths, + const int iNumBands, + const int *piBandwidths, + const int **ppiAlloc, + const int **ppiSignReal, + const int **ppiSignImag, + const int **ppiQReal, + const int **ppiQImag, + Bitstream *psBSWrite ) { int n; int iBitsWritten; int iBlockOffest; - + iBitsWritten = 0; iBlockOffest = 0; - - for(n = 0; n < iNumGroups; n ++){ + + for ( n = 0; n < iNumGroups; n++ ) + { int k; - for(k = 0; k < piGroupLengths[n]; k ++){ + for ( k = 0; k < piGroupLengths[n]; k++ ) + { int b; int iFBOffset; - + iFBOffset = 0; - for(b = 0; b < iNumBands; b ++){ - int m; - int iAlloc; - int iHuffDim; - int iHuffMod; - + for ( b = 0; b < iNumBands; b++ ) + { + int m; + int iAlloc; + int iHuffDim; + int iHuffMod; + iAlloc = ppiAlloc[n][b]; - + iHuffDim = c_aiHuffmanDim[iAlloc]; iHuffMod = c_aiHuffmanMod[iAlloc]; - - - if(iAlloc > 0){ - const unsigned int (*pauiHuffmanTable)[2] = NULL; //const? - - pauiHuffmanTable = GetHuffEncTable(iAlloc); - for(m = 0; m < piBandwidths[b]; m ++){ + + + if ( iAlloc > 0 ) + { + const unsigned int( *pauiHuffmanTable )[2] = NULL; // const? + + pauiHuffmanTable = GetHuffEncTable( iAlloc ); + for ( m = 0; m < piBandwidths[b]; m++ ) + { int iQuantValue1; int iQuantValue2; - + iQuantValue1 = ppiQReal[iBlockOffest][iFBOffset]; iQuantValue2 = ppiQImag[iBlockOffest][iFBOffset]; - - - if(iHuffDim == 2){ + + + if ( iHuffDim == 2 ) + { int iSymbol; iSymbol = iQuantValue1; iSymbol *= iHuffMod; iSymbol += iQuantValue2; - BSPutBits(psBSWrite, pauiHuffmanTable[iSymbol][1], pauiHuffmanTable[iSymbol][0]); + BSPutBits( psBSWrite, pauiHuffmanTable[iSymbol][1], pauiHuffmanTable[iSymbol][0] ); iBitsWritten += pauiHuffmanTable[iSymbol][0]; } - else{ - BSPutBits(psBSWrite, pauiHuffmanTable[iQuantValue1][1], pauiHuffmanTable[iQuantValue1][0]); + else + { + BSPutBits( psBSWrite, pauiHuffmanTable[iQuantValue1][1], pauiHuffmanTable[iQuantValue1][0] ); iBitsWritten += pauiHuffmanTable[iQuantValue1][0]; - BSPutBits(psBSWrite, pauiHuffmanTable[iQuantValue2][1], pauiHuffmanTable[iQuantValue2][0]); + BSPutBits( psBSWrite, pauiHuffmanTable[iQuantValue2][1], pauiHuffmanTable[iQuantValue2][0] ); iBitsWritten += pauiHuffmanTable[iQuantValue2][0]; } - - if(iQuantValue1 > 0){ - BSPutBits(psBSWrite,ppiSignReal[iBlockOffest][iFBOffset],1); + + if ( iQuantValue1 > 0 ) + { + BSPutBits( psBSWrite, ppiSignReal[iBlockOffest][iFBOffset], 1 ); iBitsWritten += 1; } - if(iQuantValue2 > 0){ - BSPutBits(psBSWrite,ppiSignImag[iBlockOffest][iFBOffset],1); + if ( iQuantValue2 > 0 ) + { + BSPutBits( psBSWrite, ppiSignImag[iBlockOffest][iFBOffset], 1 ); iBitsWritten += 1; } - - iFBOffset ++; + + iFBOffset++; } } - else{ + else + { iFBOffset += piBandwidths[b]; } - } - - iBlockOffest ++; + + iBlockOffest++; } } - + return iBitsWritten; } -static int ComputeAllocation(const int iChannels, - const int *piNumGroups, - const int **ppiGroupLengths, - const int iNumBands, - const int *piBandwidths, - const float ***pppfReal, - const float ***pppfImag, - const int ***pppiSMR, - const int iAvailableBits, - int *piAllocOffset, - int ***pppiAlloc, - int ***pppiQReal, - int ***pppiQImag) +static int ComputeAllocation( const int iChannels, + const int *piNumGroups, + const int **ppiGroupLengths, + const int iNumBands, + const int *piBandwidths, + const float ***pppfReal, + const float ***pppfImag, + const int ***pppiSMR, + const int iAvailableBits, + int *piAllocOffset, + int ***pppiAlloc, + int ***pppiQReal, + int ***pppiQImag ) { int iBitsUsed; int iDone; int iDelta; - + iBitsUsed = ALLOC_OFFSET_BITS; // Bits used for Alloc Offset - + iDone = 0; iDelta = -MIN_ALLOC_OFFSET; *piAllocOffset = 0; - while(iDone == 0){ + while ( iDone == 0 ) + { int n; int iLimitAllocOffset; iBitsUsed = ALLOC_OFFSET_BITS; - + iLimitAllocOffset = *piAllocOffset; - iLimitAllocOffset = (iLimitAllocOffset > MIN_ALLOC_OFFSET) ? iLimitAllocOffset : MIN_ALLOC_OFFSET; - iLimitAllocOffset = (iLimitAllocOffset < MAX_ALLOC_OFFSET) ? iLimitAllocOffset : MAX_ALLOC_OFFSET; - - for(n = 0; n < iChannels; n ++){ + iLimitAllocOffset = ( iLimitAllocOffset > MIN_ALLOC_OFFSET ) ? iLimitAllocOffset : MIN_ALLOC_OFFSET; + iLimitAllocOffset = ( iLimitAllocOffset < MAX_ALLOC_OFFSET ) ? iLimitAllocOffset : MAX_ALLOC_OFFSET; + + for ( n = 0; n < iChannels; n++ ) + { int k; - for(k = 0; k < piNumGroups[n]; k ++){ + for ( k = 0; k < piNumGroups[n]; k++ ) + { int b; - for(b = 0; b < iNumBands; b ++){ + for ( b = 0; b < iNumBands; b++ ) + { int iAlloc; - iAlloc = ((pppiSMR[n][k][b] + iLimitAllocOffset * ALLOC_OFFSET_SCALE) >> 5); - iAlloc = (iAlloc > MIN_ALLOC) ? iAlloc : MIN_ALLOC; - iAlloc = (iAlloc < MAX_ALLOC) ? iAlloc : MAX_ALLOC; + iAlloc = ( ( pppiSMR[n][k][b] + iLimitAllocOffset * ALLOC_OFFSET_SCALE ) >> 5 ); + iAlloc = ( iAlloc > MIN_ALLOC ) ? iAlloc : MIN_ALLOC; + iAlloc = ( iAlloc < MAX_ALLOC ) ? iAlloc : MAX_ALLOC; pppiAlloc[n][k][b] = iAlloc; } } - - QuantizeSpectrum(piNumGroups[n], - (const int*)ppiGroupLengths[n], - iNumBands, - piBandwidths, - (const int**)pppiAlloc[n], - (const float**)pppfReal[n], - (const float**)pppfImag[n], - pppiQReal[n], - pppiQImag[n]); - - iBitsUsed += CountCQMFBits(piNumGroups[n], - (const int*)ppiGroupLengths[n], - iNumBands, - piBandwidths, - (const int**)pppiAlloc[n], - (const int**)pppiQReal[n], - (const int**)pppiQImag[n]); + + QuantizeCQMFSpectrum( piNumGroups[n], + (const int *) ppiGroupLengths[n], + iNumBands, + piBandwidths, + (const int **) pppiAlloc[n], + (const float **) pppfReal[n], + (const float **) pppfImag[n], + pppiQReal[n], + pppiQImag[n] ); + + iBitsUsed += CountCQMFBits( piNumGroups[n], + (const int *) ppiGroupLengths[n], + iNumBands, + piBandwidths, + (const int **) pppiAlloc[n], + (const int **) pppiQReal[n], + (const int **) pppiQImag[n] ); } - - if(*piAllocOffset <= MIN_ALLOC_OFFSET && iBitsUsed > iAvailableBits){ + + if ( *piAllocOffset <= MIN_ALLOC_OFFSET && iBitsUsed > iAvailableBits ) + { #ifdef DEBUG_VERBOSE - printf("Frame can not be coded with the number of bits available\n"); + printf( "Frame can not be coded with the number of bits available\n" ); #endif - //iLastError = ENC_ERROR_STREAM_FAILURE; + // iLastError = ENC_ERROR_STREAM_FAILURE; return -1; } - else if(*piAllocOffset >= MAX_ALLOC_OFFSET && iBitsUsed < iAvailableBits){ + else if ( *piAllocOffset >= MAX_ALLOC_OFFSET && iBitsUsed < iAvailableBits ) + { *piAllocOffset = MAX_ALLOC_OFFSET; - iDone ++; + iDone++; } - else{ - if(iDelta == 0 && iBitsUsed > iAvailableBits){ + else + { + if ( iDelta == 0 && iBitsUsed > iAvailableBits ) + { iDelta = 1; } - else if(iDelta == 0 && iBitsUsed < iAvailableBits){ - iDone ++; + else if ( iDelta == 0 && iBitsUsed < iAvailableBits ) + { + iDone++; } - else if(iBitsUsed == iAvailableBits){ - iDone ++; + else if ( iBitsUsed == iAvailableBits ) + { + iDone++; } - - if(iBitsUsed > iAvailableBits){ + + if ( iBitsUsed > iAvailableBits ) + { *piAllocOffset -= iDelta; iDelta >>= 1; } - else if(iBitsUsed < iAvailableBits){ + else if ( iBitsUsed < iAvailableBits ) + { *piAllocOffset += iDelta; iDelta >>= 1; } } - } - - //printf("%d\t%d\t%d\t%d\n",*piAllocOffset,iAvailableBits,iBitsUsed,iAvailableBits - iBitsUsed); - + + // printf("%d\t%d\t%d\t%d\n",*piAllocOffset,iAvailableBits,iBitsUsed,iAvailableBits - iBitsUsed); + return iBitsUsed; } -static int ComputeAllocationByPass(const int iChannels, - const int *piNumGroups, - const int **ppiGroupLengths, - const int iNumBands, - const int *piBandwidths, - const float ***pppfReal, - const float ***pppfImag, - const int ***pppiSMR, - const int iAllocOffset, - int ***pppiAlloc, - int ***pppiQReal, - int ***pppiQImag) +static int ComputeAllocationByPass( const int iChannels, + const int *piNumGroups, + const int **ppiGroupLengths, + const int iNumBands, + const int *piBandwidths, + const float ***pppfReal, + const float ***pppfImag, + const int ***pppiSMR, + const int iAllocOffset, + int ***pppiAlloc, + int ***pppiQReal, + int ***pppiQImag ) { int n; int iBitsUsed; - + iBitsUsed = ALLOC_OFFSET_BITS; - - for(n = 0; n < iChannels; n ++){ + + for ( n = 0; n < iChannels; n++ ) + { int k; - for(k = 0; k < piNumGroups[n]; k ++){ + for ( k = 0; k < piNumGroups[n]; k++ ) + { int b; - for(b = 0; b < iNumBands; b ++){ + for ( b = 0; b < iNumBands; b++ ) + { int iAlloc; - iAlloc = ((pppiSMR[n][k][b] + iAllocOffset * ALLOC_OFFSET_SCALE) >> 5); - iAlloc = (iAlloc > MIN_ALLOC) ? iAlloc : MIN_ALLOC; - iAlloc = (iAlloc < MAX_ALLOC) ? iAlloc : MAX_ALLOC; + iAlloc = ( ( pppiSMR[n][k][b] + iAllocOffset * ALLOC_OFFSET_SCALE ) >> 5 ); + iAlloc = ( iAlloc > MIN_ALLOC ) ? iAlloc : MIN_ALLOC; + iAlloc = ( iAlloc < MAX_ALLOC ) ? iAlloc : MAX_ALLOC; pppiAlloc[n][k][b] = iAlloc; } } - - QuantizeSpectrum(piNumGroups[n], - (const int*)ppiGroupLengths[n], - iNumBands, - piBandwidths, - (const int**)pppiAlloc[n], - (const float**)pppfReal[n], - (const float**)pppfImag[n], - pppiQReal[n], - pppiQImag[n]); - - iBitsUsed += CountCQMFBits(piNumGroups[n], - (const int*)ppiGroupLengths[n], - iNumBands, - piBandwidths, - (const int**)pppiAlloc[n], - (const int**)pppiQReal[n], - (const int**)pppiQImag[n]); + + QuantizeCQMFSpectrum( piNumGroups[n], + (const int *) ppiGroupLengths[n], + iNumBands, + piBandwidths, + (const int **) pppiAlloc[n], + (const float **) pppfReal[n], + (const float **) pppfImag[n], + pppiQReal[n], + pppiQImag[n] ); + + iBitsUsed += CountCQMFBits( piNumGroups[n], + (const int *) ppiGroupLengths[n], + iNumBands, + piBandwidths, + (const int **) pppiAlloc[n], + (const int **) pppiQReal[n], + (const int **) pppiQImag[n] ); } - + return iBitsUsed; } diff --git a/lib_rend/ivas_cldfb_trans_codec/NoiseGen.c b/lib_rend/ivas_cldfb_trans_codec/NoiseGen.c index e2f7ea62b1..03316c92f3 100644 --- a/lib_rend/ivas_cldfb_trans_codec/NoiseGen.c +++ b/lib_rend/ivas_cldfb_trans_codec/NoiseGen.c @@ -2,6 +2,8 @@ #include #include #include +#include "options.h" +#include "prot.h" #include "wmops.h" NoiseGen* CreateNoiseGen() @@ -10,12 +12,12 @@ NoiseGen* CreateNoiseGen() NoiseGen *psNoiseGen = NULL; - psNoiseGen = (NoiseGen*)malloc(sizeof(NoiseGen)); + psNoiseGen = (NoiseGen*)count_malloc(sizeof(NoiseGen)); psNoiseGen->iNoiseBufferLength = 2048; psNoiseGen->iNoiseBufferMask = 2047; psNoiseGen->iNoiseBufferIndex = 0; - psNoiseGen->pfNoiseBuffer = (float*)malloc(psNoiseGen->iNoiseBufferLength * sizeof(float)); + psNoiseGen->pfNoiseBuffer = (float*)count_malloc(psNoiseGen->iNoiseBufferLength * sizeof(float)); /* Generate Laplacian distributed noise */ for(n = 0; n < psNoiseGen->iNoiseBufferLength; n ++){ @@ -38,8 +40,8 @@ NoiseGen* CreateNoiseGen() void DeleteNoiseGen(NoiseGen *psNoiseGen) { - free(psNoiseGen->pfNoiseBuffer); - free(psNoiseGen); + count_free(psNoiseGen->pfNoiseBuffer); + count_free(psNoiseGen); } extern float GetNoise(NoiseGen *psNoiseGen); diff --git a/lib_rend/ivas_cldfb_trans_codec/RMSEnvGrouping.c b/lib_rend/ivas_cldfb_trans_codec/RMSEnvGrouping.c index f51051d52d..68cf306c64 100644 --- a/lib_rend/ivas_cldfb_trans_codec/RMSEnvGrouping.c +++ b/lib_rend/ivas_cldfb_trans_codec/RMSEnvGrouping.c @@ -6,6 +6,8 @@ #include #include #include +#include "options.h" +#include "prot.h" #include "wmops.h" #include "Tables.h" @@ -29,26 +31,26 @@ typedef struct RMS_ENVELOPE_GROUPING RMSEnvelopeGrouping* CreateRMSEnvelopeGrouping(int iNumBlocks) { int n; - assert((iNumBlocks & 0x1) == 0); // remove this + //assert((iNumBlocks & 0x1) == 0); // remove this RMSEnvelopeGrouping *psRMSEnvelopeGrouping; - psRMSEnvelopeGrouping = (RMSEnvelopeGrouping*)malloc(sizeof(RMSEnvelopeGrouping)); + psRMSEnvelopeGrouping = (RMSEnvelopeGrouping*)count_malloc(sizeof(RMSEnvelopeGrouping)); psRMSEnvelopeGrouping->iNumBlocks = iNumBlocks; psRMSEnvelopeGrouping->iMaxGroups = iNumBlocks >> 1; // Change this - psRMSEnvelopeGrouping->ppfBandEnergy = (float**)malloc(psRMSEnvelopeGrouping->iNumBlocks * sizeof(float*)); - psRMSEnvelopeGrouping->ppfBandEnergydB = (float**)malloc(psRMSEnvelopeGrouping->iNumBlocks * sizeof(float*)); - psRMSEnvelopeGrouping->ppfWeight = (float**)malloc(psRMSEnvelopeGrouping->iNumBlocks * sizeof(float*)); + psRMSEnvelopeGrouping->ppfBandEnergy = (float**)count_malloc(psRMSEnvelopeGrouping->iNumBlocks * sizeof(float*)); + psRMSEnvelopeGrouping->ppfBandEnergydB = (float**)count_malloc(psRMSEnvelopeGrouping->iNumBlocks * sizeof(float*)); + psRMSEnvelopeGrouping->ppfWeight = (float**)count_malloc(psRMSEnvelopeGrouping->iNumBlocks * sizeof(float*)); for(n = 0; n < psRMSEnvelopeGrouping->iNumBlocks; n ++){ - psRMSEnvelopeGrouping->ppfBandEnergy[n] = (float*)malloc(MAX_BANDS * 2 * sizeof(float)); /* 2 for stereo joint group calc */ - psRMSEnvelopeGrouping->ppfBandEnergydB[n] = (float*)malloc(MAX_BANDS * 2 * sizeof(float)); - psRMSEnvelopeGrouping->ppfWeight[n] = (float*)malloc(MAX_BANDS * 2 * sizeof(float)); + psRMSEnvelopeGrouping->ppfBandEnergy[n] = (float*)count_malloc(MAX_BANDS * 2 * sizeof(float)); /* 2 for stereo joint group calc */ + psRMSEnvelopeGrouping->ppfBandEnergydB[n] = (float*)count_malloc(MAX_BANDS * 2 * sizeof(float)); + psRMSEnvelopeGrouping->ppfWeight[n] = (float*)count_malloc(MAX_BANDS * 2 * sizeof(float)); } - psRMSEnvelopeGrouping->psGMNodes = (GMNode*)malloc(psRMSEnvelopeGrouping->iNumBlocks * sizeof(GMNode)); + psRMSEnvelopeGrouping->psGMNodes = (GMNode*)count_malloc(psRMSEnvelopeGrouping->iNumBlocks * sizeof(GMNode)); for(n = 0; n < psRMSEnvelopeGrouping->iNumBlocks; n ++){ - psRMSEnvelopeGrouping->psGMNodes[n].pfMergedEnergydB = (float*)malloc(MAX_BANDS * 2 * sizeof(float)); + psRMSEnvelopeGrouping->psGMNodes[n].pfMergedEnergydB = (float*)count_malloc(MAX_BANDS * 2 * sizeof(float)); } return psRMSEnvelopeGrouping; @@ -59,20 +61,20 @@ void DeleteRMSEnvelopeGrouping(RMSEnvelopeGrouping *psRMSEnvelopeGrouping) int n; for(n = 0; n < psRMSEnvelopeGrouping->iNumBlocks; n ++){ - free(psRMSEnvelopeGrouping->ppfBandEnergy[n]); - free(psRMSEnvelopeGrouping->ppfBandEnergydB[n]); - free(psRMSEnvelopeGrouping->ppfWeight[n]); + count_free(psRMSEnvelopeGrouping->ppfBandEnergy[n]); + count_free(psRMSEnvelopeGrouping->ppfBandEnergydB[n]); + count_free(psRMSEnvelopeGrouping->ppfWeight[n]); } - free(psRMSEnvelopeGrouping->ppfBandEnergy); - free(psRMSEnvelopeGrouping->ppfBandEnergydB); - free(psRMSEnvelopeGrouping->ppfWeight); + count_free(psRMSEnvelopeGrouping->ppfBandEnergy); + count_free(psRMSEnvelopeGrouping->ppfBandEnergydB); + count_free(psRMSEnvelopeGrouping->ppfWeight); for(n = 0; n < psRMSEnvelopeGrouping->iNumBlocks; n ++){ - free(psRMSEnvelopeGrouping->psGMNodes[n].pfMergedEnergydB); + count_free(psRMSEnvelopeGrouping->psGMNodes[n].pfMergedEnergydB); } - free(psRMSEnvelopeGrouping->psGMNodes); + count_free(psRMSEnvelopeGrouping->psGMNodes); - free(psRMSEnvelopeGrouping); + count_free(psRMSEnvelopeGrouping); } diff --git a/lib_rend/ivas_cldfb_trans_codec/cldfb_codec_bitstream.c b/lib_rend/ivas_cldfb_trans_codec/cldfb_codec_bitstream.c index 4317e0ec12..afd7ba3cd4 100644 --- a/lib_rend/ivas_cldfb_trans_codec/cldfb_codec_bitstream.c +++ b/lib_rend/ivas_cldfb_trans_codec/cldfb_codec_bitstream.c @@ -2,6 +2,8 @@ #include #include +#include "options.h" +#include "prot.h" #include "wmops.h" #define MAX_BUFFER 1024 @@ -22,7 +24,7 @@ Bitstream* CreateBitstream(const int iDirection, int n; Bitstream *psBitstream; - psBitstream = (Bitstream*)malloc(sizeof(Bitstream)); + psBitstream = (Bitstream*)count_malloc(sizeof(Bitstream)); psBitstream->iDirection =iDirection; psBitstream->iMaxBuffer = iMaxBuffer; @@ -35,7 +37,7 @@ Bitstream* CreateBitstream(const int iDirection, psBitstream->iMaxBuffer = MAX_BUFFER; } - psBitstream->puchBuffer = (unsigned char*)malloc(sizeof(unsigned char) * psBitstream->iMaxBuffer); + psBitstream->puchBuffer = (unsigned char*)count_malloc(sizeof(unsigned char) * psBitstream->iMaxBuffer); for(n = 0; n < psBitstream->iMaxBuffer; n ++){ psBitstream->puchBuffer[n] = 0; @@ -46,8 +48,8 @@ Bitstream* CreateBitstream(const int iDirection, void DeleteBitstream(Bitstream *psBitstream) { - free(psBitstream->puchBuffer); - free(psBitstream); + count_free(psBitstream->puchBuffer); + count_free(psBitstream); } void BSFlushBuffer(Bitstream *psBitstream) diff --git a/lib_rend/ivas_splitRend_lcld_dec.c b/lib_rend/ivas_splitRend_lcld_dec.c index f89564fffc..0087c1dde3 100644 --- a/lib_rend/ivas_splitRend_lcld_dec.c +++ b/lib_rend/ivas_splitRend_lcld_dec.c @@ -67,12 +67,12 @@ ivas_error ivas_splitBinLCLDDecOpen( splitBinLCLDDec->iChannels = iChannels; splitBinLCLDDec->psCQMFDecoder = CreateCQMFDecoder( iSampleRate, iChannels ); - splitBinLCLDDec->pppfDecCQMFReal = (float ***) malloc( iChannels * sizeof( float ** ) ); - splitBinLCLDDec->pppfDecCQMFImag = (float ***) malloc( iChannels * sizeof( float ** ) ); + splitBinLCLDDec->pppfDecCQMFReal = (float ***) count_malloc( iChannels * sizeof( float ** ) ); + splitBinLCLDDec->pppfDecCQMFImag = (float ***) count_malloc( iChannels * sizeof( float ** ) ); for ( int32_t n = 0; n < splitBinLCLDDec->iChannels; n++ ) { - splitBinLCLDDec->pppfDecCQMFReal[n] = (float **) malloc( CLDFB_NO_COL_MAX * sizeof( float * ) ); - splitBinLCLDDec->pppfDecCQMFImag[n] = (float **) malloc( CLDFB_NO_COL_MAX * sizeof( float * ) ); + splitBinLCLDDec->pppfDecCQMFReal[n] = (float **) count_malloc( CLDFB_NO_COL_MAX * sizeof( float * ) ); + splitBinLCLDDec->pppfDecCQMFImag[n] = (float **) count_malloc( CLDFB_NO_COL_MAX * sizeof( float * ) ); } #ifdef CLDFB_DEBUG @@ -104,11 +104,11 @@ void ivas_splitBinLCLDDecClose( for ( int32_t n = 0; n < ( *hSplitBinLCLDDec )->iChannels; n++ ) { - free( ( *hSplitBinLCLDDec )->pppfDecCQMFReal[n] ); - free( ( *hSplitBinLCLDDec )->pppfDecCQMFImag[n] ); + count_free( ( *hSplitBinLCLDDec )->pppfDecCQMFReal[n] ); + count_free( ( *hSplitBinLCLDDec )->pppfDecCQMFImag[n] ); } - free( ( *hSplitBinLCLDDec )->pppfDecCQMFReal ); - free( ( *hSplitBinLCLDDec )->pppfDecCQMFImag ); + count_free( ( *hSplitBinLCLDDec )->pppfDecCQMFReal ); + count_free( ( *hSplitBinLCLDDec )->pppfDecCQMFImag ); #ifdef CLDFB_DEBUG if ( ( *hSplitBinLCLDDec )->cldfbOut != NULL ) diff --git a/lib_rend/ivas_splitRend_lcld_enc.c b/lib_rend/ivas_splitRend_lcld_enc.c index 97da222528..0dbd00733a 100644 --- a/lib_rend/ivas_splitRend_lcld_enc.c +++ b/lib_rend/ivas_splitRend_lcld_enc.c @@ -68,12 +68,12 @@ ivas_error ivas_splitBinLCLDEncOpen( splitBinLCLDEnc->iChannels = iChannels; splitBinLCLDEnc->psCQMFEncoder = CreateCQMFEncoder( iSampleRate, iChannels, iDataRate ); - splitBinLCLDEnc->pppfCQMFReal = (float ***) malloc( iChannels * sizeof( float ** ) ); - splitBinLCLDEnc->pppfCQMFImag = (float ***) malloc( iChannels * sizeof( float ** ) ); + splitBinLCLDEnc->pppfCQMFReal = (float ***) count_malloc( iChannels * sizeof( float ** ) ); + splitBinLCLDEnc->pppfCQMFImag = (float ***) count_malloc( iChannels * sizeof( float ** ) ); for ( int32_t n = 0; n < splitBinLCLDEnc->iChannels; n++ ) { - splitBinLCLDEnc->pppfCQMFReal[n] = (float **) malloc( CLDFB_NO_COL_MAX * sizeof( float * ) ); - splitBinLCLDEnc->pppfCQMFImag[n] = (float **) malloc( CLDFB_NO_COL_MAX * sizeof( float * ) ); + splitBinLCLDEnc->pppfCQMFReal[n] = (float **) count_malloc( CLDFB_NO_COL_MAX * sizeof( float * ) ); + splitBinLCLDEnc->pppfCQMFImag[n] = (float **) count_malloc( CLDFB_NO_COL_MAX * sizeof( float * ) ); } #ifdef CLDFB_DEBUG @@ -102,11 +102,11 @@ void ivas_splitBinLCLDEncClose( for ( int32_t n = 0; n < ( *hSplitBinLCLDEnc )->iChannels; n++ ) { - free( ( *hSplitBinLCLDEnc )->pppfCQMFReal[n] ); - free( ( *hSplitBinLCLDEnc )->pppfCQMFImag[n] ); + count_free( ( *hSplitBinLCLDEnc )->pppfCQMFReal[n] ); + count_free( ( *hSplitBinLCLDEnc )->pppfCQMFImag[n] ); } - free( ( *hSplitBinLCLDEnc )->pppfCQMFReal ); - free( ( *hSplitBinLCLDEnc )->pppfCQMFImag ); + count_free( ( *hSplitBinLCLDEnc )->pppfCQMFReal ); + count_free( ( *hSplitBinLCLDEnc )->pppfCQMFImag ); #ifdef CLDFB_DEBUG if ( ( *hSplitBinLCLDEnc )->cldfbIn != NULL ) -- GitLab From b4e756545a7da5c53c9e3f38afb4b398e459a6ad Mon Sep 17 00:00:00 2001 From: rtyag Date: Wed, 25 Jan 2023 11:19:49 +1100 Subject: [PATCH 08/31] fix for head tracking input in quat format, added conversion from quat to euler in degrees --- lib_com/ivas_prot.h | 9 +++++++ lib_rend/ivas_binauralRenderer.c | 6 ++--- lib_rend/ivas_rotation.c | 39 +++++++++++++++++++++++++++++++ lib_rend/ivas_splitRendererPost.c | 6 ++--- 4 files changed, 54 insertions(+), 6 deletions(-) diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index 62050015c6..11a8a43505 100644 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -4597,6 +4597,15 @@ void Quat2Euler( float *roll /* o : roll */ ); +#ifdef SPLIT_REND_WITH_HEAD_ROT +void Quat2EulerDegree( + const IVAS_QUATERNION quat, /* i : quaternion describing the rotation */ + float *yaw, /* o : yaw */ + float *pitch, /* o : pitch */ + float *roll /* o : roll */ +); +#endif + void SHrotmatgen( float SHrotmat[SBA_NHARM_HOA3][SBA_NHARM_HOA3], /* o : SHD rotation matrix */ float Rmat[3][3], /* i : real-space rotation matrix */ diff --git a/lib_rend/ivas_binauralRenderer.c b/lib_rend/ivas_binauralRenderer.c index ff85e0c73b..7df14b2adf 100644 --- a/lib_rend/ivas_binauralRenderer.c +++ b/lib_rend/ivas_binauralRenderer.c @@ -1223,9 +1223,9 @@ void ivas_binRenderer( if ( hHeadTrackData && hHeadTrackData->num_quaternions >= 0 && hBinRenderer->rotInCldfb ) { Quaternions_ref = &hHeadTrackData->Quaternions[hHeadTrackData->num_quaternions - 1]; - Quaternions_rel.w = -3.0f; /*euler*/ - Quaternions_abs.w = -3.0f; /*euler*/ - Quat2Euler( *Quaternions_ref, &Quaternions_abs.z, &Quaternions_abs.y, &Quaternions_abs.x ); /*order in Quat2Euler seems to be reversed ?*/ + Quaternions_rel.w = -3.0f; /*euler*/ + Quaternions_abs.w = -3.0f; /*euler*/ + Quat2EulerDegree( *Quaternions_ref, &Quaternions_abs.z, &Quaternions_abs.y, &Quaternions_abs.x ); /*order in Quat2Euler seems to be reversed ?*/ // Quaternions_abs.x = Quaternions_ref->x; // Quaternions_abs.y = Quaternions_ref->y; // Quaternions_abs.z = Quaternions_ref->z; diff --git a/lib_rend/ivas_rotation.c b/lib_rend/ivas_rotation.c index 1a7cd8b830..dfbe61e08d 100644 --- a/lib_rend/ivas_rotation.c +++ b/lib_rend/ivas_rotation.c @@ -150,6 +150,45 @@ void QuatToRotMat( return; } +#ifdef SPLIT_REND_WITH_HEAD_ROT +/*------------------------------------------------------------------------- + * Quat2EulerDegree() + * + * Quaternion handling: calculate corresponding Euler angles in degrees + *------------------------------------------------------------------------*/ +void Quat2EulerDegree( + const IVAS_QUATERNION quat, /* i : quaternion describing the rotation */ + float *yaw, /* o : yaw */ + float *pitch, /* o : pitch */ + float *roll /* o : roll */ +) +{ + if ( quat.w != -3.0 ) + { + *yaw = atan2f( 2 * ( quat.w * quat.x + quat.y * quat.z ), 1 - 2 * ( quat.x * quat.x + quat.y * quat.y ) ); + *pitch = asinf( 2 * ( quat.w * quat.y - quat.z * quat.x ) ); + *roll = atan2f( 2 * ( quat.w * quat.z + quat.x * quat.y ), 1 - 2 * ( quat.y * quat.y + quat.z * quat.z ) ); + *yaw *= _180_OVER_PI; + *pitch *= _180_OVER_PI; + *roll *= _180_OVER_PI; + } + else + { + /* Euler angles in R_X(roll)*R_Y(pitch)*R_Z(yaw) convention + * + * yaw: rotate scene counter-clockwise in the horizontal plane + * pitch: rotate scene in the median plane, increase elevation with positive values + * roll: rotate scene from the right ear to the top + */ + *yaw = quat.z; + *pitch = quat.y; + *roll = quat.x; + } + + return; +} +#endif + /*------------------------------------------------------------------------- * Quat2Euler() * diff --git a/lib_rend/ivas_splitRendererPost.c b/lib_rend/ivas_splitRendererPost.c index 56782f4989..693d81c61e 100644 --- a/lib_rend/ivas_splitRendererPost.c +++ b/lib_rend/ivas_splitRendererPost.c @@ -585,9 +585,9 @@ static void get_interpolation_vars( /*interpolation if actual pose is not same as one of assumed poses*/ /*get the deviation*/ - Quat2Euler( *Quaternions_ref, &quaternions_ref_euler.z, &quaternions_ref_euler.y, &quaternions_ref_euler.x ); /*order in Quat2Euler seems to be reversed ?*/ - Quat2Euler( *Quaternions_act, &quaternions_act_euler.z, &quaternions_act_euler.y, &quaternions_act_euler.x ); /*order in Quat2Euler seems to be reversed ?*/ - quaternions_diff.w = -3.0f; /*euler*/ + Quat2EulerDegree( *Quaternions_ref, &quaternions_ref_euler.z, &quaternions_ref_euler.y, &quaternions_ref_euler.x ); /*order in Quat2Euler seems to be reversed ?*/ + Quat2EulerDegree( *Quaternions_act, &quaternions_act_euler.z, &quaternions_act_euler.y, &quaternions_act_euler.x ); /*order in Quat2Euler seems to be reversed ?*/ + quaternions_diff.w = -3.0f; /*euler*/ quaternions_diff.x = quaternions_act_euler.x - quaternions_ref_euler.x; quaternions_diff.y = quaternions_act_euler.y - quaternions_ref_euler.y; quaternions_diff.z = quaternions_act_euler.z - quaternions_ref_euler.z; -- GitLab From da8fdcd7936d9162257b25f0edd876319cb79ae3 Mon Sep 17 00:00:00 2001 From: rtyag Date: Fri, 24 Mar 2023 11:59:43 +1100 Subject: [PATCH 09/31] split rendering updates --- Makefile | 2 +- Workspace_msvc/lib_rend.vcxproj | 31 +- Workspace_msvc/lib_util.vcxproj | 2 + .../split_renderer_config_384_3dof.txt | 7 + .../split_renderer_config_384_3dof_hq.txt | 7 + .../split_renderer_config_512_2dof.txt | 7 + .../split_renderer_config_768_1dof.txt | 7 + .../split_renderer_config_fc_384_3dof.txt | 7 + .../split_renderer_config_fc_384_3dof_hq.txt | 7 + .../split_renderer_config_fc_512_2dof.txt | 7 + .../split_renderer_config_fc_768_1dof.txt | 7 + .../split_renderer_config_pcm_1dof.txt | 10 + .../split_renderer_config_pcm_2dof.txt | 10 + .../split_renderer_config_pcm_3dof.txt | 10 + .../split_renderer_config_pcm_3dof_hq.txt | 10 + .../sample_split_rend_script_ivas_enc_dec.py | 138 + .../sample_split_rend_script_ivas_rend.py | 147 + .../post-renderer_pose_files/post_0static.csv | 4 + .../pre_pitch-20static.csv | 4 + .../pre_pitch20static.csv | 4 + .../pre_roll-20static.csv | 4 + .../pre_roll20static.csv | 4 + .../pre_yaw-20pitch-20static.csv | 4 + .../pre_yaw-20static.csv | 4 + .../pre_yaw20pitch20static.csv | 4 + .../pre_yaw20static.csv | 4 + apps/decoder.c | 299 +- apps/renderer.c | 675 ++- lib_com/common_api_types.h | 47 +- lib_com/delay_comp.c | 15 +- lib_com/ivas_cnst.h | 64 +- lib_com/ivas_prot.h | 83 +- lib_com/ivas_tools.c | 1 - lib_com/options.h | 26 +- lib_com/prot.h | 4 + lib_debug/debug.c | 12 +- lib_debug/debug.h | 2 +- lib_debug/mem_count.c | 2 +- lib_dec/ivas_dec.c | 44 +- lib_dec/ivas_dirac_dec.c | 9 +- lib_dec/ivas_init_dec.c | 59 +- lib_dec/ivas_mc_param_dec.c | 3 + lib_dec/ivas_rom_dec.c | 36 +- lib_dec/ivas_rom_dec.h | 18 +- lib_dec/ivas_sba_dec.c | 22 +- lib_dec/ivas_spar_decoder.c | 6 +- lib_dec/ivas_stat_dec.h | 96 +- lib_dec/lib_dec.c | 77 +- lib_dec/lib_dec.h | 11 +- lib_enc/lib_enc.c | 4 + lib_rend/ivas_CQMFDecoder.c | 1375 ++++++ lib_rend/ivas_CQMFDecoder.h | 64 + lib_rend/ivas_CQMFEncoder.c | 2050 ++++++++ lib_rend/ivas_CQMFEncoder.h | 69 + lib_rend/ivas_CQMFHuff.c | 4124 +++++++++++++++++ lib_rend/ivas_CQMFHuff.h | 350 ++ lib_rend/ivas_MSPred.c | 357 ++ lib_rend/ivas_MSPred.h | 62 + lib_rend/ivas_NoiseGen.c | 82 + lib_rend/ivas_NoiseGen.h | 68 + ...rceptualModel.c => ivas_PerceptualModel.c} | 239 +- lib_rend/ivas_PerceptualModel.h | 59 + lib_rend/ivas_PredDecoder.c | 259 ++ lib_rend/ivas_PredDecoder.h | 84 + lib_rend/ivas_PredEncoder.c | 476 ++ lib_rend/ivas_PredEncoder.h | 88 + lib_rend/ivas_PredTables.h | 53 + ...SEnvDeltaHuff.c => ivas_RMSEnvDeltaHuff.c} | 40 +- lib_rend/ivas_RMSEnvDeltaHuff.h | 57 + lib_rend/ivas_RMSEnvGrouping.c | 922 ++++ lib_rend/ivas_RMSEnvGrouping.h | 66 + lib_rend/ivas_Tables.c | 196 + lib_rend/ivas_Tables.h | 126 + lib_rend/ivas_binauralRenderer.c | 198 +- lib_rend/ivas_cldfb_codec_bitstream.c | 307 ++ lib_rend/ivas_cldfb_codec_bitstream.h | 101 + lib_rend/ivas_cldfb_trans_codec/CQMFDecoder.c | 912 ---- lib_rend/ivas_cldfb_trans_codec/CQMFDecoder.h | 32 - lib_rend/ivas_cldfb_trans_codec/CQMFEncoder.c | 1226 ----- lib_rend/ivas_cldfb_trans_codec/CQMFEncoder.h | 33 - lib_rend/ivas_cldfb_trans_codec/CQMFHuff.c | 1457 ------ lib_rend/ivas_cldfb_trans_codec/CQMFHuff.h | 305 -- lib_rend/ivas_cldfb_trans_codec/NoiseGen.c | 47 - lib_rend/ivas_cldfb_trans_codec/NoiseGen.h | 35 - .../ivas_cldfb_trans_codec/PerceptualModel.h | 18 - .../ivas_cldfb_trans_codec/RMSEnvDeltaHuff.h | 25 - .../ivas_cldfb_trans_codec/RMSEnvGrouping.c | 378 -- .../ivas_cldfb_trans_codec/RMSEnvGrouping.h | 31 - lib_rend/ivas_cldfb_trans_codec/Tables.c | 116 - lib_rend/ivas_cldfb_trans_codec/Tables.h | 65 - .../cldfb_codec_bitstream.c | 226 - .../cldfb_codec_bitstream.h | 62 - lib_rend/ivas_crend.c | 213 +- lib_rend/ivas_lib_rend_internal.h | 77 +- lib_rend/ivas_output_init.c | 32 +- lib_rend/ivas_render_config.c | 9 +- lib_rend/ivas_rom_binaural_crend_head.c | 392 ++ lib_rend/ivas_rom_rend.h | 4 + lib_rend/ivas_rotation.c | 43 + lib_rend/ivas_splitRend_lcld_dec.c | 152 +- lib_rend/ivas_splitRend_lcld_enc.c | 149 +- lib_rend/ivas_splitRendererPost.c | 1715 +++++-- lib_rend/ivas_splitRendererPre.c | 1555 ++++--- lib_rend/ivas_splitRenderer_utils.c | 356 +- lib_rend/lib_rend.c | 1148 ++++- lib_rend/lib_rend.h | 19 +- lib_util/render_config_reader.c | 52 +- lib_util/split_render_file_read_write.c | 254 + lib_util/split_render_file_read_write.h | 61 + 109 files changed, 18179 insertions(+), 6959 deletions(-) create mode 100644 Workspace_msvc/renderer_configs/split_renderer_config_384_3dof.txt create mode 100644 Workspace_msvc/renderer_configs/split_renderer_config_384_3dof_hq.txt create mode 100644 Workspace_msvc/renderer_configs/split_renderer_config_512_2dof.txt create mode 100644 Workspace_msvc/renderer_configs/split_renderer_config_768_1dof.txt create mode 100644 Workspace_msvc/renderer_configs/split_renderer_config_fc_384_3dof.txt create mode 100644 Workspace_msvc/renderer_configs/split_renderer_config_fc_384_3dof_hq.txt create mode 100644 Workspace_msvc/renderer_configs/split_renderer_config_fc_512_2dof.txt create mode 100644 Workspace_msvc/renderer_configs/split_renderer_config_fc_768_1dof.txt create mode 100644 Workspace_msvc/renderer_configs/split_renderer_config_pcm_1dof.txt create mode 100644 Workspace_msvc/renderer_configs/split_renderer_config_pcm_2dof.txt create mode 100644 Workspace_msvc/renderer_configs/split_renderer_config_pcm_3dof.txt create mode 100644 Workspace_msvc/renderer_configs/split_renderer_config_pcm_3dof_hq.txt create mode 100644 Workspace_msvc/sample_split_rend_script_ivas_enc_dec.py create mode 100644 Workspace_msvc/sample_split_rend_script_ivas_rend.py create mode 100644 Workspace_msvc/trajectories/post-renderer_pose_files/post_0static.csv create mode 100644 Workspace_msvc/trajectories/pre-renderer_pose_files/pre_pitch-20static.csv create mode 100644 Workspace_msvc/trajectories/pre-renderer_pose_files/pre_pitch20static.csv create mode 100644 Workspace_msvc/trajectories/pre-renderer_pose_files/pre_roll-20static.csv create mode 100644 Workspace_msvc/trajectories/pre-renderer_pose_files/pre_roll20static.csv create mode 100644 Workspace_msvc/trajectories/pre-renderer_pose_files/pre_yaw-20pitch-20static.csv create mode 100644 Workspace_msvc/trajectories/pre-renderer_pose_files/pre_yaw-20static.csv create mode 100644 Workspace_msvc/trajectories/pre-renderer_pose_files/pre_yaw20pitch20static.csv create mode 100644 Workspace_msvc/trajectories/pre-renderer_pose_files/pre_yaw20static.csv create mode 100644 lib_rend/ivas_CQMFDecoder.c create mode 100644 lib_rend/ivas_CQMFDecoder.h create mode 100644 lib_rend/ivas_CQMFEncoder.c create mode 100644 lib_rend/ivas_CQMFEncoder.h create mode 100644 lib_rend/ivas_CQMFHuff.c create mode 100644 lib_rend/ivas_CQMFHuff.h create mode 100644 lib_rend/ivas_MSPred.c create mode 100644 lib_rend/ivas_MSPred.h create mode 100644 lib_rend/ivas_NoiseGen.c create mode 100644 lib_rend/ivas_NoiseGen.h rename lib_rend/{ivas_cldfb_trans_codec/PerceptualModel.c => ivas_PerceptualModel.c} (51%) create mode 100644 lib_rend/ivas_PerceptualModel.h create mode 100644 lib_rend/ivas_PredDecoder.c create mode 100644 lib_rend/ivas_PredDecoder.h create mode 100644 lib_rend/ivas_PredEncoder.c create mode 100644 lib_rend/ivas_PredEncoder.h create mode 100644 lib_rend/ivas_PredTables.h rename lib_rend/{ivas_cldfb_trans_codec/RMSEnvDeltaHuff.c => ivas_RMSEnvDeltaHuff.c} (61%) create mode 100644 lib_rend/ivas_RMSEnvDeltaHuff.h create mode 100644 lib_rend/ivas_RMSEnvGrouping.c create mode 100644 lib_rend/ivas_RMSEnvGrouping.h create mode 100644 lib_rend/ivas_Tables.c create mode 100644 lib_rend/ivas_Tables.h create mode 100644 lib_rend/ivas_cldfb_codec_bitstream.c create mode 100644 lib_rend/ivas_cldfb_codec_bitstream.h delete mode 100644 lib_rend/ivas_cldfb_trans_codec/CQMFDecoder.c delete mode 100644 lib_rend/ivas_cldfb_trans_codec/CQMFDecoder.h delete mode 100644 lib_rend/ivas_cldfb_trans_codec/CQMFEncoder.c delete mode 100644 lib_rend/ivas_cldfb_trans_codec/CQMFEncoder.h delete mode 100644 lib_rend/ivas_cldfb_trans_codec/CQMFHuff.c delete mode 100644 lib_rend/ivas_cldfb_trans_codec/CQMFHuff.h delete mode 100644 lib_rend/ivas_cldfb_trans_codec/NoiseGen.c delete mode 100644 lib_rend/ivas_cldfb_trans_codec/NoiseGen.h delete mode 100644 lib_rend/ivas_cldfb_trans_codec/PerceptualModel.h delete mode 100644 lib_rend/ivas_cldfb_trans_codec/RMSEnvDeltaHuff.h delete mode 100644 lib_rend/ivas_cldfb_trans_codec/RMSEnvGrouping.c delete mode 100644 lib_rend/ivas_cldfb_trans_codec/RMSEnvGrouping.h delete mode 100644 lib_rend/ivas_cldfb_trans_codec/Tables.c delete mode 100644 lib_rend/ivas_cldfb_trans_codec/Tables.h delete mode 100644 lib_rend/ivas_cldfb_trans_codec/cldfb_codec_bitstream.c delete mode 100644 lib_rend/ivas_cldfb_trans_codec/cldfb_codec_bitstream.h create mode 100644 lib_util/split_render_file_read_write.c create mode 100644 lib_util/split_render_file_read_write.h diff --git a/Makefile b/Makefile index d5b9a8781a..141a607b07 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ SRC_LIBCOM = lib_com SRC_LIBDEBUG = lib_debug SRC_LIBDEC = lib_dec SRC_LIBENC = lib_enc -SRC_LIBREND = lib_rend lib_rend/ivas_cldfb_trans_codec +SRC_LIBREND = lib_rend SRC_LIBUTIL = lib_util SRC_APP = apps BUILD = build diff --git a/Workspace_msvc/lib_rend.vcxproj b/Workspace_msvc/lib_rend.vcxproj index 0cef2758b9..dc739ee392 100644 --- a/Workspace_msvc/lib_rend.vcxproj +++ b/Workspace_msvc/lib_rend.vcxproj @@ -89,7 +89,7 @@ Disabled - ivas_cldfb_trans_codec;..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;%(AdditionalIncludeDirectories) + ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;%(AdditionalIncludeDirectories) _CRT_SECURE_NO_WARNINGS;$(Macros);WIN32;%(PreprocessorDefinitions) EnableFastChecks @@ -126,7 +126,7 @@ Disabled - ivas_cldfb_trans_codec;..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;..\lib_util;%(AdditionalIncludeDirectories) + ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;..\lib_util;%(AdditionalIncludeDirectories) _CRT_SECURE_NO_WARNINGS;$(Macros);WIN32;%(PreprocessorDefinitions) @@ -169,7 +169,7 @@ Neither false false - ivas_cldfb_trans_codec;..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;%(AdditionalIncludeDirectories) + ..\lib_com;..\lib_debug;..\lib_dec;..\lib_enc;%(AdditionalIncludeDirectories) _CRT_SECURE_NO_WARNINGS;$(Macros);WIN32;%(PreprocessorDefinitions) true @@ -197,23 +197,26 @@ - - - - - - - - - + + + + + + + + + + + + - + - + diff --git a/Workspace_msvc/lib_util.vcxproj b/Workspace_msvc/lib_util.vcxproj index 3e269dab4b..089554b323 100644 --- a/Workspace_msvc/lib_util.vcxproj +++ b/Workspace_msvc/lib_util.vcxproj @@ -157,6 +157,7 @@ + @@ -179,6 +180,7 @@ + diff --git a/Workspace_msvc/renderer_configs/split_renderer_config_384_3dof.txt b/Workspace_msvc/renderer_configs/split_renderer_config_384_3dof.txt new file mode 100644 index 0000000000..a3f6373d69 --- /dev/null +++ b/Workspace_msvc/renderer_configs/split_renderer_config_384_3dof.txt @@ -0,0 +1,7 @@ +[SPLITREND] +BITRATE = 384000; +DOF = 3; +HQMODE = 0; + +[GENERAL] +RENDERER = CREND; diff --git a/Workspace_msvc/renderer_configs/split_renderer_config_384_3dof_hq.txt b/Workspace_msvc/renderer_configs/split_renderer_config_384_3dof_hq.txt new file mode 100644 index 0000000000..3103a24b50 --- /dev/null +++ b/Workspace_msvc/renderer_configs/split_renderer_config_384_3dof_hq.txt @@ -0,0 +1,7 @@ +[SPLITREND] +BITRATE = 384000; +DOF = 3; +HQMODE = 1; + +[GENERAL] +RENDERER = CREND; diff --git a/Workspace_msvc/renderer_configs/split_renderer_config_512_2dof.txt b/Workspace_msvc/renderer_configs/split_renderer_config_512_2dof.txt new file mode 100644 index 0000000000..ef74dca52d --- /dev/null +++ b/Workspace_msvc/renderer_configs/split_renderer_config_512_2dof.txt @@ -0,0 +1,7 @@ +[SPLITREND] +BITRATE = 512000; +DOF = 2; +HQMODE = 0; + +[GENERAL] +RENDERER = CREND; diff --git a/Workspace_msvc/renderer_configs/split_renderer_config_768_1dof.txt b/Workspace_msvc/renderer_configs/split_renderer_config_768_1dof.txt new file mode 100644 index 0000000000..f1d2ed8168 --- /dev/null +++ b/Workspace_msvc/renderer_configs/split_renderer_config_768_1dof.txt @@ -0,0 +1,7 @@ +[SPLITREND] +BITRATE = 768000; +DOF = 1; +HQMODE = 0; + +[GENERAL] +RENDERER = CREND; diff --git a/Workspace_msvc/renderer_configs/split_renderer_config_fc_384_3dof.txt b/Workspace_msvc/renderer_configs/split_renderer_config_fc_384_3dof.txt new file mode 100644 index 0000000000..ef12d462c9 --- /dev/null +++ b/Workspace_msvc/renderer_configs/split_renderer_config_fc_384_3dof.txt @@ -0,0 +1,7 @@ +[SPLITREND] +BITRATE = 384000; +DOF = 3; +HQMODE = 0; + +[GENERAL] +RENDERER = FASTCONV; diff --git a/Workspace_msvc/renderer_configs/split_renderer_config_fc_384_3dof_hq.txt b/Workspace_msvc/renderer_configs/split_renderer_config_fc_384_3dof_hq.txt new file mode 100644 index 0000000000..56b6e2494f --- /dev/null +++ b/Workspace_msvc/renderer_configs/split_renderer_config_fc_384_3dof_hq.txt @@ -0,0 +1,7 @@ +[SPLITREND] +BITRATE = 384000; +DOF = 3; +HQMODE = 1; + +[GENERAL] +RENDERER = FASTCONV; diff --git a/Workspace_msvc/renderer_configs/split_renderer_config_fc_512_2dof.txt b/Workspace_msvc/renderer_configs/split_renderer_config_fc_512_2dof.txt new file mode 100644 index 0000000000..6dfcbbf0f8 --- /dev/null +++ b/Workspace_msvc/renderer_configs/split_renderer_config_fc_512_2dof.txt @@ -0,0 +1,7 @@ +[SPLITREND] +BITRATE = 512000; +DOF = 2; +HQMODE = 0; + +[GENERAL] +RENDERER = FASTCONV; diff --git a/Workspace_msvc/renderer_configs/split_renderer_config_fc_768_1dof.txt b/Workspace_msvc/renderer_configs/split_renderer_config_fc_768_1dof.txt new file mode 100644 index 0000000000..2c7a780f5c --- /dev/null +++ b/Workspace_msvc/renderer_configs/split_renderer_config_fc_768_1dof.txt @@ -0,0 +1,7 @@ +[SPLITREND] +BITRATE = 768000; +DOF = 1; +HQMODE = 0; + +[GENERAL] +RENDERER = FASTCONV; diff --git a/Workspace_msvc/renderer_configs/split_renderer_config_pcm_1dof.txt b/Workspace_msvc/renderer_configs/split_renderer_config_pcm_1dof.txt new file mode 100644 index 0000000000..f70f7e67ce --- /dev/null +++ b/Workspace_msvc/renderer_configs/split_renderer_config_pcm_1dof.txt @@ -0,0 +1,10 @@ +[SPLITREND] +BITRATE = 50000; +DOF = 1; +HQMODE = 0; + +[GENERAL] +RENDERER = CREND; + +[ROOMACOUSTICS] +REVERB = FALSE; diff --git a/Workspace_msvc/renderer_configs/split_renderer_config_pcm_2dof.txt b/Workspace_msvc/renderer_configs/split_renderer_config_pcm_2dof.txt new file mode 100644 index 0000000000..5bf2217ded --- /dev/null +++ b/Workspace_msvc/renderer_configs/split_renderer_config_pcm_2dof.txt @@ -0,0 +1,10 @@ +[SPLITREND] +BITRATE = 50000; +DOF = 2; +HQMODE = 0; + +[GENERAL] +RENDERER = CREND; + +[ROOMACOUSTICS] +REVERB = FALSE; diff --git a/Workspace_msvc/renderer_configs/split_renderer_config_pcm_3dof.txt b/Workspace_msvc/renderer_configs/split_renderer_config_pcm_3dof.txt new file mode 100644 index 0000000000..193bc890a4 --- /dev/null +++ b/Workspace_msvc/renderer_configs/split_renderer_config_pcm_3dof.txt @@ -0,0 +1,10 @@ +[SPLITREND] +BITRATE = 70000; +DOF = 3; +HQMODE = 0; + +[GENERAL] +RENDERER = CREND; + +[ROOMACOUSTICS] +REVERB = FALSE; diff --git a/Workspace_msvc/renderer_configs/split_renderer_config_pcm_3dof_hq.txt b/Workspace_msvc/renderer_configs/split_renderer_config_pcm_3dof_hq.txt new file mode 100644 index 0000000000..e559a44f33 --- /dev/null +++ b/Workspace_msvc/renderer_configs/split_renderer_config_pcm_3dof_hq.txt @@ -0,0 +1,10 @@ +[SPLITREND] +BITRATE = 70000; +DOF = 3; +HQMODE = 1; + +[GENERAL] +RENDERER = CREND; + +[ROOMACOUSTICS] +REVERB = FALSE; diff --git a/Workspace_msvc/sample_split_rend_script_ivas_enc_dec.py b/Workspace_msvc/sample_split_rend_script_ivas_enc_dec.py new file mode 100644 index 0000000000..4cfd0f32d1 --- /dev/null +++ b/Workspace_msvc/sample_split_rend_script_ivas_enc_dec.py @@ -0,0 +1,138 @@ +from scipy.io.wavfile import read, write +from scipy import signal +import subprocess +import numpy as np +import sys +import os + +## dimension of following 2 arrays should be same, that is for each file name there should be a tag +file_names = [ +'../scripts/testv/test_HOA3.wav' +]; +file_tags = [ +'test_HOA3' +]; + +## dimension of following 3 arrays should be same, that is for each pre file there should be a post file and a tag +pre_hr_file_names = [ +'trajectories/pre-renderer_pose_files/pre_yaw20static.csv' +]; +post_hr_file_names = [ +'trajectories/post-renderer_pose_files/post_0static.csv' +]; +hr_file_tags = [ +'yaw20static' +]; + +renderers = [ +('fast_conv_768_1dof', 'renderer_configs/split_renderer_config_fc_768_1dof.txt', '0'), +('fast_conv_512_2dof', 'renderer_configs/split_renderer_config_fc_512_2dof.txt', '0'), +('fast_conv_384_3dof', 'renderer_configs/split_renderer_config_fc_384_3dof.txt', '0'), +('fast_conv_384_3dof_hq', 'renderer_configs/split_renderer_config_fc_384_3dof_hq.txt', '0')]; + + +split_rend_file_outs = ['recons_out_pos0.wav', + 'recons_out_pos1.wav', + 'recons_out_pos2.wav', + 'rotated_ref_pos0.wav', + 'rotated_ref_pos1.wav', + 'rotated_ref_pos2.wav', + 'rotated_ref_RefPos.wav', + 'split_rend_MD_bitrate.txt'] + +def check_and_makedir(dir_path): + if not os.path.exists(dir_path): + try: + os.makedirs(dir_path) + except OSError as e: + if e.errno != errno.EEXIST: + raise # raises the error again + + +def generate_split_rend_lis_items(file_dir, exe_dir, out_dir): + check_and_makedir(out_dir); + for idx in range(0, len(file_tags)): + for hr_idx in range(0, len(hr_file_tags)): + for rend in range(0, len(renderers)): + bitrate = '384000'; + filename = file_names[idx]; + file_in = os.path.join(file_dir, filename); + enc_exe = os.path.join(exe_dir, 'IVAS_cod.exe'); + dec_exe = os.path.join(exe_dir, 'IVAS_dec.exe'); + rend_exe = os.path.join(exe_dir, 'IVAS_rend.exe'); + file_pkt_name = '_'.join([file_tags[idx], bitrate, 'out.pkt']); + file_pkt = os.path.join(out_dir, file_pkt_name); + file_out_name = '_'.join([file_tags[idx], bitrate, renderers[rend][0], 'out.wav']); + file_out = os.path.join(out_dir, file_out_name); + bs_file_out_name = '_'.join([file_tags[idx], '_ivas_dec_out.pkt']); + bs_file_out = os.path.join(out_dir, bs_file_out_name); + + print(file_in) + print(file_pkt) + print(bs_file_out) + print(file_out) + + enc_cmd = [ + enc_exe, + '-sba', '3', + '-max_band', 'FB', + bitrate, + '48', + file_in, + file_pkt + ] + + hr_pre_file_name = pre_hr_file_names[hr_idx]; + hr_pre_file = os.path.join(file_dir, hr_pre_file_name); + hr_post_file_name = post_hr_file_names[hr_idx]; + hr_post_file = os.path.join(file_dir, hr_post_file_name); + + dec_cmd = [ + dec_exe, + '-RENDER_CONFIG', renderers[rend][1], + '-t', hr_pre_file, + 'SPLIT_BINAURAL', + '48', + file_pkt, + bs_file_out + ] + print(enc_cmd) + print(dec_cmd) + test_status = subprocess.call(enc_cmd, shell=False) + test_status = subprocess.call(dec_cmd, shell=False) + + post_rend_cmd = [ + rend_exe, + '-i', bs_file_out, + '-if', 'BINAURAL_SPLIT_CLDFB', + '-o', file_out, + '-of', 'BINAURAL', + '-fs', '48', + '-tf', hr_post_file, + ] + print(post_rend_cmd) + test_status = subprocess.call(post_rend_cmd, shell=False) + + if os.path.isfile(file_pkt): + os.remove(file_pkt) + + if os.path.exists(bs_file_out): + os.remove(bs_file_out); + + for fo in split_rend_file_outs: + file_old = os.path.join(os. getcwd(), fo); + file_out_name = '_'.join([file_tags[idx], hr_file_tags[hr_idx], fo]); + file_new = os.path.join(out_dir, file_out_name); + if os.path.exists(file_old): + os.rename(file_old, file_new); + + +def main(argv): + print('USAGE : python generate_split_rend_lis_items.py file_dir exe_dir out_dir') + if len(argv) < 3: + return print(len(argv)) + return generate_split_rend_lis_items(*argv[1:]) + + +if __name__ == "__main__": + sys.exit(main(sys.argv)) \ No newline at end of file diff --git a/Workspace_msvc/sample_split_rend_script_ivas_rend.py b/Workspace_msvc/sample_split_rend_script_ivas_rend.py new file mode 100644 index 0000000000..c6ccd8e422 --- /dev/null +++ b/Workspace_msvc/sample_split_rend_script_ivas_rend.py @@ -0,0 +1,147 @@ +from scipy.io.wavfile import read, write +from scipy import signal +import subprocess +import numpy as np +import sys +import os + +## dimension of following 2 arrays should be same, that is for each file name there should be a tag +file_names = [ +'../scripts/testv/test_HOA3.wav' +]; +file_tags = [ +'test_HOA3' +]; + +## dimension of following 3 arrays should be same, that is for each pre file there should be a post file and a tag +pre_hr_file_names = [ +'trajectories/pre-renderer_pose_files/pre_yaw20static.csv' +]; +post_hr_file_names = [ +'trajectories/post-renderer_pose_files/post_0static.csv' +]; +hr_file_tags = [ +'yaw20static' +]; + +renderers = [ +('crend_768_1dof', 'renderer_configs/split_renderer_config_768_1dof.txt', '0'), +('crend_pcm_1dof', 'renderer_configs/split_renderer_config_pcm_1dof.txt', '1'), +('fast_conv_768_1dof', 'renderer_configs/split_renderer_config_fc_768_1dof.txt', '0'), +('crend_512_2dof', 'renderer_configs/split_renderer_config_512_2dof.txt', '0'), +('crend_pcm_2dof', 'renderer_configs/split_renderer_config_pcm_2dof.txt', '1'), +('fast_conv_512_2dof', 'renderer_configs/split_renderer_config_fc_512_2dof.txt', '0'), +('crend_384_3dof', 'renderer_configs/split_renderer_config_384_3dof.txt', '0'), +('crend_pcm_3dof', 'renderer_configs/split_renderer_config_pcm_3dof.txt', '1'), +('fast_conv_384_3dof', 'renderer_configs/split_renderer_config_fc_384_3dof.txt', '0'), +('crend_384_3dof_hq', 'renderer_configs/split_renderer_config_384_3dof_hq.txt', '0'), +('crend_pcm_3dof_hq', 'renderer_configs/split_renderer_config_pcm_3dof_hq.txt', '1'), +('fast_conv_384_3dof_hq', 'renderer_configs/split_renderer_config_fc_384_3dof_hq.txt', '0')]; + +split_md_file_name = 'split_md.bin'; + +split_rend_file_outs = ['recons_out_pos0.wav', + 'recons_out_pos1.wav', + 'recons_out_pos2.wav', + 'rotated_ref_pos0.wav', + 'rotated_ref_pos1.wav', + 'rotated_ref_pos2.wav', + 'rotated_ref_RefPos.wav', + 'split_rend_MD_bitrate.txt'] + + +def check_and_makedir(dir_path): + if not os.path.exists(dir_path): + try: + os.makedirs(dir_path) + except OSError as e: + if e.errno != errno.EEXIST: + raise # raises the error again + + +def generate_split_rend_lis_items(file_dir, exe_dir, out_dir): + check_and_makedir(out_dir); + for idx in range(0, len(file_tags)): + for hr_idx in range(0, len(hr_file_tags)): + for rend in range(0, len(renderers)): + filename = file_names[idx]; + file_in = os.path.join(file_dir, filename); + rend_exe = os.path.join(exe_dir, 'IVAS_rend.exe'); + if renderers[rend][2] == '0': + bs_file_out_name = '_'.join([file_tags[idx], 'out.pkt']); + bs_file_out = os.path.join(out_dir, bs_file_out_name); + out_fmt = 'BINAURAL_SPLIT_CLDFB'; + else: + bs_file_out_name = '_'.join([file_tags[idx], 'out.wav']); + bs_file_out = os.path.join(out_dir, bs_file_out_name); + out_fmt = 'BINAURAL_SPLIT_PCM'; + md_out_arg = ['-om', split_md_file_name]; + md_in_arg = ['-im', split_md_file_name]; + file_out_name = '_'.join([file_tags[idx], renderers[rend][0], 'out.wav']); + file_out = os.path.join(out_dir, file_out_name); + + print(file_in) + print(bs_file_out) + print(file_out) + + hr_pre_file_name = pre_hr_file_names[hr_idx]; + hr_pre_file = os.path.join(file_dir, hr_pre_file_name); + hr_post_file_name = post_hr_file_names[hr_idx]; + hr_post_file = os.path.join(file_dir, hr_post_file_name); + + pre_rend_cmd = [ + rend_exe, + '-rc', renderers[rend][1], + md_out_arg[0], md_out_arg[1], + '-i', file_in, + '-if', 'HOA3', + '-o', bs_file_out, + '-of', out_fmt, + '-fs', '48', + '-tf', hr_pre_file, + ] + + + print(pre_rend_cmd) + test_status = subprocess.call(pre_rend_cmd, shell=False) + + + post_rend_cmd = [ + rend_exe, + md_in_arg[0], md_in_arg[1], + '-i', bs_file_out, + '-if', out_fmt, + '-o', file_out, + '-of', 'BINAURAL', + '-fs', '48', + '-tf', hr_post_file, + ] + + + print(post_rend_cmd) + test_status = subprocess.call(post_rend_cmd, shell=False) + + if os.path.exists(bs_file_out): + os.remove(bs_file_out); + + if os.path.exists(split_md_file_name): + os.remove(split_md_file_name); + + + for fo in split_rend_file_outs: + file_old = os.path.join(os. getcwd(), fo); + file_out_name = '_'.join([file_tags[idx], hr_file_tags[hr_idx], renderers[rend][0], fo]); + file_new = os.path.join(out_dir, file_out_name); + if os.path.exists(file_old): + os.rename(file_old, file_new); + + +def main(argv): + print('USAGE : python generate_split_rend_lis_items.py file_dir exe_dir out_dir') + if len(argv) < 3: + return print(len(argv)) + return generate_split_rend_lis_items(*argv[1:]) + + +if __name__ == "__main__": + sys.exit(main(sys.argv)) \ No newline at end of file diff --git a/Workspace_msvc/trajectories/post-renderer_pose_files/post_0static.csv b/Workspace_msvc/trajectories/post-renderer_pose_files/post_0static.csv new file mode 100644 index 0000000000..a292a3576c --- /dev/null +++ b/Workspace_msvc/trajectories/post-renderer_pose_files/post_0static.csv @@ -0,0 +1,4 @@ +-3,0,0,0 +-3,0,0,0 +-3,0,0,0 +-3,0,0,0 diff --git a/Workspace_msvc/trajectories/pre-renderer_pose_files/pre_pitch-20static.csv b/Workspace_msvc/trajectories/pre-renderer_pose_files/pre_pitch-20static.csv new file mode 100644 index 0000000000..dab3c6940a --- /dev/null +++ b/Workspace_msvc/trajectories/pre-renderer_pose_files/pre_pitch-20static.csv @@ -0,0 +1,4 @@ +-3,0,-20,0 +-3,0,-20,0 +-3,0,-20,0 +-3,0,-20,0 diff --git a/Workspace_msvc/trajectories/pre-renderer_pose_files/pre_pitch20static.csv b/Workspace_msvc/trajectories/pre-renderer_pose_files/pre_pitch20static.csv new file mode 100644 index 0000000000..ae6ac9cd9c --- /dev/null +++ b/Workspace_msvc/trajectories/pre-renderer_pose_files/pre_pitch20static.csv @@ -0,0 +1,4 @@ +-3,0,20,0 +-3,0,20,0 +-3,0,20,0 +-3,0,20,0 diff --git a/Workspace_msvc/trajectories/pre-renderer_pose_files/pre_roll-20static.csv b/Workspace_msvc/trajectories/pre-renderer_pose_files/pre_roll-20static.csv new file mode 100644 index 0000000000..5db0b1cab3 --- /dev/null +++ b/Workspace_msvc/trajectories/pre-renderer_pose_files/pre_roll-20static.csv @@ -0,0 +1,4 @@ +-3,0,0,-20 +-3,0,0,-20 +-3,0,0,-20 +-3,0,0,-20 diff --git a/Workspace_msvc/trajectories/pre-renderer_pose_files/pre_roll20static.csv b/Workspace_msvc/trajectories/pre-renderer_pose_files/pre_roll20static.csv new file mode 100644 index 0000000000..5bd8c2c4d9 --- /dev/null +++ b/Workspace_msvc/trajectories/pre-renderer_pose_files/pre_roll20static.csv @@ -0,0 +1,4 @@ +-3,0,0,20 +-3,0,0,20 +-3,0,0,20 +-3,0,0,20 diff --git a/Workspace_msvc/trajectories/pre-renderer_pose_files/pre_yaw-20pitch-20static.csv b/Workspace_msvc/trajectories/pre-renderer_pose_files/pre_yaw-20pitch-20static.csv new file mode 100644 index 0000000000..e48c0a58f5 --- /dev/null +++ b/Workspace_msvc/trajectories/pre-renderer_pose_files/pre_yaw-20pitch-20static.csv @@ -0,0 +1,4 @@ +-3,-20,-20,0 +-3,-20,-20,0 +-3,-20,-20,0 +-3,-20,-20,0 diff --git a/Workspace_msvc/trajectories/pre-renderer_pose_files/pre_yaw-20static.csv b/Workspace_msvc/trajectories/pre-renderer_pose_files/pre_yaw-20static.csv new file mode 100644 index 0000000000..6e446847a9 --- /dev/null +++ b/Workspace_msvc/trajectories/pre-renderer_pose_files/pre_yaw-20static.csv @@ -0,0 +1,4 @@ +-3,-20,0,0 +-3,-20,0,0 +-3,-20,0,0 +-3,-20,0,0 diff --git a/Workspace_msvc/trajectories/pre-renderer_pose_files/pre_yaw20pitch20static.csv b/Workspace_msvc/trajectories/pre-renderer_pose_files/pre_yaw20pitch20static.csv new file mode 100644 index 0000000000..58788cc7de --- /dev/null +++ b/Workspace_msvc/trajectories/pre-renderer_pose_files/pre_yaw20pitch20static.csv @@ -0,0 +1,4 @@ +-3,20,20,0 +-3,20,20,0 +-3,20,20,0 +-3,20,20,0 diff --git a/Workspace_msvc/trajectories/pre-renderer_pose_files/pre_yaw20static.csv b/Workspace_msvc/trajectories/pre-renderer_pose_files/pre_yaw20static.csv new file mode 100644 index 0000000000..2d674f971b --- /dev/null +++ b/Workspace_msvc/trajectories/pre-renderer_pose_files/pre_yaw20static.csv @@ -0,0 +1,4 @@ +-3,20,0,0 +-3,20,0,0 +-3,20,0,0 +-3,20,0,0 diff --git a/apps/decoder.c b/apps/decoder.c index 29d0e17119..1bd6168c96 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -57,6 +57,9 @@ #include "debug.h" #endif #include "render_config_reader.h" +#ifdef SPLIT_REND_WITH_HEAD_ROT +#include "split_render_file_read_write.h" +#endif #define WMC_TOOL_MAN @@ -72,18 +75,19 @@ static #define MIN_NUM_BITS_ACTIVE_FRAME 56 #define NUM_BITS_SID_IVAS_5K2 104 -#define MAX_FRAME_SIZE ( 48000 / 50 ) +#define NUM_FRAMES_PER_SEC 50 +#define MAX_FRAME_SIZE ( 48000 / NUM_FRAMES_PER_SEC ) #define MAX_NUM_OUTPUT_CHANNELS 16 #define MAX_OUTPUT_PCM_BUFFER_SIZE ( MAX_NUM_OUTPUT_CHANNELS * MAX_FRAME_SIZE ) #ifdef SPLIT_REND_WITH_HEAD_ROT -#define MAX_SPLIT_REND_BITS_BUFFER_SIZE_IN_BYTES ( 3750 ) /*temp buffer size for 1.5 mbps*/ +#define MAX_SPLIT_REND_BITRATE ( 768000 ) +#define MAX_SPLIT_REND_BITS_BUFFER_SIZE_IN_BYTES ( ( ( (int32_t) MAX_SPLIT_REND_BITRATE / NUM_FRAMES_PER_SEC ) + 7 ) >> 3 ) #endif #define IVAS_PUBLIC_ORIENT_TRK_REF 0 #define IVAS_PUBLIC_ORIENT_TRK_AVG 1 - typedef struct { char *inputBitstreamFilename; @@ -119,11 +123,6 @@ typedef struct FILE *agcBitstream; /* temporary */ #endif #endif -#ifdef SPLIT_REND_WITH_HEAD_ROT - IVAS_SPLIT_REND_MODE splitRendMode; - char *postRendheadrotTrajFileName; -#endif - } DecArguments; @@ -135,7 +134,6 @@ static bool parseCmdlIVAS_dec( int16_t argc, char **argv, DecArguments *arg ); static void usage_dec( void ); static ivas_error decodeG192( DecArguments arg, BS_READER_HANDLE hBsReader, HeadRotFileReader *headRotReader, #ifdef SPLIT_REND_WITH_HEAD_ROT - HeadRotFileReader *postRendheadRotReader, uint8_t *splitRendBitsBuf, #endif IVAS_DEC_HANDLE hIvasDec, @@ -199,9 +197,6 @@ int main( LsCustomFileReader *hLsCustomReader = NULL; hrtfFileReader *hrtfReader = NULL; HeadRotFileReader *headRotReader = NULL; -#ifdef SPLIT_REND_WITH_HEAD_ROT - HeadRotFileReader *postRendheadRotReader = NULL; -#endif ivas_error error = IVAS_ERR_UNKNOWN; int16_t pcmBuf[MAX_OUTPUT_PCM_BUFFER_SIZE]; #ifdef SPLIT_REND_WITH_HEAD_ROT @@ -303,16 +298,6 @@ int main( goto cleanup; } } -#ifdef SPLIT_REND_WITH_HEAD_ROT - if ( arg.splitRendMode == SPLIT_REND_COMB ) - { - if ( ( error = HeadRotationFileReader_open( arg.postRendheadrotTrajFileName, &postRendheadRotReader ) ) != IVAS_ERR_OK ) - { - fprintf( stderr, "\nError: Can't open post renderer head-rotation file %s \n\n", arg.postRendheadrotTrajFileName ); - goto cleanup; - } - } -#endif /*------------------------------------------------------------------------------------------* * Open custom loudspeaker layout file @@ -343,20 +328,17 @@ int main( /*------------------------------------------------------------------------------------------* * Configure the decoder *------------------------------------------------------------------------------------------*/ - -#ifdef DEBUGGING - if ( ( error = IVAS_DEC_Configure( hIvasDec, arg.output_Fs, arg.outputFormat, arg.customLsOutputEnabled, arg.hrtfReaderEnabled, arg.enableHeadRotation, #ifdef SPLIT_REND_WITH_HEAD_ROT - arg.splitRendMode, + if ( arg.outputFormat == IVAS_DEC_OUTPUT_SPLIT_BINAURAL_CLDFB ) + { + arg.enableHeadRotation = true; + } #endif +#ifdef DEBUGGING + if ( ( error = IVAS_DEC_Configure( hIvasDec, arg.output_Fs, arg.outputFormat, arg.customLsOutputEnabled, arg.hrtfReaderEnabled, arg.enableHeadRotation, arg.forceSubframeBinauralization ) ) != IVAS_ERR_OK ) #else - if ( ( error = IVAS_DEC_Configure( hIvasDec, arg.output_Fs, arg.outputFormat, arg.customLsOutputEnabled, arg.hrtfReaderEnabled, arg.enableHeadRotation -#ifdef SPLIT_REND_WITH_HEAD_ROT - , - arg.enableSplitRendWithHeadRot -#endif - ) ) != IVAS_ERR_OK ) + if ( ( error = IVAS_DEC_Configure( hIvasDec, arg.output_Fs, arg.outputFormat, arg.customLsOutputEnabled, arg.hrtfReaderEnabled, arg.enableHeadRotation ) ) != IVAS_ERR_OK ) #endif { fprintf( stderr, "\nConfigure failed: %s\n\n", IVAS_DEC_GetErrorMessage( error ) ); @@ -459,11 +441,19 @@ int main( IVAS_RENDER_CONFIG_DATA renderConfig; /* sanity check */ +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( ( arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL_ROOM ) && ( arg.outputFormat != IVAS_DEC_OUTPUT_SPLIT_BINAURAL_CLDFB ) ) + { + fprintf( stderr, "\nExternal Renderer Config is supported only when BINAURAL_ROOM is used as output OR when Split rendering mode is enabled. Exiting. \n" ); + exit( -1 ); + } +#else if ( arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL_ROOM ) { fprintf( stderr, "\nExternal Renderer Config is supported only when BINAURAL_ROOM is used as output. Exiting. \n\n" ); goto cleanup; } +#endif if ( ( error = IVAS_DEC_GetRenderConfig( hIvasDec, &renderConfig ) ) != IVAS_ERR_OK ) { @@ -547,7 +537,7 @@ int main( { error = decodeG192( arg, hBsReader, headRotReader, #ifdef SPLIT_REND_WITH_HEAD_ROT - postRendheadRotReader, splitRendBitsBuf, + splitRendBitsBuf, #endif hIvasDec, pcmBuf ); } @@ -596,9 +586,6 @@ cleanup: CustomLsReader_close( &hLsCustomReader ); hrtfFileReader_close( &hrtfReader ); HeadRotationFileReader_close( &headRotReader ); -#ifdef SPLIT_REND_WITH_HEAD_ROT - HeadRotationFileReader_close( &postRendheadRotReader ); -#endif RenderConfigReader_close( &renderConfigReader ); if ( BS_Reader_Close( &hBsReader ) != IVAS_ERR_OK ) @@ -697,6 +684,12 @@ static IVAS_DEC_AUDIO_CONFIG cmdline2config( { output_config = IVAS_DEC_OUTPUT_BINAURAL; } +#ifdef SPLIT_REND_WITH_HEAD_ROT + else if ( strcmp( argv_to_upper, "SPLIT_BINAURAL" ) == 0 ) + { + output_config = IVAS_DEC_OUTPUT_SPLIT_BINAURAL_CLDFB; + } +#endif else if ( strcmp( argv_to_upper, "BINAURAL_ROOM" ) == 0 ) { output_config = IVAS_DEC_OUTPUT_BINAURAL_ROOM; @@ -709,44 +702,6 @@ static IVAS_DEC_AUDIO_CONFIG cmdline2config( return output_config; } - -#ifdef SPLIT_REND_WITH_HEAD_ROT -static int8_t parseSplitRendMode( - char *value, - IVAS_SPLIT_REND_MODE *SplitRendMode ) -{ - int16_t temp; - int8_t success; - success = 1; - to_upper( value ); - - temp = (int16_t) atoi( value ); - if ( temp == 0 ) - { - *SplitRendMode = SPLIT_REND_DISABLED; - } -#if 0 - else if ( temp == 1 ) - { - *SplitRendMode = SPLIT_REND_PRE; - } - else if ( temp == 2 ) - { - *SplitRendMode = SPLIT_REND_POST; - } -#endif - else if ( temp == 3 ) - { - *SplitRendMode = SPLIT_REND_COMB; - } - else - { - fprintf( stderr, "Error: Incorrect or unsupported value for split rendering mode specified!\n\n" ); - success = 0; - } - return success ? 0 : -1; -} -#endif /*---------------------------------------------------------------------* * parseCmdlIVAS_dec() * @@ -779,9 +734,6 @@ static bool parseCmdlIVAS_dec( arg->enableHeadRotation = false; arg->headrotTrajFileName = NULL; -#ifdef SPLIT_REND_WITH_HEAD_ROT - arg->postRendheadrotTrajFileName = NULL; -#endif arg->orientation_tracking = IVAS_PUBLIC_ORIENT_TRK_REF; @@ -805,10 +757,6 @@ static bool parseCmdlIVAS_dec( arg->inputFormat = IVAS_DEC_INPUT_FORMAT_G192; arg->no_diegetic_pan = 0.f; -#ifdef SPLIT_REND_WITH_HEAD_ROT - arg->splitRendMode = SPLIT_REND_DISABLED; -#endif - /*-----------------------------------------------------------------* * Initialization *-----------------------------------------------------------------*/ @@ -960,41 +908,6 @@ static bool parseCmdlIVAS_dec( arg->headrotTrajFileName = argv[i]; i++; } -#ifdef SPLIT_REND_WITH_HEAD_ROT - else if ( strcmp( argv_to_upper, "-SBRM" ) == 0 ) - { - i++; - - if ( argc - i <= 4 || argv[i][0] == '-' ) - { - fprintf( stderr, "Error: Head rotation file name not specified!\n\n" ); - usage_dec(); - return false; - } - if ( parseSplitRendMode( argv[i], &arg->splitRendMode ) != 0 ) - { - fprintf( stderr, "Error: Invalid split rendering mode %s \n\n", argv[i] ); - usage_dec(); - return false; - } - i++; - } - else if ( strcmp( argv_to_upper, "-PRTF" ) == 0 ) - { - arg->enableHeadRotation = true; - i++; - - if ( argc - i <= 4 || argv[i][0] == '-' ) - { - fprintf( stderr, "Error: Head rotation file name not specified!\n\n" ); - usage_dec(); - return false; - } - - arg->postRendheadrotTrajFileName = argv[i]; - i++; - } -#endif else if ( strcmp( argv_to_upper, "-OTR" ) == 0 ) { if ( strlen( argv[i + 1] ) > 3 ) @@ -1171,8 +1084,13 @@ static void usage_dec( void ) fprintf( stdout, "Mandatory parameters:\n" ); fprintf( stdout, "---------------------\n" ); +#ifdef SPLIT_REND_WITH_HEAD_ROT + fprintf( stdout, "OutputConf : Output configuration: MONO, STEREO, 5_1, 7_1, 5_1_2, 5_1_4, 7_1_4, FOA,\n" ); + fprintf( stdout, " HOA2, HOA3, BINAURAL, BINAURAL_ROOM, SPLIT_BINAURAL, EXT\n" ); +#else fprintf( stdout, "OutputConf : Output configuration: MONO, STEREO, 5_1, 7_1, 5_1_2, 5_1_4, 7_1_4, FOA,\n" ); fprintf( stdout, " HOA2, HOA3, BINAURAL, BINAURAL_ROOM, EXT\n" ); +#endif fprintf( stdout, " By default, channel order and loudspeaker positions are equal to the\n" ); fprintf( stdout, " encoder. For loudspeaker outputs, OutputConf can be a custom loudspeaker\n" ); fprintf( stdout, " layout file. See readme.txt for details.\n" ); @@ -1203,10 +1121,6 @@ static void usage_dec( void ) fprintf( stdout, " which of the two supported formats is in use.\n" ); fprintf( stdout, " default bitstream file format is G.192\n" ); fprintf( stdout, "-T File : Head rotation specified by external trajectory File\n" ); -#ifdef SPLIT_REND_WITH_HEAD_ROT - fprintf( stdout, "-sbrm mode : split rendering mode (0 - disabled, 1 - PRE RENDERER, 2 - POST RENDERER, 3 - COMBINED PRE-POST RENDERING), by default disabled\n" ); - fprintf( stdout, "-prtf File : Head rotation for post renderer specified by external trajectory File (to be used with split rendering)\n" ); -#endif fprintf( stdout, "-hrtf File : HRTF filter File used in ISm format and BINAURAL output configuration\n" ); #ifdef DEBUGGING fprintf( stdout, "-force_subframe_bin : Forces parametric binauralizer code to use 5 ms time resolution even when\n" ); @@ -1255,7 +1169,6 @@ static ivas_error decodeG192( BS_READER_HANDLE hBsReader, HeadRotFileReader *headRotReader, #ifdef SPLIT_REND_WITH_HEAD_ROT - HeadRotFileReader *postRendheadRotReader, uint8_t *splitRendBitsBuf, #endif IVAS_DEC_HANDLE hIvasDec, @@ -1285,6 +1198,9 @@ static ivas_error decodeG192( #ifdef SPLIT_REND_WITH_HEAD_ROT IVAS_SPLIT_REND_BITS splitRendBits; + SplitFileReadWrite *hSplitRendFileReadWrite; + int16_t delayNumSamples_temp; + int32_t delayTimeScale_temp; #endif IsmFileWriter *ismWriters[IVAS_MAX_NUM_OBJECTS]; @@ -1313,6 +1229,7 @@ static ivas_error decodeG192( splitRendBits.bits_read = 0; splitRendBits.bits_written = 0; splitRendBits.buf_len = MAX_SPLIT_REND_BITS_BUFFER_SIZE_IN_BYTES; + hSplitRendFileReadWrite = NULL; #endif /*------------------------------------------------------------------------------------------* @@ -1362,40 +1279,36 @@ static ivas_error decodeG192( if ( arg.enableHeadRotation ) { IVAS_QUATERNION Quaternions[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES]; - - if ( ( error = HeadRotationFileReading( headRotReader, Quaternions, frame ) ) != IVAS_ERR_OK ) +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( headRotReader == NULL ) { - fprintf( stderr, "\nError %s while reading head orientation from %s\n", IVAS_DEC_GetErrorMessage( error ), HeadRotationFileReader_getFilePath( headRotReader ) ); - goto cleanup; + for ( i = 0; i < IVAS_MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) + { + Quaternions[i].w = -3.0f; + Quaternions[i].x = 0.0f; + Quaternions[i].y = 0.0f; + Quaternions[i].z = 0.0f; + } + } + else +#endif + { + if ( ( error = HeadRotationFileReading( headRotReader, Quaternions, frame ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError %s while reading head orientation from %s\n", IVAS_DEC_GetErrorMessage( error ), HeadRotationFileReader_getFilePath( headRotReader ) ); + goto cleanup; + } } - if ( ( error = IVAS_DEC_FeedHeadTrackData( hIvasDec, Quaternions #ifdef SPLIT_REND_WITH_HEAD_ROT , - SPLIT_REND_PRE + DEFAULT_AXIS #endif ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nIVAS_DEC_FeedHeadTrackData failed: %s\n", IVAS_DEC_GetErrorMessage( error ) ); goto cleanup; } - -#ifdef SPLIT_REND_WITH_HEAD_ROT - if ( arg.splitRendMode == SPLIT_REND_COMB ) - { - if ( ( error = HeadRotationFileReading( postRendheadRotReader, Quaternions, frame ) ) != IVAS_ERR_OK ) - { - fprintf( stderr, "\nError %s while reading post rendering head orientation from %s\n", IVAS_DEC_GetErrorMessage( error ), HeadRotationFileReader_getFilePath( headRotReader ) ); - goto cleanup; - } - - if ( ( error = IVAS_DEC_FeedHeadTrackData( hIvasDec, Quaternions, SPLIT_REND_POST ) ) != IVAS_ERR_OK ) - { - fprintf( stderr, "\nIVAS_DEC_FeedHeadTrackData failed: %s\n", IVAS_DEC_GetErrorMessage( error ) ); - goto cleanup; - } - } -#endif } /* Run decoder for one frame (get rendered output) */ @@ -1437,11 +1350,27 @@ static ivas_error decodeG192( goto cleanup; } - /* Open audio writer and write all previously skipped bad frames now that frame size is known */ - if ( ( error = AudioFileWriter_open( &afWriter, arg.outputWavFilename, arg.output_Fs, nOutChannels ) ) != IVAS_ERR_OK ) +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( arg.outputFormat == IVAS_DEC_OUTPUT_SPLIT_BINAURAL_CLDFB ) { - fprintf( stderr, "\nUnable to open output file %s\n", arg.outputWavFilename ); - goto cleanup; + IVAS_DEC_GetDelay( hIvasDec, &delayNumSamples_temp, &delayTimeScale_temp ); + error = split_rend_writer_open( &hSplitRendFileReadWrite, arg.outputWavFilename, delayNumSamples_temp, delayTimeScale_temp ); + if ( error != IVAS_ERR_OK ) + { + fprintf( stderr, "Could not open split rend metadata file %s\n", arg.outputWavFilename ); + exit( -1 ); + } + afWriter = NULL; + } + else +#endif + { + /* Open audio writer and write all previously skipped bad frames now that frame size is known */ + if ( ( error = AudioFileWriter_open( &afWriter, arg.outputWavFilename, arg.output_Fs, nOutChannels ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nUnable to open output file %s\n", arg.outputWavFilename ); + goto cleanup; + } } int16_t *zeroBuf = malloc( pcmFrameSize * sizeof( int16_t ) ); @@ -1449,18 +1378,34 @@ static ivas_error decodeG192( for ( i = 0; i < numInitialBadFrames; ++i ) { - if ( delayNumSamples < nOutSamples ) +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( hSplitRendFileReadWrite != NULL ) { - if ( ( error = AudioFileWriter_write( afWriter, zeroBuf, nOutSamples * nOutChannels - ( delayNumSamples * nOutChannels ) ) ) != IVAS_ERR_OK ) + IVAS_SPLIT_REND_BITS splitRendBitsZero; + splitRendBitsZero.bits_written = 0; + splitRendBitsZero.bits_read = 0; + if ( split_rend_write_bitstream_to_file( hSplitRendFileReadWrite, splitRendBitsZero.bits_buf, &splitRendBitsZero.bits_read, &splitRendBitsZero.bits_written ) != IVAS_ERR_OK ) { - fprintf( stderr, "\nOutput audio file writer error\n" ); - goto cleanup; + fprintf( stderr, "\nUnable to write to bitstream file!\n" ); + exit( -1 ); } - delayNumSamples = 0; } else +#endif { - delayNumSamples -= nOutSamples; + if ( delayNumSamples < nOutSamples ) + { + if ( ( error = AudioFileWriter_write( afWriter, zeroBuf, nOutSamples * nOutChannels - ( delayNumSamples * nOutChannels ) ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nOutput audio file writer error\n" ); + goto cleanup; + } + delayNumSamples = 0; + } + else + { + delayNumSamples -= nOutSamples; + } } } @@ -1569,18 +1514,31 @@ static ivas_error decodeG192( /* Write current frame */ if ( decodedGoodFrame ) { - if ( delayNumSamples < nOutSamples ) +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( hSplitRendFileReadWrite != NULL ) { - if ( ( error = AudioFileWriter_write( afWriter, &pcmBuf[delayNumSamples * nOutChannels], nOutSamples * nOutChannels - ( delayNumSamples * nOutChannels ) ) ) != IVAS_ERR_OK ) + if ( split_rend_write_bitstream_to_file( hSplitRendFileReadWrite, splitRendBits.bits_buf, &splitRendBits.bits_read, &splitRendBits.bits_written ) != IVAS_ERR_OK ) { - fprintf( stderr, "\nOutput audio file writer error\n" ); - goto cleanup; + fprintf( stderr, "\nUnable to write to bitstream file!\n" ); + exit( -1 ); } - delayNumSamples = 0; } else +#endif { - delayNumSamples -= nOutSamples; + if ( delayNumSamples < nOutSamples ) + { + if ( ( error = AudioFileWriter_write( afWriter, &pcmBuf[delayNumSamples * nOutChannels], nOutSamples * nOutChannels - ( delayNumSamples * nOutChannels ) ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nOutput audio file writer error\n" ); + goto cleanup; + } + delayNumSamples = 0; + } + else + { + delayNumSamples -= nOutSamples; + } } } @@ -1678,10 +1636,13 @@ static ivas_error decodeG192( /* add zeros at the end to have equal length of synthesized signals */ memset( pcmBuf, 0, zeroPad * nOutChannels * sizeof( int16_t ) ); - if ( ( error = AudioFileWriter_write( afWriter, pcmBuf, zeroPad * nOutChannels ) ) != IVAS_ERR_OK ) + if ( afWriter != NULL ) { - fprintf( stderr, "\nOutput audio file writer error\n" ); - goto cleanup; + if ( ( error = AudioFileWriter_write( afWriter, pcmBuf, zeroPad * nOutChannels ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nOutput audio file writer error\n" ); + goto cleanup; + } } /*------------------------------------------------------------------------------------------* @@ -1691,8 +1652,16 @@ static ivas_error decodeG192( decodingFailed = false; /* This will stay set to true if cleanup is reached via a goto due to an error */ cleanup: - - AudioFileWriter_close( &afWriter ); +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( hSplitRendFileReadWrite != NULL ) + { + split_rend_reader_writer_close( &hSplitRendFileReadWrite ); + } + if ( afWriter != NULL ) +#endif + { + AudioFileWriter_close( &afWriter ); + } MasaFileWriter_close( &masaWriter ); for ( i = 0; i < IVAS_MAX_NUM_OBJECTS; i++ ) { diff --git a/apps/renderer.c b/apps/renderer.c index 1fc6a5bad5..34b2b32f53 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -44,6 +44,9 @@ #include "masa_file_reader.h" #include "prot.h" #include "render_config_reader.h" +#ifdef SPLIT_REND_WITH_HEAD_ROT +#include "split_render_file_read_write.h" +#endif #ifdef WMOPS #include "PROM_Size_lib_rend.h" #include "wmops.h" @@ -164,6 +167,10 @@ typedef struct IVAS_CUSTOM_LS_DATA inSetupCustom; RendererInput masaBuses[RENDERER_MAX_MASA_INPUTS]; uint16_t numMasaBuses; +#ifdef SPLIT_REND_WITH_HEAD_ROT + RendererInput binBuses[RENDERER_MAX_BIN_INPUTS]; + uint16_t numBinBuses; +#endif } InputConfig; typedef struct @@ -182,11 +189,10 @@ typedef struct OutputConfig outConfig; char inMetadataFilePaths[RENDERER_MAX_ISM_INPUTS][RENDERER_MAX_CLI_ARG_LENGTH]; int16_t numInMetadataFiles; - char headRotationFilePath[RENDERER_MAX_CLI_ARG_LENGTH]; #ifdef SPLIT_REND_WITH_HEAD_ROT - IVAS_SPLIT_REND_MODE splitRendMode; - char postRendheadRotationFilePath[RENDERER_MAX_CLI_ARG_LENGTH]; + char outMetadataFilePath[RENDERER_MAX_CLI_ARG_LENGTH]; #endif + char headRotationFilePath[RENDERER_MAX_CLI_ARG_LENGTH]; char customHrtfFilePath[RENDERER_MAX_CLI_ARG_LENGTH]; char renderConfigFilePath[RENDERER_MAX_CLI_ARG_LENGTH]; int8_t orientationTracking; @@ -216,8 +222,7 @@ typedef enum CmdLnOptionId_listFormats, CmdLnOptionId_inputGain, #ifdef SPLIT_REND_WITH_HEAD_ROT - CmdLnOptionId_SplitRendMode, - CmdLnOptionId_PostRendtrajFile, + CmdLnOptionId_outputMetadata, #endif } CmdLnOptionId; @@ -238,7 +243,11 @@ static const CmdLnParser_Option cliOptions[] = { .id = CmdLnOptionId_inputMetadata, .match = "input_metadata", .matchShort = "im", +#ifdef SPLIT_REND_WITH_HEAD_ROT + .description = "Space-separated list of path to metadata files for ISM or MASA inputs or BINAURAL_SPLIT_PCM input mode", +#else .description = "Space-separated list of path to metadata files for ISM or MASA inputs", +#endif }, { .id = CmdLnOptionId_outputFile, @@ -262,20 +271,18 @@ static const CmdLnParser_Option cliOptions[] = { .id = CmdLnOptionId_trajFile, .match = "trajectory_file", .matchShort = "tf", +#ifdef SPLIT_REND_WITH_HEAD_ROT + .description = "Head rotation trajectory file for simulation of head tracking (only for BINAURAL, BINAURAL_SPLIT_PCM, BINAURAL_SPLIT_CLDFB and BINAURAL_ROOM outputs)", +#else .description = "Head rotation trajectory file for simulation of head tracking (only for BINAURAL and BINAURAL_ROOM outputs)", +#endif }, #ifdef SPLIT_REND_WITH_HEAD_ROT { - .id = CmdLnOptionId_SplitRendMode, - .match = "split_bin_rend_mode", - .matchShort = "sbrm", - .description = "Split rendering mode option (only for BINAURAL and BINAURAL_ROOM outputs)", - }, - { - .id = CmdLnOptionId_PostRendtrajFile, - .match = "post_rend_trajectory_file", - .matchShort = "prtf", - .description = "Split rendering option with head tracking data for post renderer (only for BINAURAL and BINAURAL_ROOM outputs)", + .id = CmdLnOptionId_outputMetadata, + .match = "output_metadata", + .matchShort = "om", + .description = "coded metadata file for BINAURAL_SPLIT_PCM output mode", }, #endif { @@ -435,8 +442,13 @@ static void convertInputBuffer( const int16_t *intBuffer, const int16_t numIntSa #endif ); -static void convertOutputBuffer( const float *floatBuffer, const int16_t numSamplesPerChannel, const int16_t numChannels, int16_t *intBuffer ); - +static void convertOutputBuffer( const float *floatBuffer, const int16_t numSamplesPerChannel, const int16_t numChannels, int16_t *intBuffer +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + const int16_t cldfb_in, + HANDLE_CLDFB_FILTER_BANK *cldfbSyn +#endif +); static IVAS_REND_ReadOnlyAudioBuffer getReadOnlySubBuffer( IVAS_REND_AudioBuffer buffer, const int16_t chBeginIdx, const int16_t numChannels ) { @@ -454,7 +466,11 @@ static int16_t getTotalNumInChannels( IVAS_REND_InputId mcIds[RENDERER_MAX_MC_INPUTS], IVAS_REND_InputId ismIds[RENDERER_MAX_ISM_INPUTS], IVAS_REND_InputId sbaIds[RENDERER_MAX_SBA_INPUTS], - IVAS_REND_InputId masaIds[RENDERER_MAX_MASA_INPUTS] ) + IVAS_REND_InputId masaIds[RENDERER_MAX_MASA_INPUTS], +#ifdef SPLIT_REND_WITH_HEAD_ROT + IVAS_REND_InputId splitBinIds[RENDERER_MAX_BIN_INPUTS] +#endif +) { int16_t totalNumInChannels = 0; int16_t i, numInputChannels; @@ -525,6 +541,24 @@ static int16_t getTotalNumInChannels( totalNumInChannels += numInputChannels; } +#ifdef SPLIT_REND_WITH_HEAD_ROT + for ( i = 0; i < RENDERER_MAX_BIN_INPUTS; ++i ) + { + if ( splitBinIds[i] == 0 ) + { + /* Skip inactive inputs */ + continue; + } + + if ( ( error = IVAS_REND_GetInputNumChannels( hIvasRend, splitBinIds[i], &numInputChannels ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); + exit( -1 ); + } + totalNumInChannels += numInputChannels; + } +#endif + return totalNumInChannels; } @@ -532,7 +566,12 @@ static void setupWithSingleFormatInput( CmdlnArgs args, char *audioFilePath, IsmPositionProvider *positionProvider, - MasaFileReader **masaReaders ) + MasaFileReader **masaReaders +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + SplitFileReadWrite **hhSplitRendFileReadWrite +#endif +) { /* With single-format input, inputFilePath is the path to input audio file. */ strncpy( audioFilePath, args.inputFilePath, FILENAME_MAX - 1 ); @@ -578,6 +617,22 @@ static void setupWithSingleFormatInput( } } } +#ifdef SPLIT_REND_WITH_HEAD_ROT + else if ( args.inConfig.numBinBuses != 0 ) + { + *hhSplitRendFileReadWrite = NULL; + if ( args.inConfig.binBuses[0].audioConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) + { + ivas_error error; + error = split_rend_reader_open( hhSplitRendFileReadWrite, args.inMetadataFilePaths[0] ); + if ( error != IVAS_ERR_OK ) + { + fprintf( stderr, "Could not open split rend metadata file %s\n", args.inMetadataFilePaths[0] ); + exit( -1 ); + } + } + } +#endif } static float dBToLin( @@ -589,7 +644,9 @@ static float dBToLin( #ifdef SPLIT_REND_WITH_HEAD_ROT static int16_t rend_openCldfb( HANDLE_CLDFB_FILTER_BANK cldfbAna[MAX_INPUT_CHANNELS], + HANDLE_CLDFB_FILTER_BANK cldfbSyn[MAX_INPUT_CHANNELS], const int16_t num_in_chs, + const int16_t num_out_chs, const int32_t output_Fs ) { int16_t n; @@ -601,10 +658,26 @@ static int16_t rend_openCldfb( return -1; } } + for ( ; n < MAX_INPUT_CHANNELS; n++ ) + { + cldfbAna[n] = NULL; + } + + for ( n = 0; n < num_out_chs; n++ ) + { + if ( openCldfb( &( cldfbSyn[n] ), CLDFB_SYNTHESIS, output_Fs, CLDFB_PROTOTYPE_5_00MS ) != IVAS_ERR_OK ) + { + return -1; + } + } + for ( ; n < MAX_INPUT_CHANNELS; n++ ) + { + cldfbSyn[n] = NULL; + } return 0; } -static void rend_closeCldfb( HANDLE_CLDFB_FILTER_BANK cldfbAna[MAX_INPUT_CHANNELS] ) +static void rend_closeCldfb( HANDLE_CLDFB_FILTER_BANK cldfbAna[MAX_INPUT_CHANNELS], HANDLE_CLDFB_FILTER_BANK cldfbSyn[MAX_INPUT_CHANNELS] ) { int16_t n; for ( n = 0; n < MAX_INPUT_CHANNELS; n++ ) @@ -614,21 +687,59 @@ static void rend_closeCldfb( HANDLE_CLDFB_FILTER_BANK cldfbAna[MAX_INPUT_CHANNEL deleteCldfb( &( cldfbAna[n] ) ); cldfbAna[n] = NULL; } + + if ( cldfbSyn[n] != NULL ) + { + deleteCldfb( &( cldfbSyn[n] ) ); + cldfbSyn[n] = NULL; + } } return; } -static int16_t get_cldfb_in_flag( CmdlnArgs *args ) +static int16_t get_cldfb_in_flag( IVAS_REND_AudioConfig audioConfig, IVAS_RENDER_CONFIG_DATA *renderConfig ) { int16_t cldfb_in; cldfb_in = 0; - if ( ( args->splitRendMode == SPLIT_REND_PRE ) || ( args->splitRendMode == SPLIT_REND_COMB ) ) + if ( renderConfig->renderer_type_override == IVAS_RENDER_TYPE_OVERRIDE_FASTCONV ) { +#ifdef DEBUGGING cldfb_in = 1; +#endif + if ( ( audioConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) ) + { + cldfb_in = 1; + } } return cldfb_in; } + +static int16_t is_split_post_rend_mode( CmdlnArgs *args ) +{ + int16_t flag; + flag = 0; + if ( ( args->inConfig.numBinBuses > 0 ) && + ( ( args->inConfig.binBuses[0].audioConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) || ( args->inConfig.binBuses[0].audioConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ) ) + { + flag = 1; + } + + return flag; +} + +static int16_t is_split_pre_rend_mode( CmdlnArgs *args ) +{ + int16_t flag; + flag = 0; + if ( ( args->outConfig.audioConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) || + ( args->outConfig.audioConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ) + { + flag = 1; + } + + return flag; +} #endif /* ============================================================================ */ @@ -640,9 +751,9 @@ int main( IVAS_REND_HANDLE hIvasRend; HeadRotFileReader *headRotReader = NULL; #ifdef SPLIT_REND_WITH_HEAD_ROT - HeadRotFileReader *postRendHeadRotReader = NULL; HANDLE_CLDFB_FILTER_BANK cldfbAna[MAX_INPUT_CHANNELS]; - int16_t cldfb_in; + HANDLE_CLDFB_FILTER_BANK cldfbSyn[MAX_INPUT_CHANNELS]; + int16_t cldfb_in, CLDFBframeSize_smpls; #endif hrtfFileReader *hrtfFileReader = NULL; IsmPositionProvider *positionProvider; @@ -654,12 +765,24 @@ int main( AudioFileWriter *audioWriter; int32_t inBufferSize; int32_t outBufferSize; +#ifdef SPLIT_REND_WITH_HEAD_ROT + int32_t bitsBufferSize; +#endif int16_t *inpInt16Buffer; float *inFloatBuffer; int16_t *outInt16Buffer; float *outFloatBuffer; +#ifdef SPLIT_REND_WITH_HEAD_ROT + uint8_t *bitsBufferData; +#endif IVAS_REND_AudioBuffer inBuffer; IVAS_REND_AudioBuffer outBuffer; +#ifdef SPLIT_REND_WITH_HEAD_ROT + IVAS_REND_BitstreamBuffer bitsBuffer; + SplitFileReadWrite *hSplitRendFileReadWrite; + int16_t delayNumSamples_temp; + int32_t delayTimeScale_temp; +#endif int16_t numSamplesRead; int16_t delayNumSamples = -1; int16_t delayNumSamples_orig = 0; @@ -686,6 +809,10 @@ int main( hMasaMetadata[i] = NULL; } +#ifdef SPLIT_REND_WITH_HEAD_ROT + hSplitRendFileReadWrite = NULL; +#endif + CmdlnArgs args = parseCmdlnArgs( argc, argv ); positionProvider = IsmPositionProvider_open(); @@ -699,13 +826,6 @@ int main( HeadRotationFileReader_open( args.headRotationFilePath, &headRotReader ); } -#ifdef SPLIT_REND_WITH_HEAD_ROT - if ( ( args.splitRendMode == SPLIT_REND_COMB ) && !isEmptyString( args.postRendheadRotationFilePath ) ) - { - HeadRotationFileReader_open( args.postRendheadRotationFilePath, &postRendHeadRotReader ); - } -#endif - if ( !isEmptyString( args.customHrtfFilePath ) ) { hrtfFileReader_open( args.customHrtfFilePath, &hrtfFileReader ); @@ -725,15 +845,37 @@ int main( else { /* With single-format input, all information is given on command line. */ - setupWithSingleFormatInput( args, audioFilePath, positionProvider, masaReaders ); + setupWithSingleFormatInput( args, audioFilePath, positionProvider, masaReaders +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + &hSplitRendFileReadWrite +#endif + ); } int32_t inFileSampleRate = 0; - if ( AudioFileReader_open( &audioReader, audioFilePath, &inFileSampleRate ) != IVAS_ERR_OK ) +#ifdef SPLIT_REND_WITH_HEAD_ROT + /*if split renderer is running in post renderer mode*/ + if ( ( args.inConfig.numBinBuses > 0 ) && ( args.inConfig.binBuses[0].audioConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) ) { - fprintf( stderr, "Error opening file: %s\n", audioFilePath ); - exit( -1 ); + error = split_rend_reader_open( &hSplitRendFileReadWrite, args.inputFilePath ); + if ( error != IVAS_ERR_OK ) + { + fprintf( stderr, "Could not open split rend metadata file %s\n", args.inputFilePath ); + exit( -1 ); + } + audioReader = NULL; + } + else +#endif + { + if ( AudioFileReader_open( &audioReader, audioFilePath, &inFileSampleRate ) != IVAS_ERR_OK ) + { + fprintf( stderr, "Error opening file: %s\n", audioFilePath ); + exit( -1 ); + } } + if ( args.sampleRate == 0 && inFileSampleRate == 0 ) { fprintf( stderr, "Sampling rate must be specified on command line when using raw PCM input\n" ); @@ -750,22 +892,22 @@ int main( } const int16_t frameSize_smpls = (int16_t) ( 20 * args.sampleRate / 1000 ); +#ifndef SPLIT_REND_WITH_HEAD_ROT #ifdef SPLIT_REND_WITH_HEAD_ROT const int16_t CLDFBframeSize_smpls = (int16_t) frameSize_smpls * 2; cldfb_in = get_cldfb_in_flag( &args ); +#endif #endif IVAS_REND_InputId mcIds[RENDERER_MAX_MC_INPUTS] = { 0 }; IVAS_REND_InputId ismIds[RENDERER_MAX_ISM_INPUTS] = { 0 }; IVAS_REND_InputId sbaIds[RENDERER_MAX_SBA_INPUTS] = { 0 }; IVAS_REND_InputId masaIds[RENDERER_MAX_MASA_INPUTS] = { 0 }; - - if ( ( error = IVAS_REND_Open( &hIvasRend, args.sampleRate, args.outConfig.audioConfig #ifdef SPLIT_REND_WITH_HEAD_ROT - , - args.splitRendMode + IVAS_REND_InputId splitBinIds[RENDERER_MAX_BIN_INPUTS] = { 0 }; #endif - ) ) != IVAS_ERR_OK ) + + if ( ( error = IVAS_REND_Open( &hIvasRend, args.sampleRate, args.outConfig.audioConfig ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error opening renderer handle: %s\n", ivas_error_to_string( error ) ); exit( -1 ); @@ -777,16 +919,30 @@ int main( exit( -1 ); } +#ifdef SPLIT_REND_WITH_HEAD_ROT + CLDFBframeSize_smpls = 0; + cldfb_in = 0; +#endif + if ( args.renderConfigFilePath[0] != '\0' ) { IVAS_RENDER_CONFIG_DATA renderConfig; /* sanity check */ +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( ( args.outConfig.audioConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM ) && !is_split_pre_rend_mode( &args ) && ( args.outConfig.audioConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL ) ) + { + fprintf( stderr, "\nExternal Renderer Config is supported only when BINAURAL_ROOM is used as output OR when Split pre-rendering mode is enabled. Exiting. \n" ); + exit( -1 ); + } +#else if ( args.outConfig.audioConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM ) { fprintf( stderr, "\nExternal Renderer Config is supported only when BINAURAL_ROOM is used as output. Exiting. \n" ); exit( -1 ); } +#endif + if ( ( error = IVAS_REND_GetRenderConfig( hIvasRend, &renderConfig ) ) != IVAS_ERR_OK ) { @@ -805,8 +961,16 @@ int main( fprintf( stderr, "\nIVAS_DEC_FeedRenderConfig failed\n" ); exit( -1 ); } +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( !is_split_post_rend_mode( &args ) ) + { + CLDFBframeSize_smpls = frameSize_smpls * 2; + cldfb_in = get_cldfb_in_flag( args.outConfig.audioConfig, &renderConfig ); + } +#endif } + /* Set up output custom layout configuration */ if ( args.outConfig.audioConfig == IVAS_REND_AUDIO_CONFIG_LS_CUSTOM ) { @@ -872,6 +1036,23 @@ int main( } } +#ifdef SPLIT_REND_WITH_HEAD_ROT + for ( i = 0; i < args.inConfig.numBinBuses; ++i ) + { + if ( ( error = IVAS_REND_AddInput( hIvasRend, args.inConfig.binBuses[i].audioConfig, &splitBinIds[i] ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); + exit( -1 ); + } + + if ( ( error = IVAS_REND_SetInputGain( hIvasRend, splitBinIds[i], args.inputGainGlobal * dBToLin( args.inConfig.binBuses[i].gain_dB ) ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); + exit( -1 ); + } + } +#endif + for ( i = 0; i < args.inConfig.numMasaBuses; ++i ) { if ( ( error = IVAS_REND_AddInput( hIvasRend, args.inConfig.masaBuses[i].audioConfig, &masaIds[i] ) ) != IVAS_ERR_OK ) @@ -887,15 +1068,14 @@ int main( } } - const int16_t totalNumInChannels = getTotalNumInChannels( hIvasRend, mcIds, ismIds, sbaIds, masaIds ); + const int16_t totalNumInChannels = getTotalNumInChannels( hIvasRend, mcIds, ismIds, sbaIds, masaIds #ifdef SPLIT_REND_WITH_HEAD_ROT - if ( cldfb_in ) - { - rend_openCldfb( cldfbAna, totalNumInChannels, args.sampleRate ); - } + , + splitBinIds #endif + ); - if ( AudioFileReader_getNumChannels( audioReader ) != 0 /* If input file is raw PCM, audio reader has no info about number of channels */ + if ( ( audioReader != NULL ) && AudioFileReader_getNumChannels( audioReader ) != 0 /* If input file is raw PCM, audio reader has no info about number of channels */ && totalNumInChannels != AudioFileReader_getNumChannels( audioReader ) ) { fprintf( stderr, "Number of channels in input file does not match selected configuration\n" ); @@ -916,11 +1096,48 @@ int main( fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } - if ( AudioFileWriter_open( &audioWriter, args.outputFilePath, args.sampleRate, numOutChannels ) != IVAS_ERR_OK ) + +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( cldfb_in ) { - fprintf( stderr, "Failed to open file: %s\n", args.outputFilePath ); - exit( -1 ); + rend_openCldfb( cldfbAna, cldfbSyn, totalNumInChannels, numOutChannels, args.sampleRate ); + } +#endif + +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( args.outConfig.audioConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) + { + IVAS_REND_GetDelay( hIvasRend, &delayNumSamples_temp, &delayTimeScale_temp ); + error = split_rend_writer_open( &hSplitRendFileReadWrite, args.outputFilePath, delayNumSamples_temp, delayTimeScale_temp ); + if ( error != IVAS_ERR_OK ) + { + fprintf( stderr, "Could not open split rend metadata file %s\n", args.outputFilePath ); + exit( -1 ); + } + audioWriter = NULL; } + else + { + if ( args.outConfig.audioConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) + { + IVAS_REND_GetDelay( hIvasRend, &delayNumSamples_temp, &delayTimeScale_temp ); + error = split_rend_writer_open( &hSplitRendFileReadWrite, args.outMetadataFilePath, delayNumSamples_temp, delayTimeScale_temp ); + if ( error != IVAS_ERR_OK ) + { + fprintf( stderr, "Could not open split rend metadata file %s\n", args.outMetadataFilePath ); + exit( -1 ); + } + } +#endif + if ( AudioFileWriter_open( &audioWriter, args.outputFilePath, args.sampleRate, numOutChannels ) != IVAS_ERR_OK ) + { + fprintf( stderr, "Failed to open file: %s\n", args.outputFilePath ); + exit( -1 ); + } +#ifdef SPLIT_REND_WITH_HEAD_ROT + } +#endif + #ifdef DEC_TO_REND_FLOAT_DUMP printf( "Warning: Renderer executable built with DEC_TO_REND_FLOAT_DUMP enabled!\n" ); printf( " Float dump file (./float_out.wav) will be forced as input.\n" ); @@ -928,23 +1145,41 @@ int main( inBufferSize = frameSize_smpls * totalNumInChannels; outBufferSize = frameSize_smpls * numOutChannels; +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( is_split_pre_rend_mode( &args ) || is_split_post_rend_mode( &args ) ) + { + bitsBufferSize = (int32_t) SPLIT_REND_MAX_BRATE / FRAMES_PER_SEC; + bitsBufferSize = ( bitsBufferSize + 7 ) >> 3; + } + else + { + bitsBufferSize = 0; + } + +#endif + inpInt16Buffer = count_malloc( inBufferSize * sizeof( int16_t ) ); #ifdef SPLIT_REND_WITH_HEAD_ROT if ( cldfb_in == 0 ) { inFloatBuffer = count_malloc( inBufferSize * sizeof( float ) ); inBuffer.config.numSamplesPerChannel = (int16_t) frameSize_smpls; + outFloatBuffer = count_malloc( outBufferSize * sizeof( float ) ); + outBuffer.config.numSamplesPerChannel = (int16_t) frameSize_smpls; } else { inFloatBuffer = count_malloc( CLDFBframeSize_smpls * totalNumInChannels * sizeof( float ) ); inBuffer.config.numSamplesPerChannel = (int16_t) CLDFBframeSize_smpls; + outFloatBuffer = count_malloc( CLDFBframeSize_smpls * totalNumInChannels * sizeof( float ) ); + outBuffer.config.numSamplesPerChannel = (int16_t) CLDFBframeSize_smpls; } #else inFloatBuffer = count_malloc( inBufferSize * sizeof( float ) ); + outFloatBuffer = count_malloc( outBufferSize * sizeof( float ) ); + outBuffer.config.numSamplesPerChannel = (int16_t) frameSize_smpls; #endif outInt16Buffer = count_malloc( outBufferSize * sizeof( int16_t ) ); - outFloatBuffer = count_malloc( outBufferSize * sizeof( float ) ); #ifdef SPLIT_REND_WITH_HEAD_ROT inBuffer.config.is_cldfb = cldfb_in; @@ -952,10 +1187,31 @@ int main( inBuffer.config.numChannels = (int16_t) totalNumInChannels; inBuffer.data = inFloatBuffer; - outBuffer.config.numSamplesPerChannel = (int16_t) frameSize_smpls; +#ifdef SPLIT_REND_WITH_HEAD_ROT + outBuffer.config.is_cldfb = cldfb_in; +#endif outBuffer.config.numChannels = (int16_t) numOutChannels; outBuffer.data = outFloatBuffer; + +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( bitsBufferSize > 0 ) + { + bitsBufferData = count_malloc( bitsBufferSize * sizeof( uint8_t ) ); + } + else + { + bitsBufferData = NULL; + } + +#endif +#ifdef SPLIT_REND_WITH_HEAD_ROT + bitsBuffer.bits = bitsBufferData; + bitsBuffer.config.bitsRead = 0; + bitsBuffer.config.bitsWritten = 0; + bitsBuffer.config.bufLenInBytes = bitsBufferSize; +#endif + #ifdef WMOPS reset_wmops(); #endif @@ -975,11 +1231,35 @@ int main( int16_t num_in_channels; num_in_channels = inBuffer.config.numChannels; - /* Read the input data */ - if ( ( error = AudioFileReader_read( audioReader, inpInt16Buffer, (int16_t) inBufferSize, &numSamplesRead ) ) != IVAS_ERR_OK ) +#ifdef SPLIT_REND_WITH_HEAD_ROT + numSamplesRead = 0; + if ( ( hSplitRendFileReadWrite != NULL ) && is_split_post_rend_mode( &args ) ) { - fprintf( stderr, "\nError reading from file %s\n", audioFilePath ); - exit( -1 ); + ivas_error error_tmp; + numSamplesRead = (int16_t) inBufferSize; + error_tmp = split_rend_read_bits_from_file( hSplitRendFileReadWrite, bitsBuffer.bits, &bitsBuffer.config.bitsRead, &bitsBuffer.config.bitsWritten ); + if ( error_tmp != IVAS_ERR_OK ) + { + if ( error_tmp == IVAS_ERR_END_OF_FILE ) + { + numSamplesRead = 0; + } + else + { + fprintf( stderr, "\nUnable to read from bitstream file!\n" ); + exit( -1 ); + } + } + } + if ( audioReader != NULL ) +#endif + { + /* Read the input data */ + if ( ( error = AudioFileReader_read( audioReader, inpInt16Buffer, (int16_t) inBufferSize, &numSamplesRead ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError reading from file %s\n", audioFilePath ); + exit( -1 ); + } } if ( numSamplesRead == 0 ) @@ -1022,7 +1302,7 @@ int main( IVAS_REND_SetHeadRotation( hIvasRend, quatBuffer #ifdef SPLIT_REND_WITH_HEAD_ROT , - SPLIT_REND_PRE + DEFAULT_AXIS #endif ); } @@ -1031,21 +1311,11 @@ int main( IVAS_REND_SetHeadRotation( hIvasRend, NULL #ifdef SPLIT_REND_WITH_HEAD_ROT , - SPLIT_REND_PRE + DEFAULT_AXIS #endif ); } -#ifdef SPLIT_REND_WITH_HEAD_ROT - /* Read from post renderer head rotation trajectory file if specified */ - if ( postRendHeadRotReader != NULL ) - { - IVAS_QUATERNION quatBuffer[RENDERER_HEAD_POSITIONS_PER_FRAME]; - HeadRotationFileReading( postRendHeadRotReader, quatBuffer, frame ); - IVAS_REND_SetHeadRotation( hIvasRend, quatBuffer, SPLIT_REND_POST ); - } -#endif - for ( i = 0; i < args.inConfig.numMultiChannelBuses; ++i ) { if ( ( error = IVAS_REND_GetInputNumChannels( hIvasRend, mcIds[i], &numChannels ) ) != IVAS_ERR_OK ) @@ -1122,25 +1392,65 @@ int main( } } } +#ifdef SPLIT_REND_WITH_HEAD_ROT + for ( i = 0; i < args.inConfig.numBinBuses; ++i ) + { + if ( ( error = IVAS_REND_GetInputNumChannels( hIvasRend, splitBinIds[i], &numChannels ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); + exit( -1 ); + } + IVAS_REND_ReadOnlyAudioBuffer tmpBuffer = getReadOnlySubBuffer( inBuffer, (int16_t) args.inConfig.binBuses[i].inputChannelIndex, numChannels ); + + if ( ( error = IVAS_REND_FeedInputAudio( hIvasRend, splitBinIds[i], tmpBuffer ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); + exit( -1 ); + } + } +#endif - IVAS_REND_GetSamples( hIvasRend, outBuffer ); + IVAS_REND_GetSamples( hIvasRend, outBuffer +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + &bitsBuffer +#endif + ); int16_t num_out_channels; num_out_channels = outBuffer.config.numChannels; /* Convert from float to int and from packed to interleaved. * Values in outFloatBuffer are guaranteed to be within range INT16_MIN:INT16_MAX */ - convertOutputBuffer( outFloatBuffer, frameSize_smpls, num_out_channels, outInt16Buffer ); + convertOutputBuffer( outFloatBuffer, outBuffer.config.numSamplesPerChannel, num_out_channels, outInt16Buffer +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + cldfb_in, + cldfbSyn +#endif + ); if ( delayNumSamples == -1 ) { - if ( args.delayCompensationEnabled ) + if ( args.delayCompensationEnabled +#ifdef SPLIT_REND_WITH_HEAD_ROT + && !is_split_pre_rend_mode( &args ) +#endif + ) { if ( IVAS_REND_GetDelay( hIvasRend, &delayNumSamples, &delayTimeScale ) != IVAS_ERR_OK ) { fprintf( stderr, "\nUnable to get delay of renderer!\n" ); exit( -1 ); } +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( is_split_post_rend_mode( &args ) && ( hSplitRendFileReadWrite != NULL ) ) + { + uint32_t pre_rend_delay_ns; + split_rend_read_pre_rend_delay_ns( hSplitRendFileReadWrite, &pre_rend_delay_ns ); + delayNumSamples += NS2SA( delayTimeScale, pre_rend_delay_ns ); + } +#endif delayNumSamples_orig = delayNumSamples; } else @@ -1150,19 +1460,37 @@ int main( zeroPad = delayNumSamples; } - if ( delayNumSamples < outBufferSize ) +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( ( hSplitRendFileReadWrite != NULL ) && is_split_pre_rend_mode( &args ) ) { - if ( AudioFileWriter_write( audioWriter, &outInt16Buffer[delayNumSamples * num_out_channels], outBufferSize - ( delayNumSamples * num_out_channels ) ) != IVAS_ERR_OK ) + if ( split_rend_write_bitstream_to_file( hSplitRendFileReadWrite, bitsBuffer.bits, &bitsBuffer.config.bitsRead, &bitsBuffer.config.bitsWritten ) != IVAS_ERR_OK ) { - fprintf( stderr, "Error writing audio file %s\n", args.outputFilePath ); + fprintf( stderr, "\nUnable to write to bitstream file!\n" ); exit( -1 ); } - delayNumSamples = 0; } - else + if ( audioWriter != NULL ) +#endif { - delayNumSamples -= (int16_t) outBufferSize; + if ( delayNumSamples < outBufferSize ) + { + if ( AudioFileWriter_write( audioWriter, &outInt16Buffer[delayNumSamples * num_out_channels], outBufferSize - ( delayNumSamples * num_out_channels ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "Error writing audio file %s\n", args.outputFilePath ); + exit( -1 ); + } + delayNumSamples = 0; + } + else + { + delayNumSamples -= (int16_t) outBufferSize; + } } +#ifdef SPLIT_REND_WITH_HEAD_ROT + bitsBuffer.config.bitsRead = 0; + bitsBuffer.config.bitsWritten = 0; +#endif + frame++; if ( !args.quietModeEnabled ) @@ -1176,11 +1504,16 @@ int main( } /* add zeros at the end to have equal length of synthesized signals */ - memset( outInt16Buffer, 0, zeroPad * outBuffer.config.numChannels * sizeof( int16_t ) ); - if ( ( error = AudioFileWriter_write( audioWriter, outInt16Buffer, zeroPad * outBuffer.config.numChannels ) ) != IVAS_ERR_OK ) +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( audioWriter != NULL ) +#endif { - fprintf( stderr, "\nOutput audio file writer error\n" ); - exit( -1 ); + memset( outInt16Buffer, 0, zeroPad * outBuffer.config.numChannels * sizeof( int16_t ) ); + if ( ( error = AudioFileWriter_write( audioWriter, outInt16Buffer, zeroPad * outBuffer.config.numChannels ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nOutput audio file writer error\n" ); + exit( -1 ); + } } if ( !args.quietModeEnabled && args.delayCompensationEnabled ) @@ -1207,6 +1540,12 @@ int main( count_free( inFloatBuffer ); count_free( outInt16Buffer ); count_free( outFloatBuffer ); +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( bitsBufferData != NULL ) + { + count_free( bitsBufferData ); + } +#endif for ( i = 0; i < RENDERER_MAX_MASA_INPUTS; ++i ) { MasaFileReader_close( &masaReaders[i] ); @@ -1215,11 +1554,28 @@ int main( #ifdef SPLIT_REND_WITH_HEAD_ROT if ( cldfb_in ) { - rend_closeCldfb( cldfbAna ); + rend_closeCldfb( cldfbAna, cldfbSyn ); } #endif - AudioFileReader_close( &audioReader ); - AudioFileWriter_close( &audioWriter ); + +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( audioReader != NULL ) +#endif + { + AudioFileReader_close( &audioReader ); + } + +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( hSplitRendFileReadWrite != NULL ) + { + split_rend_reader_writer_close( &hSplitRendFileReadWrite ); + } + if ( audioWriter != NULL ) +#endif + { + AudioFileWriter_close( &audioWriter ); + } + HeadRotationFileReader_close( &headRotReader ); hrtfFileReader_close( &hrtfFileReader ); IVAS_REND_Close( &hIvasRend ); @@ -1272,7 +1628,9 @@ static bool parseInConfig( inConfig->numAmbisonicsBuses = 0; inConfig->numMultiChannelBuses = 0; inConfig->numMasaBuses = 0; - +#ifdef SPLIT_REND_WITH_HEAD_ROT + inConfig->numBinBuses = 0; +#endif /* First check if input is being set to scene description file - this is not covered by parseAudioConfig(). */ strncpy( charBuf, inFormatStr, sizeof( charBuf ) - 1 ); to_upper( charBuf ); @@ -1308,6 +1666,15 @@ static bool parseInConfig( inConfig->ambisonicsBuses[0].inputChannelIndex = 0; inConfig->ambisonicsBuses[0].gain_dB = 0.0f; break; +#ifdef SPLIT_REND_WITH_HEAD_ROT + case IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB: + case IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM: + inConfig->numBinBuses = 1; + inConfig->binBuses[0].audioConfig = audioConfig; + inConfig->binBuses[0].inputChannelIndex = 0; + inConfig->binBuses[0].gain_dB = 0.0f; + break; +#endif case IVAS_REND_AUDIO_CONFIG_MASA1: case IVAS_REND_AUDIO_CONFIG_MASA2: inConfig->numMasaBuses = 1; @@ -1427,44 +1794,6 @@ static int8_t parseDiegeticPan( return success ? 0 : -1; } -#ifdef SPLIT_REND_WITH_HEAD_ROT -static int8_t parseSplitRendMode( - char *value, - IVAS_SPLIT_REND_MODE *SplitRendMode ) -{ - int16_t temp; - int8_t success; - success = 1; - to_upper( value ); - - temp = (int16_t) atoi( value ); - if ( temp == 0 ) - { - *SplitRendMode = SPLIT_REND_DISABLED; - } -#if 0 - else if ( temp == 1 ) - { - *SplitRendMode = SPLIT_REND_PRE; - } - else if ( temp == 2 ) - { - *SplitRendMode = SPLIT_REND_POST; - } -#endif - else if ( temp == 3 ) - { - *SplitRendMode = SPLIT_REND_COMB; - } - else - { - fprintf( stderr, "Error: Incorrect or unsupported value for split rendering mode specified!\n\n" ); - success = 0; - } - return success ? 0 : -1; -} -#endif - static int8_t parseOrientationTracking( char *value, int8_t *tracking_type ) @@ -1571,6 +1900,16 @@ static IVAS_REND_AudioConfig parseAudioConfig( { return IVAS_REND_AUDIO_CONFIG_BINAURAL; } +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( strcmp( charBuf, "BINAURAL_SPLIT_PCM" ) == 0 ) + { + return IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM; + } + if ( strcmp( charBuf, "BINAURAL_SPLIT_CLDFB" ) == 0 ) + { + return IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB; + } +#endif return IVAS_REND_AUDIO_CONFIG_UNKNOWN; } @@ -1601,10 +1940,19 @@ static bool checkRequiredArgs( fprintf( stderr, "Missing required argument: %s (%s)\n", tmpOption->match, tmpOption->matchShort ); missingRequiredArg = true; } +#ifdef SPLIT_REND_WITH_HEAD_ROT + const bool singleInputSpecified = args.inConfig.numAudioObjects != 0 || + args.inConfig.numAmbisonicsBuses != 0 || + args.inConfig.numMultiChannelBuses != 0 || + args.inConfig.numMasaBuses != 0 || + args.inConfig.numBinBuses != 0; +#else const bool singleInputSpecified = args.inConfig.numAudioObjects != 0 || args.inConfig.numAmbisonicsBuses != 0 || args.inConfig.numMultiChannelBuses != 0 || args.inConfig.numMasaBuses != 0; +#endif + if ( !args.sceneDescriptionInput && !singleInputSpecified ) { /* Neither scene description input nor single-type input was specified on command line */ @@ -1662,8 +2010,7 @@ static CmdlnArgs defaultArgs( clearString( args.headRotationFilePath ); #ifdef SPLIT_REND_WITH_HEAD_ROT - args.splitRendMode = SPLIT_REND_DISABLED; - clearString( args.postRendheadRotationFilePath ); + clearString( args.outMetadataFilePath ); #endif clearString( args.customHrtfFilePath ); clearString( args.renderConfigFilePath ); @@ -1737,17 +2084,9 @@ static void parseOption( strncpy( args->headRotationFilePath, optionValues[0], RENDERER_MAX_CLI_ARG_LENGTH - 1 ); break; #ifdef SPLIT_REND_WITH_HEAD_ROT - case CmdLnOptionId_PostRendtrajFile: + case CmdLnOptionId_outputMetadata: assert( numOptionValues == 1 ); - strncpy( args->postRendheadRotationFilePath, optionValues[0], RENDERER_MAX_CLI_ARG_LENGTH - 1 ); - break; - case CmdLnOptionId_SplitRendMode: - assert( numOptionValues == 1 ); - if ( parseSplitRendMode( optionValues[0], &args->splitRendMode ) != 0 ) - { - fprintf( stderr, "Unknown option for split rendering mode: %s\n", optionValues[0] ); - exit( -1 ); - } + strncpy( args->outMetadataFilePath, optionValues[0], RENDERER_MAX_CLI_ARG_LENGTH - 1 ); break; #endif case CmdLnOptionId_customHrtfFile: @@ -2525,6 +2864,10 @@ static void printSupportedAudioConfigs() "MASAx (input only)", "BINAURAL (output only)", "BINAURAL_ROOM (output only)", +#ifdef SPLIT_REND_WITH_HEAD_ROT + "BINAURAL_SPLIT_PCM", + "BINAURAL_SPLIT_CLDFB", +#endif }; fprintf( stdout, "Supported audio formats:\n" ); @@ -2687,19 +3030,75 @@ static void convertOutputBuffer( const float *floatBuffer, const int16_t numSamplesPerChannel, const int16_t numChannels, - int16_t *intBuffer ) + int16_t *intBuffer +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + const int16_t cldfb_in, + HANDLE_CLDFB_FILTER_BANK *cldfbSyn +#endif +) { int16_t chnl, smpl, i; i = 0; - for ( smpl = 0; smpl < numSamplesPerChannel; ++smpl ) +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( cldfb_in ) { + int16_t slotIdx, numCldfbBands, numPcmSamples, b; + float fIn[MAX_OUTPUT_CHANNELS][L_FRAME48k]; + float re[MAX_OUTPUT_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + float im[MAX_OUTPUT_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + numPcmSamples = numSamplesPerChannel >> 1; + numCldfbBands = numPcmSamples / CLDFB_NO_COL_MAX; + /* CLDFB Synthesis*/ + for ( chnl = 0; chnl < numChannels; ++chnl ) + { + for ( slotIdx = 0; slotIdx < CLDFB_NO_COL_MAX; slotIdx++ ) + { + for ( b = 0; b < numCldfbBands; b++ ) + { + re[chnl][slotIdx][b] = floatBuffer[( chnl * numSamplesPerChannel ) + ( 2 * slotIdx * numCldfbBands ) + b]; + im[chnl][slotIdx][b] = floatBuffer[numCldfbBands + ( chnl * numSamplesPerChannel ) + ( 2 * slotIdx * numCldfbBands ) + b]; + } + } + } + + /* Implement CLDFB synthesis */ for ( chnl = 0; chnl < numChannels; ++chnl ) { - intBuffer[i] = (int16_t) roundf( floatBuffer[chnl * numSamplesPerChannel + smpl] ); + float *RealBuffer[CLDFB_NO_COL_MAX]; + float *ImagBuffer[CLDFB_NO_COL_MAX]; + + for ( slotIdx = 0; slotIdx < CLDFB_NO_COL_MAX; slotIdx++ ) + { + RealBuffer[slotIdx] = re[chnl][slotIdx]; + ImagBuffer[slotIdx] = im[chnl][slotIdx]; + } - ++i; + cldfbSynthesis( RealBuffer, ImagBuffer, &( fIn[chnl][0] ), numCldfbBands * CLDFB_NO_COL_MAX, cldfbSyn[chnl] ); + } + for ( smpl = 0; smpl < numPcmSamples; ++smpl ) + { + for ( chnl = 0; chnl < numChannels; ++chnl ) + { + intBuffer[i] = (int16_t) roundf( fIn[chnl][smpl] ); + ++i; + } + } + } + else +#endif + { + + for ( smpl = 0; smpl < numSamplesPerChannel; ++smpl ) + { + for ( chnl = 0; chnl < numChannels; ++chnl ) + { + intBuffer[i] = (int16_t) roundf( floatBuffer[chnl * numSamplesPerChannel + smpl] ); + + ++i; + } } } diff --git a/lib_com/common_api_types.h b/lib_com/common_api_types.h index 39cbc82a1a..35f5954998 100644 --- a/lib_com/common_api_types.h +++ b/lib_com/common_api_types.h @@ -83,6 +83,19 @@ typedef struct } IVAS_QUATERNION; +#ifdef SPLIT_REND_WITH_HEAD_ROT +typedef enum +{ + DEFAULT_AXIS, + YAW, + PITCH, + ROLL, + YAW_PITCH, + YAW_ROLL, + PITCH_ROLL +} IVAS_SPLIT_REND_ROT_AXIS; +#endif + #ifdef SPLIT_REND_WITH_HEAD_ROT typedef struct ivas_split_rend_bits_t { @@ -98,7 +111,7 @@ typedef struct ivas_masa_qmetadata_frame_struct *IVAS_MASA_QMETADATA_HANDLE; typedef struct TDREND_HRFILT_FiltSet_struct *IVAS_DEC_HRTF_HANDLE; -#ifdef DEBUGGING +#if ( defined DEBUGGING ) || ( defined SPLIT_REND_WITH_HEAD_ROT ) typedef enum { IVAS_RENDER_TYPE_OVERRIDE_NONE, @@ -120,12 +133,32 @@ typedef struct _IVAS_ROOM_ACOUSTICS_CONFIG float inputPreDelay; /* Offset in seconds from where DSR is computed in the RIR (0 = at source), float, range [0.001..10] */ } IVAS_ROOM_ACOUSTICS_CONFIG_DATA; +#ifdef SPLIT_REND_WITH_HEAD_ROT +typedef struct _IVAS_SPLIT_REND_CONFIG +{ + int32_t splitRendBitRate; /*Bit rate for split rendering mode, if "pcm_out" is set then "splitRendBitRate" is used as a limit for MD bitrate */ + int16_t hq_mode; /*High quality 3DOF mode with additional side information. Requires more pre-renditions. */ + int16_t dof; /*flag to specify if pose correction is needed for 1, 2 or 3 degree of freedoms*/ + /*The axis can be set dynamically per frame based on a file input */ + /*possible values: + 1 - (1dof correction. By default YAW correction) + 2 - (2dof correction. By default YAW and PITCH correction) + 3 - (3dof correction. By default YAW, PITCH and ROLL correction) + */ + int16_t codec_delay_ms; /*PLACEHOLDER (currently being ignored) : look ahead delay of the codec that is used to code BIN signal output of pre-renderer*/ +} IVAS_SPLIT_REND_CONFIG_DATA; +#endif + typedef struct _IVAS_RENDER_CONFIG { -#ifdef DEBUGGING +#if ( defined DEBUGGING ) || ( defined SPLIT_REND_WITH_HEAD_ROT ) IVAS_RENDER_TYPE_OVERRIDE renderer_type_override; #endif IVAS_ROOM_ACOUSTICS_CONFIG_DATA room_acoustics; + +#ifdef SPLIT_REND_WITH_HEAD_ROT + IVAS_SPLIT_REND_CONFIG_DATA split_rend_config; +#endif } IVAS_RENDER_CONFIG_DATA, *IVAS_RENDER_CONFIG_HANDLE; typedef struct _IVAS_LS_CUSTOM_LAYOUT @@ -156,14 +189,4 @@ typedef struct _IVAS_JBM_TRACE_DATA } IVAS_JBM_TRACE_DATA; -#ifdef SPLIT_REND_WITH_HEAD_ROT -typedef enum _IVAS_SPLIT_REND_MODE -{ - SPLIT_REND_DISABLED = -1, - SPLIT_REND_PRE, - SPLIT_REND_POST, - SPLIT_REND_COMB -} IVAS_SPLIT_REND_MODE; -#endif - #endif /* COMMON_API_TYPES_H */ diff --git a/lib_com/delay_comp.c b/lib_com/delay_comp.c index 4bcac1555e..3d3b5ddf54 100644 --- a/lib_com/delay_comp.c +++ b/lib_com/delay_comp.c @@ -57,6 +57,10 @@ int32_t get_delay( HANDLE_CLDFB_FILTER_BANK hCldfb, /* i : Handle of Cldfb analysis */ RENDERER_TYPE renderer_type, /* i : IVAS rendering type */ const int32_t binaural_latency_ns /* i : binaural renderer HRTF delay in ns */ +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + AUDIO_CONFIG output_config /* i : decoder output config */ +#endif ) { int32_t delay = 0; @@ -94,12 +98,17 @@ int32_t get_delay( else /* IVAS */ { delay = IVAS_DEC_DELAY_NS; - - if ( hCldfb != NULL || renderer_type == RENDERER_BINAURAL_OBJECTS_TD ) +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( output_config != AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) +#endif { - delay += IVAS_FB_DEC_DELAY_NS; + if ( hCldfb != NULL || renderer_type == RENDERER_BINAURAL_OBJECTS_TD ) + { + delay += IVAS_FB_DEC_DELAY_NS; + } } + /* compensate for Binaural renderer HRTF delay */ { delay += binaural_latency_ns; diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index 0c33ade4d7..2046b3de33 100644 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -103,6 +103,9 @@ typedef enum AUDIO_CONFIG_OBA, /* object based audio */ AUDIO_CONFIG_BINAURAL, /* binaural with HRIR */ AUDIO_CONFIG_BINAURAL_ROOM, /* binaural with HRIR and BRIR */ +#ifdef SPLIT_REND_WITH_HEAD_ROT + AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB, /* split binaural with CLDFB coded output */ +#endif AUDIO_CONFIG_ISM1, /* ISM1 */ AUDIO_CONFIG_ISM2, /* ISM2 */ AUDIO_CONFIG_ISM3, /* ISM3 */ @@ -113,7 +116,7 @@ typedef enum } AUDIO_CONFIG; -#ifdef DEBUGGING +#if ( defined DEBUGGING ) || ( defined SPLIT_REND_WITH_HEAD_ROT ) typedef enum { RENDER_TYPE_OVERRIDE_NONE, @@ -1350,6 +1353,18 @@ typedef enum EFAP_DMX_INTENSITY } EFAP_VTX_DMX_TYPE; +#ifdef SPLIT_REND_WITH_HEAD_ROT +typedef enum +{ + ANY_YAW, + PITCH_ONLY, + ANY_ROLL, + PRED_ONLY, + COM_GAIN_ONLY, + LR_GAIN_ONLY +} IVAS_SPLIT_REND_POSE_TYPE; +#endif + #define VBAP_NUM_SEARCH_SECTORS 4 /*----------------------------------------------------------------------------------* @@ -1362,22 +1377,50 @@ typedef enum #ifdef SPLIT_REND_WITH_HEAD_ROT #define SPLIT_REND_DECOR_ALPHA (0.25f) -#define MAX_YAW_ANGLES (3) -#define MAX_PITCH_ANGLES (1) -#define MAX_ROLL_ANGLES (1) -#define MAX_HEAD_ROT_POSES (MAX_YAW_ANGLES*MAX_PITCH_ANGLES*MAX_ROLL_ANGLES) + +#define SPLIT_REND_MAX_YAW_ONLY_POSES (2) +#define SPLIT_REND_MAX_PITCH_ONLY_POSES (2) +#define SPLIT_REND_MAX_ROLL_ONLY_POSES (2) +#define SPLIT_REND_MAX_ONE_AXIS_MD_POSES (2) +#define MAX_EXTRAPOLATION_ANGLE (15.0f) /* this means additional 15 degrees can be extrapolated on top of MD probing poses*/ + +#ifdef SPLIT_REND_WITH_HEAD_ROT +#define MAX_HEAD_ROT_POSES (1 + SPLIT_REND_MAX_YAW_ONLY_POSES + SPLIT_REND_MAX_PITCH_ONLY_POSES + SPLIT_REND_MAX_ROLL_ONLY_POSES) +#else +#define MAX_HEAD_ROT_POSES (1 + SPLIT_REND_MAX_YAW_ONLY_POSES) +#endif #define MAX_SPLIT_REND_MD_BANDS (20) #define COMPLEX_MD_BAND_THRESH (MAX_SPLIT_REND_MD_BANDS) +#define COMPLEX_MD_BAND_THRESH_LOW (5) -#ifdef SPLIT_REND_WITH_HEAD_ROT + +#define IVAS_SPLIT_REND_NUM_QUANT_STRATS (3) #define IVAS_SPLIT_REND_PRED_QUANT_PNTS ( 31 ) #define IVAS_SPLIT_REND_D_QUANT_PNTS ( 15 ) #define IVAS_SPLIT_REND_PRED_MIN_VAL ( -1.0f ) #define IVAS_SPLIT_REND_PRED_MAX_VAL ( 1.0f ) +#ifdef SPLIT_REND_WITH_HEAD_ROT +#define IVAS_SPLIT_REND_PITCH_G_MIN_VAL (0.5f) +#define IVAS_SPLIT_REND_PITCH_G_MAX_VAL (1.5f) +#define IVAS_SPLIT_REND_PITCH_G_QUANT_PNTS ( IVAS_SPLIT_REND_D_QUANT_PNTS ) +#define IVAS_SPLIT_REND_D_MIN_VAL ( 0.0f ) +#else #define IVAS_SPLIT_REND_D_MIN_VAL ( 0.0f ) +#endif #define IVAS_SPLIT_REND_D_MAX_VAL ( 1.0f ) + +#define IVAS_SPLIT_REND_PRED_Q_STEP (( IVAS_SPLIT_REND_PRED_MAX_VAL - IVAS_SPLIT_REND_PRED_MIN_VAL ) / ( IVAS_SPLIT_REND_PRED_QUANT_PNTS - 1 )) +#define IVAS_SPLIT_REND_PRED_1BYQ_STEP (( IVAS_SPLIT_REND_PRED_QUANT_PNTS - 1 )/( IVAS_SPLIT_REND_PRED_MAX_VAL - IVAS_SPLIT_REND_PRED_MIN_VAL )) +#define IVAS_SPLIT_REND_D_Q_STEP (( IVAS_SPLIT_REND_D_MAX_VAL - IVAS_SPLIT_REND_D_MIN_VAL ) / ( IVAS_SPLIT_REND_D_QUANT_PNTS - 1 )) +#define IVAS_SPLIT_REND_D_1BYQ_STEP (( IVAS_SPLIT_REND_D_QUANT_PNTS - 1 )/( IVAS_SPLIT_REND_D_MAX_VAL - IVAS_SPLIT_REND_D_MIN_VAL )) +#define IVAS_SPLIT_REND_PITCH_G_Q_STEP (( IVAS_SPLIT_REND_PITCH_G_MAX_VAL - IVAS_SPLIT_REND_PITCH_G_MIN_VAL ) / ( IVAS_SPLIT_REND_PITCH_G_QUANT_PNTS - 1 )) +#define IVAS_SPLIT_REND_PITCH_G_1BYQ_STEP (( IVAS_SPLIT_REND_PITCH_G_QUANT_PNTS - 1 )/( IVAS_SPLIT_REND_PITCH_G_MAX_VAL - IVAS_SPLIT_REND_PITCH_G_MIN_VAL )) + #define IVAS_SPLIT_REND_MAX_NUM_BYTES (4000) -#endif +#define IVAS_SPLIT_REND_HEAD_POSE_BITS (9) +#define IVAS_SPLIT_REND_DOF_BITS (2) +#define IVAS_SPLIT_REND_HQ_MODE_BITS (1) +#define IVAS_SPLIT_REND_ROT_AXIS_BITS (3) #endif #define HRTF_SH_ORDER 3 @@ -1617,6 +1660,13 @@ typedef enum #define SPAR_DIRAC_DTX_BANDS ( SPAR_DTX_BANDS + DIRAC_DTX_BANDS ) #define CLDFB_PAR_WEIGHT_START_BAND 7 +#define SIZE_SPLIT_REND_BRATE_TBL (4) +#define SPLIT_REND_256k 256000 +#define SPLIT_REND_384k 384000 +#define SPLIT_REND_512k 512000 +#define SPLIT_REND_768k 768000 +#define SPLIT_REND_MAX_BRATE SPLIT_REND_768k + #endif /* clang-format on */ /* IVAS_CNST_H */ diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index 62050015c6..c0414dc990 100644 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -4565,6 +4565,9 @@ void ivas_binaural_cldfb( void ivas_binRenderer( BINAURAL_RENDERER_HANDLE hBinRenderer, /* i/o: binaural renderer handle */ HEAD_TRACK_DATA_HANDLE hHeadTrackData, /* i/o: head track handle */ +#ifdef SPLIT_REND_WITH_HEAD_ROT + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, +#endif #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG HEAD_TRACK_DATA_HANDLE hPostRendHeadTrackData, #endif @@ -4597,6 +4600,15 @@ void Quat2Euler( float *roll /* o : roll */ ); +#ifdef SPLIT_REND_WITH_HEAD_ROT +void Quat2EulerDegree( + const IVAS_QUATERNION quat, /* i : quaternion describing the rotation */ + float *yaw, /* o : yaw */ + float *pitch, /* o : pitch */ + float *roll /* o : roll */ +); +#endif + void SHrotmatgen( float SHrotmat[SBA_NHARM_HOA3][SBA_NHARM_HOA3], /* o : SHD rotation matrix */ float Rmat[3][3], /* i : real-space rotation matrix */ @@ -4666,15 +4678,20 @@ void rotateFrame_sd_cldfb( void ivas_set_split_rend_setup( IVAS_DEC_SPLIT_REND_WRAPPER *hSplitBinRend, + IVAS_SPLIT_REND_CONFIG_DATA *hSplitBinConfig, + HEAD_TRACK_DATA_HANDLE hHeadTrackData, IVAS_SPLIT_REND_BITS_HANDLE hSplitRendBits ); void ivas_init_split_rend_handles( SPLIT_REND_WRAPPER *hSplitRendWrapper ); +void ivas_init_split_post_rend_handles( + SPLIT_POST_REND_WRAPPER *hSplitRendWrapper ); ivas_error ivas_split_renderer_open( SPLIT_REND_WRAPPER *hSplitBinRend, + const IVAS_SPLIT_REND_CONFIG_DATA *pSplitRendConfig, const int32_t output_Fs, - const IVAS_SPLIT_REND_MODE splitRendMode, - const int16_t is_cldfb_in ); + const int16_t is_cldfb_in, + const int16_t is_pcm_out); void ivas_split_renderer_close( SPLIT_REND_WRAPPER *hSplitBinRend); @@ -4692,6 +4709,7 @@ void ivas_splitBinLCLDEncProcess( BIN_HR_SPLIT_LCLD_ENC_HANDLE hSplitBinLCLDEnc, float Cldfb_In_Real[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float Cldfb_In_Imag[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + const int32_t available_bits, ivas_split_rend_bits_t *pBits ); ivas_error ivas_splitBinLCLDDecOpen( @@ -4709,7 +4727,8 @@ void ivas_splitBinLCLDDecProcess( float Cldfb_Out_Imag[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX] ); ivas_error ivas_splitBinPreRendOpen( - BIN_HR_SPLIT_PRE_REND_HANDLE *hBinHrSplitPreRend + BIN_HR_SPLIT_PRE_REND_HANDLE *hBinHrSplitPreRend, + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG , const int32_t output_Fs @@ -4718,32 +4737,48 @@ ivas_error ivas_splitBinPreRendOpen( ivas_error ivas_splitBinPostRendOpen( BIN_HR_SPLIT_POST_REND_HANDLE *hBinHrSplitPostRend, - const int32_t output_Fs ); + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, + const int32_t output_Fs, + const int16_t is_cldfb_in ); + +void ivas_init_multi_bin_pose_data( + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData ); +void ivas_renderSplitGetMultiBinPoseData( + const IVAS_SPLIT_REND_CONFIG_DATA *pSplit_rend_config, + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, + const IVAS_SPLIT_REND_ROT_AXIS rot_axis); ivas_error ivas_renderMultiBinToSplitBinaural( SPLIT_REND_WRAPPER *hSplitBin, + const IVAS_QUATERNION headPositions[MAX_PARAM_SPATIAL_SUBFRAMES], + const int32_t SplitRendBitRate, ivas_split_rend_bits_t *pBits, float Cldfb_In_BinReal[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float Cldfb_In_BinImag[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], - const IVAS_QUATERNION QuaternionsPre[MAX_PARAM_SPATIAL_SUBFRAMES], - const IVAS_QUATERNION QuaternionsPost[MAX_PARAM_SPATIAL_SUBFRAMES], const int16_t max_bands, - float out[][L_FRAME48k]); + float out[][L_FRAME48k], + const int16_t low_res_pre_rend_rot, + const int16_t pcm_out +); void ivas_rend_CldfbSplitPreRendProcess( const BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend, + const IVAS_QUATERNION headPositions[MAX_PARAM_SPATIAL_SUBFRAMES], + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, float Cldfb_In_BinReal[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float Cldfb_In_BinImag[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], - const int16_t max_bands, - ivas_split_rend_bits_t *pBits ); + ivas_split_rend_bits_t *pBits, + const int32_t target_md_bits, + const int16_t low_res_pre_rend_rot); void ivas_rend_CldfbSplitPostRendProcess( BIN_HR_SPLIT_POST_REND_HANDLE hBinHrSplitPostRend, - const IVAS_QUATERNION QuaternionsPre[MAX_PARAM_SPATIAL_SUBFRAMES], + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, const IVAS_QUATERNION QuaternionsPost[MAX_PARAM_SPATIAL_SUBFRAMES], float Cldfb_RealBuffer_Binaural[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float Cldfb_ImagBuffer_Binaural[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], - float output[][L_FRAME48k] ); + float output[][L_FRAME48k], + const int16_t is_cldfb_in ); void ivas_splitBinPreRendClose( BIN_HR_SPLIT_PRE_REND_HANDLE *hBinHrSplitPreRend ); @@ -4754,6 +4789,7 @@ void ivas_splitBinPostRendClose( void ivas_splitBinPostRendMdDec( ivas_split_rend_bits_t *pBits, BIN_HR_SPLIT_POST_REND_HANDLE hBinHrSplitPostRend, + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend, #endif @@ -4761,29 +4797,30 @@ void ivas_splitBinPostRendMdDec( #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG void ivas_log_cldfb2wav_data( - float Cldfb_In_Real[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], - float Cldfb_In_Imag[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], + float Cldfb_In_Real[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float Cldfb_In_Imag[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], HANDLE_CLDFB_FILTER_BANK *cldfbSyn, const int16_t num_chs, const int16_t num_freq_bands, const int32_t output_Fs, + const int16_t start_slot_idx, + const int16_t md_band_idx, const char *filename ); #endif void ivas_SplitRenderer_GetRotMd( BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend, /* i/o: binaural renderer handle */ - float Cldfb_RealBuffer_Ref_Binaural[][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : Reference Binaural signals */ - float Cldfb_ImagBuffer_Ref_Binaural[][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : Reference Binaural signals */ - ivas_split_rend_bits_t *pBits, - int16_t sf_idx ); + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, + float Cldfb_RealBuffer_Ref_Binaural[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* o : Reference Binaural signals */ + float Cldfb_ImagBuffer_Ref_Binaural[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* o : Reference Binaural signals */ + int16_t low_res); void ivas_SplitRenderer_PostRenderer( - BIN_HR_SPLIT_POST_REND_HANDLE hBinPostRenderer, /* i/o: binaural renderer handle */ - float Cldfb_RealBuffer_Ref_Binaural[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o : Reference/out Binaural signals */ - float Cldfb_ImagBuffer_Ref_Binaural[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o : Reference/out Binaural signals */ - int16_t sf_idx, - const IVAS_QUATERNION *Quaternions_ref, - const IVAS_QUATERNION *Quaternions_act ); + BIN_HR_SPLIT_POST_REND_HANDLE hBinPostRenderer, /* i/o: binaural renderer handle */ + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, + float Cldfb_RealBuffer_Ref_Binaural[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i/o : Reference/out Binaural signals */ + float Cldfb_ImagBuffer_Ref_Binaural[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i/o : Reference/out Binaural signals */ + const IVAS_QUATERNION Quaternions_act[MAX_PARAM_SPATIAL_SUBFRAMES]); #endif diff --git a/lib_com/ivas_tools.c b/lib_com/ivas_tools.c index b8fbaa833f..69ebb519aa 100644 --- a/lib_com/ivas_tools.c +++ b/lib_com/ivas_tools.c @@ -1119,7 +1119,6 @@ void v_sort_ind( return; } - /*-------------------------------------------------------------------* * is_IVAS_bitrate() * diff --git a/lib_com/options.h b/lib_com/options.h index 1f12475cfb..1868be25a5 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -157,8 +157,30 @@ #define SPLIT_REND_WITH_HEAD_ROT #ifdef SPLIT_REND_WITH_HEAD_ROT //#define SPLIT_REND_WITH_HEAD_ROT_DEBUG // only for debugging purposes -#define SPLIT_REND_BASE2_CODING -//#define SPLIT_REND_SKIP_POST_REND +//#define DBG_WAV_WRITER + +#define SPLIT_SIN_SCALING_AND_EXTRAPOL_LIMIT + +#define SPLIT_REND_ZERO_OUT_YAW_D +//#define SPLIT_REND_REAL_ONLY_ROLL + +//#define SPIT_ABS_SCALING_INTERP + +//#define USE_DOLBY_HRTFS_WITH_LIB_REND_HOA3 + +//#define SPLIT_MD_CODING_DEBUG +#define FIX_376_SBA_ROTATE + + +/*CLDFB CODEC SWITCHES -- START*/ +#define ENABLE_MS_PRED +#define BUG_FIX_03_15_23_INIT_GROUPING +#define FORCE_GROUPS_OF_2 +#define USE_BIT_COUNT_MERGE_COST +#define OPTIMIZE_DPCM_QUANT +/*CLDFB CODEC SWITCHES -- END*/ + + #endif /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ diff --git a/lib_com/prot.h b/lib_com/prot.h index 973f15ef5a..d4a03b00a0 100644 --- a/lib_com/prot.h +++ b/lib_com/prot.h @@ -719,6 +719,10 @@ int32_t get_delay( HANDLE_CLDFB_FILTER_BANK hCldfb, /* i : Handle of Cldfb analysis */ RENDERER_TYPE renderer_type, /* i : IVAS rendering type */ const int32_t binaural_latency_ns /* i : binaural renderer HRTF delay in ns */ +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + AUDIO_CONFIG output_config /* i : decoder output config */ +#endif ); void decision_matrix_enc( diff --git a/lib_debug/debug.c b/lib_debug/debug.c index dc3d0cb4d9..3d72aa637b 100644 --- a/lib_debug/debug.c +++ b/lib_debug/debug.c @@ -55,7 +55,7 @@ #else #endif #include "wmops.h" -#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG +#ifdef DBG_WAV_WRITER #include "tinywaveout_c.h" #endif @@ -93,17 +93,17 @@ int16_t debug_level = 0; static FILE *in_fileptr[N_FILEPTR]; static FILE *out_fileptr[N_FILEPTR]; -#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG +#ifdef DBG_WAV_WRITER static WAVEFILEOUT *out_wavfileptr[N_FILEPTR]; #endif static char *in_filename[N_FILEPTR]; static char *out_filename[N_FILEPTR]; -#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG +#ifdef DBG_WAV_WRITER static char *out_wavfilename[N_FILEPTR]; #endif static int16_t in_count = 0; static int16_t out_count = 0; -#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG +#ifdef DBG_WAV_WRITER static int16_t out_wav_count = 0; #endif @@ -401,7 +401,7 @@ void dbgclose() fclose( out_fileptr[i] ); free( out_filename[i] ); } -#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG +#ifdef DBG_WAV_WRITER for ( i = 0; i < out_wav_count; i++ ) { CloseWav( out_wavfileptr[i] ); @@ -863,7 +863,7 @@ int16_t make_dirs( const char *const pathname ) return 0; } -#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG +#ifdef DBG_WAV_WRITER int16_t dbgwrite_wav( const float *buffer[], /* i : Write buffer */ const int16_t count_per_ch, /* i : Number of elements */ diff --git a/lib_debug/debug.h b/lib_debug/debug.h index e228f11cf4..49aae558b0 100644 --- a/lib_debug/debug.h +++ b/lib_debug/debug.h @@ -95,7 +95,7 @@ int16_t dbgwrite( const char *const filename #endif ); -#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG +#ifdef DBG_WAV_WRITER int16_t dbgwrite_wav( const float *buffer[], /* i : Write buffer */ const int16_t count_per_ch, /* i : Number of elements */ diff --git a/lib_debug/mem_count.c b/lib_debug/mem_count.c index 598b023df3..6315390d07 100644 --- a/lib_debug/mem_count.c +++ b/lib_debug/mem_count.c @@ -98,7 +98,7 @@ typedef INT64 int64_t; /* This is the maximum number of allocations for which to keep information. It can be increased if required. */ #ifdef SBA_BR_SWITCHING -#define MAX_INFO_RECORDS 9000 +#define MAX_INFO_RECORDS 15000 #else #define MAX_INFO_RECORDS 3000 #endif diff --git a/lib_dec/ivas_dec.c b/lib_dec/ivas_dec.c index cf887ab725..fd828a6c22 100644 --- a/lib_dec/ivas_dec.c +++ b/lib_dec/ivas_dec.c @@ -89,12 +89,6 @@ ivas_error ivas_dec( } } -#ifdef SPLIT_REND_WITH_HEAD_ROT - if ( st_ivas->hDecoderConfig->Opt_splitRendMode != SPLIT_REND_DISABLED ) - { - ivas_set_split_rend_setup( &st_ivas->splitBinRend, hSplitRendBits ); - } -#endif /*----------------------------------------------------------------* * Initialization of local vars after struct has been set *----------------------------------------------------------------*/ @@ -106,6 +100,14 @@ ivas_error ivas_dec( output_frame = (int16_t) ( output_Fs / FRAMES_PER_SEC ); +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) + { + assert( st_ivas->ivas_format == SBA_FORMAT && ( output_Fs == 48000 ) && "split binaural mode is currently supported with SBA format and 48k sampling rate only" ); + ivas_set_split_rend_setup( &st_ivas->splitBinRend, &st_ivas->hRenderConfig->split_rend_config, st_ivas->hHeadTrackData, hSplitRendBits ); + } +#endif + /*----------------------------------------------------------------* * Decoding + Rendering *----------------------------------------------------------------*/ @@ -555,23 +557,21 @@ ivas_error ivas_dec( #ifdef SPLIT_REND_WITH_HEAD_ROT /*split rendering process calls*/ - if ( st_ivas->hDecoderConfig->Opt_splitRendMode != SPLIT_REND_DISABLED ) + if ( output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) { - if ( ( st_ivas->splitBinRend.splitrend.hBinHrSplitPreRend != NULL ) && ( st_ivas->splitBinRend.splitrend.hBinHrSplitPostRend != NULL ) ) - { - IVAS_DEC_SPLIT_REND_WRAPPER *hSplitBinRend; - int16_t max_band; - hSplitBinRend = &st_ivas->splitBinRend; - max_band = (int16_t) ( ( BINAURAL_MAXBANDS * output_Fs ) / 48000 ); - ivas_renderMultiBinToSplitBinaural( &hSplitBinRend->splitrend, - hSplitBinRend->hSplitRendBits, - hSplitBinRend->hMultiBinCldfbData->Cldfb_RealBuffer_Binaural, - hSplitBinRend->hMultiBinCldfbData->Cldfb_ImagBuffer_Binaural, - st_ivas->hHeadTrackData->Quaternions, - st_ivas->hPostRendheadTrackData->Quaternions, max_band, output ); - - dynamic_free( st_ivas->splitBinRend.hMultiBinCldfbData ); - } + IVAS_DEC_SPLIT_REND_WRAPPER *hSplitBinRend; + int16_t max_band; + hSplitBinRend = &st_ivas->splitBinRend; + max_band = (int16_t) ( ( BINAURAL_MAXBANDS * output_Fs ) / 48000 ); + ivas_renderMultiBinToSplitBinaural( &hSplitBinRend->splitrend, + st_ivas->hHeadTrackData->Quaternions, + st_ivas->hRenderConfig->split_rend_config.splitRendBitRate, + hSplitBinRend->hSplitRendBits, + hSplitBinRend->hMultiBinCldfbData->Cldfb_RealBuffer_Binaural, + hSplitBinRend->hMultiBinCldfbData->Cldfb_ImagBuffer_Binaural, + max_band, output, 1, 0 ); + + dynamic_free( st_ivas->splitBinRend.hMultiBinCldfbData ); } #endif /*----------------------------------------------------------------* diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c index 8b07d7bb1d..e7301685fd 100644 --- a/lib_dec/ivas_dirac_dec.c +++ b/lib_dec/ivas_dirac_dec.c @@ -2349,6 +2349,9 @@ void ivas_dirac_dec( /* Perform binaural rendering */ ivas_binRenderer( st_ivas->hBinRenderer, st_ivas->hHeadTrackData, +#ifdef SPLIT_REND_WITH_HEAD_ROT + &st_ivas->splitBinRend.splitrend.multiBinPoseData, +#endif #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG st_ivas->hPostRendheadTrackData, #endif @@ -2359,13 +2362,13 @@ void ivas_dirac_dec( #ifdef SPLIT_REND_WITH_HEAD_ROT - if ( st_ivas->hBinRenderer->splitRendMode == SPLIT_REND_PRE || st_ivas->hBinRenderer->splitRendMode == SPLIT_REND_COMB ) + if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) { int16_t pos_idx; #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG - for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES + 1; pos_idx++ ) + for ( pos_idx = 0; pos_idx < st_ivas->hBinRenderer->numPoses; pos_idx++ ) #else - for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES; pos_idx++ ) + for ( pos_idx = 0; pos_idx < st_ivas->hBinRenderer->numPoses; pos_idx++ ) #endif { for ( slot_idx = 0; slot_idx < hDirAC->subframe_nbslots; slot_idx++ ) diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index 5d8d158739..bf3da79bf8 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -564,20 +564,6 @@ ivas_error ivas_init_decoder_front( } } -#ifdef SPLIT_REND_WITH_HEAD_ROT - if ( st_ivas->hDecoderConfig->Opt_splitRendMode == SPLIT_REND_COMB ) - { - if ( ( error = ivas_headTrack_open( &( st_ivas->hPostRendheadTrackData ) ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - st_ivas->hPostRendheadTrackData = NULL; - } -#endif - /*-------------------------------------------------------------------* * Allocate HRTF binary handle *--------------------------------------------------------------------*/ @@ -594,7 +580,11 @@ ivas_error ivas_init_decoder_front( * Allocate and initialize Binaural Renderer configuration handle *--------------------------------------------------------------------*/ - if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL || st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_ROOM ) + if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL || st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_ROOM +#ifdef SPLIT_REND_WITH_HEAD_ROT + || st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB +#endif + ) { if ( ( error = ivas_render_config_open( &( st_ivas->hRenderConfig ) ) ) != IVAS_ERR_OK ) { @@ -1167,12 +1157,26 @@ ivas_error ivas_init_decoder( if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) { +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) + { + ivas_renderSplitGetMultiBinPoseData( + &st_ivas->hRenderConfig->split_rend_config, + &st_ivas->splitBinRend.splitrend.multiBinPoseData, + st_ivas->hHeadTrackData->sr_pose_pred_axis ); + } +#endif if ( ( error = ivas_binRenderer_open( st_ivas ) ) != IVAS_ERR_OK ) { return error; } #ifdef SPLIT_REND_WITH_HEAD_ROT - ivas_split_renderer_open( &st_ivas->splitBinRend.splitrend, hDecoderConfig->output_Fs, hDecoderConfig->Opt_splitRendMode, 1 ); + if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) + { + ivas_split_renderer_open( &st_ivas->splitBinRend.splitrend, + &st_ivas->hRenderConfig->split_rend_config, + hDecoderConfig->output_Fs, 1, 0 ); + } #endif } else if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) @@ -1665,6 +1669,9 @@ void ivas_destroy_dec( #ifdef SPLIT_REND_WITH_HEAD_ROT /* Split binaural renderer handle */ ivas_split_renderer_close( &st_ivas->splitBinRend.splitrend ); + +#else + #endif /* Parametric binaural renderer handle */ @@ -1703,13 +1710,6 @@ void ivas_destroy_dec( count_free( st_ivas->hHeadTrackData ); st_ivas->hHeadTrackData = NULL; } -#ifdef SPLIT_REND_WITH_HEAD_ROT - if ( st_ivas->hPostRendheadTrackData != NULL ) - { - count_free( st_ivas->hPostRendheadTrackData ); - st_ivas->hPostRendheadTrackData = NULL; - } -#endif /* Time Domain binaural renderer handle */ if ( st_ivas->hBinRendererTd != NULL ) @@ -1980,7 +1980,11 @@ static ivas_error doSanityChecks_IVAS( if ( st_ivas->hDecoderConfig->Opt_Headrotation ) { if ( !( output_config == AUDIO_CONFIG_BINAURAL || - output_config == AUDIO_CONFIG_BINAURAL_ROOM ) ) + output_config == AUDIO_CONFIG_BINAURAL_ROOM +#ifdef SPLIT_REND_WITH_HEAD_ROT + || output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB +#endif + ) ) { return IVAS_ERROR( IVAS_ERR_HEAD_ROTATION_NOT_SUPPORTED, "Wrong set-up: Head-rotation not supported in this configuration" ); } @@ -1994,7 +1998,12 @@ static ivas_error doSanityChecks_IVAS( * - FastConv Binaural Renderer: 5 ms by default * * - TD objects Binaural Renderer: 20 ms by default */ - if ( !( output_config == AUDIO_CONFIG_BINAURAL || output_config == AUDIO_CONFIG_BINAURAL_ROOM ) || !( st_ivas->ivas_format == MASA_FORMAT || st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == MC_FORMAT || st_ivas->ivas_format == ISM_FORMAT ) ) + if ( !( output_config == AUDIO_CONFIG_BINAURAL || output_config == AUDIO_CONFIG_BINAURAL_ROOM +#ifdef SPLIT_REND_WITH_HEAD_ROT + || output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB +#endif + ) || + !( st_ivas->ivas_format == MASA_FORMAT || st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == MC_FORMAT || st_ivas->ivas_format == ISM_FORMAT ) ) { return IVAS_ERROR( IVAS_ERR_WRONG_PARAMS, "Wrong set-up: Forced subframe resolution parametric binauralization activated for non-binaural output." ); } diff --git a/lib_dec/ivas_mc_param_dec.c b/lib_dec/ivas_mc_param_dec.c index 7b8901fdec..e33a0596eb 100644 --- a/lib_dec/ivas_mc_param_dec.c +++ b/lib_dec/ivas_mc_param_dec.c @@ -1057,6 +1057,9 @@ void ivas_param_mc_dec( if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) { ivas_binRenderer( st_ivas->hBinRenderer, st_ivas->hHeadTrackData, +#ifdef SPLIT_REND_WITH_HEAD_ROT + &st_ivas->splitBinRend.splitrend.multiBinPoseData, +#endif #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG NULL, #endif diff --git a/lib_dec/ivas_rom_dec.c b/lib_dec/ivas_rom_dec.c index d481ffa904..efab9efedd 100644 --- a/lib_dec/ivas_rom_dec.c +++ b/lib_dec/ivas_rom_dec.c @@ -556,9 +556,26 @@ const float diffuseFieldCoherenceDifferenceZ[BINAURAL_COHERENCE_DIFFERENCE_BINS] /*----------------------------------------------------------------------* * split rendering ROM tables *-----------------------------------------------------------------------*/ -const float split_rend_relative_yaw_angles[MAX_YAW_ANGLES] = {0.0f, -15.0f, 30.0f}; /*actual rotations would be Ref, Ref - 15, Ref - 15 + 30 */ -const float split_rend_relative_pitch_angles[MAX_PITCH_ANGLES] = {0.0f}; -const float split_rend_relative_roll_angles[MAX_ROLL_ANGLES] = {0.0f}; + +/*----------------------------------------------------------------------------------* + * Table of Split rendering bitrates + *----------------------------------------------------------------------------------*/ +const int32_t split_rend_brate_tbl[SIZE_SPLIT_REND_BRATE_TBL] = +{ + SPLIT_REND_256k, SPLIT_REND_384k, SPLIT_REND_512k, SPLIT_REND_768k +}; + +/*rotations in this array are relative to ref rotation */ +const float split_rend_relative_yaw_pos_angles[SPLIT_REND_MAX_YAW_ONLY_POSES] = {-15.0f, 15.0f}; +const float split_rend_relative_pitch_pos_angles[SPLIT_REND_MAX_PITCH_ONLY_POSES] = {10.0f, 10.0f}; +const float split_rend_relative_roll_pos_angles[SPLIT_REND_MAX_PITCH_ONLY_POSES] = {10.0f, 10.0f}; +const float split_rend_relative_one_axis_pos_angles[SPLIT_REND_MAX_ONE_AXIS_MD_POSES] = {-15.0f, 15.0f}; + +const float split_rend_relative_yaw_pos_angles_hq[SPLIT_REND_MAX_YAW_ONLY_POSES] = {-15.0f, 15.0f}; +const float split_rend_relative_pitch_pos_angles_hq[SPLIT_REND_MAX_PITCH_ONLY_POSES] = {-15.0f, 15.0f}; +const float split_rend_relative_roll_pos_angles_hq[SPLIT_REND_MAX_PITCH_ONLY_POSES] = {-15.0f, 15.0f}; +const float split_rend_relative_one_axis_pos_angles_hq[SPLIT_REND_MAX_ONE_AXIS_MD_POSES] = {-15.0f, 15.0f}; + const int16_t SplitRend_band_grouping[MAX_SPLIT_REND_MD_BANDS + 1] = { //0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 32, 34, 36, 38, 40, 50, 60 @@ -567,6 +584,19 @@ const int16_t SplitRend_band_grouping[MAX_SPLIT_REND_MD_BANDS + 1] = //0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 25, 40, 60 }; +const int32_t ivas_split_rend_huff_p_d_consts[IVAS_SPLIT_REND_D_QUANT_PNTS][3] = { +{0,8,252},{1,8,253},{2,7,124},{3,6,60},{4,5,28},{5,4,12}, +{6,3,4},{7,1,0},{8,3,5},{9,4,13},{10,5,29},{11,6,61}, +{12,7,125},{13,8,254},{14,8,255} +}; + +const int32_t ivas_split_rend_huff_p_d_diff_consts[IVAS_SPLIT_REND_D_QUANT_PNTS][3] = { + { 0, 1, 0 },{ 1, 2, 2 },{ 2, 3, 6 },{ 3, 4, 14 }, + { 4, 5, 30 },{ 5, 6, 62 },{ 6, 7, 126 },{ 7, 8, 254 }, + { 8, 9, 510 },{ 9, 10, 1022 },{ 10, 11, 2046 },{ 11, 12, 4094 }, + { 12, 13, 8190 },{ 13, 14, 16382 },{ 14, 14, 16383 } +}; + const int32_t ivas_split_rend_huff_d_consts[IVAS_SPLIT_REND_D_QUANT_PNTS][3] = { { 0, 1, 0 },{ 1, 2, 2 },{ 2, 3, 6 },{ 3, 4, 14 }, { 4, 5, 30 },{ 5, 6, 62 },{ 6, 7, 126 },{ 7, 8, 254 }, diff --git a/lib_dec/ivas_rom_dec.h b/lib_dec/ivas_rom_dec.h index aa5f48cbe9..0cbf968d4b 100644 --- a/lib_dec/ivas_rom_dec.h +++ b/lib_dec/ivas_rom_dec.h @@ -160,12 +160,24 @@ extern const float diffuseFieldCoherenceDifferenceZ[BINAURAL_COHERENCE_DIFFERENC /*----------------------------------------------------------------------* * split rendering ROM tables *-----------------------------------------------------------------------*/ -extern const float split_rend_relative_yaw_angles[MAX_YAW_ANGLES]; -extern const float split_rend_relative_pitch_angles[MAX_PITCH_ANGLES]; -extern const float split_rend_relative_roll_angles[MAX_ROLL_ANGLES]; +extern const float split_rend_relative_yaw_pos_angles[SPLIT_REND_MAX_YAW_ONLY_POSES]; +extern const float split_rend_relative_pitch_pos_angles[SPLIT_REND_MAX_PITCH_ONLY_POSES]; +extern const float split_rend_relative_roll_pos_angles[SPLIT_REND_MAX_PITCH_ONLY_POSES]; +extern const float split_rend_relative_one_axis_pos_angles[SPLIT_REND_MAX_ONE_AXIS_MD_POSES]; +extern const float split_rend_relative_one_axis_pos_angles_hq[SPLIT_REND_MAX_ONE_AXIS_MD_POSES]; + +extern const float split_rend_relative_yaw_pos_angles_hq[SPLIT_REND_MAX_YAW_ONLY_POSES]; +extern const float split_rend_relative_pitch_pos_angles_hq[SPLIT_REND_MAX_PITCH_ONLY_POSES]; +extern const float split_rend_relative_roll_pos_angles_hq[SPLIT_REND_MAX_PITCH_ONLY_POSES]; + + +extern const float split_rend_relative_pos_angles[MAX_HEAD_ROT_POSES][3]; extern const int16_t SplitRend_band_grouping[MAX_SPLIT_REND_MD_BANDS + 1]; extern const int32_t ivas_split_rend_huff_d_consts[IVAS_SPLIT_REND_D_QUANT_PNTS][3]; extern const int32_t ivas_split_rend_huff_pred_consts[IVAS_SPLIT_REND_PRED_QUANT_PNTS][3]; +extern const int32_t ivas_split_rend_huff_p_d_consts[IVAS_SPLIT_REND_D_QUANT_PNTS][3]; +extern const int32_t ivas_split_rend_huff_p_d_diff_consts[IVAS_SPLIT_REND_D_QUANT_PNTS][3]; +extern const int32_t split_rend_brate_tbl[]; #endif #endif diff --git a/lib_dec/ivas_sba_dec.c b/lib_dec/ivas_sba_dec.c index 3c02a05d9b..aa300a0a8f 100644 --- a/lib_dec/ivas_sba_dec.c +++ b/lib_dec/ivas_sba_dec.c @@ -446,7 +446,11 @@ ivas_error ivas_sba_dec_reinit( set_f( st_ivas->mem_hp20_out[i], 0.0f, L_HP20_MEM ); } - if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL || st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_ROOM ) + if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL || st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_ROOM +#ifdef SPLIT_REND_WITH_HEAD_ROT + || st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB +#endif + ) { if ( ( error = ivas_render_config_open( &( st_ivas->hRenderConfig ) ) ) != IVAS_ERR_OK ) { @@ -459,12 +463,26 @@ ivas_error ivas_sba_dec_reinit( } if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) { +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) + { + ivas_renderSplitGetMultiBinPoseData( + &st_ivas->hRenderConfig->split_rend_config, + &st_ivas->splitBinRend.splitrend.multiBinPoseData, + st_ivas->hHeadTrackData->sr_pose_pred_axis ); + } +#endif if ( ( error = ivas_binRenderer_open( st_ivas ) ) != IVAS_ERR_OK ) { return error; } #ifdef SPLIT_REND_WITH_HEAD_ROT - ivas_split_renderer_open( &st_ivas->splitBinRend.splitrend, hDecoderConfig->output_Fs, hDecoderConfig->Opt_splitRendMode, 1 ); + if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) + { + ivas_split_renderer_open( &st_ivas->splitBinRend.splitrend, + &st_ivas->hRenderConfig->split_rend_config, + hDecoderConfig->output_Fs, 1, 0 ); + } #endif } else if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) diff --git a/lib_dec/ivas_spar_decoder.c b/lib_dec/ivas_spar_decoder.c index ceed901c1a..678db72276 100644 --- a/lib_dec/ivas_spar_decoder.c +++ b/lib_dec/ivas_spar_decoder.c @@ -1157,7 +1157,11 @@ void ivas_spar_dec_upmixer( } else { - if ( hDecoderConfig->output_config == AUDIO_CONFIG_FOA || !( st_ivas->hOutSetup.output_config == AUDIO_CONFIG_BINAURAL || st_ivas->hOutSetup.output_config == AUDIO_CONFIG_BINAURAL_ROOM ) ) + if ( hDecoderConfig->output_config == AUDIO_CONFIG_FOA || !( st_ivas->hOutSetup.output_config == AUDIO_CONFIG_BINAURAL || st_ivas->hOutSetup.output_config == AUDIO_CONFIG_BINAURAL_ROOM +#ifdef SPLIT_REND_WITH_HEAD_ROT + || st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB +#endif + ) ) { for ( ts = 0; ts < MAX_PARAM_SPATIAL_SUBFRAMES; ts++ ) { diff --git a/lib_dec/ivas_stat_dec.h b/lib_dec/ivas_stat_dec.h index 65d2af32f9..9a71525563 100644 --- a/lib_dec/ivas_stat_dec.h +++ b/lib_dec/ivas_stat_dec.h @@ -43,8 +43,8 @@ #include "common_api_types.h" // VE2AT: don't we want to avoid this include in the library? I admit that the rules hefre are not 100% clear to me but introducing it just for IVAS_QUATERNION is not necessry I think #ifdef SPLIT_REND_WITH_HEAD_ROT -#include "ivas_cldfb_trans_codec/CQMFEncoder.h" -#include "ivas_cldfb_trans_codec/CQMFDecoder.h" +#include "ivas_CQMFEncoder.h" +#include "ivas_CQMFDecoder.h" #endif /*----------------------------------------------------------------------------------* @@ -1278,10 +1278,6 @@ typedef struct ivas_binaural_rendering_conv_module_struct int16_t numTapsArray[BINAURAL_CONVBANDS]; int16_t numTaps; -#ifdef SPLIT_REND_WITH_HEAD_ROT - int16_t numPoses; -#endif - } BINRENDERER_CONV_MODULE, *BINRENDERER_CONV_MODULE_HANDLE; #ifdef SPLIT_REND_WITH_HEAD_ROT @@ -1291,9 +1287,11 @@ typedef struct ivas_binaural_head_rot_split_rendering_md_struct float pred_mat_re[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; float pred_mat_im[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; float gd; + float gd2; int16_t pred_mat_re_idx[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; int16_t pred_mat_im_idx[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; int16_t gd_idx; + int16_t gd2_idx; } BIN_HR_SPLIT_REND_MD, *BIN_HR_SPLIT_REND_MD_HANDLE; typedef struct ivas_split_rend_huffman_cfg_t @@ -1312,12 +1310,19 @@ typedef struct ivas_binaural_head_rot_split_rendering_huff_struct ivas_split_rend_huffman_cfg_t gd; int16_t gd_base2_code_len; int16_t gd_idx_trav[IVAS_SPLIT_REND_D_QUANT_PNTS]; + ivas_split_rend_huffman_cfg_t p_gd; + int16_t p_gd_base2_code_len; + int16_t p_gd_idx_trav[IVAS_SPLIT_REND_D_QUANT_PNTS]; + ivas_split_rend_huffman_cfg_t p_gd_diff; + int16_t p_gd_diff_base2_code_len; + int16_t p_gd_diff_idx_trav[IVAS_SPLIT_REND_D_QUANT_PNTS]; } BIN_HR_SPLIT_REND_HUFF, *BIN_HR_SPLIT_REND_HUFF_HANDLE; typedef struct ivas_binaural_head_rot_split_pre_rendering_struct { BIN_HR_SPLIT_REND_MD rot_md[MAX_HEAD_ROT_POSES - 1][MAX_PARAM_SPATIAL_SUBFRAMES][MAX_SPLIT_REND_MD_BANDS]; - float fix_pos_rot_mat[MAX_YAW_ANGLES - 1][BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float fix_pos_rot_mat[MAX_HEAD_ROT_POSES - 1][BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + IVAS_SPLIT_REND_POSE_TYPE pose_type[MAX_HEAD_ROT_POSES - 1]; BIN_HR_SPLIT_REND_HUFF huff_cfg; #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG HANDLE_CLDFB_FILTER_BANK cldfbSynRotBinDec[MAX_HEAD_ROT_POSES + 1][BINAURAL_CHANNELS]; @@ -1327,7 +1332,11 @@ typedef struct ivas_binaural_head_rot_split_pre_rendering_struct typedef struct ivas_binaural_head_rot_split_post_rendering_struct { BIN_HR_SPLIT_REND_MD rot_md[MAX_HEAD_ROT_POSES][MAX_PARAM_SPATIAL_SUBFRAMES][MAX_SPLIT_REND_MD_BANDS]; + IVAS_QUATERNION QuaternionsPre[MAX_PARAM_SPATIAL_SUBFRAMES]; + int16_t low_Res; + float fix_pos_rot_mat[MAX_HEAD_ROT_POSES - 1][BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + IVAS_SPLIT_REND_POSE_TYPE pose_type[MAX_HEAD_ROT_POSES - 1]; BIN_HR_SPLIT_REND_HUFF huff_cfg; #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG float mixer_mat_re[MAX_HEAD_ROT_POSES][MAX_SPLIT_REND_MD_BANDS][BINAURAL_CHANNELS][BINAURAL_CHANNELS]; @@ -1339,6 +1348,7 @@ typedef struct ivas_binaural_head_rot_split_post_rendering_struct float gd_mem[1][MAX_SPLIT_REND_MD_BANDS]; #endif int16_t cf_flag; + HANDLE_CLDFB_FILTER_BANK cldfbAna[BINAURAL_CHANNELS]; HANDLE_CLDFB_FILTER_BANK cldfbSyn[BINAURAL_CHANNELS]; #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG HANDLE_CLDFB_FILTER_BANK cldfbSynReconsBinDec[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS]; @@ -1348,41 +1358,63 @@ typedef struct ivas_binaural_head_rot_split_post_rendering_struct typedef struct ivas_binaural_head_rot_split_rendering_lcld_enc_struct { void *pLcld_enc; - int32_t iChannels; - CQMFEncoder *psCQMFEncoder; - float ***pppfCQMFReal; - float ***pppfCQMFImag; + int32_t iChannels; + CQMFEncoder *psCQMFEncoder; + float ***pppfCQMFReal; + float ***pppfCQMFImag; #ifdef CLDFB_DEBUG - FILE *cldfbIn; - int numFrame; + FILE *cldfbIn; + int numFrame; #endif } BIN_HR_SPLIT_LCLD_ENC, *BIN_HR_SPLIT_LCLD_ENC_HANDLE; typedef struct ivas_binaural_head_rot_split_rendering_lcld_dec_struct { void *pLcld_dec; - int32_t iChannels; - CQMFDecoder *psCQMFDecoder; - float ***pppfDecCQMFReal; - float ***pppfDecCQMFImag; + int32_t iChannels; + CQMFDecoder *psCQMFDecoder; + float ***pppfDecCQMFReal; + float ***pppfDecCQMFImag; #ifdef CLDFB_DEBUG - FILE *cldfbOut; - int numFrame; + FILE *cldfbOut; + int numFrame; #endif } BIN_HR_SPLIT_LCLD_DEC, *BIN_HR_SPLIT_LCLD_DEC_HANDLE; typedef struct { +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + HANDLE_CLDFB_FILTER_BANK cldfbAna[( 1 + MAX_HEAD_ROT_POSES ) * BINAURAL_CHANNELS]; +#else HANDLE_CLDFB_FILTER_BANK cldfbAna[MAX_HEAD_ROT_POSES * BINAURAL_CHANNELS]; +#endif } CLDFB_HANDLES_WRAPPER, *CLDFB_HANDLES_WRAPPER_HANDLE; + +#ifdef SPLIT_REND_WITH_HEAD_ROT typedef struct { + int16_t num_poses; + float relative_head_poses[MAX_HEAD_ROT_POSES][3]; + int16_t dof; + int16_t hq_mode; + IVAS_SPLIT_REND_ROT_AXIS rot_axis; +} MULTI_BIN_REND_POSE_DATA; +#endif + +typedef struct +{ + MULTI_BIN_REND_POSE_DATA multiBinPoseData; BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend; BIN_HR_SPLIT_LCLD_ENC_HANDLE hSplitBinLCLDEnc; - BIN_HR_SPLIT_POST_REND_HANDLE hBinHrSplitPostRend; - BIN_HR_SPLIT_LCLD_DEC_HANDLE hSplitBinLCLDDec; CLDFB_HANDLES_WRAPPER_HANDLE hCldfbHandles; } SPLIT_REND_WRAPPER; + +typedef struct +{ + MULTI_BIN_REND_POSE_DATA multiBinPoseData; + BIN_HR_SPLIT_POST_REND_HANDLE hBinHrSplitPostRend; + BIN_HR_SPLIT_LCLD_DEC_HANDLE hSplitBinLCLDDec; +} SPLIT_POST_REND_WRAPPER; #endif /* Fastconv binaural data structure */ @@ -1399,15 +1431,17 @@ typedef struct ivas_binaural_rendering_struct int16_t nInChannels; /* number input channels */ int8_t render_lfe; /* Flag to render LFE in binaural rendering*/ IVAS_FORMAT ivas_format; /* format; corresponds to st_ivas->ivas_format, unless the signal gets transormed to a different domain for rendering */ -#ifdef SPLIT_REND_WITH_HEAD_ROT - IVAS_SPLIT_REND_MODE splitRendMode; /*Split rendering mode, pre, post (OR combined in debug mode)*/ -#endif /* Convolution module structure */ BINRENDERER_CONV_MODULE_HANDLE hBinRenConvModule; /* Variables related to reverb module */ float earlyPartEneCorrection[CLDFB_NO_CHANNELS_MAX]; REVERB_STRUCT_HANDLE hReverb; + +#ifdef SPLIT_REND_WITH_HEAD_ROT + int16_t numPoses; +#endif + } BINAURAL_RENDERER, *BINAURAL_RENDERER_HANDLE; @@ -1428,6 +1462,9 @@ typedef struct ivas_binaural_head_track_struct float lrSwitchInterpVal; int16_t shd_rot_max_order; +#ifdef SPLIT_REND_WITH_HEAD_ROT + IVAS_SPLIT_REND_ROT_AXIS sr_pose_pred_axis; +#endif } HEAD_TRACK_DATA, *HEAD_TRACK_DATA_HANDLE; @@ -1797,10 +1834,13 @@ typedef struct ivas_roomAcoustics_t typedef struct ivas_render_config_t { -#ifdef DEBUGGING +#if ( defined DEBUGGING ) || ( defined SPLIT_REND_WITH_HEAD_ROT ) ivas_renderTypeOverride renderer_type_override; #endif ivas_roomAcoustics_t roomAcoustics; +#ifdef SPLIT_REND_WITH_HEAD_ROT + IVAS_SPLIT_REND_CONFIG_DATA split_rend_config; +#endif } RENDER_CONFIG_DATA, *RENDER_CONFIG_HANDLE; @@ -1989,10 +2029,7 @@ typedef struct decoder_config_structure int16_t Opt_LsCustom; /* indicates whether loudspeaker custom setup is used */ int16_t Opt_HRTF_binary; /* indicates whether HRTF binary file is used */ int16_t Opt_Headrotation; /* indicates whether head-rotation is used */ -#ifdef SPLIT_REND_WITH_HEAD_ROT - IVAS_SPLIT_REND_MODE Opt_splitRendMode; /* Split rendering mode */ -#endif - int16_t orientation_tracking; /* indicates orientation tracking type */ + int16_t orientation_tracking; /* indicates orientation tracking type */ float no_diegetic_pan; int16_t Opt_AMR_WB; /* flag indicating AMR-WB IO mode */ @@ -2109,7 +2146,6 @@ typedef struct Decoder_Struct #ifdef SPLIT_REND_WITH_HEAD_ROT IVAS_DEC_SPLIT_REND_WRAPPER splitBinRend; - HEAD_TRACK_DATA_HANDLE hPostRendheadTrackData; #endif } Decoder_Struct; diff --git a/lib_dec/lib_dec.c b/lib_dec/lib_dec.c index 676076fc1f..1261c93b2b 100644 --- a/lib_dec/lib_dec.c +++ b/lib_dec/lib_dec.c @@ -36,6 +36,9 @@ #include "jbm_jb4sb.h" #include "jbm_pcmdsp_apa.h" #include "jbm_pcmdsp_fifo.h" +#ifdef SPLIT_REND_WITH_HEAD_ROT +#include "ivas_rom_dec.h" +#endif #include #include #include @@ -203,6 +206,29 @@ ivas_error IVAS_DEC_Open( } +#ifdef SPLIT_REND_WITH_HEAD_ROT +/*-------------------------------------------------------------------* + * is_SplitRend_BitRate() + * + * check if the bitrate is SPLIT REND supported active bitrate + *-------------------------------------------------------------------*/ +static int16_t is_SplitRend_BitRate( const int32_t splitRendBitRate ) +{ + int16_t j; + + j = 0; + while ( j < SIZE_SPLIT_REND_BRATE_TBL && splitRendBitRate != split_rend_brate_tbl[j] ) + { + j++; + } + if ( j >= SIZE_SPLIT_REND_BRATE_TBL ) + { + return 0; + } + return 1; +} +#endif + /*---------------------------------------------------------------------* * init_decoder_config() * @@ -333,6 +359,12 @@ static AUDIO_CONFIG mapOutputFormat( { output_config = AUDIO_CONFIG_BINAURAL_ROOM; } +#ifdef SPLIT_REND_WITH_HEAD_ROT + else if ( outputFormat == IVAS_DEC_OUTPUT_SPLIT_BINAURAL_CLDFB ) + { + output_config = AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB; + } +#endif else { output_config = AUDIO_CONFIG_INVALID; @@ -387,10 +419,6 @@ ivas_error IVAS_DEC_Configure( const int16_t customLsOutputEnabled, /* i : enable custom loudspeaker setup handle */ const int16_t hrtfReaderEnabled, /* i : enable HRTF binary file input */ const int16_t enableHeadRotation /* i : enable head rotation for binaural output */ -#ifdef SPLIT_REND_WITH_HEAD_ROT - , - const IVAS_SPLIT_REND_MODE splitRendMode /* i : split rend mode */ -#endif #ifdef DEBUGGING , const int16_t forceSubframeBinauralization /* i : enable subframe binauralization */ @@ -447,10 +475,6 @@ ivas_error IVAS_DEC_Configure( hDecoderConfig->Opt_Headrotation = enableHeadRotation; hDecoderConfig->Opt_HRTF_binary = hrtfReaderEnabled; -#ifdef SPLIT_REND_WITH_HEAD_ROT - hDecoderConfig->Opt_splitRendMode = splitRendMode; -#endif - /* Set decoder parameters to initial values */ if ( ( error = ivas_init_decoder_front( st_ivas ) ) != IVAS_ERR_OK ) { @@ -850,7 +874,7 @@ ivas_error IVAS_DEC_FeedHeadTrackData( IVAS_QUATERNION *orientation /* i : head-tracking data */ #ifdef SPLIT_REND_WITH_HEAD_ROT , - IVAS_SPLIT_REND_MODE splitRendMode /* i : flag to determine split rendering mode*/ + IVAS_SPLIT_REND_ROT_AXIS rot_axis #endif ) { @@ -863,12 +887,6 @@ ivas_error IVAS_DEC_FeedHeadTrackData( } hHeadTrackData = hIvasDec->st_ivas->hHeadTrackData; -#ifdef SPLIT_REND_WITH_HEAD_ROT - if ( splitRendMode == SPLIT_REND_POST ) - { - hHeadTrackData = hIvasDec->st_ivas->hPostRendheadTrackData; - } -#endif if ( hHeadTrackData == NULL ) { @@ -886,6 +904,10 @@ ivas_error IVAS_DEC_FeedHeadTrackData( hHeadTrackData->num_quaternions = 0; +#ifdef SPLIT_REND_WITH_HEAD_ROT + hHeadTrackData->sr_pose_pred_axis = rot_axis; +#endif + return IVAS_ERR_OK; } @@ -1010,6 +1032,13 @@ ivas_error IVAS_DEC_GetRenderConfig( mvr2r( hRCin->roomAcoustics.pAcoustic_rt60, hRCout->room_acoustics.pAcoustic_rt60, CLDFB_NO_CHANNELS_MAX ); mvr2r( hRCin->roomAcoustics.pAcoustic_dsr, hRCout->room_acoustics.pAcoustic_dsr, CLDFB_NO_CHANNELS_MAX ); +#ifdef SPLIT_REND_WITH_HEAD_ROT + hRCout->split_rend_config.splitRendBitRate = SPLIT_REND_768k; + hRCout->split_rend_config.dof = 3; + hRCout->split_rend_config.hq_mode = 0; + hRCout->split_rend_config.codec_delay_ms = 0; +#endif + return IVAS_ERR_OK; } @@ -1054,6 +1083,13 @@ ivas_error IVAS_DEC_FeedRenderConfig( mvr2r( renderConfig.room_acoustics.pAcoustic_rt60, hRenderConfig->roomAcoustics.pAcoustic_rt60, CLDFB_NO_CHANNELS_MAX ); mvr2r( renderConfig.room_acoustics.pAcoustic_dsr, hRenderConfig->roomAcoustics.pAcoustic_dsr, CLDFB_NO_CHANNELS_MAX ); +#ifdef SPLIT_REND_WITH_HEAD_ROT + hRenderConfig->split_rend_config.splitRendBitRate = renderConfig.split_rend_config.splitRendBitRate; + hRenderConfig->split_rend_config.dof = renderConfig.split_rend_config.dof; + hRenderConfig->split_rend_config.hq_mode = renderConfig.split_rend_config.hq_mode; + hRenderConfig->split_rend_config.codec_delay_ms = renderConfig.split_rend_config.codec_delay_ms; +#endif + return IVAS_ERR_OK; } @@ -1080,8 +1116,11 @@ ivas_error IVAS_DEC_GetDelay( st_ivas = hIvasDec->st_ivas; hDecoderConfig = st_ivas->hDecoderConfig; - +#ifdef SPLIT_REND_WITH_HEAD_ROT + *nSamples = NS2SA( hDecoderConfig->output_Fs, get_delay( DEC, hDecoderConfig->output_Fs, st_ivas->ivas_format, st_ivas->cldfbAnaDec[0], st_ivas->renderer_type, st_ivas->binaural_latency_ns, hDecoderConfig->output_config ) ); +#else *nSamples = NS2SA( hDecoderConfig->output_Fs, get_delay( DEC, hDecoderConfig->output_Fs, st_ivas->ivas_format, st_ivas->cldfbAnaDec[0], st_ivas->renderer_type, st_ivas->binaural_latency_ns ) ); +#endif *timeScale = hDecoderConfig->output_Fs; @@ -1705,6 +1744,12 @@ static ivas_error get_channel_config( { strcpy( str, "Binaural_ROOM" ); } +#ifdef SPLIT_REND_WITH_HEAD_ROT + else if ( config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) + { + strcpy( str, "Split_Binaural" ); + } +#endif else if ( config == AUDIO_CONFIG_EXTERNAL ) { strcpy( str, "External renderer" ); diff --git a/lib_dec/lib_dec.h b/lib_dec/lib_dec.h index 4a052ba32b..d3889c626c 100644 --- a/lib_dec/lib_dec.h +++ b/lib_dec/lib_dec.h @@ -59,6 +59,9 @@ typedef enum _IVAS_DEC_OUTPUT_CONFIG IVAS_DEC_OUTPUT_HOA3, IVAS_DEC_OUTPUT_BINAURAL, IVAS_DEC_OUTPUT_BINAURAL_ROOM, +#ifdef SPLIT_REND_WITH_HEAD_ROT + IVAS_DEC_OUTPUT_SPLIT_BINAURAL_CLDFB, +#endif IVAS_DEC_OUTPUT_EXT, IVAS_DEC_OUTPUT_UNKNOWN = 0xffff } IVAS_DEC_AUDIO_CONFIG; @@ -127,10 +130,6 @@ ivas_error IVAS_DEC_Configure( const int16_t customLsOutputEnabled, /* i : enable custom loudspeaker setup handle */ const int16_t hrtfReaderEnabled, /* i : enable HRTF binary file input */ const int16_t enableHeadRotation /* i : enable head rotation for binaural output */ -#ifdef SPLIT_REND_WITH_HEAD_ROT - , - const IVAS_SPLIT_REND_MODE splitRendMode /* i : split rendering mode */ -#endif #ifdef DEBUGGING , const int16_t forceSubframeBinauralization /* i : enable subframe binauralization */ @@ -181,9 +180,9 @@ ivas_error IVAS_DEC_GetMasaMetadata( ivas_error IVAS_DEC_FeedHeadTrackData( IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ IVAS_QUATERNION *orientation /* i : head-tracking data */ -#ifdef SPLIT_REND_WITH_HEAD_ROT + #ifdef SPLIT_REND_WITH_HEAD_ROT , - IVAS_SPLIT_REND_MODE splitRendMode /* i : flag to determine split rendering mode*/ + IVAS_SPLIT_REND_ROT_AXIS rot_axis /*i : external control for rotation axis for split rendering*/ #endif ); diff --git a/lib_enc/lib_enc.c b/lib_enc/lib_enc.c index b4eb85915e..efbed2baf7 100755 --- a/lib_enc/lib_enc.c +++ b/lib_enc/lib_enc.c @@ -951,7 +951,11 @@ ivas_error IVAS_ENC_GetDelay( return IVAS_ERR_UNEXPECTED_NULL_POINTER; } +#ifdef SPLIT_REND_WITH_HEAD_ROT + *delay = NS2SA( hEncoderConfig->input_Fs, get_delay( ENC, hEncoderConfig->input_Fs, hEncoderConfig->ivas_format, NULL, RENDERER_DISABLE, 0, AUDIO_CONFIG_INVALID ) ); +#else *delay = NS2SA( hEncoderConfig->input_Fs, get_delay( ENC, hEncoderConfig->input_Fs, hEncoderConfig->ivas_format, NULL, RENDERER_DISABLE, 0 ) ); +#endif *delay *= hEncoderConfig->nchan_inp; diff --git a/lib_rend/ivas_CQMFDecoder.c b/lib_rend/ivas_CQMFDecoder.c new file mode 100644 index 0000000000..37ae41bca0 --- /dev/null +++ b/lib_rend/ivas_CQMFDecoder.c @@ -0,0 +1,1375 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby +International AB, Ericsson AB, Fraunhofer-Gesellschaft zur Foerderung der +angewandten Forschung e.V., Huawei Technologies Co. LTD., Koninklijke Philips +N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge +Corporation, and other contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, +Ericsson AB, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung +e.V., Huawei Technologies Co. LTD., Koninklijke Philips N.V., Nippon Telegraph +and Telephone Corporation, Nokia Technologies Oy, Orange, Panasonic Holdings +Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their +respective contributions in the software. This notice grants no license of any +kind, including but not limited to patent license, nor is any license granted by +implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration +agreement before making contributions. + + This software is provided "AS IS", without any express or implied warranties. +The software is in the development stage. It is intended exclusively for experts +who have experience with such software and solely for the purpose of inspection. +All implied warranties of non-infringement, merchantability and fitness for a +particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing +this software shall be submitted to and settled by the final, binding +jurisdiction of the courts of Munich, Germany in accordance with the laws of the +Federal Republic of Germany excluding its conflict of law rules and the United +Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "ivas_CQMFDecoder.h" + +#include "ivas_CQMFHuff.h" +#include "ivas_NoiseGen.h" +#include "ivas_PerceptualModel.h" +#include "ivas_RMSEnvDeltaHuff.h" +#include "ivas_Tables.h" +#include "ivas_cldfb_codec_bitstream.h" +#include "options.h" +#include "prot.h" +#include "wmops.h" +#include +#include +#include +#include +#ifdef ENABLE_MS_PRED +#include "ivas_MSPred.h" +#endif + +#include "ivas_PredDecoder.h" +#include "ivas_lib_rend_internal.h" + +struct CQMF_DECODER +{ + int32_t iSampleRate; + int32_t iChannels; + int32_t iNumBlocks; + + int32_t iNumBands; + const int32_t *piBandwidths; + + int32_t iMSMode; + int32_t *piMSFlags; +#ifdef ENABLE_MS_PRED + int32_t piMSPredCoefs[MAX_BANDS]; + int32_t piLRPhaseDiffs[MAX_BANDS]; +#endif +#ifdef ENABLE_PMOD_ADJUST + int32_t **ppiHiSMRFlags; +#endif + // uint8_t *pReadBuff; + int32_t iCommonGrouping; + int32_t *piNumGroups; + int32_t **ppiGroupLengths; + + int32_t ***pppiRMSEnvelope; + int32_t ***pppiSMR; + int32_t ***pppiExcitation; + int32_t ***pppiAlloc; + + int32_t iAllocOffset; + + int32_t ***pppiCQMFSignReal; + int32_t ***pppiCQMFSignImag; + int32_t ***pppiQCQMFReal; + int32_t ***pppiQCQMFImag; + + PredictionDecoder *psPredictionDecoder; + + + NoiseGen *psNoiseGen; + + int32_t iLastError; +}; + +CQMFDecoder *CreateCQMFDecoder( const int32_t iSampleRate, + const int32_t iChannels ) +{ + int32_t n; + CQMFDecoder *psCQMFDecoder = NULL; + + assert( iSampleRate == 48000 ); // Fix + + psCQMFDecoder = (CQMFDecoder *) count_malloc( sizeof( CQMFDecoder ) ); + psCQMFDecoder->iSampleRate = iSampleRate; + psCQMFDecoder->iChannels = iChannels; + psCQMFDecoder->iNumBlocks = CQMF_BLOCKS_PER_FRAME; + psCQMFDecoder->iAllocOffset = 0; + + psCQMFDecoder->iNumBands = MAX_BANDS_48; // Fix + psCQMFDecoder->piBandwidths = c_aiBandwidths48; // Fix + + psCQMFDecoder->iMSMode = 0; + psCQMFDecoder->piMSFlags = + (int32_t *) count_malloc( MAX_BANDS * sizeof( int32_t ) ); +#ifdef ENABLE_MS_PRED + for ( n = 0; n < MAX_BANDS; n++ ) + { + psCQMFDecoder->piLRPhaseDiffs[n] = 0; + psCQMFDecoder->piMSPredCoefs[n] = 0; + } +#endif +#ifdef ENABLE_PMOD_ADJUST + psCQMFDecoder->ppiHiSMRFlags = + (int32_t **) count_malloc( psCQMFDecoder->iChannels * sizeof( int32_t * ) ); +#endif + + psCQMFDecoder->iCommonGrouping = + 1; // Common grouping always on only impacts stereo + psCQMFDecoder->piNumGroups = + (int32_t *) count_malloc( psCQMFDecoder->iChannels * sizeof( int32_t ) ); + psCQMFDecoder->ppiGroupLengths = + (int32_t **) count_malloc( psCQMFDecoder->iChannels * sizeof( int32_t * ) ); + psCQMFDecoder->pppiRMSEnvelope = + (int32_t ***) count_malloc( psCQMFDecoder->iChannels * sizeof( int32_t ** ) ); + psCQMFDecoder->pppiSMR = + (int32_t ***) count_malloc( psCQMFDecoder->iChannels * sizeof( int32_t ** ) ); + psCQMFDecoder->pppiExcitation = + (int32_t ***) count_malloc( psCQMFDecoder->iChannels * sizeof( int32_t ** ) ); + psCQMFDecoder->pppiAlloc = + (int32_t ***) count_malloc( psCQMFDecoder->iChannels * sizeof( int32_t ** ) ); + + psCQMFDecoder->pppiCQMFSignReal = + (int32_t ***) count_malloc( psCQMFDecoder->iChannels * sizeof( int32_t ** ) ); + psCQMFDecoder->pppiCQMFSignImag = + (int32_t ***) count_malloc( psCQMFDecoder->iChannels * sizeof( int32_t ** ) ); + psCQMFDecoder->pppiQCQMFReal = + (int32_t ***) count_malloc( psCQMFDecoder->iChannels * sizeof( int32_t ** ) ); + psCQMFDecoder->pppiQCQMFImag = + (int32_t ***) count_malloc( psCQMFDecoder->iChannels * sizeof( int32_t ** ) ); + for ( n = 0; n < iChannels; n++ ) + { + int32_t k; +#ifdef ENABLE_PMOD_ADJUST + psCQMFDecoder->ppiHiSMRFlags[n] = + (int32_t *) count_malloc( MAX_BANDS * sizeof( int32_t ) ); + ; +#endif + psCQMFDecoder->ppiGroupLengths[n] = + (int32_t *) count_malloc( CQMF_BLOCKS_PER_FRAME * sizeof( int32_t ) ); + psCQMFDecoder->pppiRMSEnvelope[n] = + (int32_t **) count_malloc( CQMF_BLOCKS_PER_FRAME * sizeof( int32_t * ) ); + psCQMFDecoder->pppiSMR[n] = + (int32_t **) count_malloc( CQMF_BLOCKS_PER_FRAME * sizeof( int32_t * ) ); + psCQMFDecoder->pppiExcitation[n] = + (int32_t **) count_malloc( CQMF_BLOCKS_PER_FRAME * sizeof( int32_t * ) ); + psCQMFDecoder->pppiAlloc[n] = + (int32_t **) count_malloc( CQMF_BLOCKS_PER_FRAME * sizeof( int32_t * ) ); + + psCQMFDecoder->pppiCQMFSignReal[n] = + (int32_t **) count_malloc( CQMF_BLOCKS_PER_FRAME * sizeof( int32_t * ) ); + psCQMFDecoder->pppiCQMFSignImag[n] = + (int32_t **) count_malloc( CQMF_BLOCKS_PER_FRAME * sizeof( int32_t * ) ); + psCQMFDecoder->pppiQCQMFReal[n] = + (int32_t **) count_malloc( CQMF_BLOCKS_PER_FRAME * sizeof( int32_t * ) ); + psCQMFDecoder->pppiQCQMFImag[n] = + (int32_t **) count_malloc( CQMF_BLOCKS_PER_FRAME * sizeof( int32_t * ) ); + for ( k = 0; k < CQMF_BLOCKS_PER_FRAME; k++ ) + { + psCQMFDecoder->pppiRMSEnvelope[n][k] = + (int32_t *) count_malloc( MAX_BANDS * sizeof( int32_t ) ); + psCQMFDecoder->pppiSMR[n][k] = + (int32_t *) count_malloc( MAX_BANDS * sizeof( int32_t ) ); + psCQMFDecoder->pppiExcitation[n][k] = + (int32_t *) count_malloc( MAX_BANDS * sizeof( int32_t ) ); + psCQMFDecoder->pppiAlloc[n][k] = + (int32_t *) count_malloc( MAX_BANDS * sizeof( int32_t ) ); + + psCQMFDecoder->pppiCQMFSignReal[n][k] = + (int32_t *) count_malloc( CQMF_BANDS * sizeof( int32_t ) ); + psCQMFDecoder->pppiCQMFSignImag[n][k] = + (int32_t *) count_malloc( CQMF_BANDS * sizeof( int32_t ) ); + psCQMFDecoder->pppiQCQMFReal[n][k] = + (int32_t *) count_malloc( CQMF_BANDS * sizeof( int32_t ) ); + psCQMFDecoder->pppiQCQMFImag[n][k] = + (int32_t *) count_malloc( CQMF_BANDS * sizeof( int32_t ) ); + } + } + + psCQMFDecoder->psPredictionDecoder = + CreatePredictionDecoder( iChannels, psCQMFDecoder->iNumBlocks ); + // psCQMFDecoder->pReadBuff = + // (uint8_t *) count_malloc( 4096 * sizeof( uint8_t ) ); + psCQMFDecoder->psNoiseGen = + NULL; // CreateNoiseGen(); // No noise fill for now + + psCQMFDecoder->iLastError = DECODER_ERROR_NONE; + + return psCQMFDecoder; +} + +void DeleteCQMFDecoder( CQMFDecoder *psCQMFDecoder ) +{ + if ( psCQMFDecoder != NULL ) + { + + if ( psCQMFDecoder->piMSFlags != NULL ) + { + count_free( psCQMFDecoder->piMSFlags ); + } + + if ( psCQMFDecoder->piNumGroups != NULL ) + { + count_free( psCQMFDecoder->piNumGroups ); + } + + if ( psCQMFDecoder->ppiGroupLengths != NULL ) + { + int32_t n; + for ( n = 0; n < psCQMFDecoder->iChannels; n++ ) + { + count_free( psCQMFDecoder->ppiGroupLengths[n] ); + } + count_free( psCQMFDecoder->ppiGroupLengths ); + } + + if ( psCQMFDecoder->pppiRMSEnvelope != NULL ) + { + int32_t n; + for ( n = 0; n < psCQMFDecoder->iChannels; n++ ) + { + int32_t k; + for ( k = 0; k < CQMF_BLOCKS_PER_FRAME; k++ ) + { + count_free( psCQMFDecoder->pppiRMSEnvelope[n][k] ); + } + count_free( psCQMFDecoder->pppiRMSEnvelope[n] ); + } + count_free( psCQMFDecoder->pppiRMSEnvelope ); + } + + if ( psCQMFDecoder->pppiSMR != NULL ) + { + int32_t n; + for ( n = 0; n < psCQMFDecoder->iChannels; n++ ) + { + int32_t k; + for ( k = 0; k < CQMF_BLOCKS_PER_FRAME; k++ ) + { + count_free( psCQMFDecoder->pppiSMR[n][k] ); + } + count_free( psCQMFDecoder->pppiSMR[n] ); + } + count_free( psCQMFDecoder->pppiSMR ); + } + + if ( psCQMFDecoder->pppiExcitation != NULL ) + { + int32_t n; + for ( n = 0; n < psCQMFDecoder->iChannels; n++ ) + { + int32_t k; + for ( k = 0; k < CQMF_BLOCKS_PER_FRAME; k++ ) + { + count_free( psCQMFDecoder->pppiExcitation[n][k] ); + } + count_free( psCQMFDecoder->pppiExcitation[n] ); + } + count_free( psCQMFDecoder->pppiExcitation ); + } + +#ifdef ENABLE_PMOD_ADJUST + if ( psCQMFDecoder->ppiHiSMRFlags != NULL ) + { + int32_t n; + for ( n = 0; n < psCQMFDecoder->iChannels; n++ ) + { + count_free( psCQMFDecoder->ppiHiSMRFlags[n] ); + } + count_free( psCQMFDecoder->ppiHiSMRFlags ); + } +#endif + + if ( psCQMFDecoder->pppiAlloc != NULL ) + { + int32_t n; + for ( n = 0; n < psCQMFDecoder->iChannels; n++ ) + { + int32_t k; + for ( k = 0; k < CQMF_BLOCKS_PER_FRAME; k++ ) + { + count_free( psCQMFDecoder->pppiAlloc[n][k] ); + } + count_free( psCQMFDecoder->pppiAlloc[n] ); + } + count_free( psCQMFDecoder->pppiAlloc ); + } + + if ( psCQMFDecoder->pppiCQMFSignReal != NULL ) + { + int32_t n; + for ( n = 0; n < psCQMFDecoder->iChannels; n++ ) + { + int32_t k; + for ( k = 0; k < CQMF_BLOCKS_PER_FRAME; k++ ) + { + count_free( psCQMFDecoder->pppiCQMFSignReal[n][k] ); + } + count_free( psCQMFDecoder->pppiCQMFSignReal[n] ); + } + count_free( psCQMFDecoder->pppiCQMFSignReal ); + } + + if ( psCQMFDecoder->pppiCQMFSignImag != NULL ) + { + int32_t n; + for ( n = 0; n < psCQMFDecoder->iChannels; n++ ) + { + int32_t k; + for ( k = 0; k < CQMF_BLOCKS_PER_FRAME; k++ ) + { + count_free( psCQMFDecoder->pppiCQMFSignImag[n][k] ); + } + count_free( psCQMFDecoder->pppiCQMFSignImag[n] ); + } + count_free( psCQMFDecoder->pppiCQMFSignImag ); + } + + if ( psCQMFDecoder->pppiQCQMFReal != NULL ) + { + int32_t n; + for ( n = 0; n < psCQMFDecoder->iChannels; n++ ) + { + int32_t k; + for ( k = 0; k < CQMF_BLOCKS_PER_FRAME; k++ ) + { + count_free( psCQMFDecoder->pppiQCQMFReal[n][k] ); + } + count_free( psCQMFDecoder->pppiQCQMFReal[n] ); + } + count_free( psCQMFDecoder->pppiQCQMFReal ); + } + + if ( psCQMFDecoder->pppiQCQMFImag != NULL ) + { + int32_t n; + for ( n = 0; n < psCQMFDecoder->iChannels; n++ ) + { + int32_t k; + for ( k = 0; k < CQMF_BLOCKS_PER_FRAME; k++ ) + { + count_free( psCQMFDecoder->pppiQCQMFImag[n][k] ); + } + count_free( psCQMFDecoder->pppiQCQMFImag[n] ); + } + count_free( psCQMFDecoder->pppiQCQMFImag ); + } + + // if ( psCQMFDecoder->pReadBuff != NULL ) + //{ + // count_free( psCQMFDecoder->pReadBuff ); + // } + + DeletePredictionDecoder( psCQMFDecoder->psPredictionDecoder ); + + if ( psCQMFDecoder->psNoiseGen != NULL ) + { + DeleteNoiseGen( psCQMFDecoder->psNoiseGen ); + } + + count_free( psCQMFDecoder ); + } +} + +int32_t CQMFDecoderGetError( CQMFDecoder *psCQMFDecoder ) +{ + return psCQMFDecoder->iLastError; +} + +static void ApplyRMSEnvelope( const int32_t iNumBands, + const int32_t *piBandwidths, + const int32_t iNumGroups, + const int32_t *piGroupLengths, + int32_t **ppiRMSEnvelope, + float **ppfReal, + float **ppfImag ); + +static void ReplaceSign( const int32_t iNumBlocks, const int32_t iNumCQMFBands, int32_t **ppiSignReal, int32_t **ppiSignImag, float **ppfReal, float **ppfImag ); + +static void +InvQuantizeSpectrum( const int32_t iNumGroups, const int32_t *piGroupLengths, const int32_t iNumBands, const int32_t *piBandwidths, int32_t **ppiAlloc, int32_t **ppiQReal, int32_t **ppiQImag, float **ppfReal, float **ppfImag, + NoiseGen *psNoiseGen ); // Nullable + +static void InvMSCoding( const int32_t iNumBlocks, const int32_t iNumBands, const int32_t *piBandwidths, const int32_t iMSMode, const int32_t *piMSFlags, +#ifdef ENABLE_MS_PRED + const int32_t *piLRPhaseDiffs, + const int32_t *piMSPredCoefs, +#endif + float ***pppfReal, + float ***pppfImag ); + +/* Currently only the number of bands in frame */ +static int32_t ReadHeaderInformation( int32_t *piNumBands, + ivas_split_rend_bits_t *pBits ); + +static int32_t ReadMSInformation( const int32_t iNumBands, int32_t *piMSMode, int32_t *piMSFlags, +#ifdef ENABLE_MS_PRED + int32_t *piLRPhaseDiffs, + int32_t *piMSPredCoefs, +#endif + ivas_split_rend_bits_t *pBits ); + +static int32_t ReadGroupInformation( const int32_t iChannels, + const int32_t iNumBlocks, + int32_t *piCommonGrouping, + int32_t *piNumGroups, + int32_t **ppiGroupLengths, + ivas_split_rend_bits_t *pBits ); + +static int32_t ReadHuff( const uint32_t ( *pauiHuffDecTable )[HUFF_DEC_TABLE_SIZE], + int32_t *piSymbol, + ivas_split_rend_bits_t *pBits ); + +static int32_t ReadRMSEnvelope( const int32_t iChannels, + const int32_t *piNumGroups, + const int32_t iNumBands, + int32_t ***pppiRMSEnvelope, + ivas_split_rend_bits_t *pBits ); +static int32_t ReadAllocInformation( int32_t *piAllocOffset, + ivas_split_rend_bits_t *pBits ); + +static int32_t +ReadCQMFData( const int32_t iNumGroups, const int32_t *piGroupLengths, const int32_t iNumBands, const int32_t *piBandwidths, const int32_t *piPredEnable, int32_t **ppiAlloc, int32_t **ppiSignReal, int32_t **ppiSignImag, int32_t **ppiQReal, int32_t **ppiQImag, ivas_split_rend_bits_t *pBits ); + +static void ComputeAllocation( const int32_t iChannels, + const int32_t *piNumGroups, + const int32_t iNumBands, + int32_t ***pppiSMR, + const int32_t iAllocOffset, + int32_t ***pppiAlloc ); + +int32_t DecodeFrame( CQMFDecoder *psCQMFDecoder, + ivas_split_rend_bits_t *pBits, + float ***pppfCQMFReal, + float ***pppfCQMFImag ) +{ + int32_t n; + int32_t iBitsRead; + + iBitsRead = 0; + + iBitsRead += + ReadHeaderInformation( &psCQMFDecoder->iNumBands, pBits ); + + if ( psCQMFDecoder->iChannels == 2 ) + { + iBitsRead += ReadMSInformation( + psCQMFDecoder->iNumBands, &psCQMFDecoder->iMSMode, + psCQMFDecoder->piMSFlags, +#ifdef ENABLE_MS_PRED + psCQMFDecoder->piLRPhaseDiffs, psCQMFDecoder->piMSPredCoefs, +#endif + pBits ); + } + iBitsRead += ReadPredictors( psCQMFDecoder->psPredictionDecoder, + pBits ); + + + iBitsRead += ReadGroupInformation( + psCQMFDecoder->iChannels, psCQMFDecoder->iNumBlocks, + &psCQMFDecoder->iCommonGrouping, psCQMFDecoder->piNumGroups, + psCQMFDecoder->ppiGroupLengths, + pBits ); + + iBitsRead += ReadRMSEnvelope( + psCQMFDecoder->iChannels, (const int32_t *) psCQMFDecoder->piNumGroups, + psCQMFDecoder->iNumBands, psCQMFDecoder->pppiRMSEnvelope, + pBits ); + +#ifdef ENABLE_PMOD_ADJUST + iBitsRead += + ReadPmodInformation( psCQMFDecoder->ppiHiSMRFlags, psCQMFDecoder->psBSRead, + psCQMFDecoder->iChannels, psCQMFDecoder->iNumBands ); +#endif + + iBitsRead += ReadAllocInformation( &psCQMFDecoder->iAllocOffset, + pBits ); + + if ( psCQMFDecoder->iChannels == 2 && + psCQMFDecoder->iCommonGrouping == 1 ) + { // MS Mode? + int32_t k; + for ( k = 0; k < psCQMFDecoder->piNumGroups[0]; k++ ) + { + PerceptualModelStereo( psCQMFDecoder->iNumBands, psCQMFDecoder->piMSFlags, + psCQMFDecoder->pppiRMSEnvelope[0][k], + psCQMFDecoder->pppiRMSEnvelope[1][k], + psCQMFDecoder->pppiExcitation[0][k], + psCQMFDecoder->pppiExcitation[1][k], + psCQMFDecoder->pppiSMR[0][k], + psCQMFDecoder->pppiSMR[1][k] ); + } + } + else + { + for ( n = 0; n < psCQMFDecoder->iChannels; + n++ ) + { // This will be updated to support multiple sample rates + int32_t k; + for ( k = 0; k < psCQMFDecoder->piNumGroups[n]; k++ ) + { + PerceptualModel( + psCQMFDecoder->iNumBands, psCQMFDecoder->pppiRMSEnvelope[n][k], + psCQMFDecoder->pppiExcitation[n][k], psCQMFDecoder->pppiSMR[n][k] ); + } + } + } + + ComputeAllocation( + psCQMFDecoder->iChannels, (const int32_t *) psCQMFDecoder->piNumGroups, + psCQMFDecoder->iNumBands, psCQMFDecoder->pppiSMR, + psCQMFDecoder->iAllocOffset, psCQMFDecoder->pppiAlloc ); + + for ( n = 0; n < psCQMFDecoder->iChannels; n++ ) + { + iBitsRead += ReadCQMFData( + psCQMFDecoder->piNumGroups[n], + (const int32_t *) psCQMFDecoder->ppiGroupLengths[n], + psCQMFDecoder->iNumBands, psCQMFDecoder->piBandwidths, + (const int32_t *) + psCQMFDecoder->psPredictionDecoder->ppiPredBandEnable[n], + psCQMFDecoder->pppiAlloc[n], + psCQMFDecoder->pppiCQMFSignReal[n], psCQMFDecoder->pppiCQMFSignImag[n], + psCQMFDecoder->pppiQCQMFReal[n], psCQMFDecoder->pppiQCQMFImag[n], + pBits ); + } + + for ( n = 0; n < psCQMFDecoder->iChannels; n++ ) + { + InvQuantizeSpectrum( psCQMFDecoder->piNumGroups[n], + (const int32_t *) psCQMFDecoder->ppiGroupLengths[n], + psCQMFDecoder->iNumBands, psCQMFDecoder->piBandwidths, + psCQMFDecoder->pppiAlloc[n], + psCQMFDecoder->pppiQCQMFReal[n], + psCQMFDecoder->pppiQCQMFImag[n], + pppfCQMFReal[n], pppfCQMFImag[n], + psCQMFDecoder->psNoiseGen ); + + ReplaceSign( psCQMFDecoder->iNumBlocks, CQMF_BANDS, + psCQMFDecoder->pppiCQMFSignReal[n], + psCQMFDecoder->pppiCQMFSignImag[n], + pppfCQMFReal[n], pppfCQMFImag[n] ); + } + + ApplyInversePredictros( psCQMFDecoder->psPredictionDecoder, pppfCQMFReal, + pppfCQMFImag ); + + for ( n = 0; n < psCQMFDecoder->iChannels; n++ ) + { + ApplyRMSEnvelope( psCQMFDecoder->iNumBands, psCQMFDecoder->piBandwidths, + psCQMFDecoder->piNumGroups[n], + (const int32_t *) psCQMFDecoder->ppiGroupLengths[n], + psCQMFDecoder->pppiRMSEnvelope[n], + pppfCQMFReal[n], pppfCQMFImag[n] ); + } + + if ( psCQMFDecoder->iChannels == 2 && psCQMFDecoder->iMSMode > 0 ) + { + InvMSCoding( psCQMFDecoder->iNumBlocks, psCQMFDecoder->iNumBands, + psCQMFDecoder->piBandwidths, psCQMFDecoder->iMSMode, + (const int32_t *) psCQMFDecoder->piMSFlags, +#ifdef ENABLE_MS_PRED + (const int32_t *) psCQMFDecoder->piLRPhaseDiffs, + (const int32_t *) psCQMFDecoder->piMSPredCoefs, +#endif + pppfCQMFReal, pppfCQMFImag ); + } + + return 0; +} + +static void ApplyRMSEnvelope( const int32_t iNumBands, + const int32_t *piBandwidths, + const int32_t iNumGroups, + const int32_t *piGroupLengths, + int32_t **ppiRMSEnvelope, + float **ppfReal, + float **ppfImag ) +{ + int32_t n; + int32_t iBlockOffset; + + iBlockOffset = 0; + for ( n = 0; n < iNumGroups; n++ ) + { + int32_t k; + + for ( k = 0; k < piGroupLengths[n]; k++ ) + { + int32_t b; + int32_t iFBOffset; + iFBOffset = 0; + for ( b = 0; b < iNumBands; b++ ) + { + int32_t m; + int32_t iRMSEnv; + float fGain; + + iRMSEnv = ppiRMSEnvelope[n][b]; + fGain = + c_afRMSEnvReconstructTable[ENV_RECONSTRUCT_TABLE_CENTER + iRMSEnv]; + for ( m = 0; m < piBandwidths[b]; m++ ) + { + ppfReal[iBlockOffset][iFBOffset] *= fGain; + ppfImag[iBlockOffset][iFBOffset] *= fGain; + iFBOffset++; + } + } + iBlockOffset++; + } + } +} + +static void ReplaceSign( const int32_t iNumBlocks, const int32_t iNumCQMFBands, int32_t **ppiSignReal, int32_t **ppiSignImag, float **ppfReal, float **ppfImag ) +{ + int32_t n; + for ( n = 0; n < iNumBlocks; n++ ) + { + int32_t b; + for ( b = 0; b < iNumCQMFBands; b++ ) + { + if ( ppiSignReal[n][b] == 1 ) + { + ppfReal[n][b] = -ppfReal[n][b]; + } + if ( ppiSignImag[n][b] == 1 ) + { + ppfImag[n][b] = -ppfImag[n][b]; + } + } + } +} + +static void InvQuantizeSpectrum( + const int32_t iNumGroups, + const int32_t *piGroupLengths, + const int32_t iNumBands, + const int32_t *piBandwidths, + int32_t **ppiAlloc, + int32_t **ppiQReal, + int32_t **ppiQImag, + float **ppfReal, + float **ppfImag, + NoiseGen *psNoiseGen ) // Pass in NULL to swicth off noise gen +{ + int32_t n; + int32_t iBlockOffest; + + iBlockOffest = 0; + for ( n = 0; n < iNumGroups; n++ ) + { + int32_t k; + for ( k = 0; k < piGroupLengths[n]; k++ ) + { + int32_t b; + int32_t iFBOffset; + + iFBOffset = 0; + for ( b = 0; b < iNumBands; b++ ) + { + int32_t m; + int32_t iAlloc; + float fInvSCFGain; + + iAlloc = ppiAlloc[n][b]; + fInvSCFGain = c_afInvScaleFactor[iAlloc]; + + if ( iAlloc > 0 ) + { + for ( m = 0; m < piBandwidths[b]; m++ ) + { + int32_t iQuantValue; + + iQuantValue = ppiQReal[iBlockOffest][iFBOffset]; + ppfReal[iBlockOffest][iFBOffset] = (float) iQuantValue * fInvSCFGain; + + iQuantValue = ppiQImag[iBlockOffest][iFBOffset]; + ppfImag[iBlockOffest][iFBOffset] = (float) iQuantValue * fInvSCFGain; + + iFBOffset++; + } + } + else if ( psNoiseGen != NULL ) + { + for ( m = 0; m < piBandwidths[b]; m++ ) + { + ppfReal[iBlockOffest][iFBOffset] = 0.7f * GetNoise( psNoiseGen ); + ppfImag[iBlockOffest][iFBOffset] = 0.7f * GetNoise( psNoiseGen ); + + iFBOffset++; + } + } + else + { + iFBOffset += piBandwidths[b]; + } + } + + iBlockOffest++; + } + } +} + +static void InvMSCoding( const int32_t iNumBlocks, const int32_t iNumBands, const int32_t *piBandwidths, const int32_t iMSMode, const int32_t *piMSFlags, +#ifdef ENABLE_MS_PRED + const int32_t *piLRPhaseDiffs, + const int32_t *piMSPredCoefs, +#endif + float ***pppfReal, + float ***pppfImag ) +{ + if ( iMSMode > 0 ) + { + int32_t b; + int32_t iFBOffset; +#ifdef ENABLE_MS_PRED + int32_t bms = 0; +#if defined SIMPLE_PHASE + void( *pFuncPhaseRotateOptions[4] ) = { &rot_zero, &rot_m_pi_2, &rot_pm_pi, + &rot_p_pi_2 }; +#endif +#endif + + iFBOffset = 0; + for ( b = 0; b < iNumBands; b++ ) + { + if ( piMSFlags[b] == 1 ) + { + int32_t n; +#if defined ENABLE_MS_PRED && defined SIMPLE_PHASE + void ( *pFuncPhaseRotate )( float *, float * ) = + pFuncPhaseRotateOptions[piLRPhaseDiffs[bms]]; +#endif + for ( n = 0; n < piBandwidths[b]; n++ ) + { + int32_t k; + for ( k = 0; k < iNumBlocks; k++ ) + { + float fLeftReal; + float fLeftImag; + float fRightReal; + float fRightImag; +#ifdef ENABLE_MS_PRED + if ( iMSMode == 3 ) + { + float fPred; + fPred = dequantPred( piMSPredCoefs[bms] ); + pppfReal[1][k][iFBOffset] += fPred * pppfReal[0][k][iFBOffset]; + pppfImag[1][k][iFBOffset] += fPred * pppfImag[0][k][iFBOffset]; + } +#endif + fLeftReal = ( pppfReal[0][k][iFBOffset] + pppfReal[1][k][iFBOffset] ); + fLeftImag = ( pppfImag[0][k][iFBOffset] + pppfImag[1][k][iFBOffset] ); + fRightReal = + ( pppfReal[0][k][iFBOffset] - pppfReal[1][k][iFBOffset] ); + fRightImag = + ( pppfImag[0][k][iFBOffset] - pppfImag[1][k][iFBOffset] ); +#ifdef ENABLE_MS_PRED + if ( iMSMode == 3 ) + { +#ifdef SIMPLE_PHASE + ( *pFuncPhaseRotate )( &fRightReal, &fRightImag ); +#else + int32_t phaseIdx; + phaseIdx = piLRPhaseDiffs[bms] - PHASE_MIN_VAL; + cplxmult( &fRightReal, &fRightImag, c_afRotRealImag[phaseIdx][0], + -c_afRotRealImag[phaseIdx][1] ); +#endif + } +#endif + pppfReal[0][k][iFBOffset] = fLeftReal; + pppfReal[1][k][iFBOffset] = fRightReal; + pppfImag[0][k][iFBOffset] = fLeftImag; + pppfImag[1][k][iFBOffset] = fRightImag; + } + iFBOffset++; + } +#ifdef ENABLE_MS_PRED + bms++; +#endif + } + else + { + iFBOffset += piBandwidths[b]; + } + } + } +} + +/* Currently only the number of bands in frame */ +static int32_t ReadHeaderInformation( int32_t *piNumBands, + ivas_split_rend_bits_t *pBits ) +{ + int32_t iBitsRead; + + iBitsRead = 0; + *piNumBands = ivas_split_rend_bitstream_read_int32( pBits, 5 ); + iBitsRead += 5; + + return iBitsRead; +} + +static int32_t ReadMSInformation( const int32_t iNumBands, int32_t *piMSMode, int32_t *piMSFlags, +#ifdef ENABLE_MS_PRED + int32_t *piLRPhaseDiffs, + int32_t *piMSPredCoefs, +#endif + ivas_split_rend_bits_t *pBits ) +{ + int32_t iBitsRead; + + iBitsRead = 0; + *piMSMode = ivas_split_rend_bitstream_read_int32( pBits, 2 ); + iBitsRead += 2; + + if ( *piMSMode == 0 ) + { + int32_t n; + for ( n = 0; n < iNumBands; n++ ) + { + piMSFlags[n] = 0; + } + } + else if ( *piMSMode == 1 ) + { + int32_t n; + for ( n = 0; n < iNumBands; n++ ) + { + piMSFlags[n] = 1; + } + } + else if ( *piMSMode == 2 ) + { + int32_t n; + for ( n = 0; n < iNumBands; n++ ) + { + piMSFlags[n] = ivas_split_rend_bitstream_read_int32( pBits, 1 ); + iBitsRead += 1; + } + } +#ifdef ENABLE_MS_PRED + else if ( *piMSMode == 3 ) + { + int32_t n; + int32_t iMSPredAll; + int32_t iNumMSPredBands = 0; + int32_t anyNonZero; + iMSPredAll = ivas_split_rend_bitstream_read_int32( pBits, 1 ); + iBitsRead += 1; + if ( iMSPredAll ) + { + iNumMSPredBands = iNumBands; + for ( n = 0; n < iNumBands; n++ ) + { + piMSFlags[n] = 1; + } + } + else + { + for ( n = 0; n < iNumBands; n++ ) + { + piMSFlags[n] = ivas_split_rend_bitstream_read_int32( pBits, 1 ); + iBitsRead += 1; + if ( piMSFlags[n] ) + { + iNumMSPredBands++; + } + } + } + anyNonZero = ivas_split_rend_bitstream_read_int32( pBits, 1 ); + if ( anyNonZero ) + { +#ifdef SIMPLE_PHASE + for ( n = 0; n < iNumMSPredBands; n++ ) + { + piLRPhaseDiffs[n] = BSGetBits( psBSRead, SIMPLE_PHASE_BITS ); + iBitsRead += SIMPLE_PHASE_BITS; + } +#else + piLRPhaseDiffs[0] = ivas_split_rend_bitstream_read_int32( pBits, PHASE_BAND0_BITS ); + piLRPhaseDiffs[0] += PHASE_MIN_VAL; + iBitsRead += PHASE_BAND0_BITS; + for ( n = 1; n < iNumMSPredBands; n++ ) + { + int32_t tabIdx; + iBitsRead += ReadHuff( c_aaiRMSEnvHuffDec, &tabIdx, pBits ); + piLRPhaseDiffs[n] = tabIdx + ENV_DELTA_MIN; + } + DecodePhase( piLRPhaseDiffs, iNumMSPredBands, PHASE_DIFF_DIM ); +#endif + } + else + { + for ( n = 0; n < iNumMSPredBands; n++ ) + { + piLRPhaseDiffs[n] = 0; + } + } + anyNonZero = ivas_split_rend_bitstream_read_int32( pBits, 1 ); + if ( anyNonZero ) + { + piMSPredCoefs[0] = ivas_split_rend_bitstream_read_int32( pBits, PRED_BAND0_BITS ); + piMSPredCoefs[0] += PRED_MIN_VAL; + iBitsRead += PRED_BAND0_BITS; + for ( n = 1; n < iNumMSPredBands; n++ ) + { + int32_t tabIdx; + iBitsRead += ReadHuff( c_aaiRMSEnvHuffDec, &tabIdx, pBits ); + piMSPredCoefs[n] = tabIdx + ENV_DELTA_MIN; + } + DecodePredCoef( piMSPredCoefs, iNumMSPredBands ); + } + else + { + for ( n = 0; n < iNumMSPredBands; n++ ) + { + piMSPredCoefs[n] = 0; + } + } +#ifdef DEBUG_WRITE_MS_PRED + { + static FILE *fid = 0; + if ( !fid ) + { + fid = fopen( "ms_mode_dec.txt", "wt" ); + } + writeMSPred( piLRPhaseDiffs, piMSPredCoefs, *piMSMode, iNumMSPredBands, + iNumBands, fid, piMSFlags ); + } +#endif + } +#endif + else + { + printf( "ERROR UNSUPPORTED MS MODE\n" ); + } + + return iBitsRead; +} + +static int32_t +ReadGroupInformation( const int32_t iChannels, const int32_t iNumBlocks, int32_t *piCommonGrouping, int32_t *piNumGroups, int32_t **ppiGroupLengths, ivas_split_rend_bits_t *pBits ) +{ + int32_t iBitsRead; + + iBitsRead = 0; + if ( iChannels == 2 ) + { + *piCommonGrouping = ivas_split_rend_bitstream_read_int32( pBits, 1 ); + iBitsRead += 1; + + if ( *piCommonGrouping == 1 ) + { + int32_t k; + + piNumGroups[0] = 0; + ppiGroupLengths[0][piNumGroups[0]] = 1; + for ( k = 0; k < ( iNumBlocks - 1 ); k++ ) + { + int32_t iGroupStart; + + iGroupStart = ivas_split_rend_bitstream_read_int32( pBits, 1 ); + iBitsRead += 1; + + if ( iGroupStart == 1 ) + { + piNumGroups[0]++; + ppiGroupLengths[0][piNumGroups[0]] = 1; + } + else + { + ppiGroupLengths[0][piNumGroups[0]]++; + } + } + piNumGroups[0]++; + + piNumGroups[1] = piNumGroups[0]; + for ( k = 0; k < piNumGroups[1]; k++ ) + { + ppiGroupLengths[1][k] = ppiGroupLengths[0][k]; + } + } + else + { + int32_t c; + + for ( c = 0; c < iChannels; c++ ) + { + int32_t k; + + piNumGroups[c] = 0; + ppiGroupLengths[c][piNumGroups[c]] = 1; + for ( k = 0; k < ( iNumBlocks - 1 ); k++ ) + { + int32_t iGroupStart; + + iGroupStart = ivas_split_rend_bitstream_read_int32( pBits, 1 ); + iBitsRead += 1; + + if ( iGroupStart == 1 ) + { + piNumGroups[c]++; + ppiGroupLengths[c][piNumGroups[c]] = 1; + } + else + { + ppiGroupLengths[c][piNumGroups[c]]++; + } + } + piNumGroups[c]++; + } + } + } + else + { + int32_t c; + + for ( c = 0; c < iChannels; c++ ) + { + int32_t k; + + piNumGroups[c] = 0; + ppiGroupLengths[c][piNumGroups[c]] = 1; + for ( k = 0; k < ( iNumBlocks - 1 ); k++ ) + { + int32_t iGroupStart; + + iGroupStart = ivas_split_rend_bitstream_read_int32( pBits, 1 ); + iBitsRead += 1; + + if ( iGroupStart == 1 ) + { + piNumGroups[c]++; + ppiGroupLengths[c][piNumGroups[c]] = 1; + } + else + { + ppiGroupLengths[c][piNumGroups[c]]++; + } + } + piNumGroups[c]++; + } + } + + return iBitsRead; +} + +static int32_t ReadHuff( const uint32_t ( *pauiHuffDecTable )[HUFF_DEC_TABLE_SIZE], + int32_t *piSymbol, + ivas_split_rend_bits_t *pBits ) +{ + int32_t iBitsRead; + int32_t iSymbol; + int32_t iIndex; + int32_t iVal; + + iVal = 0; + iIndex = 0; + iSymbol = 0xFFFF; + iBitsRead = 0; + while ( iSymbol == 0xFFFF ) + { + iIndex = ivas_split_rend_bitstream_read_int32( pBits, HUFF_READ_SIZE ); + iBitsRead += HUFF_READ_SIZE; + + iIndex = pauiHuffDecTable[iVal][iIndex]; + iSymbol = ( iIndex & 0xFFFF ); + + iVal = ( iIndex >> 16 ); + } + + if ( iVal ) + { + BSForceBack( + pBits, + iIndex, iVal ); + iBitsRead -= iVal; + } + + *piSymbol = iSymbol; + + return iBitsRead; +} + +static int32_t ReadRMSEnvelope( const int32_t iChannels, + const int32_t *piNumGroups, + const int32_t iNumBands, + int32_t ***pppiRMSEnvelope, + ivas_split_rend_bits_t *pBits ) +{ + int32_t n; + int32_t iBitsRead; + + iBitsRead = 0; + for ( n = 0; n < iChannels; n++ ) + { + int32_t k; + for ( k = 0; k < piNumGroups[n]; k++ ) + { + int32_t b; + int32_t iLastRMSVal; + + iLastRMSVal = ivas_split_rend_bitstream_read_int32( pBits, ENV0_BITS ); + iBitsRead += ENV0_BITS; + + iLastRMSVal += ENV_MIN; + pppiRMSEnvelope[n][k][0] = iLastRMSVal; + for ( b = 1; b < iNumBands; b++ ) + { + int32_t iDelta; + + iBitsRead += ReadHuff( c_aaiRMSEnvHuffDec, &iDelta, pBits ); + + iDelta += ENV_DELTA_MIN; + iLastRMSVal += iDelta; + pppiRMSEnvelope[n][k][b] = iLastRMSVal; + } + } + } + + return iBitsRead; +} + +#ifdef ENABLE_PMOD_ADJUST +static int32_t ReadPmodInformation( int32_t **ppiHiSMRFlags, Bitstream *psBSRead, int32_t iChannels, int32_t iNumBands ) +{ + int32_t iBitsRead; + int32_t c; + iBitsRead = 0; + for ( c = 0; c < iChannels; c++ ) + { + int32_t b; + int32_t iFlags = BSGetBits( psBSRead, 1 ); + iBitsRead += 1; + if ( iFlags ) + { + for ( b = 0; b < iNumBands; b++ ) + { + ppiHiSMRFlags[c][b] = BSGetBits( psBSRead, 1 ); + ; + iBitsRead += 1; + } + } + else + { + for ( b = 0; b < iNumBands; b++ ) + { + ppiHiSMRFlags[c][b] = 0; + } + } + } +#ifdef WRITE_HISMR_FLAGS + { + static FILE *fid = 0; + if ( !fid ) + { + fid = fopen( "hismr_dec.txt", "wt" ); + } + for ( c = 0; c < iChannels; c++ ) + { + int32_t b; + for ( b = 0; b < iNumBands; b++ ) + { + if ( c == iChannels - 1 && b == iNumBands - 1 ) + { + fprintf( fid, "%d\n", ppiHiSMRFlags[c][b] ); + } + else + { + fprintf( fid, "%d ", ppiHiSMRFlags[c][b] ); + } + } + } + } +#endif + return iBitsRead; +} +#endif + +static int32_t ReadAllocInformation( int32_t *piAllocOffset, + ivas_split_rend_bits_t *pBits ) +{ + int32_t iBitsRead; + + iBitsRead = 0; + *piAllocOffset = ivas_split_rend_bitstream_read_int32( pBits, ALLOC_OFFSET_BITS ); + *piAllocOffset += MIN_ALLOC_OFFSET; + iBitsRead += ALLOC_OFFSET_BITS; + + return iBitsRead; +} + +static int32_t +ReadCQMFData( const int32_t iNumGroups, const int32_t *piGroupLengths, const int32_t iNumBands, const int32_t *piBandwidths, const int32_t *piPredEnable, int32_t **ppiAlloc, int32_t **ppiSignReal, int32_t **ppiSignImag, int32_t **ppiQReal, int32_t **ppiQImag, ivas_split_rend_bits_t *pBits ) +{ + int32_t n; + int32_t iBitsRead; + int32_t iBlockOffest; + + iBitsRead = 0; + iBlockOffest = 0; + for ( n = 0; n < iNumGroups; n++ ) + { + int32_t k; + for ( k = 0; k < piGroupLengths[n]; k++ ) + { + int32_t b; + int32_t iFBOffset; + + iFBOffset = 0; + for ( b = 0; b < iNumBands; b++ ) + { + int32_t m; + int32_t iAlloc; + int32_t iHuffDim; + int32_t iHuffMod; + + iAlloc = ppiAlloc[n][b]; + + iHuffDim = c_aiHuffmanDim[iAlloc]; + iHuffMod = c_aiHuffmanMod[iAlloc]; + + if ( iAlloc > 0 ) + { + const uint32_t( *pauiHuffmanTable )[HUFF_DEC_TABLE_SIZE] = NULL; + const uint32_t( *pauiHuffmanTableDPCM )[HUFF_DEC_TABLE_SIZE] = NULL; +#ifdef USE_DEMOD_TABLES + const int32_t( *paiDemodTable )[2] = NULL; +#endif + + pauiHuffmanTable = c_apauiHuffDecTables[iAlloc]; + pauiHuffmanTableDPCM = + c_apauiHuffDecTables[ALLOC_TABLE_SIZE + iAlloc]; +#ifdef USE_DEMOD_TABLES + paiDemodTable = c_apaiDemodTables[iAlloc]; +#endif + for ( m = 0; m < piBandwidths[b]; m++ ) + { + int32_t iQuantValue1 = 0; + int32_t iQuantValue2 = 0; + + if ( piPredEnable[iFBOffset] == 1 ) + { + if ( iHuffDim == 2 ) + { + int32_t iSymbol; + iBitsRead += ReadHuff( pauiHuffmanTableDPCM, &iSymbol, pBits ); +#ifdef USE_DEMOD_TABLES + iQuantValue1 = paiDemodTable[iSymbol][0]; + iQuantValue2 = paiDemodTable[iSymbol][1]; +#else + iQuantValue1 = iSymbol / iHuffMod; + iQuantValue2 = iSymbol % iHuffMod; +#endif + } + else + { + iBitsRead += + ReadHuff( pauiHuffmanTableDPCM, &iQuantValue1, + pBits ); + iBitsRead += + ReadHuff( pauiHuffmanTableDPCM, &iQuantValue2, + pBits ); + } + } + else + { + if ( iHuffDim == 2 ) + { + int32_t iSymbol; + + iBitsRead += ReadHuff( pauiHuffmanTable, &iSymbol, + pBits ); +#ifdef USE_DEMOD_TABLES + iQuantValue1 = paiDemodTable[iSymbol][0]; + iQuantValue2 = paiDemodTable[iSymbol][1]; +#else + iQuantValue1 = iSymbol / iHuffMod; + iQuantValue2 = iSymbol % iHuffMod; +#endif + } + else + { + iBitsRead += + ReadHuff( pauiHuffmanTable, &iQuantValue1, + pBits ); + iBitsRead += + ReadHuff( pauiHuffmanTable, &iQuantValue2, + pBits ); + } + } + + ppiQReal[iBlockOffest][iFBOffset] = iQuantValue1; + ppiQImag[iBlockOffest][iFBOffset] = iQuantValue2; + + if ( iQuantValue1 > 0 ) + { + ppiSignReal[iBlockOffest][iFBOffset] = ivas_split_rend_bitstream_read_int32( pBits, 1 ); + iBitsRead += 1; + } + if ( iQuantValue2 > 0 ) + { + ppiSignImag[iBlockOffest][iFBOffset] = ivas_split_rend_bitstream_read_int32( pBits, 1 ); + iBitsRead += 1; + } + + iFBOffset++; + } + } + else + { + iFBOffset += piBandwidths[b]; + } + } + + iBlockOffest++; + } + } + + return iBitsRead; +} + +static void ComputeAllocation( const int32_t iChannels, + const int32_t *piNumGroups, + const int32_t iNumBands, + int32_t ***pppiSMR, + const int32_t iAllocOffset, + int32_t ***pppiAlloc ) +{ + int32_t n; + + for ( n = 0; n < iChannels; n++ ) + { + int32_t k; + for ( k = 0; k < piNumGroups[n]; k++ ) + { + int32_t b; + for ( b = 0; b < iNumBands; b++ ) + { + int32_t iAlloc; + iAlloc = ( ( pppiSMR[n][k][b] + iAllocOffset * ALLOC_OFFSET_SCALE ) >> 5 ); + iAlloc = ( iAlloc > MIN_ALLOC ) ? iAlloc : MIN_ALLOC; + iAlloc = ( iAlloc < MAX_ALLOC ) ? iAlloc : MAX_ALLOC; + pppiAlloc[n][k][b] = iAlloc; + } + } + } +} diff --git a/lib_rend/ivas_CQMFDecoder.h b/lib_rend/ivas_CQMFDecoder.h new file mode 100644 index 0000000000..a68c2451fb --- /dev/null +++ b/lib_rend/ivas_CQMFDecoder.h @@ -0,0 +1,64 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef _IVAS_CQMF_DECODER_H_ +#define _IVAS_CQMF_DECODER_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif +#include "lib_rend.h" +#define DECODER_ERROR_NONE ( 0 ) +#define DECODER_ERROR_FS_NOT_SUPPORTED ( -1 ) +#define DECODER_ERROR_CHAN_NOT_SUPPORTED ( -2 ) +#define DECODER_ERROR_UNKNOWN ( -100 ) + + typedef struct CQMF_DECODER CQMFDecoder; + + CQMFDecoder *CreateCQMFDecoder( const int32_t iSampleRate, + const int32_t iChannels ); + + void DeleteCQMFDecoder( CQMFDecoder *psCQMFDecoder ); + + int32_t CQMFDecoderGetError( CQMFDecoder *psCQMFDecoder ); + + int32_t DecodeFrame( CQMFDecoder *psCQMFDecoder, + ivas_split_rend_bits_t *pBits, + float ***pppfCQMFReal, + float ***pppfCQMFImag ); + +#ifdef __cplusplus +} +#endif + +#endif /* _CQMF_DECODER_H_ */ diff --git a/lib_rend/ivas_CQMFEncoder.c b/lib_rend/ivas_CQMFEncoder.c new file mode 100644 index 0000000000..3f2906e7d5 --- /dev/null +++ b/lib_rend/ivas_CQMFEncoder.c @@ -0,0 +1,2050 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "ivas_CQMFEncoder.h" + +#include +#include +#include +#include +#include "ivas_Tables.h" +#include "options.h" +#include "prot.h" +#include "wmops.h" +#include "ivas_RMSEnvGrouping.h" +#include "ivas_PerceptualModel.h" +#include "ivas_RMSEnvDeltaHuff.h" +#include "ivas_CQMFHuff.h" +#include "ivas_cldfb_codec_bitstream.h" +#include "ivas_lib_rend_internal.h" +#ifdef ENABLE_MS_PRED +#include "ivas_MSPred.h" +#endif +#ifdef ENABLE_PMOD_ADJUST +#include "ton_corr.h" +#endif + +#include "ivas_PredEncoder.h" + +struct CQMF_ENCODER +{ + int32_t iSampleRate; + int32_t iChannels; + int32_t iNumBlocks; + + int32_t iTargetBitRate; + int32_t iTargetBitsPerFrame; + + int32_t iNumBands; + const int32_t *piBandwidths; + + int32_t iMSMode; + int32_t *piMSFlags; +#ifdef ENABLE_MS_PRED + int32_t piMSPredCoefs[MAX_BANDS]; + int32_t piLRPhaseDiffs[MAX_BANDS]; + int32_t iAllowSidePred; +#endif +#ifdef ENABLE_PMOD_ADJUST + int32_t **ppiHiSMRFlags; +#endif + + RMSEnvelopeGrouping *psRMSEnvelopeGrouping; + + int32_t iCommonGrouping; + int32_t *piNumGroups; + int32_t **ppiGroupLengths; + + int32_t ***pppiRMSEnvelope; + int32_t ***pppiSMR; + int32_t ***pppiExcitation; + int32_t ***pppiAlloc; + + int32_t iAllocOffset; + + int32_t ***pppiCQMFSignReal; + int32_t ***pppiCQMFSignImag; + int32_t ***pppiQCQMFReal; + int32_t ***pppiQCQMFImag; + + + PredictionEncoder *psPredictionEncoder; + int32_t iLastError; +}; + +CQMFEncoder *CreateCQMFEncoder( const int32_t iSampleRate, + const int32_t iChannels, + const int32_t iTargetBitRate, + const int32_t iAllowSidePred ) +{ + int32_t n; + CQMFEncoder *psCQMFEncoder = NULL; + + assert( iSampleRate == 48000 ); // Fix + + psCQMFEncoder = (CQMFEncoder *) count_malloc( sizeof( CQMFEncoder ) ); + psCQMFEncoder->iSampleRate = iSampleRate; + psCQMFEncoder->iChannels = iChannels; + psCQMFEncoder->iNumBlocks = CQMF_BLOCKS_PER_FRAME; + psCQMFEncoder->iAllocOffset = 0; + + psCQMFEncoder->iTargetBitRate = iTargetBitRate; + psCQMFEncoder->iTargetBitsPerFrame = iTargetBitRate * CQMF_BLOCKS_PER_FRAME * CQMF_BANDS / iSampleRate; + + psCQMFEncoder->iNumBands = MAX_BANDS_48; // Fix + psCQMFEncoder->piBandwidths = c_aiBandwidths48; // Fix + + psCQMFEncoder->iMSMode = 0; + psCQMFEncoder->piMSFlags = (int32_t *) count_malloc( MAX_BANDS * sizeof( int32_t ) ); +#ifdef ENABLE_MS_PRED + for ( n = 0; n < MAX_BANDS; n++ ) + { + psCQMFEncoder->piLRPhaseDiffs[n] = 0; + psCQMFEncoder->piMSPredCoefs[n] = 0; + } + psCQMFEncoder->iAllowSidePred = iAllowSidePred; +#endif + psCQMFEncoder->psRMSEnvelopeGrouping = CreateRMSEnvelopeGrouping( psCQMFEncoder->iNumBlocks ); + + psCQMFEncoder->iCommonGrouping = 1; // Common grouping always on only impacts stereo + psCQMFEncoder->piNumGroups = (int32_t *) count_malloc( psCQMFEncoder->iChannels * sizeof( int32_t ) ); + psCQMFEncoder->ppiGroupLengths = (int32_t **) count_malloc( psCQMFEncoder->iChannels * sizeof( int32_t * ) ); + psCQMFEncoder->pppiRMSEnvelope = (int32_t ***) count_malloc( psCQMFEncoder->iChannels * sizeof( int32_t ** ) ); + psCQMFEncoder->pppiSMR = (int32_t ***) count_malloc( psCQMFEncoder->iChannels * sizeof( int32_t ** ) ); + psCQMFEncoder->pppiExcitation = (int32_t ***) count_malloc( psCQMFEncoder->iChannels * sizeof( int32_t ** ) ); + psCQMFEncoder->pppiAlloc = (int32_t ***) count_malloc( psCQMFEncoder->iChannels * sizeof( int32_t ** ) ); + + psCQMFEncoder->pppiCQMFSignReal = (int32_t ***) count_malloc( psCQMFEncoder->iChannels * sizeof( int32_t ** ) ); + psCQMFEncoder->pppiCQMFSignImag = (int32_t ***) count_malloc( psCQMFEncoder->iChannels * sizeof( int32_t ** ) ); + psCQMFEncoder->pppiQCQMFReal = (int32_t ***) count_malloc( psCQMFEncoder->iChannels * sizeof( int32_t ** ) ); + psCQMFEncoder->pppiQCQMFImag = (int32_t ***) count_malloc( psCQMFEncoder->iChannels * sizeof( int32_t ** ) ); +#ifdef ENABLE_PMOD_ADJUST + psCQMFEncoder->ppiHiSMRFlags = (int32_t **) count_malloc( psCQMFEncoder->iChannels * sizeof( int32_t * ) ); +#endif + + for ( n = 0; n < iChannels; n++ ) + { + int32_t k; +#ifdef ENABLE_PMOD_ADJUST + psCQMFEncoder->ppiHiSMRFlags[n] = (int32_t *) count_malloc( MAX_BANDS * sizeof( int32_t ) ); + ; +#endif + psCQMFEncoder->ppiGroupLengths[n] = (int32_t *) count_malloc( CQMF_BLOCKS_PER_FRAME * sizeof( int32_t ) ); + psCQMFEncoder->pppiRMSEnvelope[n] = (int32_t **) count_malloc( CQMF_BLOCKS_PER_FRAME * sizeof( int32_t * ) ); + psCQMFEncoder->pppiSMR[n] = (int32_t **) count_malloc( CQMF_BLOCKS_PER_FRAME * sizeof( int32_t * ) ); + psCQMFEncoder->pppiExcitation[n] = (int32_t **) count_malloc( CQMF_BLOCKS_PER_FRAME * sizeof( int32_t * ) ); + psCQMFEncoder->pppiAlloc[n] = (int32_t **) count_malloc( CQMF_BLOCKS_PER_FRAME * sizeof( int32_t * ) ); + + psCQMFEncoder->pppiCQMFSignReal[n] = (int32_t **) count_malloc( CQMF_BLOCKS_PER_FRAME * sizeof( int32_t * ) ); + psCQMFEncoder->pppiCQMFSignImag[n] = (int32_t **) count_malloc( CQMF_BLOCKS_PER_FRAME * sizeof( int32_t * ) ); + psCQMFEncoder->pppiQCQMFReal[n] = (int32_t **) count_malloc( CQMF_BLOCKS_PER_FRAME * sizeof( int32_t * ) ); + psCQMFEncoder->pppiQCQMFImag[n] = (int32_t **) count_malloc( CQMF_BLOCKS_PER_FRAME * sizeof( int32_t * ) ); + for ( k = 0; k < CQMF_BLOCKS_PER_FRAME; k++ ) + { + psCQMFEncoder->pppiRMSEnvelope[n][k] = (int32_t *) count_malloc( MAX_BANDS * sizeof( int32_t ) ); + psCQMFEncoder->pppiSMR[n][k] = (int32_t *) count_malloc( MAX_BANDS * sizeof( int32_t ) ); + psCQMFEncoder->pppiExcitation[n][k] = (int32_t *) count_malloc( MAX_BANDS * sizeof( int32_t ) ); + psCQMFEncoder->pppiAlloc[n][k] = (int32_t *) count_malloc( MAX_BANDS * sizeof( int32_t ) ); + + psCQMFEncoder->pppiCQMFSignReal[n][k] = (int32_t *) count_malloc( CQMF_BANDS * sizeof( int32_t ) ); + psCQMFEncoder->pppiCQMFSignImag[n][k] = (int32_t *) count_malloc( CQMF_BANDS * sizeof( int32_t ) ); + psCQMFEncoder->pppiQCQMFReal[n][k] = (int32_t *) count_malloc( CQMF_BANDS * sizeof( int32_t ) ); + psCQMFEncoder->pppiQCQMFImag[n][k] = (int32_t *) count_malloc( CQMF_BANDS * sizeof( int32_t ) ); + } + } + + psCQMFEncoder->psPredictionEncoder = CreatePredictionEncoder( iChannels, psCQMFEncoder->iNumBlocks ); + psCQMFEncoder->iLastError = ENCODER_ERROR_NONE; + + return psCQMFEncoder; +} + +void DeleteCQMFEncoder( CQMFEncoder *psCQMFEncoder ) +{ + if ( psCQMFEncoder != NULL ) + { + + if ( psCQMFEncoder->piMSFlags != NULL ) + { + count_free( psCQMFEncoder->piMSFlags ); + } + + if ( psCQMFEncoder->piNumGroups != NULL ) + { + count_free( psCQMFEncoder->piNumGroups ); + } + + if ( psCQMFEncoder->psRMSEnvelopeGrouping != NULL ) + { + DeleteRMSEnvelopeGrouping( psCQMFEncoder->psRMSEnvelopeGrouping ); + } + + if ( psCQMFEncoder->ppiGroupLengths != NULL ) + { + int32_t n; + for ( n = 0; n < psCQMFEncoder->iChannels; n++ ) + { + count_free( psCQMFEncoder->ppiGroupLengths[n] ); + } + count_free( psCQMFEncoder->ppiGroupLengths ); + } +#ifdef ENABLE_PMOD_ADJUST + if ( psCQMFEncoder->ppiHiSMRFlags != NULL ) + { + int32_t n; + for ( n = 0; n < psCQMFEncoder->iChannels; n++ ) + { + count_free( psCQMFEncoder->ppiHiSMRFlags[n] ); + } + count_free( psCQMFEncoder->ppiHiSMRFlags ); + } +#endif + if ( psCQMFEncoder->pppiRMSEnvelope != NULL ) + { + int32_t n; + for ( n = 0; n < psCQMFEncoder->iChannels; n++ ) + { + int32_t k; + for ( k = 0; k < CQMF_BLOCKS_PER_FRAME; k++ ) + { + count_free( psCQMFEncoder->pppiRMSEnvelope[n][k] ); + } + count_free( psCQMFEncoder->pppiRMSEnvelope[n] ); + } + count_free( psCQMFEncoder->pppiRMSEnvelope ); + } + + if ( psCQMFEncoder->pppiSMR != NULL ) + { + int32_t n; + for ( n = 0; n < psCQMFEncoder->iChannels; n++ ) + { + int32_t k; + for ( k = 0; k < CQMF_BLOCKS_PER_FRAME; k++ ) + { + count_free( psCQMFEncoder->pppiSMR[n][k] ); + } + count_free( psCQMFEncoder->pppiSMR[n] ); + } + count_free( psCQMFEncoder->pppiSMR ); + } + + if ( psCQMFEncoder->pppiExcitation != NULL ) + { + int32_t n; + for ( n = 0; n < psCQMFEncoder->iChannels; n++ ) + { + int32_t k; + for ( k = 0; k < CQMF_BLOCKS_PER_FRAME; k++ ) + { + count_free( psCQMFEncoder->pppiExcitation[n][k] ); + } + count_free( psCQMFEncoder->pppiExcitation[n] ); + } + count_free( psCQMFEncoder->pppiExcitation ); + } + + if ( psCQMFEncoder->pppiAlloc != NULL ) + { + int32_t n; + for ( n = 0; n < psCQMFEncoder->iChannels; n++ ) + { + int32_t k; + for ( k = 0; k < CQMF_BLOCKS_PER_FRAME; k++ ) + { + count_free( psCQMFEncoder->pppiAlloc[n][k] ); + } + count_free( psCQMFEncoder->pppiAlloc[n] ); + } + count_free( psCQMFEncoder->pppiAlloc ); + } + + if ( psCQMFEncoder->pppiCQMFSignReal != NULL ) + { + int32_t n; + for ( n = 0; n < psCQMFEncoder->iChannels; n++ ) + { + int32_t k; + for ( k = 0; k < CQMF_BLOCKS_PER_FRAME; k++ ) + { + count_free( psCQMFEncoder->pppiCQMFSignReal[n][k] ); + } + count_free( psCQMFEncoder->pppiCQMFSignReal[n] ); + } + count_free( psCQMFEncoder->pppiCQMFSignReal ); + } + + if ( psCQMFEncoder->pppiCQMFSignImag != NULL ) + { + int32_t n; + for ( n = 0; n < psCQMFEncoder->iChannels; n++ ) + { + int32_t k; + for ( k = 0; k < CQMF_BLOCKS_PER_FRAME; k++ ) + { + count_free( psCQMFEncoder->pppiCQMFSignImag[n][k] ); + } + count_free( psCQMFEncoder->pppiCQMFSignImag[n] ); + } + count_free( psCQMFEncoder->pppiCQMFSignImag ); + } + + if ( psCQMFEncoder->pppiQCQMFReal != NULL ) + { + int32_t n; + for ( n = 0; n < psCQMFEncoder->iChannels; n++ ) + { + int32_t k; + for ( k = 0; k < CQMF_BLOCKS_PER_FRAME; k++ ) + { + count_free( psCQMFEncoder->pppiQCQMFReal[n][k] ); + } + count_free( psCQMFEncoder->pppiQCQMFReal[n] ); + } + count_free( psCQMFEncoder->pppiQCQMFReal ); + } + + if ( psCQMFEncoder->pppiQCQMFImag != NULL ) + { + int32_t n; + for ( n = 0; n < psCQMFEncoder->iChannels; n++ ) + { + int32_t k; + for ( k = 0; k < CQMF_BLOCKS_PER_FRAME; k++ ) + { + count_free( psCQMFEncoder->pppiQCQMFImag[n][k] ); + } + count_free( psCQMFEncoder->pppiQCQMFImag[n] ); + } + count_free( psCQMFEncoder->pppiQCQMFImag ); + } + + + DeletePredictionEncoder( psCQMFEncoder->psPredictionEncoder ); + count_free( psCQMFEncoder ); + } +} + +int32_t CQMFEncoderGetError( CQMFEncoder *psCQMFEncoder ) +{ + return psCQMFEncoder->iLastError; +} + +static int32_t MSModeCalculation( const int32_t iNumBlocks, + const int32_t iNumBands, + const int32_t *piBandwidths, + float ***pppfReal, + float ***pppfImag, + int32_t *piMSMode, +#ifdef ENABLE_MS_PRED + int32_t *piLRPhaseDiff, + int32_t *piMSPredCoef, + const int32_t iAllowSidePred, +#endif + int32_t *piMSFlags ); + +static void RemoveRMSEnvelope( const int32_t iNumBands, + const int32_t *piBandwidths, + const int32_t iNumGroups, + const int32_t *piGroupLengths, + int32_t **ppiRMSEnvelope, + float **ppfReal, + float **ppfImag ); + + +static int32_t CountCQMFBits( const int32_t iNumGroups, + const int32_t *piGroupLengths, + const int32_t iNumBands, + const int32_t *piBandwidths, + const int32_t *piPredEnable, + int32_t **ppiAlloc, + int32_t **ppiQReal, + int32_t **ppiQImag ); + +/* Currently only the number of bands in frame */ +static int32_t WriteHeaderInformation( const int32_t iNumBands, + ivas_split_rend_bits_t *pBits ); + +static int32_t WritePmodInformation( const int32_t **ppiHiSMRFlags, + Bitstream *psBSWrite, + int32_t iChannels, + int32_t iNumBands ); + +static int32_t WriteMSInformation( const int32_t iNumBands, + const int32_t iMSMode, + const int32_t *piMSFlags, +#ifdef ENABLE_MS_PRED + const int32_t *piLRPhaseDiffs, + const int32_t *piMSPredCoefs, + int32_t iNumMSPredBands, +#endif + ivas_split_rend_bits_t *pBits ); + +static int32_t WriteGroupInformation( const int32_t iChannels, + const int32_t iCommonGrouping, + const int32_t *piNumGroups, + int32_t **ppiGroupLengths, + ivas_split_rend_bits_t *pBits ); + +static int32_t WriteRMSEnvelope( const int32_t iChannels, + const int32_t *piNumGroups, + const int32_t iNumBands, + int32_t ***pppiRMSEnvelope, + ivas_split_rend_bits_t *pBits ); + +static int32_t WriteAllocInformation( const int32_t iAllocOffset, + ivas_split_rend_bits_t *pBits ); + +static int32_t WriteCQMFData( const int32_t iNumGroups, + const int32_t *piGroupLengths, + const int32_t iNumBands, + const int32_t *piBandwidths, + const int32_t *piPredEnable, + int32_t **ppiAlloc, + int32_t **ppiSignReal, + int32_t **ppiSignImag, + int32_t **ppiQReal, + int32_t **ppiQImag, + ivas_split_rend_bits_t *pBits ); + +static int32_t ComputeAllocation( const int32_t iChannels, + const int32_t *piNumGroups, + int32_t **ppiGroupLengths, + const int32_t iNumBands, + const int32_t *piBandwidths, + float ***pppfReal, + float ***pppfImag, + int32_t ***pppiSMR, + const int32_t iAvailableBits, + int32_t *piAllocOffset, + int32_t ***pppiAlloc, + int32_t ***pppiQReal, + int32_t ***pppiQImag, + int32_t ***pppiSignReal, + int32_t ***pppiSignImag, + int32_t **ppiPredEnable, + float **ppfA1Real, + float **ppfA1Imag ); + +int32_t EncodeFrame( CQMFEncoder *psCQMFEncoder, float ***pppfCQMFReal, float ***pppfCQMFImag, int32_t *piBitsWritten, const int32_t available_bits, ivas_split_rend_bits_t *pBits ) +{ + int32_t n; + int32_t iAvailableBits, iBitsWritten; + // int32_t iCQMFBits; + int32_t iNumMSBands = 0; + iAvailableBits = available_bits; // HCBR for now + iBitsWritten = 0; + + /* Do MS calc here */ + if ( psCQMFEncoder->iChannels == 2 ) + { + iNumMSBands = MSModeCalculation( psCQMFEncoder->iNumBlocks, + psCQMFEncoder->iNumBands, + psCQMFEncoder->piBandwidths, + pppfCQMFReal, + pppfCQMFImag, + &psCQMFEncoder->iMSMode, +#ifdef ENABLE_MS_PRED + psCQMFEncoder->piLRPhaseDiffs, + psCQMFEncoder->piMSPredCoefs, + psCQMFEncoder->iAllowSidePred, +#endif + psCQMFEncoder->piMSFlags ); + + if ( psCQMFEncoder->iMSMode > 0 ) + { + psCQMFEncoder->iCommonGrouping = 1; // Make sure common grouping is enabled when MS is in use + } + } + +#ifdef ENABLE_PMOD_ADJUST + CalcTonQuotas( psCQMFEncoder->iChannels, psCQMFEncoder->iNumBands, psCQMFEncoder->piBandwidths, pppfCQMFReal, pppfCQMFImag, psCQMFEncoder->ppiHiSMRFlags ); +#endif + + /* Compute Grouping and RMS Envelopes */ + if ( psCQMFEncoder->iChannels == 2 && psCQMFEncoder->iCommonGrouping == 1 ) + { + ComputeEnvelopeGrouping( psCQMFEncoder->psRMSEnvelopeGrouping, + psCQMFEncoder->iChannels, + psCQMFEncoder->iNumBands, + psCQMFEncoder->piBandwidths, + pppfCQMFReal, + pppfCQMFImag, +#ifndef USE_BIT_COUNT_MERGE_COST + 8.0, + 20.0, // Use these to trade off RMS Env bits and quantizer loading +#endif + &psCQMFEncoder->piNumGroups[0], + psCQMFEncoder->ppiGroupLengths[0], + psCQMFEncoder->pppiRMSEnvelope ); + + psCQMFEncoder->piNumGroups[1] = psCQMFEncoder->piNumGroups[0]; + for ( n = 0; n < psCQMFEncoder->piNumGroups[0]; n++ ) + { + psCQMFEncoder->ppiGroupLengths[1][n] = psCQMFEncoder->ppiGroupLengths[0][n]; + } + } + else + { + for ( n = 0; n < psCQMFEncoder->iChannels; n++ ) + { + ComputeEnvelopeGrouping( psCQMFEncoder->psRMSEnvelopeGrouping, + psCQMFEncoder->iChannels, + psCQMFEncoder->iNumBands, + psCQMFEncoder->piBandwidths, + &pppfCQMFReal[n], + &pppfCQMFImag[n], +#ifndef USE_BIT_COUNT_MERGE_COST + 8.0, + 20.0, // Use these to trade off RMS Env bits and quantizer loading +#endif + &psCQMFEncoder->piNumGroups[n], + psCQMFEncoder->ppiGroupLengths[n], + &psCQMFEncoder->pppiRMSEnvelope[n] ); + } + } + + for ( n = 0; n < psCQMFEncoder->iChannels; n++ ) + { + RemoveRMSEnvelope( psCQMFEncoder->iNumBands, + psCQMFEncoder->piBandwidths, + psCQMFEncoder->piNumGroups[n], + (const int32_t *) psCQMFEncoder->ppiGroupLengths[n], + psCQMFEncoder->pppiRMSEnvelope[n], + pppfCQMFReal[n], + pppfCQMFImag[n] ); + } + + ComputePredictors( psCQMFEncoder->psPredictionEncoder, + pppfCQMFReal, + pppfCQMFImag ); + + iBitsWritten += WriteHeaderInformation( psCQMFEncoder->iNumBands, + pBits ); + + if ( psCQMFEncoder->iChannels == 2 ) + { + iBitsWritten += WriteMSInformation( psCQMFEncoder->iNumBands, + psCQMFEncoder->iMSMode, + (const int32_t *) psCQMFEncoder->piMSFlags, +#ifdef ENABLE_MS_PRED + (const int32_t *) psCQMFEncoder->piLRPhaseDiffs, + (const int32_t *) psCQMFEncoder->piMSPredCoefs, + iNumMSBands, +#endif + pBits ); + } + + + iBitsWritten += WritePredictors( psCQMFEncoder->psPredictionEncoder, + pBits ); + + iBitsWritten += WriteGroupInformation( psCQMFEncoder->iChannels, + psCQMFEncoder->iCommonGrouping, + (const int32_t *) psCQMFEncoder->piNumGroups, + psCQMFEncoder->ppiGroupLengths, + pBits ); + + iBitsWritten += WriteRMSEnvelope( psCQMFEncoder->iChannels, + (const int32_t *) psCQMFEncoder->piNumGroups, + psCQMFEncoder->iNumBands, + psCQMFEncoder->pppiRMSEnvelope, + pBits ); + +#ifdef ENABLE_PMOD_ADJUST + iBitsWritten += WritePmodInformation( psCQMFEncoder->ppiHiSMRFlags, + psCQMFEncoder->psBSWrite, + psCQMFEncoder->iChannels, + psCQMFEncoder->iNumBands ); +#endif + + if ( psCQMFEncoder->iChannels == 2 && psCQMFEncoder->iCommonGrouping == 1 ) + { + int32_t k; + for ( k = 0; k < psCQMFEncoder->piNumGroups[0]; k++ ) + { + PerceptualModelStereo( psCQMFEncoder->iNumBands, + psCQMFEncoder->piMSFlags, + psCQMFEncoder->pppiRMSEnvelope[0][k], + psCQMFEncoder->pppiRMSEnvelope[1][k], + psCQMFEncoder->pppiExcitation[0][k], + psCQMFEncoder->pppiExcitation[1][k], + psCQMFEncoder->pppiSMR[0][k], + psCQMFEncoder->pppiSMR[1][k] ); + } + } + else + { + for ( n = 0; n < psCQMFEncoder->iChannels; n++ ) + { + int32_t k; + for ( k = 0; k < psCQMFEncoder->piNumGroups[n]; k++ ) + { + PerceptualModel( psCQMFEncoder->iNumBands, + psCQMFEncoder->pppiRMSEnvelope[n][k], + psCQMFEncoder->pppiExcitation[n][k], + psCQMFEncoder->pppiSMR[n][k] ); + } + } + } + + iAvailableBits -= iBitsWritten; + ComputeAllocation( psCQMFEncoder->iChannels, + (const int32_t *) psCQMFEncoder->piNumGroups, + psCQMFEncoder->ppiGroupLengths, + psCQMFEncoder->iNumBands, + psCQMFEncoder->piBandwidths, + pppfCQMFReal, + pppfCQMFImag, + psCQMFEncoder->pppiSMR, + iAvailableBits, + &psCQMFEncoder->iAllocOffset, + psCQMFEncoder->pppiAlloc, + psCQMFEncoder->pppiQCQMFReal, + psCQMFEncoder->pppiQCQMFImag, + psCQMFEncoder->pppiCQMFSignReal, + psCQMFEncoder->pppiCQMFSignImag, + psCQMFEncoder->psPredictionEncoder->ppiPredBandEnable, + psCQMFEncoder->psPredictionEncoder->ppfA1Real, + psCQMFEncoder->psPredictionEncoder->ppfA1Imag ); + + iBitsWritten += WriteAllocInformation( psCQMFEncoder->iAllocOffset, + pBits ); + + for ( n = 0; n < psCQMFEncoder->iChannels; n++ ) + { + iBitsWritten += WriteCQMFData( psCQMFEncoder->piNumGroups[n], + (const int32_t *) psCQMFEncoder->ppiGroupLengths[n], + psCQMFEncoder->iNumBands, + psCQMFEncoder->piBandwidths, + (const int32_t *) psCQMFEncoder->psPredictionEncoder->ppiPredBandEnable[n], + psCQMFEncoder->pppiAlloc[n], + psCQMFEncoder->pppiCQMFSignReal[n], + psCQMFEncoder->pppiCQMFSignImag[n], + psCQMFEncoder->pppiQCQMFReal[n], + psCQMFEncoder->pppiQCQMFImag[n], + pBits ); + } + *piBitsWritten = iBitsWritten; + return 0; +} + +int32_t GetNumGroups( CQMFEncoder *psCQMFEncoder ) +{ + return psCQMFEncoder->piNumGroups[0]; +} + +static int32_t MSModeCalculation( const int32_t iNumBlocks, + const int32_t iNumBands, + const int32_t *piBandwidths, + float ***pppfReal, + float ***pppfImag, + int32_t *piMSMode, +#ifdef ENABLE_MS_PRED + int32_t *piLRPhaseDiffs, + int32_t *piMSPredCoefs, + const int32_t iAllowSidePred, +#endif + int32_t *piMSFlags ) +{ + int32_t b; + int32_t iFBOffset; + int32_t iNumMSBands; +#ifdef ENABLE_MS_PRED + int32_t piMSPredFlags[MAX_BANDS] = { 0 }; + int32_t iNumMSPredBands = 0; + float msBitsReduction = 0.0f; + float msPredBitsReduction = 0.0f; + int32_t msBits; + int32_t msPredBits; + float fPred; +#if defined ENABLE_MS_PRED && defined SIMPLE_PHASE + void( *pFuncPhaseRotateOptions[4] ) = { &rot_zero, &rot_p_pi_2, &rot_pm_pi, &rot_m_pi_2 }; +#endif + const float one_by_log10_2 = 3.32192809488736f; +#endif + *piMSMode = 0; + iFBOffset = 0; + iNumMSBands = 0; + for ( b = 0; b < iNumBands; b++ ) + { + int32_t n; + float fLeftEnergy; + float fRightEnergy; + float fMidEnergy; + float fSideEnergy; + float fLRRatio; + float fMSRatio; +#ifdef ENABLE_MS_PRED + float fMSPredRatio; + float fMidEnergyPred; + float fSideEnergyPred; + float fLRCovReal = 0.0f; + float fLRCovImag = 0.0f; + int32_t iPhase; + int32_t iPred; + int32_t tabIdx = 0; +#endif + + fLeftEnergy = 0.0f; + fRightEnergy = 0.0f; + fMidEnergy = 0.0; + fSideEnergy = 0.0; + + for ( n = 0; n < piBandwidths[b]; n++ ) + { + int32_t k; + for ( k = 0; k < iNumBlocks; k++ ) + { + float fMidReal; + float fMidImag; + float fSideReal; + float fSideImag; + + fMidReal = 0.5f * ( pppfReal[0][k][iFBOffset] + pppfReal[1][k][iFBOffset] ); + fMidImag = 0.5f * ( pppfImag[0][k][iFBOffset] + pppfImag[1][k][iFBOffset] ); + fSideReal = 0.5f * ( pppfReal[0][k][iFBOffset] - pppfReal[1][k][iFBOffset] ); + fSideImag = 0.5f * ( pppfImag[0][k][iFBOffset] - pppfImag[1][k][iFBOffset] ); + + fLeftEnergy += ( pppfReal[0][k][iFBOffset] * pppfReal[0][k][iFBOffset] + pppfImag[0][k][iFBOffset] * pppfImag[0][k][iFBOffset] ); + fRightEnergy += ( pppfReal[1][k][iFBOffset] * pppfReal[1][k][iFBOffset] + pppfImag[1][k][iFBOffset] * pppfImag[1][k][iFBOffset] ); + fMidEnergy += ( fMidReal * fMidReal + fMidImag * fMidImag ); + fSideEnergy += ( fSideReal * fSideReal + fSideImag * fSideImag ); + +#ifdef ENABLE_MS_PRED + fLRCovReal += ( pppfReal[0][k][iFBOffset] * pppfReal[1][k][iFBOffset] + pppfImag[0][k][iFBOffset] * pppfImag[1][k][iFBOffset] ); + fLRCovImag += ( pppfImag[0][k][iFBOffset] * pppfReal[1][k][iFBOffset] - pppfImag[1][k][iFBOffset] * pppfReal[0][k][iFBOffset] ); +#endif + } + + iFBOffset++; + } +#ifdef ENABLE_MS_PRED + /* compute L/R phase difference if high coherence */ + if ( fLRCovReal * fLRCovReal + fLRCovImag * fLRCovImag > 0.5f * fLeftEnergy * fRightEnergy ) + { + float fPhase = (float) atan2( fLRCovImag, fLRCovReal ); + iPhase = quantPhase( fPhase ); + } + else + { + iPhase = 0; + } + piLRPhaseDiffs[b] = iPhase; + + /* adjust covariance based on phase rotation */ +#ifdef SIMPLE_PHASE + cplxmult( &fLRCovReal, &fLRCovImag, c_afRotRealImagSimple[iPhase][0], -c_afRotRealImagSimple[iPhase][1] ); +#else + tabIdx = iPhase - PHASE_MIN_VAL; + cplxmult( &fLRCovReal, &fLRCovImag, c_afRotRealImag[tabIdx][0], -c_afRotRealImag[tabIdx][1] ); +#endif + /* compute MS prediction coefficient based on LR covariance*/ + fMidEnergyPred = 0.25f * ( fLeftEnergy + fRightEnergy + 2.0f * fLRCovReal ); + fSideEnergyPred = 0.25f * ( fLeftEnergy + fRightEnergy - 2.0f * fLRCovReal ); + + /* M/S prediction */ + fPred = fMidEnergyPred == 0.0f ? 0.0f : 0.25f * ( fLeftEnergy - fRightEnergy ) / fMidEnergyPred; + iPred = quantPred( fPred ); + fPred = dequantPred( iPred ); + piMSPredCoefs[b] = iPred; + + /* evaluation */ + fSideEnergyPred += ( fPred * fPred * fMidEnergyPred - 2.0f * fPred * 0.25f * ( fLeftEnergy - fRightEnergy ) ); + /* -= fPred * fPred * fMidEnergyPred doesn't work because fPred is quantized and does not match MS/MM exactly */ + fMSPredRatio = (float) log10f( ( fMidEnergyPred + 1e-12f ) / ( fSideEnergyPred + 1e-12f ) ); +#endif + fLeftEnergy = log10f( fLeftEnergy + 1e-12f ); + fRightEnergy = log10f( fRightEnergy + 1e-12f ); + fMidEnergy = log10f( fMidEnergy + 1e-12f ); + fSideEnergy = log10f( fSideEnergy + 1e-12f ); + + if ( fLeftEnergy > fRightEnergy ) + { + fLRRatio = fLeftEnergy - fRightEnergy; + } + else + { + fLRRatio = fRightEnergy - fLeftEnergy; + } + + if ( fMidEnergy > fSideEnergy ) + { + fMSRatio = fMidEnergy - fSideEnergy; + } + else + { + fMSRatio = fSideEnergy - fMidEnergy; + } + + if ( fMSRatio > fLRRatio ) + { + iNumMSBands++; + piMSFlags[b] = 1; + } + else + { + piMSFlags[b] = 0; + } +#ifdef ENABLE_MS_PRED + if ( fMSRatio > fLRRatio ) + { + float maskThresShift_dB_by_10 = ( fMSRatio - fLRRatio ) * (float) c_aiDefaultTheta48[b] / 16.0f; + msBitsReduction += (float) ( piBandwidths[b] * iNumBlocks * 2 ) * one_by_log10_2 * maskThresShift_dB_by_10; /* * 2 for real/imag */ + } + if ( fMSPredRatio > fLRRatio ) + { + float maskThresShift_dB_by_10 = ( fMSPredRatio - fLRRatio ) * (float) c_aiDefaultTheta48[b] / 16.0f; + msPredBitsReduction += (float) ( piBandwidths[b] * iNumBlocks * 2 ) * one_by_log10_2 * maskThresShift_dB_by_10; + iNumMSPredBands++; + piMSPredFlags[b] = 1; + } + else + { + piMSPredFlags[b] = 0; + } +#endif + } + +#ifdef ENABLE_MS_PRED + msPredBits = CountMSBits( iNumBands, 3, piMSPredFlags, piLRPhaseDiffs, piMSPredCoefs ); + msPredBitsReduction = max( msPredBitsReduction - (float) msPredBits, 0.0f ); + msBits = CountMSBits( iNumBands, 2, piMSFlags, NULL, NULL ); + msBitsReduction = max( msBitsReduction - (float) msBits, 0.0f ); +#ifdef DEBUG_WRITE_MS_PRED + { + static FILE *fid = 0; + if ( !fid ) + { + fid = fopen( "bit_red.txt", "wt" ); + } + fprintf( fid, "%.1f %.1f %d %d\n", msBitsReduction, msPredBitsReduction, msBits, msPredBits ); + } +#endif + if ( iAllowSidePred && msPredBitsReduction > 1.1f * msBitsReduction ) + { + *piMSMode = 3; + for ( b = 0; b < iNumBands; b++ ) + { + piMSFlags[b] = piMSPredFlags[b]; + } + iNumMSBands = iNumMSPredBands; + } + else +#endif + if ( iNumMSBands == iNumBands ) + { + *piMSMode = 1; + } + else if ( iNumMSBands > 0 ) + { + *piMSMode = 2; + } + else + { + *piMSMode = 0; + } + + if ( *piMSMode > 0 ) + { + iFBOffset = 0; + for ( b = 0; b < iNumBands; b++ ) + { +#if defined ENABLE_MS_PRED && defined SIMPLE_PHASE + void ( *pFuncPhaseRotate )( float *, float * ) = pFuncPhaseRotateOptions[piLRPhaseDiffs[b]]; +#endif + if ( piMSFlags[b] == 1 ) + { + int32_t n; + for ( n = 0; n < piBandwidths[b]; n++ ) + { + int32_t k; + for ( k = 0; k < iNumBlocks; k++ ) + { + float fMidReal; + float fMidImag; + float fSideReal; + float fSideImag; +#ifdef ENABLE_MS_PRED + if ( *piMSMode == 3 ) + { +#ifdef SIMPLE_PHASE + ( *pFuncPhaseRotate )( &pppfReal[1][k][iFBOffset], &pppfImag[1][k][iFBOffset] ); +#else + int32_t phaseIdx; + + phaseIdx = piLRPhaseDiffs[b] - PHASE_MIN_VAL; + cplxmult( &pppfReal[1][k][iFBOffset], &pppfImag[1][k][iFBOffset], c_afRotRealImag[phaseIdx][0], c_afRotRealImag[phaseIdx][1] ); +#endif + } +#endif + fMidReal = 0.5f * ( pppfReal[0][k][iFBOffset] + pppfReal[1][k][iFBOffset] ); + fMidImag = 0.5f * ( pppfImag[0][k][iFBOffset] + pppfImag[1][k][iFBOffset] ); + fSideReal = 0.5f * ( pppfReal[0][k][iFBOffset] - pppfReal[1][k][iFBOffset] ); + fSideImag = 0.5f * ( pppfImag[0][k][iFBOffset] - pppfImag[1][k][iFBOffset] ); +#ifdef ENABLE_MS_PRED + if ( *piMSMode == 3 ) + { + fPred = dequantPred( piMSPredCoefs[b] ); + fSideReal -= fPred * fMidReal; + fSideImag -= fPred * fMidImag; + } +#endif + pppfReal[0][k][iFBOffset] = fMidReal; + pppfReal[1][k][iFBOffset] = fSideReal; + pppfImag[0][k][iFBOffset] = fMidImag; + pppfImag[1][k][iFBOffset] = fSideImag; + } + iFBOffset++; + } + } + else + { + iFBOffset += piBandwidths[b]; + } + } + } +#ifdef ENABLE_MS_PRED +#ifdef DEBUG_WRITE_MS_PRED + { + static FILE *fid = 0; + if ( !fid ) + { + fid = fopen( "ms_mode_enc_raw.txt", "wt" ); + } + writeMSPred( piLRPhaseDiffs, piMSPredCoefs, *piMSMode, iNumBands, iNumBands, fid, piMSFlags ); + } +#endif + if ( *piMSMode == 3 ) + { + /* Differential Coding of Phase Data*/ + PrepEncode( piLRPhaseDiffs, piMSFlags, iNumBands ); + PrepEncode( piMSPredCoefs, piMSFlags, iNumBands ); +#ifdef DEBUG_WRITE_MS_PRED + { + static FILE *fid = 0; + if ( !fid ) + { + fid = fopen( "ms_mode_enc.txt", "wt" ); + } + writeMSPred( piLRPhaseDiffs, piMSPredCoefs, *piMSMode, iNumMSBands, iNumBands, fid, piMSFlags ); + } +#endif + /* Differential Coding*/ +#ifndef SIMPLE_PHASE + EncodePhase( piLRPhaseDiffs, iNumMSBands, PHASE_DIFF_DIM ); +#endif + EncodePredCoef( piMSPredCoefs, iNumMSBands ); +#ifdef DEBUG_WRITE_MS_PRED + { + static FILE *fid = 0; + if ( !fid ) + { + fid = fopen( "ms_mode_enc_diff.txt", "wt" ); + } + writeMSPred( piLRPhaseDiffs, piMSPredCoefs, *piMSMode, iNumMSBands, iNumBands, fid, piMSFlags ); + } +#endif + } +#endif + + return iNumMSBands; +} + +static void RemoveRMSEnvelope( const int32_t iNumBands, + const int32_t *piBandwidths, + const int32_t iNumGroups, + const int32_t *piGroupLengths, + int32_t **ppiRMSEnvelope, + float **ppfReal, + float **ppfImag ) +{ + int32_t n; + int32_t iBlockOffset; + + iBlockOffset = 0; + for ( n = 0; n < iNumGroups; n++ ) + { + int32_t k; + for ( k = 0; k < piGroupLengths[n]; k++ ) + { + int32_t b; + int32_t iFBOffset; + iFBOffset = 0; + for ( b = 0; b < iNumBands; b++ ) + { + int32_t m; + int32_t iRMSEnv; + float fGain; + + iRMSEnv = ppiRMSEnvelope[n][b]; + fGain = c_afRMSEnvReconstructTable[ENV_RECONSTRUCT_TABLE_CENTER - iRMSEnv]; + for ( m = 0; m < piBandwidths[b]; m++ ) + { + ppfReal[iBlockOffset][iFBOffset] *= fGain; + ppfImag[iBlockOffset][iFBOffset] *= fGain; + iFBOffset++; + } + } + iBlockOffset++; + } + } +} + +static void QuantizeSpectrumDPCM_Opt( const int32_t iNumGroups, + const int32_t *piGroupLengths, + const int32_t iNumBands, + const int32_t *piBandwidths, + int32_t **ppiAlloc, + float **ppfReal, + float **ppfImag, + int32_t **ppiQReal, + int32_t **ppiQImag, + int32_t **ppiSignReal, + int32_t **ppiSignImag, + int32_t *piPredEnable, + float *pfA1Real, + float *pfA1Imag ) // Pass in 2 previous value buffers NULLABLE +{ + + int32_t b; + int32_t iFBOffset; + + iFBOffset = 0; + for ( b = 0; b < iNumBands; b++ ) + { + int32_t m; + for ( m = 0; m < piBandwidths[b]; m++ ) + { + int32_t n; + int32_t iBlockOffset; + float fPrevReal; + float fPrevImag; + + iBlockOffset = 0; + fPrevReal = 0.0; + fPrevImag = 0.0; + for ( n = 0; n < iNumGroups; n++ ) + { + int32_t k; + int32_t iAlloc; + int32_t iMaxQuantVal; + float fSCFGain; + float fInvSCFGain; + + + iAlloc = ppiAlloc[n][b]; + iMaxQuantVal = c_aiQuantMaxValues[iAlloc]; + fSCFGain = c_afScaleFactor[iAlloc]; + fInvSCFGain = c_afInvScaleFactor[iAlloc]; + + if ( piPredEnable[iFBOffset] == 1 ) + { + for ( k = 0; k < piGroupLengths[n]; k++ ) + { + int32_t iQuantValue; + float fPredReal = 0.0; + float fPredImag = 0.0; + float fVal; + + fPredReal = pfA1Real[iFBOffset] * fPrevReal - pfA1Imag[iFBOffset] * fPrevImag; + fPredImag = pfA1Real[iFBOffset] * fPrevImag + pfA1Imag[iFBOffset] * fPrevReal; + + fVal = ppfReal[iBlockOffset][iFBOffset] + fPredReal; + if ( fVal > 0.0 ) + { + iQuantValue = (int32_t) ( fSCFGain * fVal + 0.5 ); + ppiSignReal[iBlockOffset][iFBOffset] = 0; + } + else + { + iQuantValue = (int32_t) ( -fSCFGain * fVal + 0.5 ); + ppiSignReal[iBlockOffset][iFBOffset] = 1; + } + iQuantValue = ( iQuantValue < iMaxQuantVal ) ? iQuantValue : iMaxQuantVal; + + ppiQReal[iBlockOffset][iFBOffset] = iQuantValue; + + fVal = ppfImag[iBlockOffset][iFBOffset] + fPredImag; + if ( fVal > 0.0 ) + { + iQuantValue = (int32_t) ( fSCFGain * fVal + 0.5 ); + ppiSignImag[iBlockOffset][iFBOffset] = 0; + } + else + { + iQuantValue = (int32_t) ( -fSCFGain * fVal + 0.5 ); + ppiSignImag[iBlockOffset][iFBOffset] = 1; + } + + iQuantValue = ( iQuantValue < iMaxQuantVal ) ? iQuantValue : iMaxQuantVal; + ppiQImag[iBlockOffset][iFBOffset] = iQuantValue; + + + if ( ppiSignReal[iBlockOffset][iFBOffset] == 0 ) + { + fPrevReal = fInvSCFGain * (float) ppiQReal[iBlockOffset][iFBOffset] - fPredReal; + } + else + { + fPrevReal = -fInvSCFGain * (float) ppiQReal[iBlockOffset][iFBOffset] - fPredReal; + } + if ( ppiSignImag[iBlockOffset][iFBOffset] == 0 ) + { + fPrevImag = fInvSCFGain * (float) ppiQImag[iBlockOffset][iFBOffset] - fPredImag; + } + else + { + fPrevImag = -fInvSCFGain * (float) ppiQImag[iBlockOffset][iFBOffset] - fPredImag; + } + + iBlockOffset++; + } + } + else + { + for ( k = 0; k < piGroupLengths[n]; k++ ) + { + int32_t iQuantValue; + float fVal; + + fVal = ppfReal[iBlockOffset][iFBOffset]; + if ( fVal > 0.0 ) + { + iQuantValue = (int32_t) ( fSCFGain * fVal + 0.5 ); + ppiSignReal[iBlockOffset][iFBOffset] = 0; + } + else + { + iQuantValue = (int32_t) ( -fSCFGain * fVal + 0.5 ); + ppiSignReal[iBlockOffset][iFBOffset] = 1; + } + iQuantValue = ( iQuantValue < iMaxQuantVal ) ? iQuantValue : iMaxQuantVal; + + ppiQReal[iBlockOffset][iFBOffset] = iQuantValue; + + fVal = ppfImag[iBlockOffset][iFBOffset]; + if ( fVal > 0.0 ) + { + iQuantValue = (int32_t) ( fSCFGain * fVal + 0.5 ); + ppiSignImag[iBlockOffset][iFBOffset] = 0; + } + else + { + iQuantValue = (int32_t) ( -fSCFGain * fVal + 0.5 ); + ppiSignImag[iBlockOffset][iFBOffset] = 1; + } + iQuantValue = ( iQuantValue < iMaxQuantVal ) ? iQuantValue : iMaxQuantVal; + ppiQImag[iBlockOffset][iFBOffset] = iQuantValue; + iBlockOffset++; + } + } + } + + iFBOffset++; + } + } +} + +static void QuantizeSpectrumDPCM( const int32_t iNumGroups, + const int32_t *piGroupLengths, + const int32_t iNumBands, + const int32_t *piBandwidths, + int32_t **ppiAlloc, + float **ppfReal, + float **ppfImag, + int32_t **ppiQReal, + int32_t **ppiQImag, + int32_t **ppiSignReal, + int32_t **ppiSignImag, + int32_t *piPredEnable, + float *pfA1Real, + float *pfA1Imag ) // Pass in 2 previous value buffers NULLABLE +{ + int32_t b; + int32_t iFBOffset; + + iFBOffset = 0; + for ( b = 0; b < iNumBands; b++ ) + { + int32_t m; + for ( m = 0; m < piBandwidths[b]; m++ ) + { + int32_t n; + int32_t iBlockOffset; + float fPrevReal; + float fPrevImag; + + iBlockOffset = 0; + fPrevReal = 0.0; + fPrevImag = 0.0; + for ( n = 0; n < iNumGroups; n++ ) + { + int32_t k; + int32_t iAlloc; + int32_t iMaxQuantVal; + float fSCFGain; + float fInvSCFGain; + + + iAlloc = ppiAlloc[n][b]; + iMaxQuantVal = c_aiQuantMaxValues[iAlloc]; + fSCFGain = c_afScaleFactor[iAlloc]; + fInvSCFGain = c_afInvScaleFactor[iAlloc]; + + for ( k = 0; k < piGroupLengths[n]; k++ ) + { + int32_t iQuantValue; + float fPredReal = 0.0; + float fPredImag = 0.0; + float fVal; + + if ( piPredEnable[iFBOffset] == 1 ) + { + fPredReal = pfA1Real[iFBOffset] * fPrevReal - pfA1Imag[iFBOffset] * fPrevImag; + fPredImag = pfA1Real[iFBOffset] * fPrevImag + pfA1Imag[iFBOffset] * fPrevReal; + } + else + { // don't need + fPredReal = 0.0; + fPredImag = 0.0; + } + + fVal = ppfReal[iBlockOffset][iFBOffset] + fPredReal; + if ( fVal > 0.0 ) + { + iQuantValue = (int32_t) ( fSCFGain * fVal + 0.5 ); + ppiSignReal[iBlockOffset][iFBOffset] = 0; + } + else + { + iQuantValue = (int32_t) ( -fSCFGain * fVal + 0.5 ); + ppiSignReal[iBlockOffset][iFBOffset] = 1; + } +#ifdef _DEBUG_VERBOSE + if ( iQuantValue > iMaxQuantVal ) + { + printf( "Value out of range %d\t%d\t%d\t%d\n", b, iAlloc, iQuantValue, iMaxQuantVal ); + iQuantValue = iMaxQuantVal; + } +#else + iQuantValue = ( iQuantValue < iMaxQuantVal ) ? iQuantValue : iMaxQuantVal; +#endif + + ppiQReal[iBlockOffset][iFBOffset] = iQuantValue; + + fVal = ppfImag[iBlockOffset][iFBOffset] + fPredImag; + if ( fVal > 0.0 ) + { + iQuantValue = (int32_t) ( fSCFGain * fVal + 0.5 ); + ppiSignImag[iBlockOffset][iFBOffset] = 0; + } + else + { + iQuantValue = (int32_t) ( -fSCFGain * fVal + 0.5 ); + ppiSignImag[iBlockOffset][iFBOffset] = 1; + } + +#ifdef _DEBUG_VERBOSE + if ( iQuantValue > iMaxQuantVal ) + { + printf( "Value out of range %d\t%d\t%d\t%d\n", b, iAlloc, iQuantValue, iMaxQuantVal ); + iQuantValue = iMaxQuantVal; + } +#else + iQuantValue = ( iQuantValue < iMaxQuantVal ) ? iQuantValue : iMaxQuantVal; +#endif + ppiQImag[iBlockOffset][iFBOffset] = iQuantValue; + + if ( piPredEnable[iFBOffset] == 1 ) + { + if ( ppiSignReal[iBlockOffset][iFBOffset] == 0 ) + { + fPrevReal = fInvSCFGain * (float) ppiQReal[iBlockOffset][iFBOffset] - fPredReal; + } + else + { + fPrevReal = -fInvSCFGain * (float) ppiQReal[iBlockOffset][iFBOffset] - fPredReal; + } + if ( ppiSignImag[iBlockOffset][iFBOffset] == 0 ) + { + fPrevImag = fInvSCFGain * (float) ppiQImag[iBlockOffset][iFBOffset] - fPredImag; + } + else + { + fPrevImag = -fInvSCFGain * (float) ppiQImag[iBlockOffset][iFBOffset] - fPredImag; + } + } + else + { // don't need + fPrevReal = 0.0; + fPrevImag = 0.0; + } + + iBlockOffset++; + } + } + + iFBOffset++; + } + } +} + +static int32_t CountCQMFBits( const int32_t iNumGroups, + const int32_t *piGroupLengths, + const int32_t iNumBands, + const int32_t *piBandwidths, + const int32_t *piPredEnable, + int32_t **ppiAlloc, + int32_t **ppiQReal, + int32_t **ppiQImag ) +{ + int32_t n; + int32_t iBits; + int32_t iBlockOffest; + + iBits = 0; + iBlockOffest = 0; + for ( n = 0; n < iNumGroups; n++ ) + { + int32_t k; + for ( k = 0; k < piGroupLengths[n]; k++ ) + { + int32_t b; + int32_t iFBOffset; + + iFBOffset = 0; + for ( b = 0; b < iNumBands; b++ ) + { + int32_t m; + int32_t iAlloc; + int32_t iHuffDim; + int32_t iHuffMod; + + iAlloc = ppiAlloc[n][b]; + + iHuffDim = c_aiHuffmanDim[iAlloc]; + iHuffMod = c_aiHuffmanMod[iAlloc]; + + + if ( iAlloc > 0 ) + { + const uint32_t( *pauiHuffmanTable )[2] = NULL; + const uint32_t( *pauiHuffmanTableDPCM )[2] = NULL; + + // pauiHuffmanTable = GetHuffEncTable(iAlloc); + pauiHuffmanTable = c_apauiHuffEncTabels[iAlloc]; + pauiHuffmanTableDPCM = c_apauiHuffEncTabels[ALLOC_TABLE_SIZE + iAlloc]; + for ( m = 0; m < piBandwidths[b]; m++ ) + { + int32_t iQuantValue1; + int32_t iQuantValue2; + + iQuantValue1 = ppiQReal[iBlockOffest][iFBOffset]; + iQuantValue2 = ppiQImag[iBlockOffest][iFBOffset]; + + iBits += ( iQuantValue1 > 0 ) ? 1 : 0; // Sign bit for vals > 0 + iBits += ( iQuantValue2 > 0 ) ? 1 : 0; // Sign bit for vals > 0 + + if ( piPredEnable[iFBOffset] == 1 ) + { + if ( iHuffDim == 2 ) + { + iQuantValue1 *= iHuffMod; + iQuantValue1 += iQuantValue2; + iBits += pauiHuffmanTableDPCM[iQuantValue1][0]; + } + else + { + iBits += pauiHuffmanTableDPCM[iQuantValue1][0]; + iBits += pauiHuffmanTableDPCM[iQuantValue2][0]; + } + } + else + { + if ( iHuffDim == 2 ) + { + iQuantValue1 *= iHuffMod; + iQuantValue1 += iQuantValue2; + iBits += pauiHuffmanTable[iQuantValue1][0]; + } + else + { + iBits += pauiHuffmanTable[iQuantValue1][0]; + iBits += pauiHuffmanTable[iQuantValue2][0]; + } + } + + iFBOffset++; + } + } + else + { + iFBOffset += piBandwidths[b]; + } + } + + iBlockOffest++; + } + } + + return iBits; +} + +/* Currently only the number of bands in frame */ +static int32_t WriteHeaderInformation( const int32_t iNumBands, + ivas_split_rend_bits_t *pBits ) +{ + int32_t iBitsWritten; + + iBitsWritten = 0; + ivas_split_rend_bitstream_write_int32( pBits, iNumBands, 5 ); + iBitsWritten += 5; + + return iBitsWritten; +} + +static int32_t WriteMSInformation( const int32_t iNumBands, + const int32_t iMSMode, + const int32_t *piMSFlags, +#ifdef ENABLE_MS_PRED + const int32_t *piLRPhaseDiff, + const int32_t *piMSPredCoef, + int32_t iNumMSPredBands, +#endif + ivas_split_rend_bits_t *pBits ) +{ + int32_t iBitsWritten; +#ifdef ENABLE_MS_PRED + int32_t iMSPredAll = ( iNumMSPredBands == iNumBands ); +#ifdef DEBUG_WRITE_MS_PRED + int32_t iBitsWrittenTmp = 0; +#endif +#endif + iBitsWritten = 0; + ivas_split_rend_bitstream_write_int32( pBits, iMSMode, 2 ); + iBitsWritten += 2; +#ifdef ENABLE_MS_PRED + if ( iMSMode == 3 ) + { + ivas_split_rend_bitstream_write_int32( pBits, iMSPredAll, 1 ); + iBitsWritten += 1; + } + if ( iMSMode == 2 || ( iMSMode == 3 && !iMSPredAll ) ) +#else + if ( iMSMode == 2 ) +#endif + { + int32_t n; + for ( n = 0; n < iNumBands; n++ ) + { + ivas_split_rend_bitstream_write_int32( pBits, piMSFlags[n], 1 ); + iBitsWritten += 1; + } + } +#ifdef ENABLE_MS_PRED +#ifdef DEBUG_WRITE_MS_PRED + iBitsWrittenTmp = iBitsWritten; +#endif + if ( iMSMode == 3 ) + { + int32_t b; + int32_t anyNonZero; + anyNonZero = 0; + for ( b = 0; b < iNumMSPredBands; b++ ) + { + if ( piLRPhaseDiff[b] != 0 ) + { + anyNonZero = 1; + break; + } + } + ivas_split_rend_bitstream_write_int32( pBits, anyNonZero, 1 ); + iBitsWritten++; + if ( anyNonZero ) + { +#ifdef SIMPLE_PHASE + for ( b = 0; b < iNumMSPredBands; b++ ) + { + BSPutBits( psBSWrite, piLRPhaseDiff[b], SIMPLE_PHASE_BITS ); + iBitsWritten += SIMPLE_PHASE_BITS; + } +#else + ivas_split_rend_bitstream_write_int32( + pBits, piLRPhaseDiff[0] - PHASE_MIN_VAL, PHASE_BAND0_BITS ); + iBitsWritten += PHASE_BAND0_BITS; + for ( b = 1; b < iNumMSPredBands; b++ ) + { + int32_t tabIdx = piLRPhaseDiff[b] - ENV_DELTA_MIN; + ivas_split_rend_bitstream_write_int32( + pBits, c_aaiRMSEnvHuffEnc[tabIdx][1], + c_aaiRMSEnvHuffEnc[tabIdx][0] ); + iBitsWritten += c_aaiRMSEnvHuffEnc[tabIdx][0]; + } +#endif + } + anyNonZero = 0; + for ( b = 0; b < iNumMSPredBands; b++ ) + { + if ( piMSPredCoef[b] != 0 ) + { + anyNonZero = 1; + break; + } + } + ivas_split_rend_bitstream_write_int32( pBits, anyNonZero, + 1 ); + iBitsWritten++; + if ( anyNonZero ) + { + ivas_split_rend_bitstream_write_int32( + pBits, piMSPredCoef[0] - PRED_MIN_VAL, PRED_BAND0_BITS ); + iBitsWritten += PRED_BAND0_BITS; + for ( b = 1; b < iNumMSPredBands; b++ ) + { + int32_t tabIdx = piMSPredCoef[b] - ENV_DELTA_MIN; + ivas_split_rend_bitstream_write_int32( + pBits, c_aaiRMSEnvHuffEnc[tabIdx][1], + c_aaiRMSEnvHuffEnc[tabIdx][0] ); + iBitsWritten += c_aaiRMSEnvHuffEnc[tabIdx][0]; + } + } + } +#ifdef DEBUG_WRITE_MS_PRED + { + static FILE *fid = 0; + if ( !fid ) + { + fid = fopen( "ms_pred_bitrate.txt", "wt" ); + } + fprintf( fid, "%f\n", (float) ( ( iBitsWritten - iBitsWrittenTmp ) * ( iMSMode == 3 ) * 50 ) / 1000.0f ); /*kb/s*/ + } +#endif +#endif + + return iBitsWritten; +} + +static int32_t WriteGroupInformation( const int32_t iChannels, + const int32_t iCommonGrouping, + const int32_t *piNumGroups, + int32_t **ppiGroupLengths, + ivas_split_rend_bits_t *pBits ) +{ + int32_t iBitsWritten; + + iBitsWritten = 0; + if ( iChannels == 2 && iCommonGrouping == 1 ) + { + int32_t n; + ivas_split_rend_bitstream_write_int32( pBits, iCommonGrouping, + 1 ); + iBitsWritten += 1; + + for ( n = 0; n < piNumGroups[0]; n++ ) + { + int32_t k; + for ( k = 1; k < ppiGroupLengths[0][n]; k++ ) + { + ivas_split_rend_bitstream_write_int32( pBits, 0, 1 ); + iBitsWritten += 1; + } + if ( n < ( piNumGroups[0] - 1 ) ) + { + ivas_split_rend_bitstream_write_int32( pBits, 1, 1 ); + iBitsWritten += 1; + } + } + } + else if ( iChannels == 2 ) + { + int32_t c; + ivas_split_rend_bitstream_write_int32( pBits, iCommonGrouping, 1 ); + iBitsWritten += 1; + + for ( c = 0; c < iChannels; c++ ) + { + int32_t n; + + for ( n = 0; n < piNumGroups[c]; n++ ) + { + int32_t k; + for ( k = 1; k < ppiGroupLengths[c][n]; k++ ) + { + ivas_split_rend_bitstream_write_int32( pBits, 0, + 1 ); + iBitsWritten += 1; + } + if ( n < ( piNumGroups[c] - 1 ) ) + { + ivas_split_rend_bitstream_write_int32( pBits, 1, 1 ); + iBitsWritten += 1; + } + } + } + } + else + { + int32_t c; + + for ( c = 0; c < iChannels; c++ ) + { + int32_t n; + + for ( n = 0; n < piNumGroups[c]; n++ ) + { + int32_t k; + for ( k = 1; k < ppiGroupLengths[c][n]; k++ ) + { + ivas_split_rend_bitstream_write_int32( pBits, 0, 1 ); + iBitsWritten += 1; + } + if ( n < ( piNumGroups[c] - 1 ) ) + { + ivas_split_rend_bitstream_write_int32( pBits, 1, 1 ); + iBitsWritten += 1; + } + } + } + } + + return iBitsWritten; +} + +static int32_t WriteRMSEnvelope( const int32_t iChannels, + const int32_t *piNumGroups, + const int32_t iNumBands, + int32_t ***pppiRMSEnvelope, + ivas_split_rend_bits_t *pBits ) +{ + int32_t n; + int32_t iBitsWritten; + + iBitsWritten = 0; + for ( n = 0; n < iChannels; n++ ) + { + int32_t k; + for ( k = 0; k < piNumGroups[n]; k++ ) + { + int32_t b; + int32_t iLastRMSVal; + + iLastRMSVal = pppiRMSEnvelope[n][k][0]; + iLastRMSVal = ( iLastRMSVal > ENV_MIN ) ? iLastRMSVal : ENV_MIN; + iLastRMSVal = ( iLastRMSVal < ENV_MAX ) ? iLastRMSVal : ENV_MAX; + ivas_split_rend_bitstream_write_int32( pBits, ( iLastRMSVal - ENV_MIN ), ENV0_BITS ); + iBitsWritten += ENV0_BITS; + + for ( b = 1; b < iNumBands; b++ ) + { + int32_t iDelta; + + iDelta = pppiRMSEnvelope[n][k][b] - iLastRMSVal; + iDelta = ( iDelta > ENV_DELTA_MIN ) ? iDelta : ENV_DELTA_MIN; + iDelta = ( iDelta < ENV_DELTA_MAX ) ? iDelta : ENV_DELTA_MAX; + iDelta -= ENV_DELTA_MIN; + ivas_split_rend_bitstream_write_int32( + pBits, c_aaiRMSEnvHuffEnc[iDelta][1], + c_aaiRMSEnvHuffEnc[iDelta][0] ); + iBitsWritten += c_aaiRMSEnvHuffEnc[iDelta][0]; + + iLastRMSVal = pppiRMSEnvelope[n][k][b]; + } + } + } + + return iBitsWritten; +} + +#ifdef ENABLE_PMOD_ADJUST +static int32_t WritePmodInformation( const int32_t **ppiHiSMRFlags, Bitstream *psBSWrite, int32_t iChannels, int32_t iNumBands ) +{ + int32_t iBitsWritten, c, b; + + iBitsWritten = 0; + + for ( c = 0; c < iChannels; c++ ) + { + int32_t anyNonZero = 0; + const int32_t *flags = ppiHiSMRFlags[c]; + for ( b = 0; b < iNumBands; b++ ) + { + if ( flags[b] ) + { + anyNonZero = 1; + break; + } + } + BSPutBits( psBSWrite, anyNonZero, 1 ); + iBitsWritten += 1; + if ( anyNonZero ) + { + for ( b = 0; b < iNumBands; b++ ) + { + BSPutBits( psBSWrite, flags[b], 1 ); + iBitsWritten += 1; + } + } + } +#ifdef WRITE_HISMR_FLAGS + { + static FILE *fid = 0; + if ( !fid ) + { + fid = fopen( "hismr_enc.txt", "wt" ); + } + for ( c = 0; c < iChannels; c++ ) + { + int32_t b; + for ( b = 0; b < iNumBands; b++ ) + { + if ( c == iChannels - 1 && b == iNumBands - 1 ) + { + fprintf( fid, "%d\n", ppiHiSMRFlags[c][b] ); + } + else + { + fprintf( fid, "%d ", ppiHiSMRFlags[c][b] ); + } + } + } + } +#endif + + return iBitsWritten; +} +#endif + +static int32_t WriteAllocInformation( const int32_t iAllocOffset, + ivas_split_rend_bits_t *pBits ) +{ + int32_t iBitsWritten; + + iBitsWritten = 0; + + if ( iAllocOffset < MIN_ALLOC_OFFSET || iAllocOffset > MAX_ALLOC_OFFSET ) + { + printf( "Serious error\n" ); + } + ivas_split_rend_bitstream_write_int32( pBits, + ( iAllocOffset - MIN_ALLOC_OFFSET ), ALLOC_OFFSET_BITS ); + iBitsWritten += ALLOC_OFFSET_BITS; + + return iBitsWritten; +} + +static int32_t WriteCQMFData( const int32_t iNumGroups, + const int32_t *piGroupLengths, + const int32_t iNumBands, + const int32_t *piBandwidths, + const int32_t *piPredEnable, + int32_t **ppiAlloc, + int32_t **ppiSignReal, + int32_t **ppiSignImag, + int32_t **ppiQReal, + int32_t **ppiQImag, + ivas_split_rend_bits_t *pBits ) +{ + int32_t n; + int32_t iBitsWritten; + int32_t iBlockOffest; + + iBitsWritten = 0; + iBlockOffest = 0; + + + for ( n = 0; n < iNumGroups; n++ ) + { + int32_t k; + for ( k = 0; k < piGroupLengths[n]; k++ ) + { + int32_t b; + int32_t iFBOffset; + + iFBOffset = 0; + for ( b = 0; b < iNumBands; b++ ) + { + int32_t m; + int32_t iAlloc; + int32_t iHuffDim; + int32_t iHuffMod; + + iAlloc = ppiAlloc[n][b]; + + iHuffDim = c_aiHuffmanDim[iAlloc]; + iHuffMod = c_aiHuffmanMod[iAlloc]; + + + if ( iAlloc > 0 ) + { + const uint32_t( *pauiHuffmanTable )[2] = NULL; + const uint32_t( *pauiHuffmanTableDPCM )[2] = NULL; + + // pauiHuffmanTable = GetHuffEncTable(iAlloc); + pauiHuffmanTable = c_apauiHuffEncTabels[iAlloc]; + pauiHuffmanTableDPCM = c_apauiHuffEncTabels[ALLOC_TABLE_SIZE + iAlloc]; + for ( m = 0; m < piBandwidths[b]; m++ ) + { + int32_t iQuantValue1; + int32_t iQuantValue2; + + iQuantValue1 = ppiQReal[iBlockOffest][iFBOffset]; + iQuantValue2 = ppiQImag[iBlockOffest][iFBOffset]; + + if ( piPredEnable[iFBOffset] == 1 ) + { + if ( iHuffDim == 2 ) + { + int32_t iSymbol; + iSymbol = iQuantValue1; + iSymbol *= iHuffMod; + iSymbol += iQuantValue2; + ivas_split_rend_bitstream_write_int32( + pBits, pauiHuffmanTableDPCM[iSymbol][1], + pauiHuffmanTableDPCM[iSymbol][0] ); + iBitsWritten += pauiHuffmanTableDPCM[iSymbol][0]; + } + else + { + ivas_split_rend_bitstream_write_int32( + pBits, pauiHuffmanTableDPCM[iQuantValue1][1], + pauiHuffmanTableDPCM[iQuantValue1][0] ); + iBitsWritten += pauiHuffmanTableDPCM[iQuantValue1][0]; + + ivas_split_rend_bitstream_write_int32( + pBits, + pauiHuffmanTableDPCM[iQuantValue2][1], + pauiHuffmanTableDPCM[iQuantValue2][0] ); + iBitsWritten += pauiHuffmanTableDPCM[iQuantValue2][0]; + } + } + else + { + if ( iHuffDim == 2 ) + { + int32_t iSymbol; + iSymbol = iQuantValue1; + iSymbol *= iHuffMod; + iSymbol += iQuantValue2; + ivas_split_rend_bitstream_write_int32( + pBits, pauiHuffmanTable[iSymbol][1], + pauiHuffmanTable[iSymbol][0] ); + iBitsWritten += pauiHuffmanTable[iSymbol][0]; + } + else + { + ivas_split_rend_bitstream_write_int32( + pBits, pauiHuffmanTable[iQuantValue1][1], + pauiHuffmanTable[iQuantValue1][0] ); + iBitsWritten += pauiHuffmanTable[iQuantValue1][0]; + + ivas_split_rend_bitstream_write_int32( + pBits, pauiHuffmanTable[iQuantValue2][1], + pauiHuffmanTable[iQuantValue2][0] ); + iBitsWritten += pauiHuffmanTable[iQuantValue2][0]; + } + } + + if ( iQuantValue1 > 0 ) + { + ivas_split_rend_bitstream_write_int32( + pBits, ppiSignReal[iBlockOffest][iFBOffset], + 1 ); + iBitsWritten += 1; + } + if ( iQuantValue2 > 0 ) + { + ivas_split_rend_bitstream_write_int32( + pBits, ppiSignImag[iBlockOffest][iFBOffset], 1 ); + iBitsWritten += 1; + } + + iFBOffset++; + } + } + else + { + iFBOffset += piBandwidths[b]; + } + } + + iBlockOffest++; + } + } + + return iBitsWritten; +} + +static int32_t ComputeAllocation( const int32_t iChannels, + const int32_t *piNumGroups, + int32_t **ppiGroupLengths, + const int32_t iNumBands, + const int32_t *piBandwidths, + float ***pppfReal, + float ***pppfImag, + int32_t ***pppiSMR, + const int32_t iAvailableBits, + int32_t *piAllocOffset, + int32_t ***pppiAlloc, + int32_t ***pppiQReal, + int32_t ***pppiQImag, + int32_t ***pppiSignReal, + int32_t ***pppiSignImag, + int32_t **ppiPredEnable, + float **ppfA1Real, + float **ppfA1Imag ) +{ + int32_t iBitsUsed; + int32_t iDone; + int32_t iDelta; + + iBitsUsed = ALLOC_OFFSET_BITS; // Bits used for Alloc Offset + + iDone = 0; + iDelta = -MIN_ALLOC_OFFSET; + *piAllocOffset = 0; + + while ( iDone == 0 ) + { + int32_t n; + int32_t iLimitAllocOffset; + iBitsUsed = ALLOC_OFFSET_BITS; + + iLimitAllocOffset = *piAllocOffset; + iLimitAllocOffset = ( iLimitAllocOffset > MIN_ALLOC_OFFSET ) ? iLimitAllocOffset : MIN_ALLOC_OFFSET; + iLimitAllocOffset = ( iLimitAllocOffset < MAX_ALLOC_OFFSET ) ? iLimitAllocOffset : MAX_ALLOC_OFFSET; + + for ( n = 0; n < iChannels; n++ ) + { + int32_t k; + for ( k = 0; k < piNumGroups[n]; k++ ) + { + int32_t b; + for ( b = 0; b < iNumBands; b++ ) + { + int32_t iAlloc; + iAlloc = ( ( pppiSMR[n][k][b] + iLimitAllocOffset * ALLOC_OFFSET_SCALE ) >> 5 ); + iAlloc = ( iAlloc > MIN_ALLOC ) ? iAlloc : MIN_ALLOC; + iAlloc = ( iAlloc < MAX_ALLOC ) ? iAlloc : MAX_ALLOC; + pppiAlloc[n][k][b] = iAlloc; + } + } +#ifdef OPTIMIZE_DPCM_QUANT + QuantizeSpectrumDPCM_Opt( piNumGroups[n], + (const int32_t *) ppiGroupLengths[n], + iNumBands, + piBandwidths, + pppiAlloc[n], + pppfReal[n], + pppfImag[n], + pppiQReal[n], + pppiQImag[n], + pppiSignReal[n], + pppiSignImag[n], + ppiPredEnable[n], + ppfA1Real[n], + ppfA1Imag[n] ); +#else + QuantizeSpectrumDPCM( piNumGroups[n], + (const int32_t *) ppiGroupLengths[n], + iNumBands, + piBandwidths, + pppiAlloc[n], + pppfReal[n], + pppfImag[n], + pppiQReal[n], + pppiQImag[n], + pppiSignReal[n], + pppiSignImag[n], + ppiPredEnable[n], + ppfA1Real[n], + ppfA1Imag[n] ); +#endif + + iBitsUsed += CountCQMFBits( piNumGroups[n], + (const int32_t *) ppiGroupLengths[n], + iNumBands, + piBandwidths, + (const int32_t *) ppiPredEnable[n], + pppiAlloc[n], + pppiQReal[n], + pppiQImag[n] ); + } + + if ( *piAllocOffset <= MIN_ALLOC_OFFSET && iBitsUsed > iAvailableBits ) + { +#ifdef DEBUG_VERBOSE + printf( "Frame can not be coded with the number of bits available\n" ); +#endif + // iLastError = ENC_ERROR_STREAM_FAILURE; + return -1; + } + else if ( *piAllocOffset >= MAX_ALLOC_OFFSET && iBitsUsed < iAvailableBits ) + { + *piAllocOffset = MAX_ALLOC_OFFSET; + iDone++; + } + else + { + if ( iDelta == 0 && iBitsUsed > iAvailableBits ) + { + iDelta = 1; + } + else if ( iDelta == 0 && iBitsUsed < iAvailableBits ) + { + iDone++; + } + else if ( iBitsUsed == iAvailableBits ) + { + iDone++; + } + + if ( iBitsUsed > iAvailableBits ) + { + *piAllocOffset -= iDelta; + iDelta >>= 1; + } + else if ( iBitsUsed < iAvailableBits ) + { + *piAllocOffset += iDelta; + iDelta >>= 1; + } + } + } + + // printf("%d\n",*piAllocOffset); + // printf("%d\t%d\t%d\n",pppiAlloc[0][0][0],pppiAlloc[0][0][1],pppiAlloc[0][0][22]); + + // printf("%d\t%d\t%d\t%d\n",*piAllocOffset,iAvailableBits,iBitsUsed,iAvailableBits - iBitsUsed); + + return iBitsUsed; +} diff --git a/lib_rend/ivas_CQMFEncoder.h b/lib_rend/ivas_CQMFEncoder.h new file mode 100644 index 0000000000..3466eae6b4 --- /dev/null +++ b/lib_rend/ivas_CQMFEncoder.h @@ -0,0 +1,69 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef _IVAS_CQMF_ENCODER_H_ +#define _IVAS_CQMF_ENCODER_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif +#include "lib_rend.h" +#define ENCODER_ERROR_NONE ( 0 ) +#define ENCODER_ERROR_FS_NOT_SUPPORTED ( -1 ) +#define ENCODER_ERROR_CHAN_NOT_SUPPORTED ( -2 ) +#define ENCODER_ERROR_UNKNOWN ( -100 ) + + typedef struct CQMF_ENCODER CQMFEncoder; + + CQMFEncoder *CreateCQMFEncoder( const int32_t iSampleRate, + const int32_t iChannels, + const int32_t iTargetBitRate, + const int32_t iAllowSidePred ); + + void DeleteCQMFEncoder( CQMFEncoder *psCQMFEncoder ); + + int32_t CQMFEncoderGetError( CQMFEncoder *psCQMFEncoder ); + int32_t EncodeFrame( + CQMFEncoder *psCQMFEncoder, + float ***pppfCQMFReal, + float ***pppfCQMFImag, + int32_t *piNumiBites, + const int32_t available_bits, + ivas_split_rend_bits_t *pBits ); + int32_t GetNumGroups( CQMFEncoder *psCQMFEncoder ); + +#ifdef __cplusplus +} +#endif + +#endif /* _CQMF_ENCODER_H_ */ diff --git a/lib_rend/ivas_CQMFHuff.c b/lib_rend/ivas_CQMFHuff.c new file mode 100644 index 0000000000..aea5a98a47 --- /dev/null +++ b/lib_rend/ivas_CQMFHuff.c @@ -0,0 +1,4124 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "ivas_CQMFHuff.h" +#include "wmops.h" + +/* clang-format off */ +const uint32_t c_aauiCQMFHuffEnc1[16][2] = +{ + {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0005, 0x0001}, {0x000b, 0x0000}, {0x0002, 0x0001}, {0x0004, 0x0001}, {0x0007, 0x0001}, {0x000b, 0x0001}, + {0x0006, 0x0001}, {0x0008, 0x0001}, {0x000b, 0x0002}, {0x000b, 0x0003}, {0x000b, 0x0004}, {0x000b, 0x0005}, {0x000b, 0x0006}, {0x000b, 0x0007}, +}; + +const uint32_t c_aauiCQMFHuffDec1[3][16] = +{ + {0x0001ffff, 0x00000005, 0x00010001, 0x00010001, 0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x0002ffff, 0x00000009, 0x00010006, 0x00010006, 0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, }, + {0x00010003, 0x00010003, 0x00010007, 0x00010007, 0x0001000a, 0x0001000a, 0x0001000b, 0x0001000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, }, +}; + +const uint32_t c_aauiCQMFHuffEnc2[16][2] = +{ + {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0005, 0x0001}, {0x000c, 0x0000}, {0x0002, 0x0001}, {0x0004, 0x0001}, {0x0007, 0x0001}, {0x000c, 0x0001}, + {0x0006, 0x0001}, {0x0008, 0x0001}, {0x0009, 0x0001}, {0x000c, 0x0002}, {0x000c, 0x0003}, {0x000c, 0x0004}, {0x000c, 0x0005}, {0x000b, 0x0003}, +}; + +const uint32_t c_aauiCQMFHuffDec2[3][16] = +{ + {0x0001ffff, 0x00000005, 0x00010001, 0x00010001, 0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x0002ffff, 0x00000009, 0x00010006, 0x00010006, 0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, }, + {0x00000003, 0x00000007, 0x0000000b, 0x0000000c, 0x0000000d, 0x0000000e, 0x0001000f, 0x0001000f, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, }, +}; + +const uint32_t c_aauiCQMFHuffEnc3[25][2] = +{ + {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000d, 0x0000}, {0x000d, 0x0001}, {0x0002, 0x0001}, {0x0004, 0x0001}, {0x0007, 0x0001}, + {0x000d, 0x0002}, {0x000d, 0x0003}, {0x0006, 0x0002}, {0x0006, 0x0003}, {0x0008, 0x0001}, {0x000d, 0x0004}, {0x000d, 0x0005}, {0x0009, 0x0001}, + {0x000c, 0x0007}, {0x000d, 0x0006}, {0x000d, 0x0007}, {0x000d, 0x0008}, {0x000d, 0x0009}, {0x000d, 0x000a}, {0x000d, 0x000b}, {0x000d, 0x000c}, + {0x000d, 0x000d}, + +}; + +const uint32_t c_aauiCQMFHuffDec3[10][16] = +{ + {0x0001ffff, 0x00000006, 0x00010001, 0x00010001, 0x00020005, 0x00020005, 0x00020005, 0x00020005, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x0002ffff, 0x0000000c, 0x00010007, 0x00010007, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, }, + {0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x00000010, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, + {0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, }, + {0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, + {0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, + {0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, }, + {0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, }, + {0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, }, + {0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, }, +}; + +const uint32_t c_aauiCQMFHuffEnc4[36][2] = +{ + {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000b, 0x0001}, {0x0010, 0x0000}, {0x0010, 0x0001}, {0x0002, 0x0001}, {0x0004, 0x0001}, + {0x0007, 0x0001}, {0x000a, 0x0001}, {0x0010, 0x0002}, {0x0010, 0x0003}, {0x0006, 0x0002}, {0x0006, 0x0003}, {0x0008, 0x0001}, {0x000e, 0x0006}, + {0x0010, 0x0004}, {0x0010, 0x0005}, {0x000a, 0x0002}, {0x000a, 0x0003}, {0x000e, 0x0007}, {0x0010, 0x0006}, {0x0010, 0x0007}, {0x0010, 0x0008}, + {0x0010, 0x0009}, {0x0010, 0x000a}, {0x0010, 0x000b}, {0x0010, 0x000c}, {0x0010, 0x000d}, {0x0010, 0x000e}, {0x0010, 0x000f}, {0x0010, 0x0010}, + {0x0010, 0x0011}, {0x000f, 0x0009}, {0x000f, 0x000a}, {0x000f, 0x000b}, + +}; + +const uint32_t c_aauiCQMFHuffDec4[5][16] = +{ + {0x0001ffff, 0x00000007, 0x00010001, 0x00010001, 0x00020006, 0x00020006, 0x00020006, 0x00020006, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x0002ffff, 0x0000000e, 0x00010008, 0x00010008, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, }, + {0x0004ffff, 0x0003ffff, 0x00010003, 0x00010003, 0x00020009, 0x00020009, 0x00020009, 0x00020009, 0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00020013, 0x00020013, 0x00020013, 0x00020013, }, + {0x0000001f, 0x00000020, 0x00010021, 0x00010021, 0x00010022, 0x00010022, 0x00010023, 0x00010023, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, 0x00020014, 0x00020014, 0x00020014, 0x00020014, }, + {0x00000004, 0x00000005, 0x0000000a, 0x0000000b, 0x00000010, 0x00000011, 0x00000015, 0x00000016, 0x00000017, 0x00000018, 0x00000019, 0x0000001a, 0x0000001b, 0x0000001c, 0x0000001d, 0x0000001e, }, +}; + +const uint32_t c_aauiCQMFHuffEnc5[36][2] = +{ + {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000a, 0x0001}, {0x000f, 0x0003}, {0x0012, 0x0000}, {0x0002, 0x0001}, {0x0004, 0x0001}, + {0x0007, 0x0001}, {0x000b, 0x0001}, {0x0011, 0x0008}, {0x0012, 0x0001}, {0x0006, 0x0002}, {0x0006, 0x0003}, {0x0008, 0x0001}, {0x000c, 0x0001}, + {0x0012, 0x0002}, {0x0012, 0x0003}, {0x000a, 0x0002}, {0x000a, 0x0003}, {0x000d, 0x0001}, {0x0012, 0x0004}, {0x0012, 0x0005}, {0x0012, 0x0006}, + {0x0011, 0x0009}, {0x0011, 0x000a}, {0x0012, 0x0007}, {0x0012, 0x0008}, {0x0012, 0x0009}, {0x0012, 0x000a}, {0x0012, 0x000b}, {0x0012, 0x000c}, + {0x0012, 0x000d}, {0x0012, 0x000e}, {0x0012, 0x000f}, {0x0011, 0x000b}, + +}; + +const uint32_t c_aauiCQMFHuffDec5[10][16] = +{ + {0x0001ffff, 0x00000007, 0x00010001, 0x00010001, 0x00020006, 0x00020006, 0x00020006, 0x00020006, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x0002ffff, 0x0000000e, 0x00010008, 0x00010008, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, }, + {0x0003ffff, 0x0000000f, 0x00010009, 0x00010009, 0x00020003, 0x00020003, 0x00020003, 0x00020003, 0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00020013, 0x00020013, 0x00020013, 0x00020013, }, + {0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x0004ffff, 0x0005ffff, 0x00010004, 0x00010004, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, }, + {0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, }, + {0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, }, + {0x00020005, 0x00020005, 0x00020005, 0x00020005, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x00020011, 0x00020011, 0x00020011, 0x00020011, }, + {0x00020015, 0x00020015, 0x00020015, 0x00020015, 0x00020016, 0x00020016, 0x00020016, 0x00020016, 0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, }, + {0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, }, + {0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, }, +}; + +const uint32_t c_aauiCQMFHuffEnc6[49][2] = +{ + {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000a, 0x0001}, {0x0010, 0x0003}, {0x0014, 0x0000}, {0x0014, 0x0001}, {0x0002, 0x0001}, + {0x0004, 0x0001}, {0x0007, 0x0001}, {0x000a, 0x0002}, {0x0010, 0x0004}, {0x0014, 0x0002}, {0x0014, 0x0003}, {0x0006, 0x0002}, {0x0006, 0x0003}, + {0x0008, 0x0001}, {0x000d, 0x0001}, {0x0012, 0x0007}, {0x0014, 0x0004}, {0x0014, 0x0005}, {0x000a, 0x0003}, {0x000b, 0x0001}, {0x000c, 0x0001}, + {0x0011, 0x0004}, {0x0014, 0x0006}, {0x0014, 0x0007}, {0x0014, 0x0008}, {0x0010, 0x0005}, {0x000f, 0x0003}, {0x0011, 0x0005}, {0x0014, 0x0009}, + {0x0014, 0x000a}, {0x0014, 0x000b}, {0x0014, 0x000c}, {0x0014, 0x000d}, {0x0013, 0x000d}, {0x0014, 0x000e}, {0x0014, 0x000f}, {0x0014, 0x0010}, + {0x0014, 0x0011}, {0x0014, 0x0012}, {0x0014, 0x0013}, {0x0014, 0x0014}, {0x0014, 0x0015}, {0x0014, 0x0016}, {0x0014, 0x0017}, {0x0014, 0x0018}, + {0x0014, 0x0019}, + +}; + +const uint32_t c_aauiCQMFHuffDec6[7][16] = +{ + {0x0001ffff, 0x00000008, 0x00010001, 0x00010001, 0x00020007, 0x00020007, 0x00020007, 0x00020007, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x0002ffff, 0x00000010, 0x00010009, 0x00010009, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, }, + {0x0003ffff, 0x00000017, 0x00010016, 0x00010016, 0x00020003, 0x00020003, 0x00020003, 0x00020003, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x00020015, 0x00020015, 0x00020015, 0x00020015, }, + {0x0006ffff, 0x0005ffff, 0x0004ffff, 0x00000004, 0x0000000b, 0x0000001c, 0x0001001d, 0x0001001d, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, + {0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, }, + {0x00000027, 0x00000028, 0x00000029, 0x0000002a, 0x0000002b, 0x0000002c, 0x0000002d, 0x0000002e, 0x0000002f, 0x00000030, 0x00010024, 0x00010024, 0x00020012, 0x00020012, 0x00020012, 0x00020012, }, + {0x00000005, 0x00000006, 0x0000000c, 0x0000000d, 0x00000013, 0x00000014, 0x00000019, 0x0000001a, 0x0000001b, 0x0000001f, 0x00000020, 0x00000021, 0x00000022, 0x00000023, 0x00000025, 0x00000026, }, +}; + +const uint32_t c_aauiCQMFHuffEnc7[64][2] = +{ + {0x0002, 0x0001}, {0x0002, 0x0002}, {0x0005, 0x0001}, {0x0009, 0x0001}, {0x000f, 0x0002}, {0x0015, 0x0000}, {0x0015, 0x0001}, {0x0015, 0x0002}, + {0x0002, 0x0003}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x0009, 0x0002}, {0x000f, 0x0003}, {0x0014, 0x0011}, {0x0015, 0x0003}, {0x0015, 0x0004}, + {0x0005, 0x0002}, {0x0005, 0x0003}, {0x0007, 0x0001}, {0x000b, 0x0001}, {0x0010, 0x0002}, {0x0015, 0x0005}, {0x0015, 0x0006}, {0x0015, 0x0007}, + {0x000a, 0x0001}, {0x0009, 0x0003}, {0x000c, 0x0001}, {0x000f, 0x0004}, {0x0012, 0x0006}, {0x0015, 0x0008}, {0x0015, 0x0009}, {0x0015, 0x000a}, + {0x000f, 0x0005}, {0x000e, 0x0003}, {0x0010, 0x0003}, {0x0012, 0x0007}, {0x0014, 0x0012}, {0x0015, 0x000b}, {0x0015, 0x000c}, {0x0015, 0x000d}, + {0x0014, 0x0013}, {0x0014, 0x0014}, {0x0013, 0x000b}, {0x0014, 0x0015}, {0x0015, 0x000e}, {0x0015, 0x000f}, {0x0015, 0x0010}, {0x0015, 0x0011}, + {0x0015, 0x0012}, {0x0015, 0x0013}, {0x0015, 0x0014}, {0x0015, 0x0015}, {0x0015, 0x0016}, {0x0015, 0x0017}, {0x0015, 0x0018}, {0x0015, 0x0019}, + {0x0015, 0x001a}, {0x0015, 0x001b}, {0x0015, 0x001c}, {0x0015, 0x001d}, {0x0015, 0x001e}, {0x0015, 0x001f}, {0x0015, 0x0020}, {0x0015, 0x0021}, +}; + +const uint32_t c_aauiCQMFHuffDec7[25][16] = +{ + {0x0001ffff, 0x0002ffff, 0x00010009, 0x00010009, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00020008, 0x00020008, 0x00020008, 0x00020008, }, + {0x0003ffff, 0x0004ffff, 0x00010012, 0x00010012, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, }, + {0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, + {0x0005ffff, 0x0000001a, 0x00010013, 0x00010013, 0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, }, + {0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, }, + {0x0007ffff, 0x0006ffff, 0x00000014, 0x00000022, 0x00010004, 0x00010004, 0x0001000c, 0x0001000c, 0x0001001b, 0x0001001b, 0x00010020, 0x00010020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, }, + {0x0018ffff, 0x0000000d, 0x00000024, 0x00000028, 0x00000029, 0x0000002b, 0x0001002a, 0x0001002a, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x00020023, 0x00020023, 0x00020023, 0x00020023, }, + {0x000effff, 0x000affff, 0x000bffff, 0x000cffff, 0x0008ffff, 0x0009ffff, 0x000dffff, 0x000fffff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, 0x0016ffff, 0x0017ffff, }, + {0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, }, + {0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, }, + {0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, + {0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, }, + {0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, }, + {0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, }, + {0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, + {0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, }, + {0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, }, + {0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, }, + {0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, }, + {0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, }, + {0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, }, + {0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, }, + {0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, }, + {0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, }, + {0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, }, +}; + +const uint32_t c_aauiCQMFHuffEnc8[81][2] = +{ + {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000a, 0x0001}, {0x000f, 0x0002}, {0x0014, 0x0008}, {0x0017, 0x0000}, {0x0017, 0x0001}, + {0x0017, 0x0002}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0005, 0x0001}, {0x0009, 0x0001}, {0x000f, 0x0003}, {0x0012, 0x0004}, {0x0015, 0x000d}, + {0x0017, 0x0003}, {0x0017, 0x0004}, {0x0005, 0x0002}, {0x0005, 0x0003}, {0x0007, 0x0001}, {0x000c, 0x0001}, {0x0010, 0x0002}, {0x0013, 0x0005}, + {0x0017, 0x0005}, {0x0017, 0x0006}, {0x0017, 0x0007}, {0x0009, 0x0002}, {0x0009, 0x0003}, {0x000b, 0x0001}, {0x000f, 0x0004}, {0x0012, 0x0005}, + {0x0016, 0x0015}, {0x0017, 0x0008}, {0x0017, 0x0009}, {0x0017, 0x000a}, {0x000f, 0x0005}, {0x000e, 0x0003}, {0x0010, 0x0003}, {0x0012, 0x0006}, + {0x0014, 0x0009}, {0x0017, 0x000b}, {0x0017, 0x000c}, {0x0017, 0x000d}, {0x0017, 0x000e}, {0x0013, 0x0006}, {0x0012, 0x0007}, {0x0013, 0x0007}, + {0x0015, 0x000e}, {0x0017, 0x000f}, {0x0017, 0x0010}, {0x0017, 0x0011}, {0x0017, 0x0012}, {0x0017, 0x0013}, {0x0016, 0x0016}, {0x0016, 0x0017}, + {0x0015, 0x000f}, {0x0016, 0x0018}, {0x0017, 0x0014}, {0x0017, 0x0015}, {0x0017, 0x0016}, {0x0017, 0x0017}, {0x0017, 0x0018}, {0x0017, 0x0019}, + {0x0017, 0x001a}, {0x0017, 0x001b}, {0x0017, 0x001c}, {0x0017, 0x001d}, {0x0017, 0x001e}, {0x0017, 0x001f}, {0x0017, 0x0020}, {0x0017, 0x0021}, + {0x0017, 0x0022}, {0x0017, 0x0023}, {0x0017, 0x0024}, {0x0017, 0x0025}, {0x0017, 0x0026}, {0x0017, 0x0027}, {0x0017, 0x0028}, {0x0017, 0x0029}, + {0x0016, 0x0019}, + +}; + +const uint32_t c_aauiCQMFHuffDec8[16][16] = +{ + {0x0001ffff, 0x0002ffff, 0x00010001, 0x00010001, 0x00010009, 0x00010009, 0x0001000a, 0x0001000a, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x0003ffff, 0x0004ffff, 0x00010014, 0x00010014, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, + {0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, }, + {0x0005ffff, 0x00000015, 0x0001001d, 0x0001001d, 0x00020003, 0x00020003, 0x00020003, 0x00020003, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, + {0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, }, + {0x0007ffff, 0x0006ffff, 0x00000016, 0x00000026, 0x00010004, 0x00010004, 0x0001000d, 0x0001000d, 0x0001001e, 0x0001001e, 0x00010024, 0x00010024, 0x00020025, 0x00020025, 0x00020025, 0x00020025, }, + {0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x00020027, 0x00020027, 0x00020027, 0x00020027, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, }, + {0x000bffff, 0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x000affff, 0x0008ffff, 0x0009ffff, 0x00000005, 0x00000028, 0x00010017, 0x00010017, 0x0001002d, 0x0001002d, 0x0001002f, 0x0001002f, }, + {0x00020039, 0x00020039, 0x00020039, 0x00020039, 0x00020050, 0x00020050, 0x00020050, 0x00020050, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, + {0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, }, + {0x0001004e, 0x0001004e, 0x0001004f, 0x0001004f, 0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020036, 0x00020036, 0x00020036, 0x00020036, 0x00020037, 0x00020037, 0x00020037, 0x00020037, }, + {0x00010006, 0x00010006, 0x00010007, 0x00010007, 0x00010008, 0x00010008, 0x00010010, 0x00010010, 0x00010011, 0x00010011, 0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x0001001a, 0x0001001a, }, + {0x00010021, 0x00010021, 0x00010022, 0x00010022, 0x00010023, 0x00010023, 0x00010029, 0x00010029, 0x0001002a, 0x0001002a, 0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x00010031, 0x00010031, }, + {0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x0001003a, 0x0001003a, 0x0001003b, 0x0001003b, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, }, + {0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x00010040, 0x00010040, 0x00010041, 0x00010041, 0x00010042, 0x00010042, 0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, }, + {0x00010046, 0x00010046, 0x00010047, 0x00010047, 0x00010048, 0x00010048, 0x00010049, 0x00010049, 0x0001004a, 0x0001004a, 0x0001004b, 0x0001004b, 0x0001004c, 0x0001004c, 0x0001004d, 0x0001004d, }, +}; + +const uint32_t c_aauiCQMFHuffEnc9[100][2] = +{ + {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x0009, 0x0001}, {0x000d, 0x0002}, {0x0011, 0x0004}, {0x0014, 0x000a}, {0x0017, 0x0000}, + {0x0017, 0x0001}, {0x0017, 0x0002}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0005, 0x0001}, {0x0009, 0x0002}, {0x000d, 0x0003}, {0x0010, 0x0004}, + {0x0013, 0x0007}, {0x0016, 0x0018}, {0x0017, 0x0003}, {0x0017, 0x0004}, {0x0005, 0x0002}, {0x0005, 0x0003}, {0x0008, 0x0002}, {0x000b, 0x0002}, + {0x000e, 0x0002}, {0x0011, 0x0005}, {0x0014, 0x000b}, {0x0016, 0x0019}, {0x0017, 0x0005}, {0x0017, 0x0006}, {0x0009, 0x0003}, {0x0008, 0x0003}, + {0x000b, 0x0003}, {0x000d, 0x0004}, {0x0010, 0x0005}, {0x0012, 0x0006}, {0x0015, 0x000f}, {0x0017, 0x0007}, {0x0017, 0x0008}, {0x0017, 0x0009}, + {0x000d, 0x0005}, {0x000c, 0x0003}, {0x000e, 0x0003}, {0x0010, 0x0006}, {0x0012, 0x0007}, {0x0014, 0x000c}, {0x0017, 0x000a}, {0x0016, 0x001a}, + {0x0017, 0x000b}, {0x0017, 0x000c}, {0x0011, 0x0006}, {0x0010, 0x0007}, {0x0011, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0015, 0x0010}, + {0x0017, 0x000d}, {0x0017, 0x000e}, {0x0017, 0x000f}, {0x0017, 0x0010}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0014, 0x000d}, {0x0015, 0x0011}, + {0x0017, 0x0011}, {0x0016, 0x001b}, {0x0017, 0x0012}, {0x0017, 0x0013}, {0x0017, 0x0014}, {0x0017, 0x0015}, {0x0017, 0x0016}, {0x0015, 0x0012}, + {0x0015, 0x0013}, {0x0017, 0x0017}, {0x0016, 0x001c}, {0x0017, 0x0018}, {0x0017, 0x0019}, {0x0017, 0x001a}, {0x0017, 0x001b}, {0x0017, 0x001c}, + {0x0017, 0x001d}, {0x0017, 0x001e}, {0x0017, 0x001f}, {0x0017, 0x0020}, {0x0017, 0x0021}, {0x0017, 0x0022}, {0x0017, 0x0023}, {0x0017, 0x0024}, + {0x0017, 0x0025}, {0x0017, 0x0026}, {0x0017, 0x0027}, {0x0017, 0x0028}, {0x0017, 0x0029}, {0x0017, 0x002a}, {0x0017, 0x002b}, {0x0017, 0x002c}, + {0x0017, 0x002d}, {0x0017, 0x002e}, {0x0017, 0x002f}, {0x0016, 0x001d}, + +}; + +const uint32_t c_aauiCQMFHuffDec9[22][16] = +{ + {0x0001ffff, 0x0002ffff, 0x00010001, 0x00010001, 0x0001000a, 0x0001000a, 0x0001000b, 0x0001000b, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x0003ffff, 0x0004ffff, 0x00000016, 0x0000001f, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, + {0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, }, + {0x0007ffff, 0x0005ffff, 0x0006ffff, 0x00000029, 0x00010017, 0x00010017, 0x00010020, 0x00010020, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, }, + {0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, }, + {0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, + {0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, }, + {0x000bffff, 0x000affff, 0x0008ffff, 0x0009ffff, 0x0000000f, 0x00000022, 0x0000002b, 0x00000033, 0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, }, + {0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, }, + {0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, }, + {0x00010035, 0x00010035, 0x00010036, 0x00010036, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, 0x00020023, 0x00020023, 0x00020023, 0x00020023, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, }, + {0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, 0x000fffff, 0x000dffff, 0x000cffff, 0x000effff, 0x00000006, 0x0000001a, 0x0000002d, 0x0000003e, 0x00010010, 0x00010010, }, + {0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, }, + {0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, 0x00020063, 0x00020063, 0x00020063, 0x00020063, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, }, + {0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, }, + {0x00020011, 0x00020011, 0x00020011, 0x00020011, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002002f, 0x0002002f, 0x0002002f, 0x0002002f, 0x00020041, 0x00020041, 0x00020041, 0x00020041, }, + {0x00010007, 0x00010007, 0x00010008, 0x00010008, 0x00010009, 0x00010009, 0x00010012, 0x00010012, 0x00010013, 0x00010013, 0x0001001c, 0x0001001c, 0x0001001d, 0x0001001d, 0x00010025, 0x00010025, }, + {0x00010026, 0x00010026, 0x00010027, 0x00010027, 0x0001002e, 0x0001002e, 0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x00010038, 0x00010038, 0x00010039, 0x00010039, 0x0001003a, 0x0001003a, }, + {0x0001003b, 0x0001003b, 0x00010040, 0x00010040, 0x00010042, 0x00010042, 0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, 0x00010046, 0x00010046, 0x00010049, 0x00010049, }, + {0x0001004b, 0x0001004b, 0x0001004c, 0x0001004c, 0x0001004d, 0x0001004d, 0x0001004e, 0x0001004e, 0x0001004f, 0x0001004f, 0x00010050, 0x00010050, 0x00010051, 0x00010051, 0x00010052, 0x00010052, }, + {0x00010053, 0x00010053, 0x00010054, 0x00010054, 0x00010055, 0x00010055, 0x00010056, 0x00010056, 0x00010057, 0x00010057, 0x00010058, 0x00010058, 0x00010059, 0x00010059, 0x0001005a, 0x0001005a, }, + {0x0001005b, 0x0001005b, 0x0001005c, 0x0001005c, 0x0001005d, 0x0001005d, 0x0001005e, 0x0001005e, 0x0001005f, 0x0001005f, 0x00010060, 0x00010060, 0x00010061, 0x00010061, 0x00010062, 0x00010062, }, +}; + +const uint32_t c_aauiCQMFHuffEnc10[169][2] = +{ + {0x0001, 0x0001}, {0x0004, 0x0002}, {0x0005, 0x0002}, {0x0007, 0x0002}, {0x000a, 0x0002}, {0x000e, 0x0004}, {0x0011, 0x0007}, {0x0013, 0x0012}, + {0x0016, 0x0000}, {0x0016, 0x0001}, {0x0016, 0x0002}, {0x0016, 0x0003}, {0x0016, 0x0004}, {0x0004, 0x0003}, {0x0003, 0x0003}, {0x0004, 0x0004}, + {0x0007, 0x0003}, {0x000a, 0x0003}, {0x000d, 0x0004}, {0x0010, 0x0007}, {0x0013, 0x0013}, {0x0015, 0x0035}, {0x0016, 0x0005}, {0x0016, 0x0006}, + {0x0016, 0x0007}, {0x0016, 0x0008}, {0x0005, 0x0003}, {0x0004, 0x0005}, {0x0006, 0x0003}, {0x0008, 0x0002}, {0x000b, 0x0002}, {0x000e, 0x0005}, + {0x0010, 0x0008}, {0x0013, 0x0014}, {0x0014, 0x001d}, {0x0016, 0x0009}, {0x0016, 0x000a}, {0x0016, 0x000b}, {0x0016, 0x000c}, {0x0007, 0x0004}, + {0x0007, 0x0005}, {0x0008, 0x0003}, {0x000a, 0x0004}, {0x000d, 0x0005}, {0x000f, 0x0005}, {0x0011, 0x0008}, {0x0014, 0x001e}, {0x0014, 0x001f}, + {0x0016, 0x000d}, {0x0016, 0x000e}, {0x0016, 0x000f}, {0x0016, 0x0010}, {0x000a, 0x0005}, {0x0009, 0x0003}, {0x000b, 0x0003}, {0x000d, 0x0006}, + {0x000f, 0x0006}, {0x0011, 0x0009}, {0x0013, 0x0015}, {0x0014, 0x0020}, {0x0016, 0x0011}, {0x0016, 0x0012}, {0x0016, 0x0013}, {0x0016, 0x0014}, + {0x0016, 0x0015}, {0x000e, 0x0006}, {0x000d, 0x0007}, {0x000e, 0x0007}, {0x000f, 0x0007}, {0x0011, 0x000a}, {0x0012, 0x000c}, {0x0016, 0x0016}, + {0x0016, 0x0017}, {0x0016, 0x0018}, {0x0016, 0x0019}, {0x0016, 0x001a}, {0x0016, 0x001b}, {0x0016, 0x001c}, {0x0011, 0x000b}, {0x0010, 0x0009}, + {0x0011, 0x000c}, {0x0011, 0x000d}, {0x0013, 0x0016}, {0x0016, 0x001d}, {0x0016, 0x001e}, {0x0016, 0x001f}, {0x0016, 0x0020}, {0x0016, 0x0021}, + {0x0016, 0x0022}, {0x0016, 0x0023}, {0x0016, 0x0024}, {0x0014, 0x0021}, {0x0014, 0x0022}, {0x0012, 0x000d}, {0x0013, 0x0017}, {0x0016, 0x0025}, + {0x0016, 0x0026}, {0x0016, 0x0027}, {0x0016, 0x0028}, {0x0016, 0x0029}, {0x0016, 0x002a}, {0x0016, 0x002b}, {0x0016, 0x002c}, {0x0016, 0x002d}, + {0x0015, 0x0036}, {0x0015, 0x0037}, {0x0014, 0x0023}, {0x0015, 0x0038}, {0x0016, 0x002e}, {0x0016, 0x002f}, {0x0016, 0x0030}, {0x0016, 0x0031}, + {0x0016, 0x0032}, {0x0016, 0x0033}, {0x0016, 0x0034}, {0x0016, 0x0035}, {0x0016, 0x0036}, {0x0016, 0x0037}, {0x0016, 0x0038}, {0x0016, 0x0039}, + {0x0016, 0x003a}, {0x0016, 0x003b}, {0x0016, 0x003c}, {0x0016, 0x003d}, {0x0016, 0x003e}, {0x0016, 0x003f}, {0x0016, 0x0040}, {0x0016, 0x0041}, + {0x0016, 0x0042}, {0x0016, 0x0043}, {0x0016, 0x0044}, {0x0016, 0x0045}, {0x0016, 0x0046}, {0x0016, 0x0047}, {0x0016, 0x0048}, {0x0016, 0x0049}, + {0x0016, 0x004a}, {0x0016, 0x004b}, {0x0016, 0x004c}, {0x0016, 0x004d}, {0x0016, 0x004e}, {0x0016, 0x004f}, {0x0016, 0x0050}, {0x0016, 0x0051}, + {0x0016, 0x0052}, {0x0016, 0x0053}, {0x0016, 0x0054}, {0x0016, 0x0055}, {0x0016, 0x0056}, {0x0016, 0x0057}, {0x0016, 0x0058}, {0x0016, 0x0059}, + {0x0016, 0x005a}, {0x0016, 0x005b}, {0x0016, 0x005c}, {0x0016, 0x005d}, {0x0016, 0x005e}, {0x0016, 0x005f}, {0x0016, 0x0060}, {0x0016, 0x0061}, + {0x0016, 0x0062}, {0x0016, 0x0063}, {0x0016, 0x0064}, {0x0016, 0x0065}, {0x0016, 0x0066}, {0x0016, 0x0067}, {0x0016, 0x0068}, {0x0016, 0x0069}, + {0x0015, 0x0039}, + +}; + +const uint32_t c_aauiCQMFHuffDec10[45][16] = +{ + {0x0002ffff, 0x0001ffff, 0x00000001, 0x0000000d, 0x0000000f, 0x0000001b, 0x0001000e, 0x0001000e, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, }, + {0x0004ffff, 0x0003ffff, 0x0000001d, 0x00000029, 0x00010003, 0x00010003, 0x00010010, 0x00010010, 0x00010027, 0x00010027, 0x00010028, 0x00010028, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, }, + {0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, 0x00020034, 0x00020034, 0x00020034, 0x00020034, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, }, + {0x0008ffff, 0x0007ffff, 0x0005ffff, 0x0006ffff, 0x0001001e, 0x0001001e, 0x00010036, 0x00010036, 0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x00020011, 0x00020011, 0x00020011, 0x00020011, }, + {0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, }, + {0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, }, + {0x00020005, 0x00020005, 0x00020005, 0x00020005, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x00020041, 0x00020041, 0x00020041, 0x00020041, 0x00020043, 0x00020043, 0x00020043, 0x00020043, }, + {0x0012ffff, 0x000effff, 0x000dffff, 0x000affff, 0x0009ffff, 0x000bffff, 0x000cffff, 0x00000013, 0x00000020, 0x0000004f, 0x0001002c, 0x0001002c, 0x00010038, 0x00010038, 0x00010044, 0x00010044, }, + {0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, }, + {0x00020046, 0x00020046, 0x00020046, 0x00020046, 0x0002005d, 0x0002005d, 0x0002005d, 0x0002005d, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, + {0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, }, + {0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, }, + {0x0000003b, 0x0000005b, 0x0000005c, 0x0000006a, 0x00010007, 0x00010007, 0x00010014, 0x00010014, 0x00010021, 0x00010021, 0x0001003a, 0x0001003a, 0x00010052, 0x00010052, 0x0001005e, 0x0001005e, }, + {0x0023ffff, 0x0024ffff, 0x0025ffff, 0x0026ffff, 0x0027ffff, 0x0028ffff, 0x0029ffff, 0x002affff, 0x002bffff, 0x002cffff, 0x000fffff, 0x0010ffff, 0x0011ffff, 0x00000022, 0x0000002e, 0x0000002f, }, + {0x000200a6, 0x000200a6, 0x000200a6, 0x000200a6, 0x000200a7, 0x000200a7, 0x000200a7, 0x000200a7, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, }, + {0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, }, + {0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x000300a8, 0x000300a8, 0x000300a8, 0x000300a8, 0x000300a8, 0x000300a8, 0x000300a8, 0x000300a8, }, + {0x0014ffff, 0x0017ffff, 0x0015ffff, 0x0016ffff, 0x001cffff, 0x0013ffff, 0x0018ffff, 0x0019ffff, 0x001affff, 0x001bffff, 0x001dffff, 0x001effff, 0x001fffff, 0x0020ffff, 0x0021ffff, 0x0022ffff, }, + {0x0002003f, 0x0002003f, 0x0002003f, 0x0002003f, 0x00020040, 0x00020040, 0x00020040, 0x00020040, 0x00020047, 0x00020047, 0x00020047, 0x00020047, 0x00020048, 0x00020048, 0x00020048, 0x00020048, }, + {0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x00020009, 0x00020009, 0x00020009, 0x00020009, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, }, + {0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x00020023, 0x00020023, 0x00020023, 0x00020023, 0x00020024, 0x00020024, 0x00020024, 0x00020024, 0x00020025, 0x00020025, 0x00020025, 0x00020025, }, + {0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00020030, 0x00020030, 0x00020030, 0x00020030, 0x00020031, 0x00020031, 0x00020031, 0x00020031, 0x00020032, 0x00020032, 0x00020032, 0x00020032, }, + {0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x00020016, 0x00020016, 0x00020016, 0x00020016, 0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x00020018, 0x00020018, 0x00020018, 0x00020018, }, + {0x00020049, 0x00020049, 0x00020049, 0x00020049, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004b, 0x0002004b, 0x0002004b, 0x0002004b, 0x0002004c, 0x0002004c, 0x0002004c, 0x0002004c, }, + {0x0002004d, 0x0002004d, 0x0002004d, 0x0002004d, 0x00020053, 0x00020053, 0x00020053, 0x00020053, 0x00020054, 0x00020054, 0x00020054, 0x00020054, 0x00020055, 0x00020055, 0x00020055, 0x00020055, }, + {0x00020056, 0x00020056, 0x00020056, 0x00020056, 0x00020057, 0x00020057, 0x00020057, 0x00020057, 0x00020058, 0x00020058, 0x00020058, 0x00020058, 0x00020059, 0x00020059, 0x00020059, 0x00020059, }, + {0x0002005a, 0x0002005a, 0x0002005a, 0x0002005a, 0x0002005f, 0x0002005f, 0x0002005f, 0x0002005f, 0x00020060, 0x00020060, 0x00020060, 0x00020060, 0x00020061, 0x00020061, 0x00020061, 0x00020061, }, + {0x00020033, 0x00020033, 0x00020033, 0x00020033, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002003e, }, + {0x00020062, 0x00020062, 0x00020062, 0x00020062, 0x00020063, 0x00020063, 0x00020063, 0x00020063, 0x00020064, 0x00020064, 0x00020064, 0x00020064, 0x00020065, 0x00020065, 0x00020065, 0x00020065, }, + {0x00020066, 0x00020066, 0x00020066, 0x00020066, 0x00020067, 0x00020067, 0x00020067, 0x00020067, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006d, 0x0002006d, 0x0002006d, 0x0002006d, }, + {0x0002006e, 0x0002006e, 0x0002006e, 0x0002006e, 0x0002006f, 0x0002006f, 0x0002006f, 0x0002006f, 0x00020070, 0x00020070, 0x00020070, 0x00020070, 0x00020071, 0x00020071, 0x00020071, 0x00020071, }, + {0x00020072, 0x00020072, 0x00020072, 0x00020072, 0x00020073, 0x00020073, 0x00020073, 0x00020073, 0x00020074, 0x00020074, 0x00020074, 0x00020074, 0x00020075, 0x00020075, 0x00020075, 0x00020075, }, + {0x00020076, 0x00020076, 0x00020076, 0x00020076, 0x00020077, 0x00020077, 0x00020077, 0x00020077, 0x00020078, 0x00020078, 0x00020078, 0x00020078, 0x00020079, 0x00020079, 0x00020079, 0x00020079, }, + {0x0002007a, 0x0002007a, 0x0002007a, 0x0002007a, 0x0002007b, 0x0002007b, 0x0002007b, 0x0002007b, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007d, 0x0002007d, 0x0002007d, 0x0002007d, }, + {0x0002007e, 0x0002007e, 0x0002007e, 0x0002007e, 0x0002007f, 0x0002007f, 0x0002007f, 0x0002007f, 0x00020080, 0x00020080, 0x00020080, 0x00020080, 0x00020081, 0x00020081, 0x00020081, 0x00020081, }, + {0x00020082, 0x00020082, 0x00020082, 0x00020082, 0x00020083, 0x00020083, 0x00020083, 0x00020083, 0x00020084, 0x00020084, 0x00020084, 0x00020084, 0x00020085, 0x00020085, 0x00020085, 0x00020085, }, + {0x00020086, 0x00020086, 0x00020086, 0x00020086, 0x00020087, 0x00020087, 0x00020087, 0x00020087, 0x00020088, 0x00020088, 0x00020088, 0x00020088, 0x00020089, 0x00020089, 0x00020089, 0x00020089, }, + {0x0002008a, 0x0002008a, 0x0002008a, 0x0002008a, 0x0002008b, 0x0002008b, 0x0002008b, 0x0002008b, 0x0002008c, 0x0002008c, 0x0002008c, 0x0002008c, 0x0002008d, 0x0002008d, 0x0002008d, 0x0002008d, }, + {0x0002008e, 0x0002008e, 0x0002008e, 0x0002008e, 0x0002008f, 0x0002008f, 0x0002008f, 0x0002008f, 0x00020090, 0x00020090, 0x00020090, 0x00020090, 0x00020091, 0x00020091, 0x00020091, 0x00020091, }, + {0x00020092, 0x00020092, 0x00020092, 0x00020092, 0x00020093, 0x00020093, 0x00020093, 0x00020093, 0x00020094, 0x00020094, 0x00020094, 0x00020094, 0x00020095, 0x00020095, 0x00020095, 0x00020095, }, + {0x00020096, 0x00020096, 0x00020096, 0x00020096, 0x00020097, 0x00020097, 0x00020097, 0x00020097, 0x00020098, 0x00020098, 0x00020098, 0x00020098, 0x00020099, 0x00020099, 0x00020099, 0x00020099, }, + {0x0002009a, 0x0002009a, 0x0002009a, 0x0002009a, 0x0002009b, 0x0002009b, 0x0002009b, 0x0002009b, 0x0002009c, 0x0002009c, 0x0002009c, 0x0002009c, 0x0002009d, 0x0002009d, 0x0002009d, 0x0002009d, }, + {0x0002009e, 0x0002009e, 0x0002009e, 0x0002009e, 0x0002009f, 0x0002009f, 0x0002009f, 0x0002009f, 0x000200a0, 0x000200a0, 0x000200a0, 0x000200a0, 0x000200a1, 0x000200a1, 0x000200a1, 0x000200a1, }, + {0x000200a2, 0x000200a2, 0x000200a2, 0x000200a2, 0x000200a3, 0x000200a3, 0x000200a3, 0x000200a3, 0x000200a4, 0x000200a4, 0x000200a4, 0x000200a4, 0x000200a5, 0x000200a5, 0x000200a5, 0x000200a5, }, +}; + +const uint32_t c_aauiCQMFHuffEnc11[196][2] = +{ + {0x0001, 0x0001}, {0x0004, 0x0003}, {0x0005, 0x0003}, {0x0007, 0x0002}, {0x0009, 0x0003}, {0x000c, 0x0004}, {0x000f, 0x0005}, {0x0012, 0x000d}, + {0x0014, 0x001f}, {0x0016, 0x0000}, {0x0016, 0x0001}, {0x0016, 0x0002}, {0x0016, 0x0003}, {0x0016, 0x0004}, {0x0004, 0x0004}, {0x0003, 0x0003}, + {0x0005, 0x0004}, {0x0006, 0x0003}, {0x0009, 0x0004}, {0x000b, 0x0004}, {0x000e, 0x0005}, {0x0010, 0x0007}, {0x0012, 0x000e}, {0x0014, 0x0020}, + {0x0016, 0x0005}, {0x0016, 0x0006}, {0x0016, 0x0007}, {0x0016, 0x0008}, {0x0005, 0x0005}, {0x0004, 0x0005}, {0x0006, 0x0004}, {0x0007, 0x0003}, + {0x000a, 0x0004}, {0x000c, 0x0005}, {0x000e, 0x0006}, {0x0011, 0x000a}, {0x0012, 0x000f}, {0x0015, 0x003b}, {0x0016, 0x0009}, {0x0016, 0x000a}, + {0x0016, 0x000b}, {0x0016, 0x000c}, {0x0007, 0x0004}, {0x0006, 0x0005}, {0x0007, 0x0005}, {0x0009, 0x0005}, {0x000b, 0x0005}, {0x000d, 0x0005}, + {0x000f, 0x0006}, {0x0012, 0x0010}, {0x0014, 0x0021}, {0x0016, 0x000d}, {0x0016, 0x000e}, {0x0016, 0x000f}, {0x0016, 0x0010}, {0x0016, 0x0011}, + {0x0009, 0x0006}, {0x0009, 0x0007}, {0x000a, 0x0005}, {0x000b, 0x0006}, {0x000d, 0x0006}, {0x000f, 0x0007}, {0x0011, 0x000b}, {0x0013, 0x0017}, + {0x0014, 0x0022}, {0x0016, 0x0012}, {0x0016, 0x0013}, {0x0016, 0x0014}, {0x0016, 0x0015}, {0x0016, 0x0016}, {0x000c, 0x0006}, {0x000b, 0x0007}, + {0x000c, 0x0007}, {0x000d, 0x0007}, {0x000e, 0x0007}, {0x0010, 0x0008}, {0x0012, 0x0011}, {0x0014, 0x0023}, {0x0015, 0x003c}, {0x0016, 0x0017}, + {0x0016, 0x0018}, {0x0016, 0x0019}, {0x0016, 0x001a}, {0x0016, 0x001b}, {0x000f, 0x0008}, {0x000e, 0x0008}, {0x000e, 0x0009}, {0x000f, 0x0009}, + {0x0011, 0x000c}, {0x0013, 0x0018}, {0x0014, 0x0024}, {0x0016, 0x001c}, {0x0016, 0x001d}, {0x0016, 0x001e}, {0x0016, 0x001f}, {0x0016, 0x0020}, + {0x0016, 0x0021}, {0x0016, 0x0022}, {0x0011, 0x000d}, {0x0010, 0x0009}, {0x0012, 0x0012}, {0x0012, 0x0013}, {0x0014, 0x0025}, {0x0015, 0x003d}, + {0x0014, 0x0026}, {0x0016, 0x0023}, {0x0016, 0x0024}, {0x0016, 0x0025}, {0x0016, 0x0026}, {0x0016, 0x0027}, {0x0016, 0x0028}, {0x0016, 0x0029}, + {0x0014, 0x0027}, {0x0013, 0x0019}, {0x0014, 0x0028}, {0x0014, 0x0029}, {0x0014, 0x002a}, {0x0016, 0x002a}, {0x0016, 0x002b}, {0x0016, 0x002c}, + {0x0016, 0x002d}, {0x0016, 0x002e}, {0x0016, 0x002f}, {0x0016, 0x0030}, {0x0016, 0x0031}, {0x0016, 0x0032}, {0x0014, 0x002b}, {0x0014, 0x002c}, + {0x0014, 0x002d}, {0x0016, 0x0033}, {0x0016, 0x0034}, {0x0016, 0x0035}, {0x0016, 0x0036}, {0x0016, 0x0037}, {0x0016, 0x0038}, {0x0016, 0x0039}, + {0x0016, 0x003a}, {0x0016, 0x003b}, {0x0016, 0x003c}, {0x0016, 0x003d}, {0x0016, 0x003e}, {0x0016, 0x003f}, {0x0016, 0x0040}, {0x0016, 0x0041}, + {0x0016, 0x0042}, {0x0016, 0x0043}, {0x0016, 0x0044}, {0x0016, 0x0045}, {0x0016, 0x0046}, {0x0016, 0x0047}, {0x0016, 0x0048}, {0x0016, 0x0049}, + {0x0016, 0x004a}, {0x0016, 0x004b}, {0x0016, 0x004c}, {0x0016, 0x004d}, {0x0016, 0x004e}, {0x0016, 0x004f}, {0x0016, 0x0050}, {0x0016, 0x0051}, + {0x0016, 0x0052}, {0x0016, 0x0053}, {0x0016, 0x0054}, {0x0016, 0x0055}, {0x0016, 0x0056}, {0x0016, 0x0057}, {0x0016, 0x0058}, {0x0016, 0x0059}, + {0x0016, 0x005a}, {0x0016, 0x005b}, {0x0016, 0x005c}, {0x0016, 0x005d}, {0x0016, 0x005e}, {0x0016, 0x005f}, {0x0016, 0x0060}, {0x0016, 0x0061}, + {0x0016, 0x0062}, {0x0016, 0x0063}, {0x0016, 0x0064}, {0x0016, 0x0065}, {0x0016, 0x0066}, {0x0016, 0x0067}, {0x0016, 0x0068}, {0x0016, 0x0069}, + {0x0016, 0x006a}, {0x0016, 0x006b}, {0x0016, 0x006c}, {0x0016, 0x006d}, {0x0016, 0x006e}, {0x0016, 0x006f}, {0x0016, 0x0070}, {0x0016, 0x0071}, + {0x0016, 0x0072}, {0x0016, 0x0073}, {0x0016, 0x0074}, {0x0016, 0x0075}, + +}; + +const uint32_t c_aauiCQMFHuffDec11[50][16] = +{ + {0x0003ffff, 0x0001ffff, 0x0002ffff, 0x00000001, 0x0000000e, 0x0000001d, 0x0001000f, 0x0001000f, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002b, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, }, + {0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, }, + {0x0007ffff, 0x0005ffff, 0x0004ffff, 0x0006ffff, 0x00010003, 0x00010003, 0x0001001f, 0x0001001f, 0x0001002a, 0x0001002a, 0x0001002c, 0x0001002c, 0x00020011, 0x00020011, 0x00020011, 0x00020011, }, + {0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, }, + {0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x0002003a, 0x0002003a, 0x0002003a, 0x0002003a, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, }, + {0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, }, + {0x000bffff, 0x000affff, 0x0008ffff, 0x0009ffff, 0x00000005, 0x00000021, 0x00000046, 0x00000048, 0x00010013, 0x00010013, 0x0001002e, 0x0001002e, 0x0001003b, 0x0001003b, 0x00010047, 0x00010047, }, + {0x00020055, 0x00020055, 0x00020055, 0x00020055, 0x00020056, 0x00020056, 0x00020056, 0x00020056, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, }, + {0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, }, + {0x00010054, 0x00010054, 0x00010057, 0x00010057, 0x00020014, 0x00020014, 0x00020014, 0x00020014, 0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, }, + {0x0014ffff, 0x0011ffff, 0x0010ffff, 0x000effff, 0x000fffff, 0x000cffff, 0x000dffff, 0x00000015, 0x0000004b, 0x00000063, 0x00010006, 0x00010006, 0x00010030, 0x00010030, 0x0001003d, 0x0001003d, }, + {0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, }, + {0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030062, 0x00030062, 0x00030062, 0x00030062, 0x00030062, 0x00030062, 0x00030062, 0x00030062, }, + {0x00010059, 0x00010059, 0x00010071, 0x00010071, 0x00020007, 0x00020007, 0x00020007, 0x00020007, 0x00020016, 0x00020016, 0x00020016, 0x00020016, 0x00020024, 0x00020024, 0x00020024, 0x00020024, }, + {0x00020031, 0x00020031, 0x00020031, 0x00020031, 0x0002004c, 0x0002004c, 0x0002004c, 0x0002004c, 0x00020064, 0x00020064, 0x00020064, 0x00020064, 0x00020065, 0x00020065, 0x00020065, 0x00020065, }, + {0x00000017, 0x00000032, 0x00000040, 0x0000004d, 0x0000005a, 0x00000066, 0x00000068, 0x00000070, 0x00000072, 0x00000073, 0x00000074, 0x0000007e, 0x0000007f, 0x00000080, 0x0001003f, 0x0001003f, }, + {0x0025ffff, 0x0026ffff, 0x0027ffff, 0x0028ffff, 0x0029ffff, 0x002affff, 0x002bffff, 0x002cffff, 0x002dffff, 0x002effff, 0x002fffff, 0x0030ffff, 0x0031ffff, 0x0013ffff, 0x0012ffff, 0x00000008, }, + {0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, }, + {0x000200c2, 0x000200c2, 0x000200c2, 0x000200c2, 0x000200c3, 0x000200c3, 0x000200c3, 0x000200c3, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, }, + {0x001affff, 0x0019ffff, 0x0015ffff, 0x0018ffff, 0x001dffff, 0x0016ffff, 0x0017ffff, 0x001bffff, 0x001cffff, 0x001effff, 0x001fffff, 0x0020ffff, 0x0021ffff, 0x0022ffff, 0x0023ffff, 0x0024ffff, }, + {0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00020027, 0x00020027, 0x00020027, 0x00020027, 0x00020028, 0x00020028, 0x00020028, 0x00020028, }, + {0x00020043, 0x00020043, 0x00020043, 0x00020043, 0x00020044, 0x00020044, 0x00020044, 0x00020044, 0x00020045, 0x00020045, 0x00020045, 0x00020045, 0x0002004f, 0x0002004f, 0x0002004f, 0x0002004f, }, + {0x00020050, 0x00020050, 0x00020050, 0x00020050, 0x00020051, 0x00020051, 0x00020051, 0x00020051, 0x00020052, 0x00020052, 0x00020052, 0x00020052, 0x00020053, 0x00020053, 0x00020053, 0x00020053, }, + {0x00020029, 0x00020029, 0x00020029, 0x00020029, 0x00020033, 0x00020033, 0x00020033, 0x00020033, 0x00020034, 0x00020034, 0x00020034, 0x00020034, 0x00020035, 0x00020035, 0x00020035, 0x00020035, }, + {0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, }, + {0x00020009, 0x00020009, 0x00020009, 0x00020009, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, }, + {0x0002005b, 0x0002005b, 0x0002005b, 0x0002005b, 0x0002005c, 0x0002005c, 0x0002005c, 0x0002005c, 0x0002005d, 0x0002005d, 0x0002005d, 0x0002005d, 0x0002005e, 0x0002005e, 0x0002005e, 0x0002005e, }, + {0x0002005f, 0x0002005f, 0x0002005f, 0x0002005f, 0x00020060, 0x00020060, 0x00020060, 0x00020060, 0x00020061, 0x00020061, 0x00020061, 0x00020061, 0x00020069, 0x00020069, 0x00020069, 0x00020069, }, + {0x00020036, 0x00020036, 0x00020036, 0x00020036, 0x00020037, 0x00020037, 0x00020037, 0x00020037, 0x00020041, 0x00020041, 0x00020041, 0x00020041, 0x00020042, 0x00020042, 0x00020042, 0x00020042, }, + {0x0002006a, 0x0002006a, 0x0002006a, 0x0002006a, 0x0002006b, 0x0002006b, 0x0002006b, 0x0002006b, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006d, 0x0002006d, 0x0002006d, 0x0002006d, }, + {0x0002006e, 0x0002006e, 0x0002006e, 0x0002006e, 0x0002006f, 0x0002006f, 0x0002006f, 0x0002006f, 0x00020075, 0x00020075, 0x00020075, 0x00020075, 0x00020076, 0x00020076, 0x00020076, 0x00020076, }, + {0x00020077, 0x00020077, 0x00020077, 0x00020077, 0x00020078, 0x00020078, 0x00020078, 0x00020078, 0x00020079, 0x00020079, 0x00020079, 0x00020079, 0x0002007a, 0x0002007a, 0x0002007a, 0x0002007a, }, + {0x0002007b, 0x0002007b, 0x0002007b, 0x0002007b, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007d, 0x0002007d, 0x0002007d, 0x0002007d, 0x00020081, 0x00020081, 0x00020081, 0x00020081, }, + {0x00020082, 0x00020082, 0x00020082, 0x00020082, 0x00020083, 0x00020083, 0x00020083, 0x00020083, 0x00020084, 0x00020084, 0x00020084, 0x00020084, 0x00020085, 0x00020085, 0x00020085, 0x00020085, }, + {0x00020086, 0x00020086, 0x00020086, 0x00020086, 0x00020087, 0x00020087, 0x00020087, 0x00020087, 0x00020088, 0x00020088, 0x00020088, 0x00020088, 0x00020089, 0x00020089, 0x00020089, 0x00020089, }, + {0x0002008a, 0x0002008a, 0x0002008a, 0x0002008a, 0x0002008b, 0x0002008b, 0x0002008b, 0x0002008b, 0x0002008c, 0x0002008c, 0x0002008c, 0x0002008c, 0x0002008d, 0x0002008d, 0x0002008d, 0x0002008d, }, + {0x0002008e, 0x0002008e, 0x0002008e, 0x0002008e, 0x0002008f, 0x0002008f, 0x0002008f, 0x0002008f, 0x00020090, 0x00020090, 0x00020090, 0x00020090, 0x00020091, 0x00020091, 0x00020091, 0x00020091, }, + {0x00020092, 0x00020092, 0x00020092, 0x00020092, 0x00020093, 0x00020093, 0x00020093, 0x00020093, 0x00020094, 0x00020094, 0x00020094, 0x00020094, 0x00020095, 0x00020095, 0x00020095, 0x00020095, }, + {0x00020096, 0x00020096, 0x00020096, 0x00020096, 0x00020097, 0x00020097, 0x00020097, 0x00020097, 0x00020098, 0x00020098, 0x00020098, 0x00020098, 0x00020099, 0x00020099, 0x00020099, 0x00020099, }, + {0x0002009a, 0x0002009a, 0x0002009a, 0x0002009a, 0x0002009b, 0x0002009b, 0x0002009b, 0x0002009b, 0x0002009c, 0x0002009c, 0x0002009c, 0x0002009c, 0x0002009d, 0x0002009d, 0x0002009d, 0x0002009d, }, + {0x0002009e, 0x0002009e, 0x0002009e, 0x0002009e, 0x0002009f, 0x0002009f, 0x0002009f, 0x0002009f, 0x000200a0, 0x000200a0, 0x000200a0, 0x000200a0, 0x000200a1, 0x000200a1, 0x000200a1, 0x000200a1, }, + {0x000200a2, 0x000200a2, 0x000200a2, 0x000200a2, 0x000200a3, 0x000200a3, 0x000200a3, 0x000200a3, 0x000200a4, 0x000200a4, 0x000200a4, 0x000200a4, 0x000200a5, 0x000200a5, 0x000200a5, 0x000200a5, }, + {0x000200a6, 0x000200a6, 0x000200a6, 0x000200a6, 0x000200a7, 0x000200a7, 0x000200a7, 0x000200a7, 0x000200a8, 0x000200a8, 0x000200a8, 0x000200a8, 0x000200a9, 0x000200a9, 0x000200a9, 0x000200a9, }, + {0x000200aa, 0x000200aa, 0x000200aa, 0x000200aa, 0x000200ab, 0x000200ab, 0x000200ab, 0x000200ab, 0x000200ac, 0x000200ac, 0x000200ac, 0x000200ac, 0x000200ad, 0x000200ad, 0x000200ad, 0x000200ad, }, + {0x000200ae, 0x000200ae, 0x000200ae, 0x000200ae, 0x000200af, 0x000200af, 0x000200af, 0x000200af, 0x000200b0, 0x000200b0, 0x000200b0, 0x000200b0, 0x000200b1, 0x000200b1, 0x000200b1, 0x000200b1, }, + {0x000200b2, 0x000200b2, 0x000200b2, 0x000200b2, 0x000200b3, 0x000200b3, 0x000200b3, 0x000200b3, 0x000200b4, 0x000200b4, 0x000200b4, 0x000200b4, 0x000200b5, 0x000200b5, 0x000200b5, 0x000200b5, }, + {0x000200b6, 0x000200b6, 0x000200b6, 0x000200b6, 0x000200b7, 0x000200b7, 0x000200b7, 0x000200b7, 0x000200b8, 0x000200b8, 0x000200b8, 0x000200b8, 0x000200b9, 0x000200b9, 0x000200b9, 0x000200b9, }, + {0x000200ba, 0x000200ba, 0x000200ba, 0x000200ba, 0x000200bb, 0x000200bb, 0x000200bb, 0x000200bb, 0x000200bc, 0x000200bc, 0x000200bc, 0x000200bc, 0x000200bd, 0x000200bd, 0x000200bd, 0x000200bd, }, + {0x000200be, 0x000200be, 0x000200be, 0x000200be, 0x000200bf, 0x000200bf, 0x000200bf, 0x000200bf, 0x000200c0, 0x000200c0, 0x000200c0, 0x000200c0, 0x000200c1, 0x000200c1, 0x000200c1, 0x000200c1, }, +}; + +const uint32_t c_aauiCQMFHuffEnc12[289][2] = +{ + {0x0001, 0x0001}, {0x0004, 0x0004}, {0x0005, 0x0004}, {0x0007, 0x0004}, {0x0008, 0x0002}, {0x000b, 0x0004}, {0x000e, 0x0006}, {0x0010, 0x0009}, + {0x0012, 0x0014}, {0x0013, 0x001f}, {0x0016, 0x0000}, {0x0016, 0x0001}, {0x0016, 0x0002}, {0x0016, 0x0003}, {0x0016, 0x0004}, {0x0016, 0x0005}, + {0x0016, 0x0006}, {0x0004, 0x0005}, {0x0004, 0x0006}, {0x0005, 0x0005}, {0x0006, 0x0003}, {0x0008, 0x0003}, {0x000a, 0x0004}, {0x000d, 0x0006}, + {0x000f, 0x0008}, {0x0011, 0x000c}, {0x0013, 0x0020}, {0x0016, 0x0007}, {0x0015, 0x0063}, {0x0016, 0x0008}, {0x0016, 0x0009}, {0x0016, 0x000a}, + {0x0016, 0x000b}, {0x0016, 0x000c}, {0x0005, 0x0006}, {0x0004, 0x0007}, {0x0005, 0x0007}, {0x0006, 0x0004}, {0x0008, 0x0004}, {0x000b, 0x0005}, + {0x000d, 0x0007}, {0x0010, 0x000a}, {0x0012, 0x0015}, {0x0015, 0x0064}, {0x0016, 0x000d}, {0x0016, 0x000e}, {0x0016, 0x000f}, {0x0016, 0x0010}, + {0x0016, 0x0011}, {0x0016, 0x0012}, {0x0016, 0x0013}, {0x0006, 0x0005}, {0x0006, 0x0006}, {0x0006, 0x0007}, {0x0008, 0x0005}, {0x000a, 0x0005}, + {0x000c, 0x0005}, {0x000e, 0x0007}, {0x0010, 0x000b}, {0x0012, 0x0016}, {0x0014, 0x0037}, {0x0015, 0x0065}, {0x0016, 0x0014}, {0x0016, 0x0015}, + {0x0016, 0x0016}, {0x0016, 0x0017}, {0x0016, 0x0018}, {0x0016, 0x0019}, {0x0008, 0x0006}, {0x0007, 0x0005}, {0x0008, 0x0007}, {0x000a, 0x0006}, + {0x000c, 0x0006}, {0x000e, 0x0008}, {0x0010, 0x000c}, {0x0011, 0x000d}, {0x0013, 0x0021}, {0x0015, 0x0066}, {0x0016, 0x001a}, {0x0016, 0x001b}, + {0x0016, 0x001c}, {0x0016, 0x001d}, {0x0016, 0x001e}, {0x0016, 0x001f}, {0x0016, 0x0020}, {0x000b, 0x0006}, {0x000a, 0x0007}, {0x000b, 0x0007}, + {0x000c, 0x0007}, {0x000e, 0x0009}, {0x000f, 0x0009}, {0x0011, 0x000e}, {0x0013, 0x0022}, {0x0015, 0x0067}, {0x0015, 0x0068}, {0x0016, 0x0021}, + {0x0016, 0x0022}, {0x0016, 0x0023}, {0x0016, 0x0024}, {0x0016, 0x0025}, {0x0016, 0x0026}, {0x0016, 0x0027}, {0x000e, 0x000a}, {0x000d, 0x0008}, + {0x000d, 0x0009}, {0x000e, 0x000b}, {0x000f, 0x000a}, {0x0011, 0x000f}, {0x0013, 0x0023}, {0x0014, 0x0038}, {0x0016, 0x0028}, {0x0016, 0x0029}, + {0x0016, 0x002a}, {0x0016, 0x002b}, {0x0016, 0x002c}, {0x0016, 0x002d}, {0x0016, 0x002e}, {0x0016, 0x002f}, {0x0016, 0x0030}, {0x0010, 0x000d}, + {0x000f, 0x000b}, {0x0010, 0x000e}, {0x0010, 0x000f}, {0x0012, 0x0017}, {0x0013, 0x0024}, {0x0014, 0x0039}, {0x0016, 0x0031}, {0x0016, 0x0032}, + {0x0016, 0x0033}, {0x0016, 0x0034}, {0x0016, 0x0035}, {0x0016, 0x0036}, {0x0016, 0x0037}, {0x0016, 0x0038}, {0x0016, 0x0039}, {0x0016, 0x003a}, + {0x0013, 0x0025}, {0x0011, 0x0010}, {0x0011, 0x0011}, {0x0013, 0x0026}, {0x0013, 0x0027}, {0x0014, 0x003a}, {0x0014, 0x003b}, {0x0016, 0x003b}, + {0x0016, 0x003c}, {0x0016, 0x003d}, {0x0016, 0x003e}, {0x0016, 0x003f}, {0x0016, 0x0040}, {0x0016, 0x0041}, {0x0016, 0x0042}, {0x0016, 0x0043}, + {0x0016, 0x0044}, {0x0015, 0x0069}, {0x0014, 0x003c}, {0x0014, 0x003d}, {0x0015, 0x006a}, {0x0015, 0x006b}, {0x0015, 0x006c}, {0x0016, 0x0045}, + {0x0016, 0x0046}, {0x0016, 0x0047}, {0x0016, 0x0048}, {0x0016, 0x0049}, {0x0016, 0x004a}, {0x0016, 0x004b}, {0x0016, 0x004c}, {0x0016, 0x004d}, + {0x0016, 0x004e}, {0x0016, 0x004f}, {0x0016, 0x0050}, {0x0016, 0x0051}, {0x0015, 0x006d}, {0x0016, 0x0052}, {0x0016, 0x0053}, {0x0016, 0x0054}, + {0x0016, 0x0055}, {0x0016, 0x0056}, {0x0016, 0x0057}, {0x0016, 0x0058}, {0x0016, 0x0059}, {0x0016, 0x005a}, {0x0016, 0x005b}, {0x0016, 0x005c}, + {0x0016, 0x005d}, {0x0016, 0x005e}, {0x0016, 0x005f}, {0x0016, 0x0060}, {0x0016, 0x0061}, {0x0016, 0x0062}, {0x0016, 0x0063}, {0x0016, 0x0064}, + {0x0016, 0x0065}, {0x0016, 0x0066}, {0x0016, 0x0067}, {0x0016, 0x0068}, {0x0016, 0x0069}, {0x0016, 0x006a}, {0x0016, 0x006b}, {0x0016, 0x006c}, + {0x0016, 0x006d}, {0x0016, 0x006e}, {0x0016, 0x006f}, {0x0016, 0x0070}, {0x0016, 0x0071}, {0x0016, 0x0072}, {0x0016, 0x0073}, {0x0016, 0x0074}, + {0x0016, 0x0075}, {0x0016, 0x0076}, {0x0016, 0x0077}, {0x0016, 0x0078}, {0x0016, 0x0079}, {0x0016, 0x007a}, {0x0016, 0x007b}, {0x0016, 0x007c}, + {0x0016, 0x007d}, {0x0016, 0x007e}, {0x0016, 0x007f}, {0x0016, 0x0080}, {0x0016, 0x0081}, {0x0016, 0x0082}, {0x0016, 0x0083}, {0x0016, 0x0084}, + {0x0016, 0x0085}, {0x0016, 0x0086}, {0x0016, 0x0087}, {0x0016, 0x0088}, {0x0016, 0x0089}, {0x0016, 0x008a}, {0x0016, 0x008b}, {0x0016, 0x008c}, + {0x0016, 0x008d}, {0x0016, 0x008e}, {0x0016, 0x008f}, {0x0016, 0x0090}, {0x0016, 0x0091}, {0x0016, 0x0092}, {0x0016, 0x0093}, {0x0016, 0x0094}, + {0x0016, 0x0095}, {0x0016, 0x0096}, {0x0016, 0x0097}, {0x0016, 0x0098}, {0x0016, 0x0099}, {0x0016, 0x009a}, {0x0016, 0x009b}, {0x0016, 0x009c}, + {0x0016, 0x009d}, {0x0016, 0x009e}, {0x0016, 0x009f}, {0x0016, 0x00a0}, {0x0016, 0x00a1}, {0x0016, 0x00a2}, {0x0016, 0x00a3}, {0x0016, 0x00a4}, + {0x0016, 0x00a5}, {0x0016, 0x00a6}, {0x0016, 0x00a7}, {0x0016, 0x00a8}, {0x0016, 0x00a9}, {0x0016, 0x00aa}, {0x0016, 0x00ab}, {0x0016, 0x00ac}, + {0x0016, 0x00ad}, {0x0016, 0x00ae}, {0x0016, 0x00af}, {0x0016, 0x00b0}, {0x0016, 0x00b1}, {0x0016, 0x00b2}, {0x0016, 0x00b3}, {0x0016, 0x00b4}, + {0x0016, 0x00b5}, {0x0016, 0x00b6}, {0x0016, 0x00b7}, {0x0016, 0x00b8}, {0x0016, 0x00b9}, {0x0016, 0x00ba}, {0x0016, 0x00bb}, {0x0016, 0x00bc}, + {0x0016, 0x00bd}, {0x0016, 0x00be}, {0x0016, 0x00bf}, {0x0016, 0x00c0}, {0x0016, 0x00c1}, {0x0016, 0x00c2}, {0x0016, 0x00c3}, {0x0016, 0x00c4}, + {0x0016, 0x00c5}, + +}; + +const uint32_t c_aauiCQMFHuffDec12[76][16] = +{ + {0x0003ffff, 0x0004ffff, 0x0001ffff, 0x0002ffff, 0x00000001, 0x00000011, 0x00000012, 0x00000023, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, }, + {0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, }, + {0x0006ffff, 0x0005ffff, 0x00000004, 0x00000015, 0x00000026, 0x00000036, 0x00000044, 0x00000046, 0x00010003, 0x00010003, 0x00010045, 0x00010045, 0x00020014, 0x00020014, 0x00020014, 0x00020014, }, + {0x00020025, 0x00020025, 0x00020025, 0x00020025, 0x00020033, 0x00020033, 0x00020033, 0x00020033, 0x00020034, 0x00020034, 0x00020034, 0x00020034, 0x00020035, 0x00020035, 0x00020035, 0x00020035, }, + {0x00020016, 0x00020016, 0x00020016, 0x00020016, 0x00020037, 0x00020037, 0x00020037, 0x00020037, 0x00020047, 0x00020047, 0x00020047, 0x00020047, 0x00020056, 0x00020056, 0x00020056, 0x00020056, }, + {0x000bffff, 0x0009ffff, 0x000affff, 0x0007ffff, 0x0008ffff, 0x00000038, 0x00000048, 0x00000058, 0x00010005, 0x00010005, 0x00010027, 0x00010027, 0x00010055, 0x00010055, 0x00010057, 0x00010057, }, + {0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, }, + {0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, }, + {0x00010018, 0x00010018, 0x0001005a, 0x0001005a, 0x0001006a, 0x0001006a, 0x00010078, 0x00010078, 0x00020006, 0x00020006, 0x00020006, 0x00020006, 0x00020039, 0x00020039, 0x00020039, 0x00020039, }, + {0x00020049, 0x00020049, 0x00020049, 0x00020049, 0x00020059, 0x00020059, 0x00020059, 0x00020059, 0x00020066, 0x00020066, 0x00020066, 0x00020066, 0x00020069, 0x00020069, 0x00020069, 0x00020069, }, + {0x0018ffff, 0x0029ffff, 0x003affff, 0x0010ffff, 0x0011ffff, 0x000fffff, 0x000cffff, 0x000dffff, 0x000effff, 0x00000007, 0x00000029, 0x0000003a, 0x0000004a, 0x00000077, 0x00000079, 0x0000007a, }, + {0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, }, + {0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, }, + {0x00030089, 0x00030089, 0x00030089, 0x00030089, 0x00030089, 0x00030089, 0x00030089, 0x00030089, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, }, + {0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002003b, 0x0002003b, 0x0002003b, 0x0002003b, 0x0002007b, 0x0002007b, 0x0002007b, 0x0002007b, }, + {0x004bffff, 0x0012ffff, 0x0015ffff, 0x0013ffff, 0x0014ffff, 0x0016ffff, 0x0017ffff, 0x0000003c, 0x0000006d, 0x0000007d, 0x0000008d, 0x0000008e, 0x0000009a, 0x0000009b, 0x00010009, 0x00010009, }, + {0x0001001a, 0x0001001a, 0x0001004c, 0x0001004c, 0x0001005c, 0x0001005c, 0x0001006c, 0x0001006c, 0x0001007c, 0x0001007c, 0x00010088, 0x00010088, 0x0001008b, 0x0001008b, 0x0001008c, 0x0001008c, }, + {0x0002011f, 0x0002011f, 0x0002011f, 0x0002011f, 0x00020120, 0x00020120, 0x00020120, 0x00020120, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, }, + {0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, }, + {0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x00030099, 0x00030099, 0x00030099, 0x00030099, 0x00030099, 0x00030099, 0x00030099, 0x00030099, }, + {0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, }, + {0x0003009c, 0x0003009c, 0x0003009c, 0x0003009c, 0x0003009c, 0x0003009c, 0x0003009c, 0x0003009c, 0x0003009d, 0x0003009d, 0x0003009d, 0x0003009d, 0x0003009d, 0x0003009d, 0x0003009d, 0x0003009d, }, + {0x0003009e, 0x0003009e, 0x0003009e, 0x0003009e, 0x0003009e, 0x0003009e, 0x0003009e, 0x0003009e, 0x000300ac, 0x000300ac, 0x000300ac, 0x000300ac, 0x000300ac, 0x000300ac, 0x000300ac, 0x000300ac, }, + {0x0025ffff, 0x001fffff, 0x0019ffff, 0x0020ffff, 0x001effff, 0x0021ffff, 0x001affff, 0x001bffff, 0x001cffff, 0x001dffff, 0x0022ffff, 0x0023ffff, 0x0024ffff, 0x0026ffff, 0x0027ffff, 0x0028ffff, }, + {0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x00020020, 0x00020020, 0x00020020, 0x00020020, }, + {0x00020042, 0x00020042, 0x00020042, 0x00020042, 0x00020043, 0x00020043, 0x00020043, 0x00020043, 0x0002004e, 0x0002004e, 0x0002004e, 0x0002004e, 0x0002004f, 0x0002004f, 0x0002004f, 0x0002004f, }, + {0x00020050, 0x00020050, 0x00020050, 0x00020050, 0x00020051, 0x00020051, 0x00020051, 0x00020051, 0x00020052, 0x00020052, 0x00020052, 0x00020052, 0x00020053, 0x00020053, 0x00020053, 0x00020053, }, + {0x00020054, 0x00020054, 0x00020054, 0x00020054, 0x0002005f, 0x0002005f, 0x0002005f, 0x0002005f, 0x00020060, 0x00020060, 0x00020060, 0x00020060, 0x00020061, 0x00020061, 0x00020061, 0x00020061, }, + {0x00020062, 0x00020062, 0x00020062, 0x00020062, 0x00020063, 0x00020063, 0x00020063, 0x00020063, 0x00020064, 0x00020064, 0x00020064, 0x00020064, 0x00020065, 0x00020065, 0x00020065, 0x00020065, }, + {0x0002002f, 0x0002002f, 0x0002002f, 0x0002002f, 0x00020030, 0x00020030, 0x00020030, 0x00020030, 0x00020031, 0x00020031, 0x00020031, 0x00020031, 0x00020032, 0x00020032, 0x00020032, 0x00020032, }, + {0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, }, + {0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, }, + {0x0002003e, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002003f, 0x0002003f, 0x0002003f, 0x0002003f, 0x00020040, 0x00020040, 0x00020040, 0x00020040, 0x00020041, 0x00020041, 0x00020041, 0x00020041, }, + {0x0002006e, 0x0002006e, 0x0002006e, 0x0002006e, 0x0002006f, 0x0002006f, 0x0002006f, 0x0002006f, 0x00020070, 0x00020070, 0x00020070, 0x00020070, 0x00020071, 0x00020071, 0x00020071, 0x00020071, }, + {0x00020072, 0x00020072, 0x00020072, 0x00020072, 0x00020073, 0x00020073, 0x00020073, 0x00020073, 0x00020074, 0x00020074, 0x00020074, 0x00020074, 0x00020075, 0x00020075, 0x00020075, 0x00020075, }, + {0x00020076, 0x00020076, 0x00020076, 0x00020076, 0x0002007e, 0x0002007e, 0x0002007e, 0x0002007e, 0x0002007f, 0x0002007f, 0x0002007f, 0x0002007f, 0x00020080, 0x00020080, 0x00020080, 0x00020080, }, + {0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, }, + {0x00020081, 0x00020081, 0x00020081, 0x00020081, 0x00020082, 0x00020082, 0x00020082, 0x00020082, 0x00020083, 0x00020083, 0x00020083, 0x00020083, 0x00020084, 0x00020084, 0x00020084, 0x00020084, }, + {0x00020085, 0x00020085, 0x00020085, 0x00020085, 0x00020086, 0x00020086, 0x00020086, 0x00020086, 0x00020087, 0x00020087, 0x00020087, 0x00020087, 0x0002008f, 0x0002008f, 0x0002008f, 0x0002008f, }, + {0x00020090, 0x00020090, 0x00020090, 0x00020090, 0x00020091, 0x00020091, 0x00020091, 0x00020091, 0x00020092, 0x00020092, 0x00020092, 0x00020092, 0x00020093, 0x00020093, 0x00020093, 0x00020093, }, + {0x002affff, 0x002bffff, 0x002cffff, 0x002dffff, 0x002effff, 0x002fffff, 0x0030ffff, 0x0031ffff, 0x0032ffff, 0x0033ffff, 0x0034ffff, 0x0035ffff, 0x0036ffff, 0x0037ffff, 0x0038ffff, 0x0039ffff, }, + {0x00020094, 0x00020094, 0x00020094, 0x00020094, 0x00020095, 0x00020095, 0x00020095, 0x00020095, 0x00020096, 0x00020096, 0x00020096, 0x00020096, 0x00020097, 0x00020097, 0x00020097, 0x00020097, }, + {0x00020098, 0x00020098, 0x00020098, 0x00020098, 0x0002009f, 0x0002009f, 0x0002009f, 0x0002009f, 0x000200a0, 0x000200a0, 0x000200a0, 0x000200a0, 0x000200a1, 0x000200a1, 0x000200a1, 0x000200a1, }, + {0x000200a2, 0x000200a2, 0x000200a2, 0x000200a2, 0x000200a3, 0x000200a3, 0x000200a3, 0x000200a3, 0x000200a4, 0x000200a4, 0x000200a4, 0x000200a4, 0x000200a5, 0x000200a5, 0x000200a5, 0x000200a5, }, + {0x000200a6, 0x000200a6, 0x000200a6, 0x000200a6, 0x000200a7, 0x000200a7, 0x000200a7, 0x000200a7, 0x000200a8, 0x000200a8, 0x000200a8, 0x000200a8, 0x000200a9, 0x000200a9, 0x000200a9, 0x000200a9, }, + {0x000200aa, 0x000200aa, 0x000200aa, 0x000200aa, 0x000200ab, 0x000200ab, 0x000200ab, 0x000200ab, 0x000200ad, 0x000200ad, 0x000200ad, 0x000200ad, 0x000200ae, 0x000200ae, 0x000200ae, 0x000200ae, }, + {0x000200af, 0x000200af, 0x000200af, 0x000200af, 0x000200b0, 0x000200b0, 0x000200b0, 0x000200b0, 0x000200b1, 0x000200b1, 0x000200b1, 0x000200b1, 0x000200b2, 0x000200b2, 0x000200b2, 0x000200b2, }, + {0x000200b3, 0x000200b3, 0x000200b3, 0x000200b3, 0x000200b4, 0x000200b4, 0x000200b4, 0x000200b4, 0x000200b5, 0x000200b5, 0x000200b5, 0x000200b5, 0x000200b6, 0x000200b6, 0x000200b6, 0x000200b6, }, + {0x000200b7, 0x000200b7, 0x000200b7, 0x000200b7, 0x000200b8, 0x000200b8, 0x000200b8, 0x000200b8, 0x000200b9, 0x000200b9, 0x000200b9, 0x000200b9, 0x000200ba, 0x000200ba, 0x000200ba, 0x000200ba, }, + {0x000200bb, 0x000200bb, 0x000200bb, 0x000200bb, 0x000200bc, 0x000200bc, 0x000200bc, 0x000200bc, 0x000200bd, 0x000200bd, 0x000200bd, 0x000200bd, 0x000200be, 0x000200be, 0x000200be, 0x000200be, }, + {0x000200bf, 0x000200bf, 0x000200bf, 0x000200bf, 0x000200c0, 0x000200c0, 0x000200c0, 0x000200c0, 0x000200c1, 0x000200c1, 0x000200c1, 0x000200c1, 0x000200c2, 0x000200c2, 0x000200c2, 0x000200c2, }, + {0x000200c3, 0x000200c3, 0x000200c3, 0x000200c3, 0x000200c4, 0x000200c4, 0x000200c4, 0x000200c4, 0x000200c5, 0x000200c5, 0x000200c5, 0x000200c5, 0x000200c6, 0x000200c6, 0x000200c6, 0x000200c6, }, + {0x000200c7, 0x000200c7, 0x000200c7, 0x000200c7, 0x000200c8, 0x000200c8, 0x000200c8, 0x000200c8, 0x000200c9, 0x000200c9, 0x000200c9, 0x000200c9, 0x000200ca, 0x000200ca, 0x000200ca, 0x000200ca, }, + {0x000200cb, 0x000200cb, 0x000200cb, 0x000200cb, 0x000200cc, 0x000200cc, 0x000200cc, 0x000200cc, 0x000200cd, 0x000200cd, 0x000200cd, 0x000200cd, 0x000200ce, 0x000200ce, 0x000200ce, 0x000200ce, }, + {0x000200cf, 0x000200cf, 0x000200cf, 0x000200cf, 0x000200d0, 0x000200d0, 0x000200d0, 0x000200d0, 0x000200d1, 0x000200d1, 0x000200d1, 0x000200d1, 0x000200d2, 0x000200d2, 0x000200d2, 0x000200d2, }, + {0x000200d3, 0x000200d3, 0x000200d3, 0x000200d3, 0x000200d4, 0x000200d4, 0x000200d4, 0x000200d4, 0x000200d5, 0x000200d5, 0x000200d5, 0x000200d5, 0x000200d6, 0x000200d6, 0x000200d6, 0x000200d6, }, + {0x000200d7, 0x000200d7, 0x000200d7, 0x000200d7, 0x000200d8, 0x000200d8, 0x000200d8, 0x000200d8, 0x000200d9, 0x000200d9, 0x000200d9, 0x000200d9, 0x000200da, 0x000200da, 0x000200da, 0x000200da, }, + {0x003bffff, 0x003cffff, 0x003dffff, 0x003effff, 0x003fffff, 0x0040ffff, 0x0041ffff, 0x0042ffff, 0x0043ffff, 0x0044ffff, 0x0045ffff, 0x0046ffff, 0x0047ffff, 0x0048ffff, 0x0049ffff, 0x004affff, }, + {0x000200db, 0x000200db, 0x000200db, 0x000200db, 0x000200dc, 0x000200dc, 0x000200dc, 0x000200dc, 0x000200dd, 0x000200dd, 0x000200dd, 0x000200dd, 0x000200de, 0x000200de, 0x000200de, 0x000200de, }, + {0x000200df, 0x000200df, 0x000200df, 0x000200df, 0x000200e0, 0x000200e0, 0x000200e0, 0x000200e0, 0x000200e1, 0x000200e1, 0x000200e1, 0x000200e1, 0x000200e2, 0x000200e2, 0x000200e2, 0x000200e2, }, + {0x000200e3, 0x000200e3, 0x000200e3, 0x000200e3, 0x000200e4, 0x000200e4, 0x000200e4, 0x000200e4, 0x000200e5, 0x000200e5, 0x000200e5, 0x000200e5, 0x000200e6, 0x000200e6, 0x000200e6, 0x000200e6, }, + {0x000200e7, 0x000200e7, 0x000200e7, 0x000200e7, 0x000200e8, 0x000200e8, 0x000200e8, 0x000200e8, 0x000200e9, 0x000200e9, 0x000200e9, 0x000200e9, 0x000200ea, 0x000200ea, 0x000200ea, 0x000200ea, }, + {0x000200eb, 0x000200eb, 0x000200eb, 0x000200eb, 0x000200ec, 0x000200ec, 0x000200ec, 0x000200ec, 0x000200ed, 0x000200ed, 0x000200ed, 0x000200ed, 0x000200ee, 0x000200ee, 0x000200ee, 0x000200ee, }, + {0x000200ef, 0x000200ef, 0x000200ef, 0x000200ef, 0x000200f0, 0x000200f0, 0x000200f0, 0x000200f0, 0x000200f1, 0x000200f1, 0x000200f1, 0x000200f1, 0x000200f2, 0x000200f2, 0x000200f2, 0x000200f2, }, + {0x000200f3, 0x000200f3, 0x000200f3, 0x000200f3, 0x000200f4, 0x000200f4, 0x000200f4, 0x000200f4, 0x000200f5, 0x000200f5, 0x000200f5, 0x000200f5, 0x000200f6, 0x000200f6, 0x000200f6, 0x000200f6, }, + {0x000200f7, 0x000200f7, 0x000200f7, 0x000200f7, 0x000200f8, 0x000200f8, 0x000200f8, 0x000200f8, 0x000200f9, 0x000200f9, 0x000200f9, 0x000200f9, 0x000200fa, 0x000200fa, 0x000200fa, 0x000200fa, }, + {0x000200fb, 0x000200fb, 0x000200fb, 0x000200fb, 0x000200fc, 0x000200fc, 0x000200fc, 0x000200fc, 0x000200fd, 0x000200fd, 0x000200fd, 0x000200fd, 0x000200fe, 0x000200fe, 0x000200fe, 0x000200fe, }, + {0x000200ff, 0x000200ff, 0x000200ff, 0x000200ff, 0x00020100, 0x00020100, 0x00020100, 0x00020100, 0x00020101, 0x00020101, 0x00020101, 0x00020101, 0x00020102, 0x00020102, 0x00020102, 0x00020102, }, + {0x00020103, 0x00020103, 0x00020103, 0x00020103, 0x00020104, 0x00020104, 0x00020104, 0x00020104, 0x00020105, 0x00020105, 0x00020105, 0x00020105, 0x00020106, 0x00020106, 0x00020106, 0x00020106, }, + {0x00020107, 0x00020107, 0x00020107, 0x00020107, 0x00020108, 0x00020108, 0x00020108, 0x00020108, 0x00020109, 0x00020109, 0x00020109, 0x00020109, 0x0002010a, 0x0002010a, 0x0002010a, 0x0002010a, }, + {0x0002010b, 0x0002010b, 0x0002010b, 0x0002010b, 0x0002010c, 0x0002010c, 0x0002010c, 0x0002010c, 0x0002010d, 0x0002010d, 0x0002010d, 0x0002010d, 0x0002010e, 0x0002010e, 0x0002010e, 0x0002010e, }, + {0x0002010f, 0x0002010f, 0x0002010f, 0x0002010f, 0x00020110, 0x00020110, 0x00020110, 0x00020110, 0x00020111, 0x00020111, 0x00020111, 0x00020111, 0x00020112, 0x00020112, 0x00020112, 0x00020112, }, + {0x00020113, 0x00020113, 0x00020113, 0x00020113, 0x00020114, 0x00020114, 0x00020114, 0x00020114, 0x00020115, 0x00020115, 0x00020115, 0x00020115, 0x00020116, 0x00020116, 0x00020116, 0x00020116, }, + {0x00020117, 0x00020117, 0x00020117, 0x00020117, 0x00020118, 0x00020118, 0x00020118, 0x00020118, 0x00020119, 0x00020119, 0x00020119, 0x00020119, 0x0002011a, 0x0002011a, 0x0002011a, 0x0002011a, }, + {0x0002011b, 0x0002011b, 0x0002011b, 0x0002011b, 0x0002011c, 0x0002011c, 0x0002011c, 0x0002011c, 0x0002011d, 0x0002011d, 0x0002011d, 0x0002011d, 0x0002011e, 0x0002011e, 0x0002011e, 0x0002011e, }, +}; + +const uint32_t c_aauiCQMFHuffEnc13[324][2] = +{ + {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0005, 0x0005}, {0x0005, 0x0006}, {0x0006, 0x0004}, {0x0008, 0x0005}, {0x000a, 0x0005}, {0x000c, 0x0007}, + {0x000e, 0x000b}, {0x0010, 0x0011}, {0x0012, 0x002d}, {0x0015, 0x0000}, {0x0014, 0x0035}, {0x0015, 0x0001}, {0x0015, 0x0002}, {0x0015, 0x0003}, + {0x0015, 0x0004}, {0x0015, 0x0005}, {0x0004, 0x0008}, {0x0003, 0x0007}, {0x0004, 0x0009}, {0x0004, 0x000a}, {0x0006, 0x0005}, {0x0008, 0x0006}, + {0x0009, 0x0006}, {0x000c, 0x0008}, {0x000d, 0x0009}, {0x0010, 0x0012}, {0x0011, 0x001a}, {0x0015, 0x0006}, {0x0015, 0x0007}, {0x0015, 0x0008}, + {0x0015, 0x0009}, {0x0015, 0x000a}, {0x0015, 0x000b}, {0x0015, 0x000c}, {0x0005, 0x0007}, {0x0004, 0x000b}, {0x0004, 0x000c}, {0x0005, 0x0008}, + {0x0006, 0x0006}, {0x0008, 0x0007}, {0x000a, 0x0006}, {0x000c, 0x0009}, {0x000e, 0x000c}, {0x0010, 0x0013}, {0x0012, 0x002e}, {0x0015, 0x000d}, + {0x0015, 0x000e}, {0x0015, 0x000f}, {0x0015, 0x0010}, {0x0015, 0x0011}, {0x0015, 0x0012}, {0x0015, 0x0013}, {0x0005, 0x0009}, {0x0004, 0x000d}, + {0x0005, 0x000a}, {0x0006, 0x0007}, {0x0007, 0x0005}, {0x0009, 0x0007}, {0x000b, 0x0008}, {0x000d, 0x000a}, {0x000f, 0x000e}, {0x0010, 0x0014}, + {0x0011, 0x001b}, {0x0014, 0x0036}, {0x0015, 0x0014}, {0x0015, 0x0015}, {0x0015, 0x0016}, {0x0015, 0x0017}, {0x0015, 0x0018}, {0x0015, 0x0019}, + {0x0006, 0x0008}, {0x0005, 0x000b}, {0x0006, 0x0009}, {0x0007, 0x0006}, {0x0009, 0x0008}, {0x000a, 0x0007}, {0x000c, 0x000a}, {0x000e, 0x000d}, + {0x0010, 0x0015}, {0x0011, 0x001c}, {0x0013, 0x0053}, {0x0015, 0x001a}, {0x0015, 0x001b}, {0x0015, 0x001c}, {0x0015, 0x001d}, {0x0015, 0x001e}, + {0x0015, 0x001f}, {0x0015, 0x0020}, {0x0008, 0x0008}, {0x0007, 0x0007}, {0x0008, 0x0009}, {0x0009, 0x0009}, {0x000a, 0x0008}, {0x000c, 0x000b}, + {0x000d, 0x000b}, {0x000f, 0x000f}, {0x0010, 0x0016}, {0x0011, 0x001d}, {0x0014, 0x0037}, {0x0015, 0x0021}, {0x0015, 0x0022}, {0x0015, 0x0023}, + {0x0015, 0x0024}, {0x0015, 0x0025}, {0x0015, 0x0026}, {0x0015, 0x0027}, {0x000a, 0x0009}, {0x000a, 0x000a}, {0x000a, 0x000b}, {0x000b, 0x0009}, + {0x000c, 0x000c}, {0x000d, 0x000c}, {0x000f, 0x0010}, {0x0010, 0x0017}, {0x0012, 0x002f}, {0x0015, 0x0028}, {0x0015, 0x0029}, {0x0015, 0x002a}, + {0x0015, 0x002b}, {0x0015, 0x002c}, {0x0015, 0x002d}, {0x0015, 0x002e}, {0x0015, 0x002f}, {0x0015, 0x0030}, {0x000c, 0x000d}, {0x000c, 0x000e}, + {0x000c, 0x000f}, {0x000d, 0x000d}, {0x000e, 0x000e}, {0x000f, 0x0011}, {0x0010, 0x0018}, {0x0011, 0x001e}, {0x0014, 0x0038}, {0x0015, 0x0031}, + {0x0015, 0x0032}, {0x0015, 0x0033}, {0x0015, 0x0034}, {0x0015, 0x0035}, {0x0015, 0x0036}, {0x0015, 0x0037}, {0x0015, 0x0038}, {0x0015, 0x0039}, + {0x000f, 0x0012}, {0x000e, 0x000f}, {0x000e, 0x0010}, {0x000e, 0x0011}, {0x000f, 0x0013}, {0x0010, 0x0019}, {0x0011, 0x001f}, {0x0013, 0x0054}, + {0x0015, 0x003a}, {0x0014, 0x0039}, {0x0015, 0x003b}, {0x0015, 0x003c}, {0x0015, 0x003d}, {0x0015, 0x003e}, {0x0015, 0x003f}, {0x0015, 0x0040}, + {0x0015, 0x0041}, {0x0015, 0x0042}, {0x0010, 0x001a}, {0x000f, 0x0014}, {0x000f, 0x0015}, {0x0010, 0x001b}, {0x0011, 0x0020}, {0x0012, 0x0030}, + {0x0013, 0x0055}, {0x0015, 0x0043}, {0x0015, 0x0044}, {0x0014, 0x003a}, {0x0015, 0x0045}, {0x0015, 0x0046}, {0x0015, 0x0047}, {0x0015, 0x0048}, + {0x0015, 0x0049}, {0x0015, 0x004a}, {0x0015, 0x004b}, {0x0015, 0x004c}, {0x0012, 0x0031}, {0x0011, 0x0021}, {0x0013, 0x0056}, {0x0013, 0x0057}, + {0x0012, 0x0032}, {0x0015, 0x004d}, {0x0015, 0x004e}, {0x0015, 0x004f}, {0x0015, 0x0050}, {0x0015, 0x0051}, {0x0015, 0x0052}, {0x0015, 0x0053}, + {0x0015, 0x0054}, {0x0015, 0x0055}, {0x0015, 0x0056}, {0x0015, 0x0057}, {0x0015, 0x0058}, {0x0015, 0x0059}, {0x0015, 0x005a}, {0x0014, 0x003b}, + {0x0012, 0x0033}, {0x0013, 0x0058}, {0x0013, 0x0059}, {0x0015, 0x005b}, {0x0015, 0x005c}, {0x0015, 0x005d}, {0x0015, 0x005e}, {0x0015, 0x005f}, + {0x0015, 0x0060}, {0x0015, 0x0061}, {0x0015, 0x0062}, {0x0015, 0x0063}, {0x0015, 0x0064}, {0x0015, 0x0065}, {0x0015, 0x0066}, {0x0015, 0x0067}, + {0x0015, 0x0068}, {0x0015, 0x0069}, {0x0014, 0x003c}, {0x0014, 0x003d}, {0x0014, 0x003e}, {0x0014, 0x003f}, {0x0014, 0x0040}, {0x0014, 0x0041}, + {0x0014, 0x0042}, {0x0014, 0x0043}, {0x0014, 0x0044}, {0x0014, 0x0045}, {0x0014, 0x0046}, {0x0014, 0x0047}, {0x0014, 0x0048}, {0x0014, 0x0049}, + {0x0014, 0x004a}, {0x0014, 0x004b}, {0x0014, 0x004c}, {0x0014, 0x004d}, {0x0014, 0x004e}, {0x0014, 0x004f}, {0x0014, 0x0050}, {0x0014, 0x0051}, + {0x0014, 0x0052}, {0x0014, 0x0053}, {0x0014, 0x0054}, {0x0014, 0x0055}, {0x0014, 0x0056}, {0x0014, 0x0057}, {0x0014, 0x0058}, {0x0014, 0x0059}, + {0x0014, 0x005a}, {0x0014, 0x005b}, {0x0014, 0x005c}, {0x0014, 0x005d}, {0x0014, 0x005e}, {0x0014, 0x005f}, {0x0014, 0x0060}, {0x0014, 0x0061}, + {0x0014, 0x0062}, {0x0014, 0x0063}, {0x0014, 0x0064}, {0x0014, 0x0065}, {0x0014, 0x0066}, {0x0014, 0x0067}, {0x0014, 0x0068}, {0x0014, 0x0069}, + {0x0014, 0x006a}, {0x0014, 0x006b}, {0x0014, 0x006c}, {0x0014, 0x006d}, {0x0014, 0x006e}, {0x0014, 0x006f}, {0x0014, 0x0070}, {0x0014, 0x0071}, + {0x0014, 0x0072}, {0x0014, 0x0073}, {0x0014, 0x0074}, {0x0014, 0x0075}, {0x0014, 0x0076}, {0x0014, 0x0077}, {0x0014, 0x0078}, {0x0014, 0x0079}, + {0x0014, 0x007a}, {0x0014, 0x007b}, {0x0014, 0x007c}, {0x0014, 0x007d}, {0x0014, 0x007e}, {0x0014, 0x007f}, {0x0014, 0x0080}, {0x0014, 0x0081}, + {0x0014, 0x0082}, {0x0014, 0x0083}, {0x0014, 0x0084}, {0x0014, 0x0085}, {0x0014, 0x0086}, {0x0014, 0x0087}, {0x0014, 0x0088}, {0x0014, 0x0089}, + {0x0014, 0x008a}, {0x0014, 0x008b}, {0x0014, 0x008c}, {0x0014, 0x008d}, {0x0014, 0x008e}, {0x0014, 0x008f}, {0x0014, 0x0090}, {0x0014, 0x0091}, + {0x0014, 0x0092}, {0x0014, 0x0093}, {0x0014, 0x0094}, {0x0014, 0x0095}, {0x0014, 0x0096}, {0x0014, 0x0097}, {0x0014, 0x0098}, {0x0014, 0x0099}, + {0x0014, 0x009a}, {0x0014, 0x009b}, {0x0014, 0x009c}, {0x0014, 0x009d}, {0x0014, 0x009e}, {0x0014, 0x009f}, {0x0014, 0x00a0}, {0x0014, 0x00a1}, + {0x0014, 0x00a2}, {0x0014, 0x00a3}, {0x0014, 0x00a4}, {0x0014, 0x00a5}, + +}; + +const uint32_t c_aauiCQMFHuffDec13[89][16] = +{ + {0x0006ffff, 0x0005ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x00000000, 0x00000001, 0x00000012, 0x00000014, 0x00000015, 0x00000025, 0x00000026, 0x00000037, 0x00010013, 0x00010013, }, + {0x00020048, 0x00020048, 0x00020048, 0x00020048, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, }, + {0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, }, + {0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, }, + {0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, }, + {0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x00020016, 0x00020016, 0x00020016, 0x00020016, 0x00020028, 0x00020028, 0x00020028, 0x00020028, 0x00020039, 0x00020039, 0x00020039, 0x00020039, }, + {0x000bffff, 0x0009ffff, 0x000affff, 0x0007ffff, 0x0008ffff, 0x00000005, 0x00000017, 0x00000029, 0x0000005a, 0x0000005c, 0x0001003a, 0x0001003a, 0x0001004b, 0x0001004b, 0x0001005b, 0x0001005b, }, + {0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, }, + {0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, }, + {0x0001003c, 0x0001003c, 0x0001006f, 0x0001006f, 0x00020006, 0x00020006, 0x00020006, 0x00020006, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002004d, 0x0002004d, 0x0002004d, 0x0002004d, }, + {0x0002005e, 0x0002005e, 0x0002005e, 0x0002005e, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006d, 0x0002006d, 0x0002006d, 0x0002006d, 0x0002006e, 0x0002006e, 0x0002006e, 0x0002006e, }, + {0x0012ffff, 0x0011ffff, 0x0010ffff, 0x000fffff, 0x000dffff, 0x000cffff, 0x000effff, 0x00000007, 0x00000019, 0x0000002b, 0x0000004e, 0x0000005f, 0x00000070, 0x0000007e, 0x0000007f, 0x00000080, }, + {0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, }, + {0x00020092, 0x00020092, 0x00020092, 0x00020092, 0x00020093, 0x00020093, 0x00020093, 0x00020093, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, }, + {0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, }, + {0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002004f, 0x0002004f, 0x0002004f, 0x0002004f, 0x00020082, 0x00020082, 0x00020082, 0x00020082, 0x00020091, 0x00020091, 0x00020091, 0x00020091, }, + {0x00010072, 0x00010072, 0x00010083, 0x00010083, 0x00010090, 0x00010090, 0x00010094, 0x00010094, 0x000100a3, 0x000100a3, 0x000100a4, 0x000100a4, 0x00020008, 0x00020008, 0x00020008, 0x00020008, }, + {0x0016ffff, 0x00000009, 0x0000001b, 0x0000002d, 0x0000003f, 0x00000050, 0x00000062, 0x00000073, 0x00000084, 0x00000095, 0x000000a2, 0x000000a5, 0x0001003e, 0x0001003e, 0x00010061, 0x00010061, }, + {0x0021ffff, 0x0024ffff, 0x003dffff, 0x001affff, 0x001bffff, 0x001cffff, 0x001dffff, 0x001effff, 0x001fffff, 0x0020ffff, 0x0019ffff, 0x0017ffff, 0x0018ffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, }, + {0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, }, + {0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, }, + {0x00030085, 0x00030085, 0x00030085, 0x00030085, 0x00030085, 0x00030085, 0x00030085, 0x00030085, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, }, + {0x000300a6, 0x000300a6, 0x000300a6, 0x000300a6, 0x000300a6, 0x000300a6, 0x000300a6, 0x000300a6, 0x000300b5, 0x000300b5, 0x000300b5, 0x000300b5, 0x000300b5, 0x000300b5, 0x000300b5, 0x000300b5, }, + {0x000100c9, 0x000100c9, 0x000100ca, 0x000100ca, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, 0x00020074, 0x00020074, 0x00020074, 0x00020074, }, + {0x000200a7, 0x000200a7, 0x000200a7, 0x000200a7, 0x000200b4, 0x000200b4, 0x000200b4, 0x000200b4, 0x000200b8, 0x000200b8, 0x000200b8, 0x000200b8, 0x000200c8, 0x000200c8, 0x000200c8, 0x000200c8, }, + {0x0000013e, 0x0000013f, 0x00000140, 0x00000141, 0x00000142, 0x00000143, 0x00010052, 0x00010052, 0x00010097, 0x00010097, 0x000100a8, 0x000100a8, 0x000100b6, 0x000100b6, 0x000100b7, 0x000100b7, }, + {0x0054ffff, 0x0055ffff, 0x0056ffff, 0x0057ffff, 0x0058ffff, 0x0000000c, 0x00000041, 0x00000064, 0x00000086, 0x00000099, 0x000000ab, 0x000000c7, 0x000000da, 0x000000db, 0x000000dc, 0x000000dd, }, + {0x000000de, 0x000000df, 0x000000e0, 0x000000e1, 0x000000e2, 0x000000e3, 0x000000e4, 0x000000e5, 0x000000e6, 0x000000e7, 0x000000e8, 0x000000e9, 0x000000ea, 0x000000eb, 0x000000ec, 0x000000ed, }, + {0x000000ee, 0x000000ef, 0x000000f0, 0x000000f1, 0x000000f2, 0x000000f3, 0x000000f4, 0x000000f5, 0x000000f6, 0x000000f7, 0x000000f8, 0x000000f9, 0x000000fa, 0x000000fb, 0x000000fc, 0x000000fd, }, + {0x000000fe, 0x000000ff, 0x00000100, 0x00000101, 0x00000102, 0x00000103, 0x00000104, 0x00000105, 0x00000106, 0x00000107, 0x00000108, 0x00000109, 0x0000010a, 0x0000010b, 0x0000010c, 0x0000010d, }, + {0x0000010e, 0x0000010f, 0x00000110, 0x00000111, 0x00000112, 0x00000113, 0x00000114, 0x00000115, 0x00000116, 0x00000117, 0x00000118, 0x00000119, 0x0000011a, 0x0000011b, 0x0000011c, 0x0000011d, }, + {0x0000011e, 0x0000011f, 0x00000120, 0x00000121, 0x00000122, 0x00000123, 0x00000124, 0x00000125, 0x00000126, 0x00000127, 0x00000128, 0x00000129, 0x0000012a, 0x0000012b, 0x0000012c, 0x0000012d, }, + {0x0000012e, 0x0000012f, 0x00000130, 0x00000131, 0x00000132, 0x00000133, 0x00000134, 0x00000135, 0x00000136, 0x00000137, 0x00000138, 0x00000139, 0x0000013a, 0x0000013b, 0x0000013c, 0x0000013d, }, + {0x0026ffff, 0x002dffff, 0x0037ffff, 0x0023ffff, 0x0044ffff, 0x002effff, 0x003affff, 0x0022ffff, 0x002cffff, 0x0035ffff, 0x002fffff, 0x0036ffff, 0x0040ffff, 0x0049ffff, 0x0030ffff, 0x0038ffff, }, + {0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, }, + {0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, }, + {0x0041ffff, 0x004affff, 0x0042ffff, 0x0025ffff, 0x0027ffff, 0x0028ffff, 0x0029ffff, 0x002affff, 0x002bffff, 0x0031ffff, 0x0032ffff, 0x0033ffff, 0x0034ffff, 0x0039ffff, 0x003bffff, 0x003cffff, }, + {0x0003006a, 0x0003006a, 0x0003006a, 0x0003006a, 0x0003006a, 0x0003006a, 0x0003006a, 0x0003006a, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, }, + {0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, }, + {0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, }, + {0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, }, + {0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, }, + {0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007c, 0x0003007c, 0x0003007c, 0x0003007c, 0x0003007c, 0x0003007c, 0x0003007c, 0x0003007c, }, + {0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x00030087, 0x00030087, 0x00030087, 0x00030087, 0x00030087, 0x00030087, 0x00030087, 0x00030087, }, + {0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, }, + {0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, + {0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, }, + {0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, }, + {0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, }, + {0x00030088, 0x00030088, 0x00030088, 0x00030088, 0x00030088, 0x00030088, 0x00030088, 0x00030088, 0x00030089, 0x00030089, 0x00030089, 0x00030089, 0x00030089, 0x00030089, 0x00030089, 0x00030089, }, + {0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008b, 0x0003008b, 0x0003008b, 0x0003008b, 0x0003008b, 0x0003008b, 0x0003008b, 0x0003008b, }, + {0x0003008c, 0x0003008c, 0x0003008c, 0x0003008c, 0x0003008c, 0x0003008c, 0x0003008c, 0x0003008c, 0x0003008d, 0x0003008d, 0x0003008d, 0x0003008d, 0x0003008d, 0x0003008d, 0x0003008d, 0x0003008d, }, + {0x0003008e, 0x0003008e, 0x0003008e, 0x0003008e, 0x0003008e, 0x0003008e, 0x0003008e, 0x0003008e, 0x0003008f, 0x0003008f, 0x0003008f, 0x0003008f, 0x0003008f, 0x0003008f, 0x0003008f, 0x0003008f, }, + {0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, }, + {0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, }, + {0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, + {0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, }, + {0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x0003009a, 0x0003009a, 0x0003009a, 0x0003009a, 0x0003009a, 0x0003009a, 0x0003009a, 0x0003009a, }, + {0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, }, + {0x0003009b, 0x0003009b, 0x0003009b, 0x0003009b, 0x0003009b, 0x0003009b, 0x0003009b, 0x0003009b, 0x0003009c, 0x0003009c, 0x0003009c, 0x0003009c, 0x0003009c, 0x0003009c, 0x0003009c, 0x0003009c, }, + {0x0003009d, 0x0003009d, 0x0003009d, 0x0003009d, 0x0003009d, 0x0003009d, 0x0003009d, 0x0003009d, 0x0003009e, 0x0003009e, 0x0003009e, 0x0003009e, 0x0003009e, 0x0003009e, 0x0003009e, 0x0003009e, }, + {0x003effff, 0x003fffff, 0x0043ffff, 0x0045ffff, 0x0046ffff, 0x0047ffff, 0x0048ffff, 0x004bffff, 0x004cffff, 0x004dffff, 0x004effff, 0x004fffff, 0x0050ffff, 0x0051ffff, 0x0052ffff, 0x0053ffff, }, + {0x0003009f, 0x0003009f, 0x0003009f, 0x0003009f, 0x0003009f, 0x0003009f, 0x0003009f, 0x0003009f, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, }, + {0x000300a1, 0x000300a1, 0x000300a1, 0x000300a1, 0x000300a1, 0x000300a1, 0x000300a1, 0x000300a1, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, }, + {0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, }, + {0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, }, + {0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, }, + {0x000300aa, 0x000300aa, 0x000300aa, 0x000300aa, 0x000300aa, 0x000300aa, 0x000300aa, 0x000300aa, 0x000300ac, 0x000300ac, 0x000300ac, 0x000300ac, 0x000300ac, 0x000300ac, 0x000300ac, 0x000300ac, }, + {0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, }, + {0x000300ad, 0x000300ad, 0x000300ad, 0x000300ad, 0x000300ad, 0x000300ad, 0x000300ad, 0x000300ad, 0x000300ae, 0x000300ae, 0x000300ae, 0x000300ae, 0x000300ae, 0x000300ae, 0x000300ae, 0x000300ae, }, + {0x000300af, 0x000300af, 0x000300af, 0x000300af, 0x000300af, 0x000300af, 0x000300af, 0x000300af, 0x000300b0, 0x000300b0, 0x000300b0, 0x000300b0, 0x000300b0, 0x000300b0, 0x000300b0, 0x000300b0, }, + {0x000300b1, 0x000300b1, 0x000300b1, 0x000300b1, 0x000300b1, 0x000300b1, 0x000300b1, 0x000300b1, 0x000300b2, 0x000300b2, 0x000300b2, 0x000300b2, 0x000300b2, 0x000300b2, 0x000300b2, 0x000300b2, }, + {0x000300b3, 0x000300b3, 0x000300b3, 0x000300b3, 0x000300b3, 0x000300b3, 0x000300b3, 0x000300b3, 0x000300b9, 0x000300b9, 0x000300b9, 0x000300b9, 0x000300b9, 0x000300b9, 0x000300b9, 0x000300b9, }, + {0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, }, + {0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, }, + {0x000300ba, 0x000300ba, 0x000300ba, 0x000300ba, 0x000300ba, 0x000300ba, 0x000300ba, 0x000300ba, 0x000300bb, 0x000300bb, 0x000300bb, 0x000300bb, 0x000300bb, 0x000300bb, 0x000300bb, 0x000300bb, }, + {0x000300bc, 0x000300bc, 0x000300bc, 0x000300bc, 0x000300bc, 0x000300bc, 0x000300bc, 0x000300bc, 0x000300bd, 0x000300bd, 0x000300bd, 0x000300bd, 0x000300bd, 0x000300bd, 0x000300bd, 0x000300bd, }, + {0x000300be, 0x000300be, 0x000300be, 0x000300be, 0x000300be, 0x000300be, 0x000300be, 0x000300be, 0x000300bf, 0x000300bf, 0x000300bf, 0x000300bf, 0x000300bf, 0x000300bf, 0x000300bf, 0x000300bf, }, + {0x000300c0, 0x000300c0, 0x000300c0, 0x000300c0, 0x000300c0, 0x000300c0, 0x000300c0, 0x000300c0, 0x000300c1, 0x000300c1, 0x000300c1, 0x000300c1, 0x000300c1, 0x000300c1, 0x000300c1, 0x000300c1, }, + {0x000300c2, 0x000300c2, 0x000300c2, 0x000300c2, 0x000300c2, 0x000300c2, 0x000300c2, 0x000300c2, 0x000300c3, 0x000300c3, 0x000300c3, 0x000300c3, 0x000300c3, 0x000300c3, 0x000300c3, 0x000300c3, }, + {0x000300c4, 0x000300c4, 0x000300c4, 0x000300c4, 0x000300c4, 0x000300c4, 0x000300c4, 0x000300c4, 0x000300c5, 0x000300c5, 0x000300c5, 0x000300c5, 0x000300c5, 0x000300c5, 0x000300c5, 0x000300c5, }, + {0x000300c6, 0x000300c6, 0x000300c6, 0x000300c6, 0x000300c6, 0x000300c6, 0x000300c6, 0x000300c6, 0x000300cb, 0x000300cb, 0x000300cb, 0x000300cb, 0x000300cb, 0x000300cb, 0x000300cb, 0x000300cb, }, + {0x000300cc, 0x000300cc, 0x000300cc, 0x000300cc, 0x000300cc, 0x000300cc, 0x000300cc, 0x000300cc, 0x000300cd, 0x000300cd, 0x000300cd, 0x000300cd, 0x000300cd, 0x000300cd, 0x000300cd, 0x000300cd, }, + {0x000300ce, 0x000300ce, 0x000300ce, 0x000300ce, 0x000300ce, 0x000300ce, 0x000300ce, 0x000300ce, 0x000300cf, 0x000300cf, 0x000300cf, 0x000300cf, 0x000300cf, 0x000300cf, 0x000300cf, 0x000300cf, }, + {0x000300d0, 0x000300d0, 0x000300d0, 0x000300d0, 0x000300d0, 0x000300d0, 0x000300d0, 0x000300d0, 0x000300d1, 0x000300d1, 0x000300d1, 0x000300d1, 0x000300d1, 0x000300d1, 0x000300d1, 0x000300d1, }, + {0x000300d2, 0x000300d2, 0x000300d2, 0x000300d2, 0x000300d2, 0x000300d2, 0x000300d2, 0x000300d2, 0x000300d3, 0x000300d3, 0x000300d3, 0x000300d3, 0x000300d3, 0x000300d3, 0x000300d3, 0x000300d3, }, + {0x000300d4, 0x000300d4, 0x000300d4, 0x000300d4, 0x000300d4, 0x000300d4, 0x000300d4, 0x000300d4, 0x000300d5, 0x000300d5, 0x000300d5, 0x000300d5, 0x000300d5, 0x000300d5, 0x000300d5, 0x000300d5, }, + {0x000300d6, 0x000300d6, 0x000300d6, 0x000300d6, 0x000300d6, 0x000300d6, 0x000300d6, 0x000300d6, 0x000300d7, 0x000300d7, 0x000300d7, 0x000300d7, 0x000300d7, 0x000300d7, 0x000300d7, 0x000300d7, }, + {0x000300d8, 0x000300d8, 0x000300d8, 0x000300d8, 0x000300d8, 0x000300d8, 0x000300d8, 0x000300d8, 0x000300d9, 0x000300d9, 0x000300d9, 0x000300d9, 0x000300d9, 0x000300d9, 0x000300d9, 0x000300d9, }, +}; + +const uint32_t c_aauiCQMFHuffEnc14[400][2] = +{ + {0x0005, 0x0007}, {0x0004, 0x0009}, {0x0005, 0x0008}, {0x0005, 0x0009}, {0x0006, 0x0006}, {0x0007, 0x0006}, {0x0009, 0x0007}, {0x000b, 0x0008}, + {0x000d, 0x000c}, {0x000f, 0x0013}, {0x0010, 0x001b}, {0x0013, 0x0082}, {0x0013, 0x0083}, {0x0014, 0x0000}, {0x0014, 0x0001}, {0x0014, 0x0002}, + {0x0014, 0x0003}, {0x0014, 0x0004}, {0x0014, 0x0005}, {0x0014, 0x0006}, {0x0004, 0x000a}, {0x0004, 0x000b}, {0x0004, 0x000c}, {0x0005, 0x000a}, + {0x0005, 0x000b}, {0x0006, 0x0007}, {0x0008, 0x0006}, {0x000a, 0x0007}, {0x000c, 0x000a}, {0x000e, 0x000e}, {0x000f, 0x0014}, {0x0011, 0x002a}, + {0x0012, 0x004a}, {0x0013, 0x0084}, {0x0014, 0x0007}, {0x0014, 0x0008}, {0x0014, 0x0009}, {0x0014, 0x000a}, {0x0014, 0x000b}, {0x0014, 0x000c}, + {0x0005, 0x000c}, {0x0004, 0x000d}, {0x0004, 0x000e}, {0x0005, 0x000d}, {0x0006, 0x0008}, {0x0007, 0x0007}, {0x0008, 0x0007}, {0x000a, 0x0008}, + {0x000c, 0x000b}, {0x000e, 0x000f}, {0x000f, 0x0015}, {0x0012, 0x004b}, {0x0013, 0x0085}, {0x0014, 0x000d}, {0x0014, 0x000e}, {0x0014, 0x000f}, + {0x0014, 0x0010}, {0x0014, 0x0011}, {0x0014, 0x0012}, {0x0014, 0x0013}, {0x0005, 0x000e}, {0x0004, 0x000f}, {0x0005, 0x000f}, {0x0005, 0x0010}, + {0x0006, 0x0009}, {0x0008, 0x0008}, {0x0009, 0x0008}, {0x000b, 0x0009}, {0x000d, 0x000d}, {0x000e, 0x0010}, {0x0010, 0x001c}, {0x0011, 0x002b}, + {0x0014, 0x0014}, {0x0014, 0x0015}, {0x0014, 0x0016}, {0x0014, 0x0017}, {0x0014, 0x0018}, {0x0014, 0x0019}, {0x0014, 0x001a}, {0x0014, 0x001b}, + {0x0006, 0x000a}, {0x0005, 0x0011}, {0x0006, 0x000b}, {0x0006, 0x000c}, {0x0007, 0x0008}, {0x0008, 0x0009}, {0x000a, 0x0009}, {0x000c, 0x000c}, + {0x000e, 0x0011}, {0x000f, 0x0016}, {0x0010, 0x001d}, {0x0012, 0x004c}, {0x0014, 0x001c}, {0x0014, 0x001d}, {0x0014, 0x001e}, {0x0014, 0x001f}, + {0x0014, 0x0020}, {0x0014, 0x0021}, {0x0014, 0x0022}, {0x0014, 0x0023}, {0x0007, 0x0009}, {0x0006, 0x000d}, {0x0007, 0x000a}, {0x0007, 0x000b}, + {0x0009, 0x0009}, {0x000a, 0x000a}, {0x000b, 0x000a}, {0x000d, 0x000e}, {0x000f, 0x0017}, {0x0011, 0x002c}, {0x0010, 0x001e}, {0x0014, 0x0024}, + {0x0014, 0x0025}, {0x0014, 0x0026}, {0x0014, 0x0027}, {0x0014, 0x0028}, {0x0014, 0x0029}, {0x0014, 0x002a}, {0x0014, 0x002b}, {0x0014, 0x002c}, + {0x0009, 0x000a}, {0x0008, 0x000a}, {0x0008, 0x000b}, {0x0009, 0x000b}, {0x000a, 0x000b}, {0x000b, 0x000b}, {0x000d, 0x000f}, {0x000e, 0x0012}, + {0x000f, 0x0018}, {0x0011, 0x002d}, {0x0011, 0x002e}, {0x0013, 0x0086}, {0x0014, 0x002d}, {0x0014, 0x002e}, {0x0014, 0x002f}, {0x0014, 0x0030}, + {0x0014, 0x0031}, {0x0014, 0x0032}, {0x0014, 0x0033}, {0x0014, 0x0034}, {0x000b, 0x000c}, {0x000a, 0x000c}, {0x000a, 0x000d}, {0x000b, 0x000d}, + {0x000c, 0x000d}, {0x000d, 0x0010}, {0x000e, 0x0013}, {0x000f, 0x0019}, {0x0010, 0x001f}, {0x0013, 0x0087}, {0x0014, 0x0035}, {0x0014, 0x0036}, + {0x0013, 0x0088}, {0x0014, 0x0037}, {0x0014, 0x0038}, {0x0014, 0x0039}, {0x0014, 0x003a}, {0x0014, 0x003b}, {0x0014, 0x003c}, {0x0014, 0x003d}, + {0x000d, 0x0011}, {0x000c, 0x000e}, {0x000c, 0x000f}, {0x000d, 0x0012}, {0x000d, 0x0013}, {0x000e, 0x0014}, {0x0010, 0x0020}, {0x0010, 0x0021}, + {0x0012, 0x004d}, {0x0011, 0x002f}, {0x0014, 0x003e}, {0x0014, 0x003f}, {0x0014, 0x0040}, {0x0014, 0x0041}, {0x0014, 0x0042}, {0x0014, 0x0043}, + {0x0014, 0x0044}, {0x0014, 0x0045}, {0x0014, 0x0046}, {0x0014, 0x0047}, {0x000f, 0x001a}, {0x000e, 0x0015}, {0x000e, 0x0016}, {0x000e, 0x0017}, + {0x000f, 0x001b}, {0x0011, 0x0030}, {0x0011, 0x0031}, {0x0013, 0x0089}, {0x0013, 0x008a}, {0x0013, 0x008b}, {0x0014, 0x0048}, {0x0014, 0x0049}, + {0x0014, 0x004a}, {0x0014, 0x004b}, {0x0014, 0x004c}, {0x0014, 0x004d}, {0x0014, 0x004e}, {0x0014, 0x004f}, {0x0014, 0x0050}, {0x0014, 0x0051}, + {0x0010, 0x0022}, {0x0010, 0x0023}, {0x0010, 0x0024}, {0x0010, 0x0025}, {0x0011, 0x0032}, {0x0011, 0x0033}, {0x0012, 0x004e}, {0x0012, 0x004f}, + {0x0014, 0x0052}, {0x0013, 0x008c}, {0x0013, 0x008d}, {0x0014, 0x0053}, {0x0014, 0x0054}, {0x0014, 0x0055}, {0x0014, 0x0056}, {0x0014, 0x0057}, + {0x0014, 0x0058}, {0x0014, 0x0059}, {0x0014, 0x005a}, {0x0014, 0x005b}, {0x0011, 0x0034}, {0x0011, 0x0035}, {0x0012, 0x0050}, {0x0012, 0x0051}, + {0x0013, 0x008e}, {0x0014, 0x005c}, {0x0014, 0x005d}, {0x0014, 0x005e}, {0x0014, 0x005f}, {0x0014, 0x0060}, {0x0014, 0x0061}, {0x0014, 0x0062}, + {0x0014, 0x0063}, {0x0014, 0x0064}, {0x0014, 0x0065}, {0x0014, 0x0066}, {0x0014, 0x0067}, {0x0014, 0x0068}, {0x0014, 0x0069}, {0x0014, 0x006a}, + {0x0012, 0x0052}, {0x0013, 0x008f}, {0x0013, 0x0090}, {0x0014, 0x006b}, {0x0013, 0x0091}, {0x0014, 0x006c}, {0x0014, 0x006d}, {0x0014, 0x006e}, + {0x0014, 0x006f}, {0x0014, 0x0070}, {0x0014, 0x0071}, {0x0014, 0x0072}, {0x0014, 0x0073}, {0x0014, 0x0074}, {0x0014, 0x0075}, {0x0014, 0x0076}, + {0x0014, 0x0077}, {0x0014, 0x0078}, {0x0014, 0x0079}, {0x0014, 0x007a}, {0x0014, 0x007b}, {0x0014, 0x007c}, {0x0013, 0x0092}, {0x0012, 0x0053}, + {0x0014, 0x007d}, {0x0014, 0x007e}, {0x0014, 0x007f}, {0x0014, 0x0080}, {0x0014, 0x0081}, {0x0014, 0x0082}, {0x0014, 0x0083}, {0x0014, 0x0084}, + {0x0014, 0x0085}, {0x0014, 0x0086}, {0x0014, 0x0087}, {0x0014, 0x0088}, {0x0014, 0x0089}, {0x0014, 0x008a}, {0x0014, 0x008b}, {0x0014, 0x008c}, + {0x0014, 0x008d}, {0x0014, 0x008e}, {0x0013, 0x0093}, {0x0014, 0x008f}, {0x0014, 0x0090}, {0x0014, 0x0091}, {0x0014, 0x0092}, {0x0014, 0x0093}, + {0x0014, 0x0094}, {0x0014, 0x0095}, {0x0014, 0x0096}, {0x0014, 0x0097}, {0x0014, 0x0098}, {0x0014, 0x0099}, {0x0014, 0x009a}, {0x0014, 0x009b}, + {0x0014, 0x009c}, {0x0014, 0x009d}, {0x0014, 0x009e}, {0x0014, 0x009f}, {0x0014, 0x00a0}, {0x0014, 0x00a1}, {0x0014, 0x00a2}, {0x0014, 0x00a3}, + {0x0014, 0x00a4}, {0x0014, 0x00a5}, {0x0014, 0x00a6}, {0x0014, 0x00a7}, {0x0014, 0x00a8}, {0x0014, 0x00a9}, {0x0014, 0x00aa}, {0x0014, 0x00ab}, + {0x0014, 0x00ac}, {0x0014, 0x00ad}, {0x0014, 0x00ae}, {0x0014, 0x00af}, {0x0014, 0x00b0}, {0x0014, 0x00b1}, {0x0014, 0x00b2}, {0x0014, 0x00b3}, + {0x0014, 0x00b4}, {0x0014, 0x00b5}, {0x0014, 0x00b6}, {0x0014, 0x00b7}, {0x0014, 0x00b8}, {0x0014, 0x00b9}, {0x0014, 0x00ba}, {0x0014, 0x00bb}, + {0x0014, 0x00bc}, {0x0014, 0x00bd}, {0x0014, 0x00be}, {0x0014, 0x00bf}, {0x0014, 0x00c0}, {0x0014, 0x00c1}, {0x0014, 0x00c2}, {0x0014, 0x00c3}, + {0x0014, 0x00c4}, {0x0014, 0x00c5}, {0x0014, 0x00c6}, {0x0014, 0x00c7}, {0x0014, 0x00c8}, {0x0014, 0x00c9}, {0x0014, 0x00ca}, {0x0014, 0x00cb}, + {0x0014, 0x00cc}, {0x0014, 0x00cd}, {0x0014, 0x00ce}, {0x0014, 0x00cf}, {0x0014, 0x00d0}, {0x0014, 0x00d1}, {0x0014, 0x00d2}, {0x0014, 0x00d3}, + {0x0014, 0x00d4}, {0x0014, 0x00d5}, {0x0014, 0x00d6}, {0x0014, 0x00d7}, {0x0014, 0x00d8}, {0x0014, 0x00d9}, {0x0014, 0x00da}, {0x0014, 0x00db}, + {0x0014, 0x00dc}, {0x0014, 0x00dd}, {0x0014, 0x00de}, {0x0014, 0x00df}, {0x0014, 0x00e0}, {0x0014, 0x00e1}, {0x0014, 0x00e2}, {0x0014, 0x00e3}, + {0x0014, 0x00e4}, {0x0014, 0x00e5}, {0x0014, 0x00e6}, {0x0014, 0x00e7}, {0x0014, 0x00e8}, {0x0014, 0x00e9}, {0x0014, 0x00ea}, {0x0014, 0x00eb}, + {0x0014, 0x00ec}, {0x0014, 0x00ed}, {0x0014, 0x00ee}, {0x0014, 0x00ef}, {0x0014, 0x00f0}, {0x0014, 0x00f1}, {0x0014, 0x00f2}, {0x0014, 0x00f3}, + {0x0014, 0x00f4}, {0x0014, 0x00f5}, {0x0014, 0x00f6}, {0x0014, 0x00f7}, {0x0014, 0x00f8}, {0x0014, 0x00f9}, {0x0014, 0x00fa}, {0x0014, 0x00fb}, + {0x0014, 0x00fc}, {0x0014, 0x00fd}, {0x0014, 0x00fe}, {0x0014, 0x00ff}, {0x0014, 0x0100}, {0x0014, 0x0101}, {0x0014, 0x0102}, {0x0014, 0x0103}, +}; + +const uint32_t c_aauiCQMFHuffDec14[53][16] = +{ + {0x0009ffff, 0x0007ffff, 0x0008ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x00000001, 0x00000014, 0x00000015, 0x00000016, 0x00000029, 0x0000002a, 0x0000003d, }, + {0x00020053, 0x00020053, 0x00020053, 0x00020053, 0x00020065, 0x00020065, 0x00020065, 0x00020065, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, }, + {0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, }, + {0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, }, + {0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, }, + {0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, }, + {0x00010054, 0x00010054, 0x00010064, 0x00010064, 0x00010066, 0x00010066, 0x00010067, 0x00010067, 0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x00020019, 0x00020019, 0x00020019, 0x00020019, }, + {0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, 0x00020040, 0x00020040, 0x00020040, 0x00020040, 0x00020050, 0x00020050, 0x00020050, 0x00020050, 0x00020052, 0x00020052, 0x00020052, 0x00020052, }, + {0x000fffff, 0x000dffff, 0x000effff, 0x000affff, 0x000bffff, 0x000cffff, 0x0000001a, 0x0000002e, 0x00000041, 0x00000055, 0x00000079, 0x0000007a, 0x00010005, 0x00010005, 0x0001002d, 0x0001002d, }, + {0x0002008d, 0x0002008d, 0x0002008d, 0x0002008d, 0x0002008e, 0x0002008e, 0x0002008e, 0x0002008e, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, + {0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, }, + {0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, }, + {0x00010007, 0x00010007, 0x00010043, 0x00010043, 0x0001006a, 0x0001006a, 0x0001007d, 0x0001007d, 0x0001008c, 0x0001008c, 0x0001008f, 0x0001008f, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, }, + {0x0002002f, 0x0002002f, 0x0002002f, 0x0002002f, 0x00020056, 0x00020056, 0x00020056, 0x00020056, 0x00020069, 0x00020069, 0x00020069, 0x00020069, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007c, }, + {0x0024ffff, 0x0018ffff, 0x0017ffff, 0x0015ffff, 0x0014ffff, 0x0016ffff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0000001c, 0x00000030, 0x00000057, 0x00000090, 0x000000a1, 0x000000a2, }, + {0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, }, + {0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, }, + {0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, }, + {0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a4, 0x000300a4, 0x000300a4, 0x000300a4, 0x000300a4, 0x000300a4, 0x000300a4, 0x000300a4, }, + {0x00020045, 0x00020045, 0x00020045, 0x00020045, 0x00020058, 0x00020058, 0x00020058, 0x00020058, 0x0002007f, 0x0002007f, 0x0002007f, 0x0002007f, 0x00020092, 0x00020092, 0x00020092, 0x00020092, }, + {0x00010080, 0x00010080, 0x00010093, 0x00010093, 0x000100b4, 0x000100b4, 0x000100b8, 0x000100b8, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, 0x00020031, 0x00020031, 0x00020031, 0x00020031, }, + {0x000200a5, 0x000200a5, 0x000200a5, 0x000200a5, 0x000200b5, 0x000200b5, 0x000200b5, 0x000200b5, 0x000200b6, 0x000200b6, 0x000200b6, 0x000200b6, 0x000200b7, 0x000200b7, 0x000200b7, 0x000200b7, }, + {0x000000a6, 0x000000a7, 0x000000c8, 0x000000c9, 0x000000ca, 0x000000cb, 0x00010009, 0x00010009, 0x0001001e, 0x0001001e, 0x00010032, 0x00010032, 0x00010059, 0x00010059, 0x0001006c, 0x0001006c, }, + {0x0022ffff, 0x0023ffff, 0x001fffff, 0x0020ffff, 0x0021ffff, 0x0019ffff, 0x001affff, 0x001bffff, 0x001cffff, 0x001dffff, 0x001effff, 0x0000000a, 0x00000046, 0x0000005a, 0x0000006e, 0x00000094, }, + {0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, }, + {0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, }, + {0x00030082, 0x00030082, 0x00030082, 0x00030082, 0x00030082, 0x00030082, 0x00030082, 0x00030082, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, }, + {0x000300b9, 0x000300b9, 0x000300b9, 0x000300b9, 0x000300b9, 0x000300b9, 0x000300b9, 0x000300b9, 0x000300ba, 0x000300ba, 0x000300ba, 0x000300ba, 0x000300ba, 0x000300ba, 0x000300ba, 0x000300ba, }, + {0x000300cc, 0x000300cc, 0x000300cc, 0x000300cc, 0x000300cc, 0x000300cc, 0x000300cc, 0x000300cc, 0x000300cd, 0x000300cd, 0x000300cd, 0x000300cd, 0x000300cd, 0x000300cd, 0x000300cd, 0x000300cd, }, + {0x000300dc, 0x000300dc, 0x000300dc, 0x000300dc, 0x000300dc, 0x000300dc, 0x000300dc, 0x000300dc, 0x000300dd, 0x000300dd, 0x000300dd, 0x000300dd, 0x000300dd, 0x000300dd, 0x000300dd, 0x000300dd, }, + {0x000100f2, 0x000100f2, 0x000100f4, 0x000100f4, 0x00010106, 0x00010106, 0x0001011a, 0x0001011a, 0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020033, 0x00020033, 0x00020033, 0x00020033, }, + {0x0002005b, 0x0002005b, 0x0002005b, 0x0002005b, 0x000200a8, 0x000200a8, 0x000200a8, 0x000200a8, 0x000200ce, 0x000200ce, 0x000200ce, 0x000200ce, 0x000200cf, 0x000200cf, 0x000200cf, 0x000200cf, }, + {0x000200de, 0x000200de, 0x000200de, 0x000200de, 0x000200df, 0x000200df, 0x000200df, 0x000200df, 0x000200f0, 0x000200f0, 0x000200f0, 0x000200f0, 0x00020107, 0x00020107, 0x00020107, 0x00020107, }, + {0x0000018c, 0x0000018d, 0x0000018e, 0x0000018f, 0x0001000b, 0x0001000b, 0x0001000c, 0x0001000c, 0x00010021, 0x00010021, 0x00010034, 0x00010034, 0x00010083, 0x00010083, 0x00010095, 0x00010095, }, + {0x00010098, 0x00010098, 0x000100bb, 0x000100bb, 0x000100bc, 0x000100bc, 0x000100bd, 0x000100bd, 0x000100d1, 0x000100d1, 0x000100d2, 0x000100d2, 0x000100e0, 0x000100e0, 0x000100f1, 0x000100f1, }, + {0x0025ffff, 0x0026ffff, 0x0028ffff, 0x0027ffff, 0x0029ffff, 0x002affff, 0x002bffff, 0x002cffff, 0x002dffff, 0x002effff, 0x002fffff, 0x0030ffff, 0x0031ffff, 0x0032ffff, 0x0033ffff, 0x0034ffff, }, + {0x0000000d, 0x0000000e, 0x0000000f, 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000026, 0x00000027, 0x00000035, 0x00000036, 0x00000037, }, + {0x00000038, 0x00000039, 0x0000003a, 0x0000003b, 0x00000048, 0x00000049, 0x0000004a, 0x0000004b, 0x0000004c, 0x0000004d, 0x0000004e, 0x0000004f, 0x0000005c, 0x0000005d, 0x0000005e, 0x0000005f, }, + {0x00000087, 0x00000088, 0x00000089, 0x0000008a, 0x0000008b, 0x00000096, 0x00000097, 0x00000099, 0x0000009a, 0x0000009b, 0x0000009c, 0x0000009d, 0x0000009e, 0x0000009f, 0x000000aa, 0x000000ab, }, + {0x00000060, 0x00000061, 0x00000062, 0x00000063, 0x0000006f, 0x00000070, 0x00000071, 0x00000072, 0x00000073, 0x00000074, 0x00000075, 0x00000076, 0x00000077, 0x00000084, 0x00000085, 0x00000086, }, + {0x000000ac, 0x000000ad, 0x000000ae, 0x000000af, 0x000000b0, 0x000000b1, 0x000000b2, 0x000000b3, 0x000000be, 0x000000bf, 0x000000c0, 0x000000c1, 0x000000c2, 0x000000c3, 0x000000c4, 0x000000c5, }, + {0x000000c6, 0x000000c7, 0x000000d0, 0x000000d3, 0x000000d4, 0x000000d5, 0x000000d6, 0x000000d7, 0x000000d8, 0x000000d9, 0x000000da, 0x000000db, 0x000000e1, 0x000000e2, 0x000000e3, 0x000000e4, }, + {0x000000e5, 0x000000e6, 0x000000e7, 0x000000e8, 0x000000e9, 0x000000ea, 0x000000eb, 0x000000ec, 0x000000ed, 0x000000ee, 0x000000ef, 0x000000f3, 0x000000f5, 0x000000f6, 0x000000f7, 0x000000f8, }, + {0x000000f9, 0x000000fa, 0x000000fb, 0x000000fc, 0x000000fd, 0x000000fe, 0x000000ff, 0x00000100, 0x00000101, 0x00000102, 0x00000103, 0x00000104, 0x00000105, 0x00000108, 0x00000109, 0x0000010a, }, + {0x0000010b, 0x0000010c, 0x0000010d, 0x0000010e, 0x0000010f, 0x00000110, 0x00000111, 0x00000112, 0x00000113, 0x00000114, 0x00000115, 0x00000116, 0x00000117, 0x00000118, 0x00000119, 0x0000011b, }, + {0x0000011c, 0x0000011d, 0x0000011e, 0x0000011f, 0x00000120, 0x00000121, 0x00000122, 0x00000123, 0x00000124, 0x00000125, 0x00000126, 0x00000127, 0x00000128, 0x00000129, 0x0000012a, 0x0000012b, }, + {0x0000012c, 0x0000012d, 0x0000012e, 0x0000012f, 0x00000130, 0x00000131, 0x00000132, 0x00000133, 0x00000134, 0x00000135, 0x00000136, 0x00000137, 0x00000138, 0x00000139, 0x0000013a, 0x0000013b, }, + {0x0000013c, 0x0000013d, 0x0000013e, 0x0000013f, 0x00000140, 0x00000141, 0x00000142, 0x00000143, 0x00000144, 0x00000145, 0x00000146, 0x00000147, 0x00000148, 0x00000149, 0x0000014a, 0x0000014b, }, + {0x0000014c, 0x0000014d, 0x0000014e, 0x0000014f, 0x00000150, 0x00000151, 0x00000152, 0x00000153, 0x00000154, 0x00000155, 0x00000156, 0x00000157, 0x00000158, 0x00000159, 0x0000015a, 0x0000015b, }, + {0x0000015c, 0x0000015d, 0x0000015e, 0x0000015f, 0x00000160, 0x00000161, 0x00000162, 0x00000163, 0x00000164, 0x00000165, 0x00000166, 0x00000167, 0x00000168, 0x00000169, 0x0000016a, 0x0000016b, }, + {0x0000016c, 0x0000016d, 0x0000016e, 0x0000016f, 0x00000170, 0x00000171, 0x00000172, 0x00000173, 0x00000174, 0x00000175, 0x00000176, 0x00000177, 0x00000178, 0x00000179, 0x0000017a, 0x0000017b, }, + {0x0000017c, 0x0000017d, 0x0000017e, 0x0000017f, 0x00000180, 0x00000181, 0x00000182, 0x00000183, 0x00000184, 0x00000185, 0x00000186, 0x00000187, 0x00000188, 0x00000189, 0x0000018a, 0x0000018b, }, +}; + +const uint32_t c_aauiCQMFHuffEnc15[576][2] = +{ + {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0005, 0x000c}, {0x0006, 0x0009}, {0x0006, 0x000a}, {0x0007, 0x0008}, {0x0008, 0x0009}, {0x0009, 0x0008}, + {0x000b, 0x000b}, {0x000d, 0x000e}, {0x000e, 0x0011}, {0x000f, 0x001a}, {0x0012, 0x006e}, {0x0014, 0x0000}, {0x0013, 0x00cc}, {0x0014, 0x0001}, + {0x0014, 0x0002}, {0x0014, 0x0003}, {0x0014, 0x0004}, {0x0014, 0x0005}, {0x0014, 0x0006}, {0x0014, 0x0007}, {0x0014, 0x0008}, {0x0014, 0x0009}, + {0x0005, 0x000d}, {0x0004, 0x000c}, {0x0004, 0x000d}, {0x0005, 0x000e}, {0x0005, 0x000f}, {0x0006, 0x000b}, {0x0007, 0x0009}, {0x0008, 0x000a}, + {0x000a, 0x000a}, {0x000c, 0x000c}, {0x000d, 0x000f}, {0x000f, 0x001b}, {0x0011, 0x003d}, {0x0011, 0x003e}, {0x0013, 0x00cd}, {0x0014, 0x000a}, + {0x0014, 0x000b}, {0x0014, 0x000c}, {0x0014, 0x000d}, {0x0014, 0x000e}, {0x0014, 0x000f}, {0x0014, 0x0010}, {0x0014, 0x0011}, {0x0014, 0x0012}, + {0x0005, 0x0010}, {0x0004, 0x000e}, {0x0004, 0x000f}, {0x0005, 0x0011}, {0x0005, 0x0012}, {0x0006, 0x000c}, {0x0007, 0x000a}, {0x0009, 0x0009}, + {0x000a, 0x000b}, {0x000c, 0x000d}, {0x000e, 0x0012}, {0x0010, 0x0027}, {0x0011, 0x003f}, {0x0012, 0x006f}, {0x0014, 0x0013}, {0x0014, 0x0014}, + {0x0014, 0x0015}, {0x0014, 0x0016}, {0x0014, 0x0017}, {0x0014, 0x0018}, {0x0014, 0x0019}, {0x0014, 0x001a}, {0x0014, 0x001b}, {0x0014, 0x001c}, + {0x0006, 0x000d}, {0x0005, 0x0013}, {0x0005, 0x0014}, {0x0005, 0x0015}, {0x0006, 0x000e}, {0x0007, 0x000b}, {0x0008, 0x000b}, {0x0009, 0x000a}, + {0x000b, 0x000c}, {0x000c, 0x000e}, {0x000e, 0x0013}, {0x000f, 0x001c}, {0x0011, 0x0040}, {0x0012, 0x0070}, {0x0014, 0x001d}, {0x0014, 0x001e}, + {0x0014, 0x001f}, {0x0014, 0x0020}, {0x0014, 0x0021}, {0x0014, 0x0022}, {0x0014, 0x0023}, {0x0014, 0x0024}, {0x0014, 0x0025}, {0x0014, 0x0026}, + {0x0006, 0x000f}, {0x0005, 0x0016}, {0x0005, 0x0017}, {0x0006, 0x0010}, {0x0006, 0x0011}, {0x0007, 0x000c}, {0x0009, 0x000b}, {0x000a, 0x000c}, + {0x000b, 0x000d}, {0x000d, 0x0010}, {0x000e, 0x0014}, {0x0010, 0x0028}, {0x0011, 0x0041}, {0x0013, 0x00ce}, {0x0014, 0x0027}, {0x0014, 0x0028}, + {0x0014, 0x0029}, {0x0014, 0x002a}, {0x0014, 0x002b}, {0x0014, 0x002c}, {0x0014, 0x002d}, {0x0014, 0x002e}, {0x0014, 0x002f}, {0x0014, 0x0030}, + {0x0007, 0x000d}, {0x0006, 0x0012}, {0x0006, 0x0013}, {0x0007, 0x000e}, {0x0007, 0x000f}, {0x0008, 0x000c}, {0x0009, 0x000c}, {0x000b, 0x000e}, + {0x000c, 0x000f}, {0x000e, 0x0015}, {0x0010, 0x0029}, {0x0011, 0x0042}, {0x0014, 0x0031}, {0x0014, 0x0032}, {0x0014, 0x0033}, {0x0014, 0x0034}, + {0x0014, 0x0035}, {0x0014, 0x0036}, {0x0014, 0x0037}, {0x0014, 0x0038}, {0x0014, 0x0039}, {0x0014, 0x003a}, {0x0014, 0x003b}, {0x0014, 0x003c}, + {0x0008, 0x000d}, {0x0007, 0x0010}, {0x0007, 0x0011}, {0x0008, 0x000e}, {0x0009, 0x000d}, {0x0009, 0x000e}, {0x000b, 0x000f}, {0x000c, 0x0010}, + {0x000d, 0x0011}, {0x000f, 0x001d}, {0x0010, 0x002a}, {0x0011, 0x0043}, {0x0014, 0x003d}, {0x0013, 0x00cf}, {0x0014, 0x003e}, {0x0014, 0x003f}, + {0x0014, 0x0040}, {0x0014, 0x0041}, {0x0014, 0x0042}, {0x0014, 0x0043}, {0x0014, 0x0044}, {0x0014, 0x0045}, {0x0014, 0x0046}, {0x0014, 0x0047}, + {0x0009, 0x000f}, {0x0008, 0x000f}, {0x0009, 0x0010}, {0x0009, 0x0011}, {0x000a, 0x000d}, {0x000b, 0x0010}, {0x000c, 0x0011}, {0x000d, 0x0012}, + {0x000e, 0x0016}, {0x0010, 0x002b}, {0x0011, 0x0044}, {0x0012, 0x0071}, {0x0014, 0x0048}, {0x0014, 0x0049}, {0x0014, 0x004a}, {0x0014, 0x004b}, + {0x0014, 0x004c}, {0x0014, 0x004d}, {0x0014, 0x004e}, {0x0014, 0x004f}, {0x0014, 0x0050}, {0x0014, 0x0051}, {0x0014, 0x0052}, {0x0014, 0x0053}, + {0x000b, 0x0011}, {0x000a, 0x000e}, {0x000a, 0x000f}, {0x000b, 0x0012}, {0x000b, 0x0013}, {0x000c, 0x0012}, {0x000d, 0x0013}, {0x000e, 0x0017}, + {0x0010, 0x002c}, {0x0012, 0x0072}, {0x0011, 0x0045}, {0x0013, 0x00d0}, {0x0013, 0x00d1}, {0x0014, 0x0054}, {0x0014, 0x0055}, {0x0014, 0x0056}, + {0x0014, 0x0057}, {0x0014, 0x0058}, {0x0014, 0x0059}, {0x0014, 0x005a}, {0x0014, 0x005b}, {0x0014, 0x005c}, {0x0014, 0x005d}, {0x0014, 0x005e}, + {0x000c, 0x0013}, {0x000c, 0x0014}, {0x000c, 0x0015}, {0x000d, 0x0014}, {0x000d, 0x0015}, {0x000e, 0x0018}, {0x000f, 0x001e}, {0x0010, 0x002d}, + {0x0011, 0x0046}, {0x0011, 0x0047}, {0x0011, 0x0048}, {0x0014, 0x005f}, {0x0014, 0x0060}, {0x0014, 0x0061}, {0x0014, 0x0062}, {0x0014, 0x0063}, + {0x0014, 0x0064}, {0x0014, 0x0065}, {0x0014, 0x0066}, {0x0014, 0x0067}, {0x0014, 0x0068}, {0x0014, 0x0069}, {0x0014, 0x006a}, {0x0014, 0x006b}, + {0x000e, 0x0019}, {0x000d, 0x0016}, {0x000d, 0x0017}, {0x000e, 0x001a}, {0x000e, 0x001b}, {0x000f, 0x001f}, {0x0010, 0x002e}, {0x0011, 0x0049}, + {0x0012, 0x0073}, {0x0014, 0x006c}, {0x0014, 0x006d}, {0x0014, 0x006e}, {0x0014, 0x006f}, {0x0014, 0x0070}, {0x0014, 0x0071}, {0x0014, 0x0072}, + {0x0014, 0x0073}, {0x0014, 0x0074}, {0x0014, 0x0075}, {0x0014, 0x0076}, {0x0014, 0x0077}, {0x0014, 0x0078}, {0x0014, 0x0079}, {0x0014, 0x007a}, + {0x0010, 0x002f}, {0x000f, 0x0020}, {0x0010, 0x0030}, {0x000f, 0x0021}, {0x0010, 0x0031}, {0x0011, 0x004a}, {0x0011, 0x004b}, {0x0012, 0x0074}, + {0x0014, 0x007b}, {0x0014, 0x007c}, {0x0013, 0x00d2}, {0x0014, 0x007d}, {0x0014, 0x007e}, {0x0014, 0x007f}, {0x0014, 0x0080}, {0x0014, 0x0081}, + {0x0014, 0x0082}, {0x0014, 0x0083}, {0x0014, 0x0084}, {0x0014, 0x0085}, {0x0014, 0x0086}, {0x0014, 0x0087}, {0x0014, 0x0088}, {0x0014, 0x0089}, + {0x0012, 0x0075}, {0x0010, 0x0032}, {0x0010, 0x0033}, {0x0011, 0x004c}, {0x0011, 0x004d}, {0x0013, 0x00d3}, {0x0013, 0x00d4}, {0x0012, 0x0076}, + {0x0013, 0x00d5}, {0x0014, 0x008a}, {0x0014, 0x008b}, {0x0014, 0x008c}, {0x0014, 0x008d}, {0x0014, 0x008e}, {0x0014, 0x008f}, {0x0014, 0x0090}, + {0x0014, 0x0091}, {0x0014, 0x0092}, {0x0014, 0x0093}, {0x0014, 0x0094}, {0x0014, 0x0095}, {0x0014, 0x0096}, {0x0014, 0x0097}, {0x0014, 0x0098}, + {0x0013, 0x00d6}, {0x0013, 0x00d7}, {0x0012, 0x0077}, {0x0012, 0x0078}, {0x0014, 0x0099}, {0x0014, 0x009a}, {0x0013, 0x00d8}, {0x0014, 0x009b}, + {0x0014, 0x009c}, {0x0014, 0x009d}, {0x0014, 0x009e}, {0x0014, 0x009f}, {0x0014, 0x00a0}, {0x0014, 0x00a1}, {0x0014, 0x00a2}, {0x0014, 0x00a3}, + {0x0014, 0x00a4}, {0x0014, 0x00a5}, {0x0014, 0x00a6}, {0x0014, 0x00a7}, {0x0014, 0x00a8}, {0x0014, 0x00a9}, {0x0014, 0x00aa}, {0x0014, 0x00ab}, + {0x0014, 0x00ac}, {0x0014, 0x00ad}, {0x0014, 0x00ae}, {0x0014, 0x00af}, {0x0012, 0x0079}, {0x0014, 0x00b0}, {0x0014, 0x00b1}, {0x0014, 0x00b2}, + {0x0014, 0x00b3}, {0x0014, 0x00b4}, {0x0014, 0x00b5}, {0x0014, 0x00b6}, {0x0014, 0x00b7}, {0x0014, 0x00b8}, {0x0014, 0x00b9}, {0x0014, 0x00ba}, + {0x0014, 0x00bb}, {0x0014, 0x00bc}, {0x0014, 0x00bd}, {0x0014, 0x00be}, {0x0014, 0x00bf}, {0x0014, 0x00c0}, {0x0014, 0x00c1}, {0x0014, 0x00c2}, + {0x0014, 0x00c3}, {0x0014, 0x00c4}, {0x0014, 0x00c5}, {0x0014, 0x00c6}, {0x0013, 0x00d9}, {0x0013, 0x00da}, {0x0014, 0x00c7}, {0x0014, 0x00c8}, + {0x0014, 0x00c9}, {0x0014, 0x00ca}, {0x0014, 0x00cb}, {0x0014, 0x00cc}, {0x0014, 0x00cd}, {0x0014, 0x00ce}, {0x0014, 0x00cf}, {0x0014, 0x00d0}, + {0x0014, 0x00d1}, {0x0014, 0x00d2}, {0x0014, 0x00d3}, {0x0014, 0x00d4}, {0x0014, 0x00d5}, {0x0014, 0x00d6}, {0x0014, 0x00d7}, {0x0014, 0x00d8}, + {0x0014, 0x00d9}, {0x0014, 0x00da}, {0x0014, 0x00db}, {0x0014, 0x00dc}, {0x0014, 0x00dd}, {0x0014, 0x00de}, {0x0014, 0x00df}, {0x0014, 0x00e0}, + {0x0014, 0x00e1}, {0x0014, 0x00e2}, {0x0014, 0x00e3}, {0x0014, 0x00e4}, {0x0014, 0x00e5}, {0x0014, 0x00e6}, {0x0014, 0x00e7}, {0x0014, 0x00e8}, + {0x0014, 0x00e9}, {0x0014, 0x00ea}, {0x0014, 0x00eb}, {0x0014, 0x00ec}, {0x0014, 0x00ed}, {0x0014, 0x00ee}, {0x0014, 0x00ef}, {0x0014, 0x00f0}, + {0x0014, 0x00f1}, {0x0014, 0x00f2}, {0x0014, 0x00f3}, {0x0014, 0x00f4}, {0x0014, 0x00f5}, {0x0014, 0x00f6}, {0x0014, 0x00f7}, {0x0014, 0x00f8}, + {0x0014, 0x00f9}, {0x0014, 0x00fa}, {0x0014, 0x00fb}, {0x0014, 0x00fc}, {0x0014, 0x00fd}, {0x0014, 0x00fe}, {0x0014, 0x00ff}, {0x0014, 0x0100}, + {0x0014, 0x0101}, {0x0014, 0x0102}, {0x0014, 0x0103}, {0x0014, 0x0104}, {0x0014, 0x0105}, {0x0014, 0x0106}, {0x0014, 0x0107}, {0x0014, 0x0108}, + {0x0014, 0x0109}, {0x0014, 0x010a}, {0x0014, 0x010b}, {0x0014, 0x010c}, {0x0014, 0x010d}, {0x0014, 0x010e}, {0x0014, 0x010f}, {0x0014, 0x0110}, + {0x0014, 0x0111}, {0x0014, 0x0112}, {0x0014, 0x0113}, {0x0014, 0x0114}, {0x0014, 0x0115}, {0x0014, 0x0116}, {0x0014, 0x0117}, {0x0014, 0x0118}, + {0x0014, 0x0119}, {0x0014, 0x011a}, {0x0014, 0x011b}, {0x0014, 0x011c}, {0x0014, 0x011d}, {0x0014, 0x011e}, {0x0014, 0x011f}, {0x0014, 0x0120}, + {0x0014, 0x0121}, {0x0014, 0x0122}, {0x0014, 0x0123}, {0x0014, 0x0124}, {0x0014, 0x0125}, {0x0014, 0x0126}, {0x0014, 0x0127}, {0x0014, 0x0128}, + {0x0014, 0x0129}, {0x0014, 0x012a}, {0x0014, 0x012b}, {0x0014, 0x012c}, {0x0014, 0x012d}, {0x0014, 0x012e}, {0x0014, 0x012f}, {0x0014, 0x0130}, + {0x0014, 0x0131}, {0x0014, 0x0132}, {0x0014, 0x0133}, {0x0014, 0x0134}, {0x0014, 0x0135}, {0x0014, 0x0136}, {0x0014, 0x0137}, {0x0014, 0x0138}, + {0x0014, 0x0139}, {0x0014, 0x013a}, {0x0014, 0x013b}, {0x0014, 0x013c}, {0x0014, 0x013d}, {0x0014, 0x013e}, {0x0014, 0x013f}, {0x0014, 0x0140}, + {0x0014, 0x0141}, {0x0014, 0x0142}, {0x0014, 0x0143}, {0x0014, 0x0144}, {0x0014, 0x0145}, {0x0014, 0x0146}, {0x0014, 0x0147}, {0x0014, 0x0148}, + {0x0014, 0x0149}, {0x0014, 0x014a}, {0x0014, 0x014b}, {0x0014, 0x014c}, {0x0014, 0x014d}, {0x0014, 0x014e}, {0x0014, 0x014f}, {0x0014, 0x0150}, + {0x0014, 0x0151}, {0x0014, 0x0152}, {0x0014, 0x0153}, {0x0014, 0x0154}, {0x0014, 0x0155}, {0x0014, 0x0156}, {0x0014, 0x0157}, {0x0014, 0x0158}, + {0x0014, 0x0159}, {0x0014, 0x015a}, {0x0014, 0x015b}, {0x0014, 0x015c}, {0x0014, 0x015d}, {0x0014, 0x015e}, {0x0014, 0x015f}, {0x0014, 0x0160}, + {0x0014, 0x0161}, {0x0014, 0x0162}, {0x0014, 0x0163}, {0x0014, 0x0164}, {0x0014, 0x0165}, {0x0014, 0x0166}, {0x0014, 0x0167}, {0x0014, 0x0168}, + {0x0014, 0x0169}, {0x0014, 0x016a}, {0x0014, 0x016b}, {0x0014, 0x016c}, {0x0014, 0x016d}, {0x0014, 0x016e}, {0x0014, 0x016f}, {0x0014, 0x0170}, + {0x0014, 0x0171}, {0x0014, 0x0172}, {0x0014, 0x0173}, {0x0014, 0x0174}, {0x0014, 0x0175}, {0x0014, 0x0176}, {0x0014, 0x0177}, {0x0014, 0x0178}, + {0x0014, 0x0179}, {0x0014, 0x017a}, {0x0014, 0x017b}, {0x0014, 0x017c}, {0x0014, 0x017d}, {0x0014, 0x017e}, {0x0014, 0x017f}, {0x0014, 0x0180}, + {0x0014, 0x0181}, {0x0014, 0x0182}, {0x0014, 0x0183}, {0x0014, 0x0184}, {0x0014, 0x0185}, {0x0014, 0x0186}, {0x0014, 0x0187}, {0x0014, 0x0188}, + {0x0014, 0x0189}, {0x0014, 0x018a}, {0x0014, 0x018b}, {0x0014, 0x018c}, {0x0014, 0x018d}, {0x0014, 0x018e}, {0x0014, 0x018f}, {0x0014, 0x0190}, + {0x0014, 0x0191}, {0x0014, 0x0192}, {0x0014, 0x0193}, {0x0014, 0x0194}, {0x0014, 0x0195}, {0x0014, 0x0196}, {0x0014, 0x0197}, {0x0013, 0x00db}, +}; + +const uint32_t c_aauiCQMFHuffDec15[73][16] = +{ + {0x000cffff, 0x000bffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x0002ffff, 0x0001ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x00000019, 0x0000001a, 0x00000031, 0x00000032, }, + {0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, }, + {0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, }, + {0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, }, + {0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, }, + {0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, }, + {0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, }, + {0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030062, 0x00030062, 0x00030062, 0x00030062, 0x00030062, 0x00030062, 0x00030062, 0x00030062, }, + {0x00010091, 0x00010091, 0x00010092, 0x00010092, 0x00020003, 0x00020003, 0x00020003, 0x00020003, 0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, }, + {0x00020035, 0x00020035, 0x00020035, 0x00020035, 0x00020048, 0x00020048, 0x00020048, 0x00020048, 0x0002004c, 0x0002004c, 0x0002004c, 0x0002004c, 0x00020060, 0x00020060, 0x00020060, 0x00020060, }, + {0x00020063, 0x00020063, 0x00020063, 0x00020063, 0x00020064, 0x00020064, 0x00020064, 0x00020064, 0x00020079, 0x00020079, 0x00020079, 0x00020079, 0x0002007a, 0x0002007a, 0x0002007a, 0x0002007a, }, + {0x00010005, 0x00010005, 0x0001001e, 0x0001001e, 0x00010036, 0x00010036, 0x0001004d, 0x0001004d, 0x00010065, 0x00010065, 0x00010078, 0x00010078, 0x0001007b, 0x0001007b, 0x0001007c, 0x0001007c, }, + {0x0015ffff, 0x0014ffff, 0x0012ffff, 0x0013ffff, 0x000dffff, 0x000effff, 0x000fffff, 0x0010ffff, 0x0011ffff, 0x00000006, 0x0000001f, 0x0000004e, 0x0000007d, 0x00000090, 0x00000093, 0x000000a9, }, + {0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, }, + {0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, }, + {0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, }, + {0x00030095, 0x00030095, 0x00030095, 0x00030095, 0x00030095, 0x00030095, 0x00030095, 0x00030095, 0x000300a8, 0x000300a8, 0x000300a8, 0x000300a8, 0x000300a8, 0x000300a8, 0x000300a8, 0x000300a8, }, + {0x000300aa, 0x000300aa, 0x000300aa, 0x000300aa, 0x000300aa, 0x000300aa, 0x000300aa, 0x000300aa, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, }, + {0x000100ad, 0x000100ad, 0x000100c0, 0x000100c0, 0x000100c3, 0x000100c3, 0x000100c4, 0x000100c4, 0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020038, 0x00020038, 0x00020038, 0x00020038, }, + {0x00020067, 0x00020067, 0x00020067, 0x00020067, 0x000200ac, 0x000200ac, 0x000200ac, 0x000200ac, 0x000200c1, 0x000200c1, 0x000200c1, 0x000200c1, 0x000200c2, 0x000200c2, 0x000200c2, 0x000200c2, }, + {0x00000097, 0x000000ae, 0x000000c5, 0x000000d8, 0x000000d9, 0x000000da, 0x00010008, 0x00010008, 0x00010050, 0x00010050, 0x00010068, 0x00010068, 0x0001007f, 0x0001007f, 0x00010096, 0x00010096, }, + {0x002fffff, 0x0020ffff, 0x001fffff, 0x001effff, 0x001bffff, 0x001cffff, 0x001dffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x0019ffff, 0x001affff, 0x00000021, 0x00000039, 0x00000051, 0x00000080, }, + {0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, }, + {0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, }, + {0x000300af, 0x000300af, 0x000300af, 0x000300af, 0x000300af, 0x000300af, 0x000300af, 0x000300af, 0x000300c6, 0x000300c6, 0x000300c6, 0x000300c6, 0x000300c6, 0x000300c6, 0x000300c6, 0x000300c6, }, + {0x000300db, 0x000300db, 0x000300db, 0x000300db, 0x000300db, 0x000300db, 0x000300db, 0x000300db, 0x000300dc, 0x000300dc, 0x000300dc, 0x000300dc, 0x000300dc, 0x000300dc, 0x000300dc, 0x000300dc, }, + {0x000300f1, 0x000300f1, 0x000300f1, 0x000300f1, 0x000300f1, 0x000300f1, 0x000300f1, 0x000300f1, 0x000300f2, 0x000300f2, 0x000300f2, 0x000300f2, 0x000300f2, 0x000300f2, 0x000300f2, 0x000300f2, }, + {0x00010109, 0x00010109, 0x0001010b, 0x0001010b, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002003a, 0x0002003a, 0x0002003a, 0x0002003a, 0x00020052, 0x00020052, 0x00020052, 0x00020052, }, + {0x0002006a, 0x0002006a, 0x0002006a, 0x0002006a, 0x00020081, 0x00020081, 0x00020081, 0x00020081, 0x000200b0, 0x000200b0, 0x000200b0, 0x000200b0, 0x000200c7, 0x000200c7, 0x000200c7, 0x000200c7, }, + {0x000200dd, 0x000200dd, 0x000200dd, 0x000200dd, 0x000200f0, 0x000200f0, 0x000200f0, 0x000200f0, 0x000200f3, 0x000200f3, 0x000200f3, 0x000200f3, 0x000200f4, 0x000200f4, 0x000200f4, 0x000200f4, }, + {0x0000010a, 0x0000010c, 0x00000121, 0x00000122, 0x0001000b, 0x0001000b, 0x00010023, 0x00010023, 0x00010053, 0x00010053, 0x00010099, 0x00010099, 0x000100de, 0x000100de, 0x000100f5, 0x000100f5, }, + {0x0024ffff, 0x0022ffff, 0x0025ffff, 0x0026ffff, 0x0027ffff, 0x0028ffff, 0x0029ffff, 0x0000003b, 0x0000006b, 0x00000082, 0x0000009a, 0x000000b1, 0x000000c8, 0x000000df, 0x000000f6, 0x00000108, }, + {0x0040ffff, 0x0041ffff, 0x0042ffff, 0x0043ffff, 0x0044ffff, 0x0045ffff, 0x0046ffff, 0x0047ffff, 0x0048ffff, 0x002dffff, 0x002effff, 0x002affff, 0x002bffff, 0x002cffff, 0x0021ffff, 0x0023ffff, }, + {0x0002013b, 0x0002013b, 0x0002013b, 0x0002013b, 0x00020154, 0x00020154, 0x00020154, 0x00020154, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, }, + {0x00030083, 0x00030083, 0x00030083, 0x00030083, 0x00030083, 0x00030083, 0x00030083, 0x00030083, 0x0003009b, 0x0003009b, 0x0003009b, 0x0003009b, 0x0003009b, 0x0003009b, 0x0003009b, 0x0003009b, }, + {0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, }, + {0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x0003006c, 0x0003006c, 0x0003006c, 0x0003006c, 0x0003006c, 0x0003006c, 0x0003006c, 0x0003006c, }, + {0x000300b2, 0x000300b2, 0x000300b2, 0x000300b2, 0x000300b2, 0x000300b2, 0x000300b2, 0x000300b2, 0x000300ca, 0x000300ca, 0x000300ca, 0x000300ca, 0x000300ca, 0x000300ca, 0x000300ca, 0x000300ca, }, + {0x000300e0, 0x000300e0, 0x000300e0, 0x000300e0, 0x000300e0, 0x000300e0, 0x000300e0, 0x000300e0, 0x000300e1, 0x000300e1, 0x000300e1, 0x000300e1, 0x000300e1, 0x000300e1, 0x000300e1, 0x000300e1, }, + {0x000300e2, 0x000300e2, 0x000300e2, 0x000300e2, 0x000300e2, 0x000300e2, 0x000300e2, 0x000300e2, 0x000300f7, 0x000300f7, 0x000300f7, 0x000300f7, 0x000300f7, 0x000300f7, 0x000300f7, 0x000300f7, }, + {0x0003010d, 0x0003010d, 0x0003010d, 0x0003010d, 0x0003010d, 0x0003010d, 0x0003010d, 0x0003010d, 0x0003010e, 0x0003010e, 0x0003010e, 0x0003010e, 0x0003010e, 0x0003010e, 0x0003010e, 0x0003010e, }, + {0x00030123, 0x00030123, 0x00030123, 0x00030123, 0x00030123, 0x00030123, 0x00030123, 0x00030123, 0x00030124, 0x00030124, 0x00030124, 0x00030124, 0x00030124, 0x00030124, 0x00030124, 0x00030124, }, + {0x0001013e, 0x0001013e, 0x0001016c, 0x0001016c, 0x0001016d, 0x0001016d, 0x0001023f, 0x0001023f, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003d, }, + {0x00020055, 0x00020055, 0x00020055, 0x00020055, 0x000200b3, 0x000200b3, 0x000200b3, 0x000200b3, 0x000200c9, 0x000200c9, 0x000200c9, 0x000200c9, 0x000200f8, 0x000200f8, 0x000200f8, 0x000200f8, }, + {0x0002010f, 0x0002010f, 0x0002010f, 0x0002010f, 0x00020120, 0x00020120, 0x00020120, 0x00020120, 0x00020127, 0x00020127, 0x00020127, 0x00020127, 0x0002013a, 0x0002013a, 0x0002013a, 0x0002013a, }, + {0x00000237, 0x00000238, 0x00000239, 0x0000023a, 0x0000023b, 0x0000023c, 0x0000023d, 0x0000023e, 0x0001000e, 0x0001000e, 0x00010026, 0x00010026, 0x0001006d, 0x0001006d, 0x0001009d, 0x0001009d, }, + {0x000100cb, 0x000100cb, 0x000100cc, 0x000100cc, 0x00010112, 0x00010112, 0x00010125, 0x00010125, 0x00010126, 0x00010126, 0x00010128, 0x00010128, 0x00010138, 0x00010138, 0x00010139, 0x00010139, }, + {0x0030ffff, 0x0031ffff, 0x0032ffff, 0x0033ffff, 0x0034ffff, 0x0035ffff, 0x0036ffff, 0x0037ffff, 0x0038ffff, 0x0039ffff, 0x003affff, 0x003bffff, 0x003cffff, 0x003dffff, 0x003effff, 0x003fffff, }, + {0x0000000d, 0x0000000f, 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000014, 0x00000015, 0x00000016, 0x00000017, 0x00000027, 0x00000028, 0x00000029, 0x0000002a, 0x0000002b, 0x0000002c, }, + {0x0000002d, 0x0000002e, 0x0000002f, 0x0000003e, 0x0000003f, 0x00000040, 0x00000041, 0x00000042, 0x00000043, 0x00000044, 0x00000045, 0x00000046, 0x00000047, 0x00000056, 0x00000057, 0x00000058, }, + {0x00000059, 0x0000005a, 0x0000005b, 0x0000005c, 0x0000005d, 0x0000005e, 0x0000005f, 0x0000006e, 0x0000006f, 0x00000070, 0x00000071, 0x00000072, 0x00000073, 0x00000074, 0x00000075, 0x00000076, }, + {0x00000077, 0x00000084, 0x00000085, 0x00000086, 0x00000087, 0x00000088, 0x00000089, 0x0000008a, 0x0000008b, 0x0000008c, 0x0000008d, 0x0000008e, 0x0000008f, 0x0000009c, 0x0000009e, 0x0000009f, }, + {0x000000a0, 0x000000a1, 0x000000a2, 0x000000a3, 0x000000a4, 0x000000a5, 0x000000a6, 0x000000a7, 0x000000b4, 0x000000b5, 0x000000b6, 0x000000b7, 0x000000b8, 0x000000b9, 0x000000ba, 0x000000bb, }, + {0x000000bc, 0x000000bd, 0x000000be, 0x000000bf, 0x000000cd, 0x000000ce, 0x000000cf, 0x000000d0, 0x000000d1, 0x000000d2, 0x000000d3, 0x000000d4, 0x000000d5, 0x000000d6, 0x000000d7, 0x000000e3, }, + {0x000000e4, 0x000000e5, 0x000000e6, 0x000000e7, 0x000000e8, 0x000000e9, 0x000000ea, 0x000000eb, 0x000000ec, 0x000000ed, 0x000000ee, 0x000000ef, 0x000000f9, 0x000000fa, 0x000000fb, 0x000000fc, }, + {0x000000fd, 0x000000fe, 0x000000ff, 0x00000100, 0x00000101, 0x00000102, 0x00000103, 0x00000104, 0x00000105, 0x00000106, 0x00000107, 0x00000110, 0x00000111, 0x00000113, 0x00000114, 0x00000115, }, + {0x00000116, 0x00000117, 0x00000118, 0x00000119, 0x0000011a, 0x0000011b, 0x0000011c, 0x0000011d, 0x0000011e, 0x0000011f, 0x00000129, 0x0000012a, 0x0000012b, 0x0000012c, 0x0000012d, 0x0000012e, }, + {0x0000012f, 0x00000130, 0x00000131, 0x00000132, 0x00000133, 0x00000134, 0x00000135, 0x00000136, 0x00000137, 0x0000013c, 0x0000013d, 0x0000013f, 0x00000140, 0x00000141, 0x00000142, 0x00000143, }, + {0x00000144, 0x00000145, 0x00000146, 0x00000147, 0x00000148, 0x00000149, 0x0000014a, 0x0000014b, 0x0000014c, 0x0000014d, 0x0000014e, 0x0000014f, 0x00000150, 0x00000151, 0x00000152, 0x00000153, }, + {0x00000155, 0x00000156, 0x00000157, 0x00000158, 0x00000159, 0x0000015a, 0x0000015b, 0x0000015c, 0x0000015d, 0x0000015e, 0x0000015f, 0x00000160, 0x00000161, 0x00000162, 0x00000163, 0x00000164, }, + {0x00000165, 0x00000166, 0x00000167, 0x00000168, 0x00000169, 0x0000016a, 0x0000016b, 0x0000016e, 0x0000016f, 0x00000170, 0x00000171, 0x00000172, 0x00000173, 0x00000174, 0x00000175, 0x00000176, }, + {0x00000177, 0x00000178, 0x00000179, 0x0000017a, 0x0000017b, 0x0000017c, 0x0000017d, 0x0000017e, 0x0000017f, 0x00000180, 0x00000181, 0x00000182, 0x00000183, 0x00000184, 0x00000185, 0x00000186, }, + {0x00000187, 0x00000188, 0x00000189, 0x0000018a, 0x0000018b, 0x0000018c, 0x0000018d, 0x0000018e, 0x0000018f, 0x00000190, 0x00000191, 0x00000192, 0x00000193, 0x00000194, 0x00000195, 0x00000196, }, + {0x00000197, 0x00000198, 0x00000199, 0x0000019a, 0x0000019b, 0x0000019c, 0x0000019d, 0x0000019e, 0x0000019f, 0x000001a0, 0x000001a1, 0x000001a2, 0x000001a3, 0x000001a4, 0x000001a5, 0x000001a6, }, + {0x000001a7, 0x000001a8, 0x000001a9, 0x000001aa, 0x000001ab, 0x000001ac, 0x000001ad, 0x000001ae, 0x000001af, 0x000001b0, 0x000001b1, 0x000001b2, 0x000001b3, 0x000001b4, 0x000001b5, 0x000001b6, }, + {0x000001b7, 0x000001b8, 0x000001b9, 0x000001ba, 0x000001bb, 0x000001bc, 0x000001bd, 0x000001be, 0x000001bf, 0x000001c0, 0x000001c1, 0x000001c2, 0x000001c3, 0x000001c4, 0x000001c5, 0x000001c6, }, + {0x000001c7, 0x000001c8, 0x000001c9, 0x000001ca, 0x000001cb, 0x000001cc, 0x000001cd, 0x000001ce, 0x000001cf, 0x000001d0, 0x000001d1, 0x000001d2, 0x000001d3, 0x000001d4, 0x000001d5, 0x000001d6, }, + {0x000001d7, 0x000001d8, 0x000001d9, 0x000001da, 0x000001db, 0x000001dc, 0x000001dd, 0x000001de, 0x000001df, 0x000001e0, 0x000001e1, 0x000001e2, 0x000001e3, 0x000001e4, 0x000001e5, 0x000001e6, }, + {0x000001e7, 0x000001e8, 0x000001e9, 0x000001ea, 0x000001eb, 0x000001ec, 0x000001ed, 0x000001ee, 0x000001ef, 0x000001f0, 0x000001f1, 0x000001f2, 0x000001f3, 0x000001f4, 0x000001f5, 0x000001f6, }, + {0x000001f7, 0x000001f8, 0x000001f9, 0x000001fa, 0x000001fb, 0x000001fc, 0x000001fd, 0x000001fe, 0x000001ff, 0x00000200, 0x00000201, 0x00000202, 0x00000203, 0x00000204, 0x00000205, 0x00000206, }, + {0x00000207, 0x00000208, 0x00000209, 0x0000020a, 0x0000020b, 0x0000020c, 0x0000020d, 0x0000020e, 0x0000020f, 0x00000210, 0x00000211, 0x00000212, 0x00000213, 0x00000214, 0x00000215, 0x00000216, }, + {0x00000217, 0x00000218, 0x00000219, 0x0000021a, 0x0000021b, 0x0000021c, 0x0000021d, 0x0000021e, 0x0000021f, 0x00000220, 0x00000221, 0x00000222, 0x00000223, 0x00000224, 0x00000225, 0x00000226, }, + {0x00000227, 0x00000228, 0x00000229, 0x0000022a, 0x0000022b, 0x0000022c, 0x0000022d, 0x0000022e, 0x0000022f, 0x00000230, 0x00000231, 0x00000232, 0x00000233, 0x00000234, 0x00000235, 0x00000236, }, +}; + +const uint32_t c_aauiCQMFHuffEnc16[729][2] = +{ + {0x0006, 0x000d}, {0x0005, 0x0010}, {0x0006, 0x000e}, {0x0006, 0x000f}, {0x0006, 0x0010}, {0x0007, 0x000a}, {0x0007, 0x000b}, {0x0008, 0x000a}, + {0x0009, 0x000b}, {0x000b, 0x000d}, {0x000c, 0x000e}, {0x000e, 0x0016}, {0x0010, 0x002d}, {0x0011, 0x0051}, {0x0012, 0x008c}, {0x0014, 0x0000}, + {0x0014, 0x0001}, {0x0014, 0x0002}, {0x0014, 0x0003}, {0x0014, 0x0004}, {0x0014, 0x0005}, {0x0014, 0x0006}, {0x0014, 0x0007}, {0x0014, 0x0008}, + {0x0014, 0x0009}, {0x0014, 0x000a}, {0x0014, 0x000b}, {0x0005, 0x0011}, {0x0004, 0x000f}, {0x0005, 0x0012}, {0x0005, 0x0013}, {0x0005, 0x0014}, + {0x0006, 0x0011}, {0x0006, 0x0012}, {0x0007, 0x000c}, {0x0008, 0x000b}, {0x000a, 0x000c}, {0x000b, 0x000e}, {0x000d, 0x0010}, {0x000e, 0x0017}, + {0x000f, 0x001c}, {0x0013, 0x010b}, {0x0013, 0x010c}, {0x0014, 0x000c}, {0x0014, 0x000d}, {0x0014, 0x000e}, {0x0014, 0x000f}, {0x0014, 0x0010}, + {0x0014, 0x0011}, {0x0014, 0x0012}, {0x0014, 0x0013}, {0x0014, 0x0014}, {0x0014, 0x0015}, {0x0014, 0x0016}, {0x0006, 0x0013}, {0x0005, 0x0015}, + {0x0005, 0x0016}, {0x0005, 0x0017}, {0x0005, 0x0018}, {0x0006, 0x0014}, {0x0007, 0x000d}, {0x0007, 0x000e}, {0x0009, 0x000c}, {0x000a, 0x000d}, + {0x000c, 0x000f}, {0x000d, 0x0011}, {0x000f, 0x001d}, {0x0011, 0x0052}, {0x0012, 0x008d}, {0x0012, 0x008e}, {0x0014, 0x0017}, {0x0014, 0x0018}, + {0x0014, 0x0019}, {0x0014, 0x001a}, {0x0014, 0x001b}, {0x0014, 0x001c}, {0x0014, 0x001d}, {0x0014, 0x001e}, {0x0014, 0x001f}, {0x0014, 0x0020}, + {0x0014, 0x0021}, {0x0006, 0x0015}, {0x0005, 0x0019}, {0x0005, 0x001a}, {0x0005, 0x001b}, {0x0006, 0x0016}, {0x0006, 0x0017}, {0x0007, 0x000f}, + {0x0008, 0x000c}, {0x0009, 0x000d}, {0x000b, 0x000f}, {0x000c, 0x0010}, {0x000d, 0x0012}, {0x000f, 0x001e}, {0x0012, 0x008f}, {0x0014, 0x0022}, + {0x0014, 0x0023}, {0x0014, 0x0024}, {0x0014, 0x0025}, {0x0014, 0x0026}, {0x0014, 0x0027}, {0x0014, 0x0028}, {0x0014, 0x0029}, {0x0014, 0x002a}, + {0x0014, 0x002b}, {0x0014, 0x002c}, {0x0014, 0x002d}, {0x0014, 0x002e}, {0x0006, 0x0018}, {0x0005, 0x001c}, {0x0005, 0x001d}, {0x0006, 0x0019}, + {0x0006, 0x001a}, {0x0007, 0x0010}, {0x0007, 0x0011}, {0x0008, 0x000d}, {0x000a, 0x000e}, {0x000b, 0x0010}, {0x000c, 0x0011}, {0x000e, 0x0018}, + {0x0010, 0x002e}, {0x0012, 0x0090}, {0x0013, 0x010d}, {0x0013, 0x010e}, {0x0014, 0x002f}, {0x0014, 0x0030}, {0x0014, 0x0031}, {0x0014, 0x0032}, + {0x0014, 0x0033}, {0x0014, 0x0034}, {0x0014, 0x0035}, {0x0014, 0x0036}, {0x0014, 0x0037}, {0x0014, 0x0038}, {0x0014, 0x0039}, {0x0007, 0x0012}, + {0x0006, 0x001b}, {0x0006, 0x001c}, {0x0006, 0x001d}, {0x0007, 0x0013}, {0x0007, 0x0014}, {0x0008, 0x000e}, {0x0009, 0x000e}, {0x000b, 0x0011}, + {0x000c, 0x0012}, {0x000d, 0x0013}, {0x000e, 0x0019}, {0x0010, 0x002f}, {0x0012, 0x0091}, {0x0014, 0x003a}, {0x0014, 0x003b}, {0x0014, 0x003c}, + {0x0014, 0x003d}, {0x0014, 0x003e}, {0x0014, 0x003f}, {0x0014, 0x0040}, {0x0014, 0x0041}, {0x0014, 0x0042}, {0x0014, 0x0043}, {0x0014, 0x0044}, + {0x0014, 0x0045}, {0x0014, 0x0046}, {0x0007, 0x0015}, {0x0006, 0x001e}, {0x0006, 0x001f}, {0x0007, 0x0016}, {0x0007, 0x0017}, {0x0008, 0x000f}, + {0x0009, 0x000f}, {0x000a, 0x000f}, {0x000b, 0x0012}, {0x000d, 0x0014}, {0x000e, 0x001a}, {0x000f, 0x001f}, {0x0013, 0x010f}, {0x0011, 0x0053}, + {0x0014, 0x0047}, {0x0014, 0x0048}, {0x0014, 0x0049}, {0x0014, 0x004a}, {0x0014, 0x004b}, {0x0014, 0x004c}, {0x0014, 0x004d}, {0x0014, 0x004e}, + {0x0014, 0x004f}, {0x0014, 0x0050}, {0x0014, 0x0051}, {0x0014, 0x0052}, {0x0014, 0x0053}, {0x0008, 0x0010}, {0x0007, 0x0018}, {0x0007, 0x0019}, + {0x0008, 0x0011}, {0x0008, 0x0012}, {0x0009, 0x0010}, {0x000a, 0x0010}, {0x000b, 0x0013}, {0x000c, 0x0013}, {0x000e, 0x001b}, {0x000f, 0x0020}, + {0x0010, 0x0030}, {0x0012, 0x0092}, {0x0014, 0x0054}, {0x0014, 0x0055}, {0x0014, 0x0056}, {0x0014, 0x0057}, {0x0014, 0x0058}, {0x0014, 0x0059}, + {0x0014, 0x005a}, {0x0014, 0x005b}, {0x0014, 0x005c}, {0x0014, 0x005d}, {0x0014, 0x005e}, {0x0014, 0x005f}, {0x0014, 0x0060}, {0x0014, 0x0061}, + {0x0009, 0x0011}, {0x0008, 0x0013}, {0x0009, 0x0012}, {0x0009, 0x0013}, {0x000a, 0x0011}, {0x000a, 0x0012}, {0x000b, 0x0014}, {0x000c, 0x0014}, + {0x000d, 0x0015}, {0x000e, 0x001c}, {0x000f, 0x0021}, {0x0013, 0x0110}, {0x0012, 0x0093}, {0x0012, 0x0094}, {0x0014, 0x0062}, {0x0014, 0x0063}, + {0x0014, 0x0064}, {0x0014, 0x0065}, {0x0014, 0x0066}, {0x0014, 0x0067}, {0x0014, 0x0068}, {0x0014, 0x0069}, {0x0014, 0x006a}, {0x0014, 0x006b}, + {0x0014, 0x006c}, {0x0014, 0x006d}, {0x0014, 0x006e}, {0x000b, 0x0015}, {0x000a, 0x0013}, {0x000a, 0x0014}, {0x000a, 0x0015}, {0x000b, 0x0016}, + {0x000c, 0x0015}, {0x000d, 0x0016}, {0x000d, 0x0017}, {0x000f, 0x0022}, {0x0010, 0x0031}, {0x0012, 0x0095}, {0x0012, 0x0096}, {0x0014, 0x006f}, + {0x0013, 0x0111}, {0x0014, 0x0070}, {0x0014, 0x0071}, {0x0014, 0x0072}, {0x0014, 0x0073}, {0x0014, 0x0074}, {0x0014, 0x0075}, {0x0014, 0x0076}, + {0x0014, 0x0077}, {0x0014, 0x0078}, {0x0014, 0x0079}, {0x0014, 0x007a}, {0x0014, 0x007b}, {0x0014, 0x007c}, {0x000c, 0x0016}, {0x000b, 0x0017}, + {0x000c, 0x0017}, {0x000c, 0x0018}, {0x000c, 0x0019}, {0x000d, 0x0018}, {0x000e, 0x001d}, {0x000f, 0x0023}, {0x000f, 0x0024}, {0x0011, 0x0054}, + {0x0012, 0x0097}, {0x0014, 0x007d}, {0x0014, 0x007e}, {0x0014, 0x007f}, {0x0014, 0x0080}, {0x0014, 0x0081}, {0x0014, 0x0082}, {0x0014, 0x0083}, + {0x0014, 0x0084}, {0x0014, 0x0085}, {0x0014, 0x0086}, {0x0014, 0x0087}, {0x0014, 0x0088}, {0x0014, 0x0089}, {0x0014, 0x008a}, {0x0014, 0x008b}, + {0x0014, 0x008c}, {0x000e, 0x001e}, {0x000d, 0x0019}, {0x000d, 0x001a}, {0x000d, 0x001b}, {0x000e, 0x001f}, {0x000f, 0x0025}, {0x000f, 0x0026}, + {0x0010, 0x0032}, {0x0010, 0x0033}, {0x0012, 0x0098}, {0x0013, 0x0112}, {0x0014, 0x008d}, {0x0014, 0x008e}, {0x0014, 0x008f}, {0x0014, 0x0090}, + {0x0014, 0x0091}, {0x0014, 0x0092}, {0x0014, 0x0093}, {0x0014, 0x0094}, {0x0014, 0x0095}, {0x0014, 0x0096}, {0x0014, 0x0097}, {0x0014, 0x0098}, + {0x0014, 0x0099}, {0x0014, 0x009a}, {0x0014, 0x009b}, {0x0014, 0x009c}, {0x000f, 0x0027}, {0x000f, 0x0028}, {0x000f, 0x0029}, {0x000f, 0x002a}, + {0x0010, 0x0034}, {0x000f, 0x002b}, {0x0011, 0x0055}, {0x0012, 0x0099}, {0x0012, 0x009a}, {0x0012, 0x009b}, {0x0014, 0x009d}, {0x0013, 0x0113}, + {0x0014, 0x009e}, {0x0014, 0x009f}, {0x0014, 0x00a0}, {0x0014, 0x00a1}, {0x0014, 0x00a2}, {0x0014, 0x00a3}, {0x0014, 0x00a4}, {0x0014, 0x00a5}, + {0x0014, 0x00a6}, {0x0014, 0x00a7}, {0x0014, 0x00a8}, {0x0014, 0x00a9}, {0x0014, 0x00aa}, {0x0014, 0x00ab}, {0x0014, 0x00ac}, {0x0011, 0x0056}, + {0x0010, 0x0035}, {0x0010, 0x0036}, {0x0010, 0x0037}, {0x0011, 0x0057}, {0x0012, 0x009c}, {0x0012, 0x009d}, {0x0012, 0x009e}, {0x0014, 0x00ad}, + {0x0014, 0x00ae}, {0x0014, 0x00af}, {0x0014, 0x00b0}, {0x0014, 0x00b1}, {0x0014, 0x00b2}, {0x0014, 0x00b3}, {0x0014, 0x00b4}, {0x0014, 0x00b5}, + {0x0014, 0x00b6}, {0x0014, 0x00b7}, {0x0014, 0x00b8}, {0x0014, 0x00b9}, {0x0014, 0x00ba}, {0x0014, 0x00bb}, {0x0014, 0x00bc}, {0x0014, 0x00bd}, + {0x0014, 0x00be}, {0x0014, 0x00bf}, {0x0012, 0x009f}, {0x0011, 0x0058}, {0x0012, 0x00a0}, {0x0014, 0x00c0}, {0x0011, 0x0059}, {0x0013, 0x0114}, + {0x0012, 0x00a1}, {0x0014, 0x00c1}, {0x0013, 0x0115}, {0x0014, 0x00c2}, {0x0014, 0x00c3}, {0x0014, 0x00c4}, {0x0014, 0x00c5}, {0x0014, 0x00c6}, + {0x0014, 0x00c7}, {0x0014, 0x00c8}, {0x0014, 0x00c9}, {0x0014, 0x00ca}, {0x0014, 0x00cb}, {0x0014, 0x00cc}, {0x0014, 0x00cd}, {0x0014, 0x00ce}, + {0x0014, 0x00cf}, {0x0014, 0x00d0}, {0x0014, 0x00d1}, {0x0014, 0x00d2}, {0x0014, 0x00d3}, {0x0014, 0x00d4}, {0x0014, 0x00d5}, {0x0014, 0x00d6}, + {0x0014, 0x00d7}, {0x0014, 0x00d8}, {0x0014, 0x00d9}, {0x0014, 0x00da}, {0x0014, 0x00db}, {0x0014, 0x00dc}, {0x0014, 0x00dd}, {0x0014, 0x00de}, + {0x0014, 0x00df}, {0x0014, 0x00e0}, {0x0014, 0x00e1}, {0x0014, 0x00e2}, {0x0014, 0x00e3}, {0x0014, 0x00e4}, {0x0014, 0x00e5}, {0x0014, 0x00e6}, + {0x0014, 0x00e7}, {0x0014, 0x00e8}, {0x0014, 0x00e9}, {0x0014, 0x00ea}, {0x0014, 0x00eb}, {0x0014, 0x00ec}, {0x0014, 0x00ed}, {0x0014, 0x00ee}, + {0x0014, 0x00ef}, {0x0014, 0x00f0}, {0x0014, 0x00f1}, {0x0014, 0x00f2}, {0x0014, 0x00f3}, {0x0014, 0x00f4}, {0x0014, 0x00f5}, {0x0014, 0x00f6}, + {0x0014, 0x00f7}, {0x0014, 0x00f8}, {0x0014, 0x00f9}, {0x0014, 0x00fa}, {0x0014, 0x00fb}, {0x0014, 0x00fc}, {0x0014, 0x00fd}, {0x0014, 0x00fe}, + {0x0014, 0x00ff}, {0x0014, 0x0100}, {0x0014, 0x0101}, {0x0014, 0x0102}, {0x0014, 0x0103}, {0x0014, 0x0104}, {0x0014, 0x0105}, {0x0014, 0x0106}, + {0x0014, 0x0107}, {0x0014, 0x0108}, {0x0014, 0x0109}, {0x0014, 0x010a}, {0x0014, 0x010b}, {0x0014, 0x010c}, {0x0014, 0x010d}, {0x0014, 0x010e}, + {0x0014, 0x010f}, {0x0014, 0x0110}, {0x0014, 0x0111}, {0x0014, 0x0112}, {0x0014, 0x0113}, {0x0014, 0x0114}, {0x0014, 0x0115}, {0x0014, 0x0116}, + {0x0014, 0x0117}, {0x0014, 0x0118}, {0x0014, 0x0119}, {0x0014, 0x011a}, {0x0014, 0x011b}, {0x0014, 0x011c}, {0x0014, 0x011d}, {0x0014, 0x011e}, + {0x0014, 0x011f}, {0x0014, 0x0120}, {0x0014, 0x0121}, {0x0014, 0x0122}, {0x0014, 0x0123}, {0x0014, 0x0124}, {0x0014, 0x0125}, {0x0013, 0x0116}, + {0x0014, 0x0126}, {0x0014, 0x0127}, {0x0014, 0x0128}, {0x0014, 0x0129}, {0x0014, 0x012a}, {0x0014, 0x012b}, {0x0014, 0x012c}, {0x0014, 0x012d}, + {0x0014, 0x012e}, {0x0014, 0x012f}, {0x0014, 0x0130}, {0x0014, 0x0131}, {0x0014, 0x0132}, {0x0014, 0x0133}, {0x0014, 0x0134}, {0x0014, 0x0135}, + {0x0014, 0x0136}, {0x0014, 0x0137}, {0x0014, 0x0138}, {0x0014, 0x0139}, {0x0014, 0x013a}, {0x0014, 0x013b}, {0x0014, 0x013c}, {0x0014, 0x013d}, + {0x0014, 0x013e}, {0x0014, 0x013f}, {0x0014, 0x0140}, {0x0014, 0x0141}, {0x0014, 0x0142}, {0x0014, 0x0143}, {0x0014, 0x0144}, {0x0014, 0x0145}, + {0x0014, 0x0146}, {0x0014, 0x0147}, {0x0014, 0x0148}, {0x0014, 0x0149}, {0x0014, 0x014a}, {0x0014, 0x014b}, {0x0014, 0x014c}, {0x0014, 0x014d}, + {0x0014, 0x014e}, {0x0014, 0x014f}, {0x0014, 0x0150}, {0x0014, 0x0151}, {0x0014, 0x0152}, {0x0014, 0x0153}, {0x0014, 0x0154}, {0x0014, 0x0155}, + {0x0014, 0x0156}, {0x0014, 0x0157}, {0x0014, 0x0158}, {0x0014, 0x0159}, {0x0014, 0x015a}, {0x0014, 0x015b}, {0x0014, 0x015c}, {0x0014, 0x015d}, + {0x0014, 0x015e}, {0x0014, 0x015f}, {0x0014, 0x0160}, {0x0014, 0x0161}, {0x0014, 0x0162}, {0x0014, 0x0163}, {0x0014, 0x0164}, {0x0014, 0x0165}, + {0x0014, 0x0166}, {0x0014, 0x0167}, {0x0014, 0x0168}, {0x0014, 0x0169}, {0x0014, 0x016a}, {0x0014, 0x016b}, {0x0014, 0x016c}, {0x0014, 0x016d}, + {0x0014, 0x016e}, {0x0014, 0x016f}, {0x0014, 0x0170}, {0x0014, 0x0171}, {0x0014, 0x0172}, {0x0014, 0x0173}, {0x0014, 0x0174}, {0x0014, 0x0175}, + {0x0014, 0x0176}, {0x0014, 0x0177}, {0x0014, 0x0178}, {0x0014, 0x0179}, {0x0014, 0x017a}, {0x0014, 0x017b}, {0x0014, 0x017c}, {0x0014, 0x017d}, + {0x0014, 0x017e}, {0x0014, 0x017f}, {0x0014, 0x0180}, {0x0014, 0x0181}, {0x0014, 0x0182}, {0x0014, 0x0183}, {0x0014, 0x0184}, {0x0014, 0x0185}, + {0x0014, 0x0186}, {0x0014, 0x0187}, {0x0014, 0x0188}, {0x0014, 0x0189}, {0x0014, 0x018a}, {0x0014, 0x018b}, {0x0014, 0x018c}, {0x0014, 0x018d}, + {0x0014, 0x018e}, {0x0014, 0x018f}, {0x0014, 0x0190}, {0x0014, 0x0191}, {0x0014, 0x0192}, {0x0014, 0x0193}, {0x0014, 0x0194}, {0x0014, 0x0195}, + {0x0014, 0x0196}, {0x0014, 0x0197}, {0x0014, 0x0198}, {0x0014, 0x0199}, {0x0014, 0x019a}, {0x0014, 0x019b}, {0x0014, 0x019c}, {0x0014, 0x019d}, + {0x0014, 0x019e}, {0x0014, 0x019f}, {0x0014, 0x01a0}, {0x0014, 0x01a1}, {0x0014, 0x01a2}, {0x0014, 0x01a3}, {0x0014, 0x01a4}, {0x0014, 0x01a5}, + {0x0014, 0x01a6}, {0x0014, 0x01a7}, {0x0014, 0x01a8}, {0x0014, 0x01a9}, {0x0014, 0x01aa}, {0x0014, 0x01ab}, {0x0014, 0x01ac}, {0x0014, 0x01ad}, + {0x0014, 0x01ae}, {0x0014, 0x01af}, {0x0014, 0x01b0}, {0x0014, 0x01b1}, {0x0014, 0x01b2}, {0x0014, 0x01b3}, {0x0014, 0x01b4}, {0x0014, 0x01b5}, + {0x0014, 0x01b6}, {0x0014, 0x01b7}, {0x0014, 0x01b8}, {0x0014, 0x01b9}, {0x0014, 0x01ba}, {0x0014, 0x01bb}, {0x0014, 0x01bc}, {0x0014, 0x01bd}, + {0x0014, 0x01be}, {0x0014, 0x01bf}, {0x0014, 0x01c0}, {0x0014, 0x01c1}, {0x0014, 0x01c2}, {0x0014, 0x01c3}, {0x0014, 0x01c4}, {0x0014, 0x01c5}, + {0x0014, 0x01c6}, {0x0014, 0x01c7}, {0x0014, 0x01c8}, {0x0014, 0x01c9}, {0x0014, 0x01ca}, {0x0014, 0x01cb}, {0x0014, 0x01cc}, {0x0014, 0x01cd}, + {0x0014, 0x01ce}, {0x0014, 0x01cf}, {0x0014, 0x01d0}, {0x0014, 0x01d1}, {0x0014, 0x01d2}, {0x0014, 0x01d3}, {0x0014, 0x01d4}, {0x0014, 0x01d5}, + {0x0014, 0x01d6}, {0x0014, 0x01d7}, {0x0014, 0x01d8}, {0x0014, 0x01d9}, {0x0014, 0x01da}, {0x0014, 0x01db}, {0x0014, 0x01dc}, {0x0014, 0x01dd}, + {0x0014, 0x01de}, {0x0014, 0x01df}, {0x0014, 0x01e0}, {0x0014, 0x01e1}, {0x0014, 0x01e2}, {0x0014, 0x01e3}, {0x0014, 0x01e4}, {0x0014, 0x01e5}, + {0x0014, 0x01e6}, {0x0014, 0x01e7}, {0x0014, 0x01e8}, {0x0014, 0x01e9}, {0x0014, 0x01ea}, {0x0014, 0x01eb}, {0x0014, 0x01ec}, {0x0014, 0x01ed}, + {0x0014, 0x01ee}, {0x0014, 0x01ef}, {0x0014, 0x01f0}, {0x0014, 0x01f1}, {0x0014, 0x01f2}, {0x0014, 0x01f3}, {0x0014, 0x01f4}, {0x0014, 0x01f5}, + {0x0014, 0x01f6}, {0x0014, 0x01f7}, {0x0014, 0x01f8}, {0x0014, 0x01f9}, {0x0014, 0x01fa}, {0x0014, 0x01fb}, {0x0014, 0x01fc}, {0x0014, 0x01fd}, + {0x0014, 0x01fe}, {0x0014, 0x01ff}, {0x0014, 0x0200}, {0x0014, 0x0201}, {0x0014, 0x0202}, {0x0014, 0x0203}, {0x0014, 0x0204}, {0x0014, 0x0205}, + {0x0014, 0x0206}, {0x0014, 0x0207}, {0x0014, 0x0208}, {0x0014, 0x0209}, {0x0014, 0x020a}, {0x0014, 0x020b}, {0x0014, 0x020c}, {0x0014, 0x020d}, + {0x0014, 0x020e}, {0x0014, 0x020f}, {0x0014, 0x0210}, {0x0014, 0x0211}, {0x0014, 0x0212}, {0x0014, 0x0213}, {0x0014, 0x0214}, {0x0014, 0x0215}, + {0x0013, 0x0117}, + +}; + +const uint32_t c_aauiCQMFHuffDec16[85][16] = +{ + {0x000fffff, 0x000dffff, 0x000effff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0000001c, }, + {0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, }, + {0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, }, + {0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, }, + {0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, }, + {0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, }, + {0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, }, + {0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006e, 0x0003006e, 0x0003006e, 0x0003006e, 0x0003006e, 0x0003006e, 0x0003006e, 0x0003006e, }, + {0x000100be, 0x000100be, 0x000100bf, 0x000100bf, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x00020003, 0x00020003, 0x00020003, 0x00020003, }, + {0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020036, 0x00020036, 0x00020036, 0x00020036, }, + {0x0002003b, 0x0002003b, 0x0002003b, 0x0002003b, 0x00020051, 0x00020051, 0x00020051, 0x00020051, 0x00020055, 0x00020055, 0x00020055, 0x00020055, 0x00020056, 0x00020056, 0x00020056, 0x00020056, }, + {0x0002006c, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006f, 0x0002006f, 0x0002006f, 0x0002006f, 0x00020070, 0x00020070, 0x00020070, 0x00020070, 0x00020088, 0x00020088, 0x00020088, 0x00020088, }, + {0x00020089, 0x00020089, 0x00020089, 0x00020089, 0x0002008a, 0x0002008a, 0x0002008a, 0x0002008a, 0x000200a3, 0x000200a3, 0x000200a3, 0x000200a3, 0x000200a4, 0x000200a4, 0x000200a4, 0x000200a4, }, + {0x000000bd, 0x000000c0, 0x000000c1, 0x000000d9, 0x00010005, 0x00010005, 0x00010006, 0x00010006, 0x00010022, 0x00010022, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, 0x00010057, 0x00010057, }, + {0x00010071, 0x00010071, 0x00010072, 0x00010072, 0x00010087, 0x00010087, 0x0001008b, 0x0001008b, 0x0001008c, 0x0001008c, 0x000100a2, 0x000100a2, 0x000100a5, 0x000100a5, 0x000100a6, 0x000100a6, }, + {0x0019ffff, 0x0017ffff, 0x0018ffff, 0x0015ffff, 0x0016ffff, 0x0012ffff, 0x0010ffff, 0x0011ffff, 0x0013ffff, 0x0014ffff, 0x00000007, 0x00000023, 0x00000058, 0x00000073, 0x0000008d, 0x000000a7, }, + {0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, }, + {0x0003008e, 0x0003008e, 0x0003008e, 0x0003008e, 0x0003008e, 0x0003008e, 0x0003008e, 0x0003008e, 0x000300a8, 0x000300a8, 0x000300a8, 0x000300a8, 0x000300a8, 0x000300a8, 0x000300a8, 0x000300a8, }, + {0x000200f5, 0x000200f5, 0x000200f5, 0x000200f5, 0x000200f6, 0x000200f6, 0x000200f6, 0x000200f6, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, }, + {0x000300c2, 0x000300c2, 0x000300c2, 0x000300c2, 0x000300c2, 0x000300c2, 0x000300c2, 0x000300c2, 0x000300d8, 0x000300d8, 0x000300d8, 0x000300d8, 0x000300d8, 0x000300d8, 0x000300d8, 0x000300d8, }, + {0x000300da, 0x000300da, 0x000300da, 0x000300da, 0x000300da, 0x000300da, 0x000300da, 0x000300da, 0x000300db, 0x000300db, 0x000300db, 0x000300db, 0x000300db, 0x000300db, 0x000300db, 0x000300db, }, + {0x00020024, 0x00020024, 0x00020024, 0x00020024, 0x0002003f, 0x0002003f, 0x0002003f, 0x0002003f, 0x00020074, 0x00020074, 0x00020074, 0x00020074, 0x000200a9, 0x000200a9, 0x000200a9, 0x000200a9, }, + {0x000200c3, 0x000200c3, 0x000200c3, 0x000200c3, 0x000200dc, 0x000200dc, 0x000200dc, 0x000200dc, 0x000200dd, 0x000200dd, 0x000200dd, 0x000200dd, 0x000200f4, 0x000200f4, 0x000200f4, 0x000200f4, }, + {0x0000005b, 0x00000076, 0x00000090, 0x000000c5, 0x000000df, 0x000000f8, 0x0000010e, 0x00000110, 0x00000111, 0x00000112, 0x00010009, 0x00010009, 0x00010025, 0x00010025, 0x0001005a, 0x0001005a, }, + {0x00010075, 0x00010075, 0x0001008f, 0x0001008f, 0x000100aa, 0x000100aa, 0x000100c4, 0x000100c4, 0x000100de, 0x000100de, 0x000100f3, 0x000100f3, 0x000100f7, 0x000100f7, 0x0001010f, 0x0001010f, }, + {0x0032ffff, 0x0043ffff, 0x0025ffff, 0x0023ffff, 0x0024ffff, 0x0021ffff, 0x0020ffff, 0x0022ffff, 0x001cffff, 0x001affff, 0x001bffff, 0x001dffff, 0x001effff, 0x001fffff, 0x0000000a, 0x00000040, }, + {0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, }, + {0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300e0, 0x000300e0, 0x000300e0, 0x000300e0, 0x000300e0, 0x000300e0, 0x000300e0, 0x000300e0, }, + {0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, }, + {0x000300f9, 0x000300f9, 0x000300f9, 0x000300f9, 0x000300f9, 0x000300f9, 0x000300f9, 0x000300f9, 0x000300fa, 0x000300fa, 0x000300fa, 0x000300fa, 0x000300fa, 0x000300fa, 0x000300fa, 0x000300fa, }, + {0x00030113, 0x00030113, 0x00030113, 0x00030113, 0x00030113, 0x00030113, 0x00030113, 0x00030113, 0x0003012a, 0x0003012a, 0x0003012a, 0x0003012a, 0x0003012a, 0x0003012a, 0x0003012a, 0x0003012a, }, + {0x0003012b, 0x0003012b, 0x0003012b, 0x0003012b, 0x0003012b, 0x0003012b, 0x0003012b, 0x0003012b, 0x0003012c, 0x0003012c, 0x0003012c, 0x0003012c, 0x0003012c, 0x0003012c, 0x0003012c, 0x0003012c, }, + {0x00020077, 0x00020077, 0x00020077, 0x00020077, 0x00020092, 0x00020092, 0x00020092, 0x00020092, 0x000200ac, 0x000200ac, 0x000200ac, 0x000200ac, 0x000200c6, 0x000200c6, 0x000200c6, 0x000200c6, }, + {0x00010145, 0x00010145, 0x00010146, 0x00010146, 0x00010147, 0x00010147, 0x00010149, 0x00010149, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, 0x00020027, 0x00020027, 0x00020027, 0x00020027, }, + {0x000200e1, 0x000200e1, 0x000200e1, 0x000200e1, 0x00020114, 0x00020114, 0x00020114, 0x00020114, 0x00020129, 0x00020129, 0x00020129, 0x00020129, 0x0002012d, 0x0002012d, 0x0002012d, 0x0002012d, }, + {0x000000c8, 0x000000fc, 0x00000130, 0x00000131, 0x00000148, 0x00000160, 0x00000161, 0x00000162, 0x00010028, 0x00010028, 0x00010042, 0x00010042, 0x0001005d, 0x0001005d, 0x000100ad, 0x000100ad, }, + {0x000100c7, 0x000100c7, 0x000100e2, 0x000100e2, 0x000100fb, 0x000100fb, 0x00010115, 0x00010115, 0x00010116, 0x00010116, 0x0001012e, 0x0001012e, 0x0001012f, 0x0001012f, 0x00010144, 0x00010144, }, + {0x0054ffff, 0x0031ffff, 0x0030ffff, 0x002bffff, 0x002cffff, 0x002dffff, 0x002effff, 0x002fffff, 0x0027ffff, 0x0026ffff, 0x0028ffff, 0x0029ffff, 0x002affff, 0x0000000c, 0x00000078, 0x00000093, }, + {0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x000300af, 0x000300af, 0x000300af, 0x000300af, 0x000300af, 0x000300af, 0x000300af, 0x000300af, }, + {0x0002017c, 0x0002017c, 0x0002017c, 0x0002017c, 0x00020180, 0x00020180, 0x00020180, 0x00020180, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, }, + {0x00030117, 0x00030117, 0x00030117, 0x00030117, 0x00030117, 0x00030117, 0x00030117, 0x00030117, 0x0003014a, 0x0003014a, 0x0003014a, 0x0003014a, 0x0003014a, 0x0003014a, 0x0003014a, 0x0003014a, }, + {0x0003015f, 0x0003015f, 0x0003015f, 0x0003015f, 0x0003015f, 0x0003015f, 0x0003015f, 0x0003015f, 0x00030163, 0x00030163, 0x00030163, 0x00030163, 0x00030163, 0x00030163, 0x00030163, 0x00030163, }, + {0x0003017b, 0x0003017b, 0x0003017b, 0x0003017b, 0x0003017b, 0x0003017b, 0x0003017b, 0x0003017b, 0x0003017e, 0x0003017e, 0x0003017e, 0x0003017e, 0x0003017e, 0x0003017e, 0x0003017e, 0x0003017e, }, + {0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x00020044, 0x00020044, 0x00020044, 0x00020044, 0x00020045, 0x00020045, 0x00020045, 0x00020045, 0x0002005e, 0x0002005e, 0x0002005e, 0x0002005e, }, + {0x00020079, 0x00020079, 0x00020079, 0x00020079, 0x00020094, 0x00020094, 0x00020094, 0x00020094, 0x000200c9, 0x000200c9, 0x000200c9, 0x000200c9, 0x000200e4, 0x000200e4, 0x000200e4, 0x000200e4, }, + {0x000200e5, 0x000200e5, 0x000200e5, 0x000200e5, 0x000200fd, 0x000200fd, 0x000200fd, 0x000200fd, 0x000200fe, 0x000200fe, 0x000200fe, 0x000200fe, 0x00020118, 0x00020118, 0x00020118, 0x00020118, }, + {0x00020132, 0x00020132, 0x00020132, 0x00020132, 0x0002014b, 0x0002014b, 0x0002014b, 0x0002014b, 0x0002014c, 0x0002014c, 0x0002014c, 0x0002014c, 0x0002014d, 0x0002014d, 0x0002014d, 0x0002014d, }, + {0x00020164, 0x00020164, 0x00020164, 0x00020164, 0x00020165, 0x00020165, 0x00020165, 0x00020165, 0x00020166, 0x00020166, 0x00020166, 0x00020166, 0x0002017a, 0x0002017a, 0x0002017a, 0x0002017a, }, + {0x000100e3, 0x000100e3, 0x00010100, 0x00010100, 0x00010133, 0x00010133, 0x0001014f, 0x0001014f, 0x0001017f, 0x0001017f, 0x00010182, 0x00010182, 0x000101e7, 0x000101e7, 0x000102d8, 0x000102d8, }, + {0x000002d2, 0x000002d3, 0x000002d4, 0x000002d5, 0x000002d6, 0x000002d7, 0x00010029, 0x00010029, 0x0001002a, 0x0001002a, 0x0001007a, 0x0001007a, 0x0001007b, 0x0001007b, 0x000100ae, 0x000100ae, }, + {0x0034ffff, 0x0033ffff, 0x0035ffff, 0x0036ffff, 0x0039ffff, 0x0037ffff, 0x0038ffff, 0x003affff, 0x003bffff, 0x003cffff, 0x003dffff, 0x003effff, 0x003fffff, 0x0040ffff, 0x0041ffff, 0x0042ffff, }, + {0x0000002f, 0x00000030, 0x00000031, 0x00000032, 0x00000033, 0x00000034, 0x00000035, 0x00000046, 0x00000047, 0x00000048, 0x00000049, 0x0000004a, 0x0000004b, 0x0000004c, 0x0000004d, 0x0000004e, }, + {0x0000000f, 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000014, 0x00000015, 0x00000016, 0x00000017, 0x00000018, 0x00000019, 0x0000001a, 0x0000002b, 0x0000002c, 0x0000002d, 0x0000002e, }, + {0x0000004f, 0x00000050, 0x0000005f, 0x00000060, 0x00000061, 0x00000062, 0x00000063, 0x00000064, 0x00000065, 0x00000066, 0x00000067, 0x00000068, 0x00000069, 0x0000006a, 0x0000006b, 0x0000007c, }, + {0x0000007d, 0x0000007e, 0x0000007f, 0x00000080, 0x00000081, 0x00000082, 0x00000083, 0x00000084, 0x00000085, 0x00000086, 0x00000095, 0x00000096, 0x00000097, 0x00000098, 0x00000099, 0x0000009a, }, + {0x000000b9, 0x000000ba, 0x000000bb, 0x000000bc, 0x000000ca, 0x000000cb, 0x000000cc, 0x000000cd, 0x000000ce, 0x000000cf, 0x000000d0, 0x000000d1, 0x000000d2, 0x000000d3, 0x000000d4, 0x000000d5, }, + {0x000000d6, 0x000000d7, 0x000000e6, 0x000000e7, 0x000000e8, 0x000000e9, 0x000000ea, 0x000000eb, 0x000000ec, 0x000000ed, 0x000000ee, 0x000000ef, 0x000000f0, 0x000000f1, 0x000000f2, 0x000000ff, }, + {0x0000009b, 0x0000009c, 0x0000009d, 0x0000009e, 0x0000009f, 0x000000a0, 0x000000a1, 0x000000b0, 0x000000b1, 0x000000b2, 0x000000b3, 0x000000b4, 0x000000b5, 0x000000b6, 0x000000b7, 0x000000b8, }, + {0x00000101, 0x00000102, 0x00000103, 0x00000104, 0x00000105, 0x00000106, 0x00000107, 0x00000108, 0x00000109, 0x0000010a, 0x0000010b, 0x0000010c, 0x0000010d, 0x00000119, 0x0000011a, 0x0000011b, }, + {0x0000011c, 0x0000011d, 0x0000011e, 0x0000011f, 0x00000120, 0x00000121, 0x00000122, 0x00000123, 0x00000124, 0x00000125, 0x00000126, 0x00000127, 0x00000128, 0x00000134, 0x00000135, 0x00000136, }, + {0x00000137, 0x00000138, 0x00000139, 0x0000013a, 0x0000013b, 0x0000013c, 0x0000013d, 0x0000013e, 0x0000013f, 0x00000140, 0x00000141, 0x00000142, 0x00000143, 0x0000014e, 0x00000150, 0x00000151, }, + {0x00000152, 0x00000153, 0x00000154, 0x00000155, 0x00000156, 0x00000157, 0x00000158, 0x00000159, 0x0000015a, 0x0000015b, 0x0000015c, 0x0000015d, 0x0000015e, 0x00000167, 0x00000168, 0x00000169, }, + {0x0000016a, 0x0000016b, 0x0000016c, 0x0000016d, 0x0000016e, 0x0000016f, 0x00000170, 0x00000171, 0x00000172, 0x00000173, 0x00000174, 0x00000175, 0x00000176, 0x00000177, 0x00000178, 0x00000179, }, + {0x0000017d, 0x00000181, 0x00000183, 0x00000184, 0x00000185, 0x00000186, 0x00000187, 0x00000188, 0x00000189, 0x0000018a, 0x0000018b, 0x0000018c, 0x0000018d, 0x0000018e, 0x0000018f, 0x00000190, }, + {0x00000191, 0x00000192, 0x00000193, 0x00000194, 0x00000195, 0x00000196, 0x00000197, 0x00000198, 0x00000199, 0x0000019a, 0x0000019b, 0x0000019c, 0x0000019d, 0x0000019e, 0x0000019f, 0x000001a0, }, + {0x000001a1, 0x000001a2, 0x000001a3, 0x000001a4, 0x000001a5, 0x000001a6, 0x000001a7, 0x000001a8, 0x000001a9, 0x000001aa, 0x000001ab, 0x000001ac, 0x000001ad, 0x000001ae, 0x000001af, 0x000001b0, }, + {0x000001b1, 0x000001b2, 0x000001b3, 0x000001b4, 0x000001b5, 0x000001b6, 0x000001b7, 0x000001b8, 0x000001b9, 0x000001ba, 0x000001bb, 0x000001bc, 0x000001bd, 0x000001be, 0x000001bf, 0x000001c0, }, + {0x0044ffff, 0x0045ffff, 0x0046ffff, 0x0047ffff, 0x0048ffff, 0x0049ffff, 0x004affff, 0x004bffff, 0x004cffff, 0x004dffff, 0x004effff, 0x004fffff, 0x0050ffff, 0x0051ffff, 0x0052ffff, 0x0053ffff, }, + {0x000001c1, 0x000001c2, 0x000001c3, 0x000001c4, 0x000001c5, 0x000001c6, 0x000001c7, 0x000001c8, 0x000001c9, 0x000001ca, 0x000001cb, 0x000001cc, 0x000001cd, 0x000001ce, 0x000001cf, 0x000001d0, }, + {0x000001d1, 0x000001d2, 0x000001d3, 0x000001d4, 0x000001d5, 0x000001d6, 0x000001d7, 0x000001d8, 0x000001d9, 0x000001da, 0x000001db, 0x000001dc, 0x000001dd, 0x000001de, 0x000001df, 0x000001e0, }, + {0x000001e1, 0x000001e2, 0x000001e3, 0x000001e4, 0x000001e5, 0x000001e6, 0x000001e8, 0x000001e9, 0x000001ea, 0x000001eb, 0x000001ec, 0x000001ed, 0x000001ee, 0x000001ef, 0x000001f0, 0x000001f1, }, + {0x000001f2, 0x000001f3, 0x000001f4, 0x000001f5, 0x000001f6, 0x000001f7, 0x000001f8, 0x000001f9, 0x000001fa, 0x000001fb, 0x000001fc, 0x000001fd, 0x000001fe, 0x000001ff, 0x00000200, 0x00000201, }, + {0x00000202, 0x00000203, 0x00000204, 0x00000205, 0x00000206, 0x00000207, 0x00000208, 0x00000209, 0x0000020a, 0x0000020b, 0x0000020c, 0x0000020d, 0x0000020e, 0x0000020f, 0x00000210, 0x00000211, }, + {0x00000212, 0x00000213, 0x00000214, 0x00000215, 0x00000216, 0x00000217, 0x00000218, 0x00000219, 0x0000021a, 0x0000021b, 0x0000021c, 0x0000021d, 0x0000021e, 0x0000021f, 0x00000220, 0x00000221, }, + {0x00000222, 0x00000223, 0x00000224, 0x00000225, 0x00000226, 0x00000227, 0x00000228, 0x00000229, 0x0000022a, 0x0000022b, 0x0000022c, 0x0000022d, 0x0000022e, 0x0000022f, 0x00000230, 0x00000231, }, + {0x00000232, 0x00000233, 0x00000234, 0x00000235, 0x00000236, 0x00000237, 0x00000238, 0x00000239, 0x0000023a, 0x0000023b, 0x0000023c, 0x0000023d, 0x0000023e, 0x0000023f, 0x00000240, 0x00000241, }, + {0x00000242, 0x00000243, 0x00000244, 0x00000245, 0x00000246, 0x00000247, 0x00000248, 0x00000249, 0x0000024a, 0x0000024b, 0x0000024c, 0x0000024d, 0x0000024e, 0x0000024f, 0x00000250, 0x00000251, }, + {0x00000252, 0x00000253, 0x00000254, 0x00000255, 0x00000256, 0x00000257, 0x00000258, 0x00000259, 0x0000025a, 0x0000025b, 0x0000025c, 0x0000025d, 0x0000025e, 0x0000025f, 0x00000260, 0x00000261, }, + {0x00000262, 0x00000263, 0x00000264, 0x00000265, 0x00000266, 0x00000267, 0x00000268, 0x00000269, 0x0000026a, 0x0000026b, 0x0000026c, 0x0000026d, 0x0000026e, 0x0000026f, 0x00000270, 0x00000271, }, + {0x00000272, 0x00000273, 0x00000274, 0x00000275, 0x00000276, 0x00000277, 0x00000278, 0x00000279, 0x0000027a, 0x0000027b, 0x0000027c, 0x0000027d, 0x0000027e, 0x0000027f, 0x00000280, 0x00000281, }, + {0x00000282, 0x00000283, 0x00000284, 0x00000285, 0x00000286, 0x00000287, 0x00000288, 0x00000289, 0x0000028a, 0x0000028b, 0x0000028c, 0x0000028d, 0x0000028e, 0x0000028f, 0x00000290, 0x00000291, }, + {0x00000292, 0x00000293, 0x00000294, 0x00000295, 0x00000296, 0x00000297, 0x00000298, 0x00000299, 0x0000029a, 0x0000029b, 0x0000029c, 0x0000029d, 0x0000029e, 0x0000029f, 0x000002a0, 0x000002a1, }, + {0x000002a2, 0x000002a3, 0x000002a4, 0x000002a5, 0x000002a6, 0x000002a7, 0x000002a8, 0x000002a9, 0x000002aa, 0x000002ab, 0x000002ac, 0x000002ad, 0x000002ae, 0x000002af, 0x000002b0, 0x000002b1, }, + {0x000002b2, 0x000002b3, 0x000002b4, 0x000002b5, 0x000002b6, 0x000002b7, 0x000002b8, 0x000002b9, 0x000002ba, 0x000002bb, 0x000002bc, 0x000002bd, 0x000002be, 0x000002bf, 0x000002c0, 0x000002c1, }, + {0x000002c2, 0x000002c3, 0x000002c4, 0x000002c5, 0x000002c6, 0x000002c7, 0x000002c8, 0x000002c9, 0x000002ca, 0x000002cb, 0x000002cc, 0x000002cd, 0x000002ce, 0x000002cf, 0x000002d0, 0x000002d1, }, +}; + +const uint32_t c_aauiCQMFHuffEnc17[729][2] = +{ + {0x0006, 0x0012}, {0x0006, 0x0013}, {0x0006, 0x0014}, {0x0006, 0x0015}, {0x0007, 0x000f}, {0x0007, 0x0010}, {0x0007, 0x0011}, {0x0008, 0x000e}, + {0x0008, 0x000f}, {0x0009, 0x000f}, {0x000a, 0x000f}, {0x000c, 0x0011}, {0x000d, 0x0014}, {0x000e, 0x0017}, {0x0010, 0x002d}, {0x0011, 0x004c}, + {0x0012, 0x008a}, {0x0014, 0x0000}, {0x0014, 0x0001}, {0x0014, 0x0002}, {0x0014, 0x0003}, {0x0014, 0x0004}, {0x0014, 0x0005}, {0x0014, 0x0006}, + {0x0014, 0x0007}, {0x0014, 0x0008}, {0x0014, 0x0009}, {0x0006, 0x0016}, {0x0005, 0x0018}, {0x0005, 0x0019}, {0x0005, 0x001a}, {0x0006, 0x0017}, + {0x0006, 0x0018}, {0x0006, 0x0019}, {0x0007, 0x0012}, {0x0007, 0x0013}, {0x0008, 0x0010}, {0x000a, 0x0010}, {0x000b, 0x0011}, {0x000c, 0x0012}, + {0x000e, 0x0018}, {0x000f, 0x0020}, {0x0011, 0x004d}, {0x0013, 0x00e4}, {0x0014, 0x000a}, {0x0014, 0x000b}, {0x0014, 0x000c}, {0x0014, 0x000d}, + {0x0014, 0x000e}, {0x0014, 0x000f}, {0x0014, 0x0010}, {0x0014, 0x0011}, {0x0014, 0x0012}, {0x0014, 0x0013}, {0x0006, 0x001a}, {0x0005, 0x001b}, + {0x0005, 0x001c}, {0x0005, 0x001d}, {0x0006, 0x001b}, {0x0006, 0x001c}, {0x0006, 0x001d}, {0x0007, 0x0014}, {0x0008, 0x0011}, {0x0009, 0x0010}, + {0x000a, 0x0011}, {0x000b, 0x0012}, {0x000c, 0x0013}, {0x000e, 0x0019}, {0x000f, 0x0021}, {0x0010, 0x002e}, {0x0013, 0x00e5}, {0x0013, 0x00e6}, + {0x0014, 0x0014}, {0x0014, 0x0015}, {0x0014, 0x0016}, {0x0014, 0x0017}, {0x0014, 0x0018}, {0x0014, 0x0019}, {0x0014, 0x001a}, {0x0014, 0x001b}, + {0x0014, 0x001c}, {0x0006, 0x001e}, {0x0005, 0x001e}, {0x0005, 0x001f}, {0x0006, 0x001f}, {0x0006, 0x0020}, {0x0006, 0x0021}, {0x0006, 0x0022}, + {0x0007, 0x0015}, {0x0008, 0x0012}, {0x0009, 0x0011}, {0x000a, 0x0012}, {0x000b, 0x0013}, {0x000c, 0x0014}, {0x000e, 0x001a}, {0x000f, 0x0022}, + {0x0010, 0x002f}, {0x0013, 0x00e7}, {0x0013, 0x00e8}, {0x0014, 0x001d}, {0x0014, 0x001e}, {0x0014, 0x001f}, {0x0014, 0x0020}, {0x0014, 0x0021}, + {0x0014, 0x0022}, {0x0014, 0x0023}, {0x0014, 0x0024}, {0x0014, 0x0025}, {0x0006, 0x0023}, {0x0006, 0x0024}, {0x0006, 0x0025}, {0x0006, 0x0026}, + {0x0006, 0x0027}, {0x0006, 0x0028}, {0x0007, 0x0016}, {0x0007, 0x0017}, {0x0008, 0x0013}, {0x0009, 0x0012}, {0x000a, 0x0013}, {0x000c, 0x0015}, + {0x000d, 0x0015}, {0x000f, 0x0023}, {0x0010, 0x0030}, {0x0011, 0x004e}, {0x0014, 0x0026}, {0x0014, 0x0027}, {0x0014, 0x0028}, {0x0014, 0x0029}, + {0x0014, 0x002a}, {0x0014, 0x002b}, {0x0014, 0x002c}, {0x0014, 0x002d}, {0x0014, 0x002e}, {0x0014, 0x002f}, {0x0014, 0x0030}, {0x0007, 0x0018}, + {0x0006, 0x0029}, {0x0006, 0x002a}, {0x0006, 0x002b}, {0x0006, 0x002c}, {0x0007, 0x0019}, {0x0007, 0x001a}, {0x0008, 0x0014}, {0x0009, 0x0013}, + {0x000a, 0x0014}, {0x000b, 0x0014}, {0x000c, 0x0016}, {0x000d, 0x0016}, {0x000f, 0x0024}, {0x0010, 0x0031}, {0x0011, 0x004f}, {0x0014, 0x0031}, + {0x0014, 0x0032}, {0x0014, 0x0033}, {0x0014, 0x0034}, {0x0014, 0x0035}, {0x0014, 0x0036}, {0x0014, 0x0037}, {0x0014, 0x0038}, {0x0014, 0x0039}, + {0x0014, 0x003a}, {0x0014, 0x003b}, {0x0007, 0x001b}, {0x0006, 0x002d}, {0x0006, 0x002e}, {0x0006, 0x002f}, {0x0007, 0x001c}, {0x0007, 0x001d}, + {0x0008, 0x0015}, {0x0009, 0x0014}, {0x000a, 0x0015}, {0x000a, 0x0016}, {0x000c, 0x0017}, {0x000d, 0x0017}, {0x000e, 0x001b}, {0x000f, 0x0025}, + {0x0011, 0x0050}, {0x0011, 0x0051}, {0x0014, 0x003c}, {0x0014, 0x003d}, {0x0014, 0x003e}, {0x0014, 0x003f}, {0x0014, 0x0040}, {0x0014, 0x0041}, + {0x0014, 0x0042}, {0x0014, 0x0043}, {0x0014, 0x0044}, {0x0014, 0x0045}, {0x0014, 0x0046}, {0x0008, 0x0016}, {0x0007, 0x001e}, {0x0007, 0x001f}, + {0x0007, 0x0020}, {0x0007, 0x0021}, {0x0008, 0x0017}, {0x0008, 0x0018}, {0x0009, 0x0015}, {0x000a, 0x0017}, {0x000b, 0x0015}, {0x000c, 0x0018}, + {0x000e, 0x001c}, {0x000e, 0x001d}, {0x0010, 0x0032}, {0x0012, 0x008b}, {0x0012, 0x008c}, {0x0014, 0x0047}, {0x0014, 0x0048}, {0x0014, 0x0049}, + {0x0014, 0x004a}, {0x0014, 0x004b}, {0x0014, 0x004c}, {0x0014, 0x004d}, {0x0014, 0x004e}, {0x0014, 0x004f}, {0x0014, 0x0050}, {0x0014, 0x0051}, + {0x0008, 0x0019}, {0x0007, 0x0022}, {0x0007, 0x0023}, {0x0008, 0x001a}, {0x0008, 0x001b}, {0x0009, 0x0016}, {0x0009, 0x0017}, {0x000a, 0x0018}, + {0x000b, 0x0016}, {0x000c, 0x0019}, {0x000d, 0x0018}, {0x000e, 0x001e}, {0x0010, 0x0033}, {0x0011, 0x0052}, {0x0014, 0x0052}, {0x0013, 0x00e9}, + {0x0014, 0x0053}, {0x0014, 0x0054}, {0x0014, 0x0055}, {0x0014, 0x0056}, {0x0014, 0x0057}, {0x0014, 0x0058}, {0x0014, 0x0059}, {0x0014, 0x005a}, + {0x0014, 0x005b}, {0x0014, 0x005c}, {0x0014, 0x005d}, {0x0009, 0x0018}, {0x0008, 0x001c}, {0x0008, 0x001d}, {0x0009, 0x0019}, {0x0009, 0x001a}, + {0x000a, 0x0019}, {0x000a, 0x001a}, {0x000b, 0x0017}, {0x000c, 0x001a}, {0x000d, 0x0019}, {0x000e, 0x001f}, {0x000f, 0x0026}, {0x0010, 0x0034}, + {0x0012, 0x008d}, {0x0013, 0x00ea}, {0x0014, 0x005e}, {0x0014, 0x005f}, {0x0014, 0x0060}, {0x0014, 0x0061}, {0x0014, 0x0062}, {0x0014, 0x0063}, + {0x0014, 0x0064}, {0x0014, 0x0065}, {0x0014, 0x0066}, {0x0014, 0x0067}, {0x0014, 0x0068}, {0x0014, 0x0069}, {0x000b, 0x0018}, {0x0009, 0x001b}, + {0x000a, 0x001b}, {0x000a, 0x001c}, {0x000a, 0x001d}, {0x000b, 0x0019}, {0x000b, 0x001a}, {0x000c, 0x001b}, {0x000d, 0x001a}, {0x000e, 0x0020}, + {0x000f, 0x0027}, {0x0012, 0x008e}, {0x0011, 0x0053}, {0x0013, 0x00eb}, {0x0014, 0x006a}, {0x0014, 0x006b}, {0x0014, 0x006c}, {0x0014, 0x006d}, + {0x0014, 0x006e}, {0x0014, 0x006f}, {0x0014, 0x0070}, {0x0014, 0x0071}, {0x0014, 0x0072}, {0x0014, 0x0073}, {0x0014, 0x0074}, {0x0014, 0x0075}, + {0x0014, 0x0076}, {0x000c, 0x001c}, {0x000b, 0x001b}, {0x000b, 0x001c}, {0x000b, 0x001d}, {0x000c, 0x001d}, {0x000c, 0x001e}, {0x000d, 0x001b}, + {0x000d, 0x001c}, {0x000e, 0x0021}, {0x0010, 0x0035}, {0x0010, 0x0036}, {0x0011, 0x0054}, {0x0013, 0x00ec}, {0x0014, 0x0077}, {0x0014, 0x0078}, + {0x0014, 0x0079}, {0x0014, 0x007a}, {0x0014, 0x007b}, {0x0014, 0x007c}, {0x0014, 0x007d}, {0x0014, 0x007e}, {0x0014, 0x007f}, {0x0014, 0x0080}, + {0x0014, 0x0081}, {0x0014, 0x0082}, {0x0014, 0x0083}, {0x0014, 0x0084}, {0x000d, 0x001d}, {0x000c, 0x001f}, {0x000c, 0x0020}, {0x000c, 0x0021}, + {0x000d, 0x001e}, {0x000d, 0x001f}, {0x000e, 0x0022}, {0x000f, 0x0028}, {0x0010, 0x0037}, {0x0010, 0x0038}, {0x0010, 0x0039}, {0x0012, 0x008f}, + {0x0013, 0x00ed}, {0x0014, 0x0085}, {0x0014, 0x0086}, {0x0014, 0x0087}, {0x0014, 0x0088}, {0x0014, 0x0089}, {0x0014, 0x008a}, {0x0014, 0x008b}, + {0x0014, 0x008c}, {0x0014, 0x008d}, {0x0014, 0x008e}, {0x0014, 0x008f}, {0x0014, 0x0090}, {0x0014, 0x0091}, {0x0014, 0x0092}, {0x000e, 0x0023}, + {0x000d, 0x0020}, {0x000d, 0x0021}, {0x000e, 0x0024}, {0x000e, 0x0025}, {0x000e, 0x0026}, {0x000f, 0x0029}, {0x0010, 0x003a}, {0x0010, 0x003b}, + {0x0012, 0x0090}, {0x0014, 0x0093}, {0x0014, 0x0094}, {0x0014, 0x0095}, {0x0014, 0x0096}, {0x0014, 0x0097}, {0x0014, 0x0098}, {0x0014, 0x0099}, + {0x0014, 0x009a}, {0x0014, 0x009b}, {0x0014, 0x009c}, {0x0014, 0x009d}, {0x0014, 0x009e}, {0x0014, 0x009f}, {0x0014, 0x00a0}, {0x0014, 0x00a1}, + {0x0014, 0x00a2}, {0x0014, 0x00a3}, {0x000f, 0x002a}, {0x000e, 0x0027}, {0x000f, 0x002b}, {0x000f, 0x002c}, {0x000f, 0x002d}, {0x0010, 0x003c}, + {0x0010, 0x003d}, {0x0011, 0x0055}, {0x0011, 0x0056}, {0x0014, 0x00a4}, {0x0014, 0x00a5}, {0x0014, 0x00a6}, {0x0014, 0x00a7}, {0x0014, 0x00a8}, + {0x0014, 0x00a9}, {0x0014, 0x00aa}, {0x0014, 0x00ab}, {0x0014, 0x00ac}, {0x0014, 0x00ad}, {0x0014, 0x00ae}, {0x0014, 0x00af}, {0x0014, 0x00b0}, + {0x0014, 0x00b1}, {0x0014, 0x00b2}, {0x0014, 0x00b3}, {0x0014, 0x00b4}, {0x0014, 0x00b5}, {0x0012, 0x0091}, {0x0010, 0x003e}, {0x0010, 0x003f}, + {0x0011, 0x0057}, {0x0011, 0x0058}, {0x0011, 0x0059}, {0x0012, 0x0092}, {0x0013, 0x00ee}, {0x0013, 0x00ef}, {0x0012, 0x0093}, {0x0014, 0x00b6}, + {0x0014, 0x00b7}, {0x0014, 0x00b8}, {0x0014, 0x00b9}, {0x0014, 0x00ba}, {0x0014, 0x00bb}, {0x0014, 0x00bc}, {0x0014, 0x00bd}, {0x0014, 0x00be}, + {0x0014, 0x00bf}, {0x0014, 0x00c0}, {0x0014, 0x00c1}, {0x0014, 0x00c2}, {0x0014, 0x00c3}, {0x0014, 0x00c4}, {0x0014, 0x00c5}, {0x0014, 0x00c6}, + {0x0013, 0x00f0}, {0x0012, 0x0094}, {0x0012, 0x0095}, {0x0012, 0x0096}, {0x0014, 0x00c7}, {0x0014, 0x00c8}, {0x0014, 0x00c9}, {0x0014, 0x00ca}, + {0x0014, 0x00cb}, {0x0014, 0x00cc}, {0x0014, 0x00cd}, {0x0014, 0x00ce}, {0x0014, 0x00cf}, {0x0014, 0x00d0}, {0x0014, 0x00d1}, {0x0014, 0x00d2}, + {0x0014, 0x00d3}, {0x0014, 0x00d4}, {0x0014, 0x00d5}, {0x0014, 0x00d6}, {0x0014, 0x00d7}, {0x0014, 0x00d8}, {0x0014, 0x00d9}, {0x0014, 0x00da}, + {0x0014, 0x00db}, {0x0014, 0x00dc}, {0x0014, 0x00dd}, {0x0014, 0x00de}, {0x0012, 0x0097}, {0x0014, 0x00df}, {0x0014, 0x00e0}, {0x0014, 0x00e1}, + {0x0014, 0x00e2}, {0x0014, 0x00e3}, {0x0014, 0x00e4}, {0x0014, 0x00e5}, {0x0014, 0x00e6}, {0x0014, 0x00e7}, {0x0014, 0x00e8}, {0x0014, 0x00e9}, + {0x0014, 0x00ea}, {0x0014, 0x00eb}, {0x0014, 0x00ec}, {0x0014, 0x00ed}, {0x0014, 0x00ee}, {0x0014, 0x00ef}, {0x0014, 0x00f0}, {0x0014, 0x00f1}, + {0x0014, 0x00f2}, {0x0014, 0x00f3}, {0x0014, 0x00f4}, {0x0014, 0x00f5}, {0x0014, 0x00f6}, {0x0014, 0x00f7}, {0x0014, 0x00f8}, {0x0014, 0x00f9}, + {0x0014, 0x00fa}, {0x0014, 0x00fb}, {0x0014, 0x00fc}, {0x0014, 0x00fd}, {0x0014, 0x00fe}, {0x0014, 0x00ff}, {0x0014, 0x0100}, {0x0014, 0x0101}, + {0x0014, 0x0102}, {0x0014, 0x0103}, {0x0014, 0x0104}, {0x0014, 0x0105}, {0x0014, 0x0106}, {0x0014, 0x0107}, {0x0014, 0x0108}, {0x0014, 0x0109}, + {0x0014, 0x010a}, {0x0014, 0x010b}, {0x0014, 0x010c}, {0x0014, 0x010d}, {0x0014, 0x010e}, {0x0014, 0x010f}, {0x0014, 0x0110}, {0x0014, 0x0111}, + {0x0014, 0x0112}, {0x0014, 0x0113}, {0x0014, 0x0114}, {0x0014, 0x0115}, {0x0014, 0x0116}, {0x0014, 0x0117}, {0x0014, 0x0118}, {0x0014, 0x0119}, + {0x0014, 0x011a}, {0x0014, 0x011b}, {0x0014, 0x011c}, {0x0014, 0x011d}, {0x0014, 0x011e}, {0x0014, 0x011f}, {0x0014, 0x0120}, {0x0014, 0x0121}, + {0x0014, 0x0122}, {0x0014, 0x0123}, {0x0014, 0x0124}, {0x0014, 0x0125}, {0x0014, 0x0126}, {0x0014, 0x0127}, {0x0014, 0x0128}, {0x0014, 0x0129}, + {0x0014, 0x012a}, {0x0014, 0x012b}, {0x0014, 0x012c}, {0x0014, 0x012d}, {0x0014, 0x012e}, {0x0014, 0x012f}, {0x0014, 0x0130}, {0x0014, 0x0131}, + {0x0014, 0x0132}, {0x0014, 0x0133}, {0x0014, 0x0134}, {0x0014, 0x0135}, {0x0014, 0x0136}, {0x0014, 0x0137}, {0x0014, 0x0138}, {0x0014, 0x0139}, + {0x0014, 0x013a}, {0x0014, 0x013b}, {0x0014, 0x013c}, {0x0014, 0x013d}, {0x0014, 0x013e}, {0x0014, 0x013f}, {0x0014, 0x0140}, {0x0014, 0x0141}, + {0x0014, 0x0142}, {0x0014, 0x0143}, {0x0014, 0x0144}, {0x0014, 0x0145}, {0x0014, 0x0146}, {0x0014, 0x0147}, {0x0014, 0x0148}, {0x0014, 0x0149}, + {0x0014, 0x014a}, {0x0014, 0x014b}, {0x0014, 0x014c}, {0x0014, 0x014d}, {0x0014, 0x014e}, {0x0014, 0x014f}, {0x0014, 0x0150}, {0x0014, 0x0151}, + {0x0014, 0x0152}, {0x0014, 0x0153}, {0x0014, 0x0154}, {0x0014, 0x0155}, {0x0014, 0x0156}, {0x0014, 0x0157}, {0x0014, 0x0158}, {0x0014, 0x0159}, + {0x0014, 0x015a}, {0x0014, 0x015b}, {0x0014, 0x015c}, {0x0014, 0x015d}, {0x0014, 0x015e}, {0x0014, 0x015f}, {0x0014, 0x0160}, {0x0014, 0x0161}, + {0x0014, 0x0162}, {0x0014, 0x0163}, {0x0014, 0x0164}, {0x0014, 0x0165}, {0x0014, 0x0166}, {0x0014, 0x0167}, {0x0014, 0x0168}, {0x0014, 0x0169}, + {0x0014, 0x016a}, {0x0014, 0x016b}, {0x0014, 0x016c}, {0x0014, 0x016d}, {0x0014, 0x016e}, {0x0014, 0x016f}, {0x0014, 0x0170}, {0x0014, 0x0171}, + {0x0014, 0x0172}, {0x0014, 0x0173}, {0x0014, 0x0174}, {0x0014, 0x0175}, {0x0014, 0x0176}, {0x0014, 0x0177}, {0x0014, 0x0178}, {0x0014, 0x0179}, + {0x0014, 0x017a}, {0x0014, 0x017b}, {0x0014, 0x017c}, {0x0014, 0x017d}, {0x0014, 0x017e}, {0x0014, 0x017f}, {0x0014, 0x0180}, {0x0014, 0x0181}, + {0x0014, 0x0182}, {0x0014, 0x0183}, {0x0014, 0x0184}, {0x0014, 0x0185}, {0x0014, 0x0186}, {0x0014, 0x0187}, {0x0014, 0x0188}, {0x0014, 0x0189}, + {0x0014, 0x018a}, {0x0014, 0x018b}, {0x0014, 0x018c}, {0x0014, 0x018d}, {0x0014, 0x018e}, {0x0014, 0x018f}, {0x0014, 0x0190}, {0x0014, 0x0191}, + {0x0014, 0x0192}, {0x0014, 0x0193}, {0x0014, 0x0194}, {0x0014, 0x0195}, {0x0014, 0x0196}, {0x0014, 0x0197}, {0x0014, 0x0198}, {0x0014, 0x0199}, + {0x0014, 0x019a}, {0x0014, 0x019b}, {0x0014, 0x019c}, {0x0014, 0x019d}, {0x0014, 0x019e}, {0x0014, 0x019f}, {0x0014, 0x01a0}, {0x0014, 0x01a1}, + {0x0014, 0x01a2}, {0x0014, 0x01a3}, {0x0014, 0x01a4}, {0x0014, 0x01a5}, {0x0014, 0x01a6}, {0x0014, 0x01a7}, {0x0014, 0x01a8}, {0x0014, 0x01a9}, + {0x0014, 0x01aa}, {0x0014, 0x01ab}, {0x0014, 0x01ac}, {0x0014, 0x01ad}, {0x0014, 0x01ae}, {0x0014, 0x01af}, {0x0014, 0x01b0}, {0x0014, 0x01b1}, + {0x0014, 0x01b2}, {0x0014, 0x01b3}, {0x0014, 0x01b4}, {0x0014, 0x01b5}, {0x0014, 0x01b6}, {0x0014, 0x01b7}, {0x0014, 0x01b8}, {0x0014, 0x01b9}, + {0x0014, 0x01ba}, {0x0014, 0x01bb}, {0x0014, 0x01bc}, {0x0014, 0x01bd}, {0x0014, 0x01be}, {0x0014, 0x01bf}, {0x0014, 0x01c0}, {0x0014, 0x01c1}, + {0x0014, 0x01c2}, {0x0014, 0x01c3}, {0x0014, 0x01c4}, {0x0014, 0x01c5}, {0x0014, 0x01c6}, {0x0014, 0x01c7}, {0x0013, 0x00f1}, {0x0013, 0x00f2}, + {0x0013, 0x00f3}, {0x0013, 0x00f4}, {0x0013, 0x00f5}, {0x0013, 0x00f6}, {0x0013, 0x00f7}, {0x0013, 0x00f8}, {0x0013, 0x00f9}, {0x0013, 0x00fa}, + {0x0013, 0x00fb}, {0x0013, 0x00fc}, {0x0013, 0x00fd}, {0x0013, 0x00fe}, {0x0013, 0x00ff}, {0x0013, 0x0100}, {0x0013, 0x0101}, {0x0013, 0x0102}, + {0x0013, 0x0103}, {0x0013, 0x0104}, {0x0013, 0x0105}, {0x0013, 0x0106}, {0x0013, 0x0107}, {0x0013, 0x0108}, {0x0013, 0x0109}, {0x0013, 0x010a}, + {0x0013, 0x010b}, {0x0013, 0x010c}, {0x0013, 0x010d}, {0x0013, 0x010e}, {0x0013, 0x010f}, {0x0013, 0x0110}, {0x0013, 0x0111}, {0x0013, 0x0112}, + {0x0013, 0x0113}, + +}; + +const uint32_t c_aauiCQMFHuffDec17[93][16] = +{ + {0x0010ffff, 0x000dffff, 0x000effff, 0x000fffff, 0x0006ffff, 0x0005ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, }, + {0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, }, + {0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, }, + {0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, }, + {0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, }, + {0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x00020003, 0x00020003, 0x00020003, 0x00020003, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, }, + {0x000100c0, 0x000100c0, 0x000100c1, 0x000100c1, 0x000100d9, 0x000100d9, 0x000100da, 0x000100da, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020001, 0x00020001, 0x00020001, 0x00020001, }, + {0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020036, 0x00020036, 0x00020036, 0x00020036, 0x0002003a, 0x0002003a, 0x0002003a, 0x0002003a, }, + {0x0002003b, 0x0002003b, 0x0002003b, 0x0002003b, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003c, 0x00020051, 0x00020051, 0x00020051, 0x00020051, 0x00020054, 0x00020054, 0x00020054, 0x00020054, }, + {0x00020055, 0x00020055, 0x00020055, 0x00020055, 0x00020056, 0x00020056, 0x00020056, 0x00020056, 0x00020057, 0x00020057, 0x00020057, 0x00020057, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006c, }, + {0x0002006d, 0x0002006d, 0x0002006d, 0x0002006d, 0x0002006e, 0x0002006e, 0x0002006e, 0x0002006e, 0x0002006f, 0x0002006f, 0x0002006f, 0x0002006f, 0x00020070, 0x00020070, 0x00020070, 0x00020070, }, + {0x00020071, 0x00020071, 0x00020071, 0x00020071, 0x00020088, 0x00020088, 0x00020088, 0x00020088, 0x00020089, 0x00020089, 0x00020089, 0x00020089, 0x0002008a, 0x0002008a, 0x0002008a, 0x0002008a, }, + {0x0002008b, 0x0002008b, 0x0002008b, 0x0002008b, 0x000200a3, 0x000200a3, 0x000200a3, 0x000200a3, 0x000200a4, 0x000200a4, 0x000200a4, 0x000200a4, 0x000200a5, 0x000200a5, 0x000200a5, 0x000200a5, }, + {0x00000024, 0x0000003e, 0x00000059, 0x00000074, 0x0000008e, 0x000000a8, 0x000000bd, 0x000000c2, 0x000000c3, 0x000000d8, 0x000000db, 0x000000dc, 0x000000f4, 0x000000f5, 0x00010004, 0x00010004, }, + {0x00010005, 0x00010005, 0x00010006, 0x00010006, 0x00010022, 0x00010022, 0x00010023, 0x00010023, 0x0001003d, 0x0001003d, 0x00010058, 0x00010058, 0x00010072, 0x00010072, 0x00010073, 0x00010073, }, + {0x00010087, 0x00010087, 0x0001008c, 0x0001008c, 0x0001008d, 0x0001008d, 0x000100a2, 0x000100a2, 0x000100a6, 0x000100a6, 0x000100a7, 0x000100a7, 0x000100be, 0x000100be, 0x000100bf, 0x000100bf, }, + {0x001effff, 0x001dffff, 0x001cffff, 0x0019ffff, 0x0018ffff, 0x001affff, 0x001bffff, 0x0012ffff, 0x0011ffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, 0x0016ffff, 0x0017ffff, 0x00000007, 0x00000008, }, + {0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, }, + {0x00020111, 0x00020111, 0x00020111, 0x00020111, 0x00020112, 0x00020112, 0x00020112, 0x00020112, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, + {0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x0003008f, 0x0003008f, 0x0003008f, 0x0003008f, 0x0003008f, 0x0003008f, 0x0003008f, 0x0003008f, }, + {0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300c4, 0x000300c4, 0x000300c4, 0x000300c4, 0x000300c4, 0x000300c4, 0x000300c4, 0x000300c4, }, + {0x000300dd, 0x000300dd, 0x000300dd, 0x000300dd, 0x000300dd, 0x000300dd, 0x000300dd, 0x000300dd, 0x000300de, 0x000300de, 0x000300de, 0x000300de, 0x000300de, 0x000300de, 0x000300de, 0x000300de, }, + {0x000300f3, 0x000300f3, 0x000300f3, 0x000300f3, 0x000300f3, 0x000300f3, 0x000300f3, 0x000300f3, 0x000300f6, 0x000300f6, 0x000300f6, 0x000300f6, 0x000300f6, 0x000300f6, 0x000300f6, 0x000300f6, }, + {0x000300f7, 0x000300f7, 0x000300f7, 0x000300f7, 0x000300f7, 0x000300f7, 0x000300f7, 0x000300f7, 0x0003010f, 0x0003010f, 0x0003010f, 0x0003010f, 0x0003010f, 0x0003010f, 0x0003010f, 0x0003010f, }, + {0x00020025, 0x00020025, 0x00020025, 0x00020025, 0x00020040, 0x00020040, 0x00020040, 0x00020040, 0x0002005b, 0x0002005b, 0x0002005b, 0x0002005b, 0x00020076, 0x00020076, 0x00020076, 0x00020076, }, + {0x0001010e, 0x0001010e, 0x00010113, 0x00010113, 0x00010114, 0x00010114, 0x0001012a, 0x0001012a, 0x0001012b, 0x0001012b, 0x0001012c, 0x0001012c, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, }, + {0x00020090, 0x00020090, 0x00020090, 0x00020090, 0x000200aa, 0x000200aa, 0x000200aa, 0x000200aa, 0x000200ab, 0x000200ab, 0x000200ab, 0x000200ab, 0x000200c5, 0x000200c5, 0x000200c5, 0x000200c5, }, + {0x000200df, 0x000200df, 0x000200df, 0x000200df, 0x000200f8, 0x000200f8, 0x000200f8, 0x000200f8, 0x000200f9, 0x000200f9, 0x000200f9, 0x000200f9, 0x00020110, 0x00020110, 0x00020110, 0x00020110, }, + {0x00000146, 0x00000147, 0x00010026, 0x00010026, 0x00010041, 0x00010041, 0x0001005c, 0x0001005c, 0x00010091, 0x00010091, 0x000100c6, 0x000100c6, 0x000100e0, 0x000100e0, 0x000100fa, 0x000100fa, }, + {0x0025ffff, 0x0000000b, 0x00000027, 0x00000042, 0x0000005d, 0x00000077, 0x00000092, 0x000000ac, 0x000000c7, 0x000000e1, 0x000000fb, 0x00000115, 0x00000129, 0x0000012d, 0x0000012e, 0x00000145, }, + {0x0040ffff, 0x0039ffff, 0x002dffff, 0x002cffff, 0x002bffff, 0x0028ffff, 0x0026ffff, 0x0027ffff, 0x0029ffff, 0x002affff, 0x001fffff, 0x0020ffff, 0x0021ffff, 0x0022ffff, 0x0023ffff, 0x0024ffff, }, + {0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, }, + {0x00030093, 0x00030093, 0x00030093, 0x00030093, 0x00030093, 0x00030093, 0x00030093, 0x00030093, 0x000300ad, 0x000300ad, 0x000300ad, 0x000300ad, 0x000300ad, 0x000300ad, 0x000300ad, 0x000300ad, }, + {0x000300e2, 0x000300e2, 0x000300e2, 0x000300e2, 0x000300e2, 0x000300e2, 0x000300e2, 0x000300e2, 0x000300fc, 0x000300fc, 0x000300fc, 0x000300fc, 0x000300fc, 0x000300fc, 0x000300fc, 0x000300fc, }, + {0x00030116, 0x00030116, 0x00030116, 0x00030116, 0x00030116, 0x00030116, 0x00030116, 0x00030116, 0x0003012f, 0x0003012f, 0x0003012f, 0x0003012f, 0x0003012f, 0x0003012f, 0x0003012f, 0x0003012f, }, + {0x00030130, 0x00030130, 0x00030130, 0x00030130, 0x00030130, 0x00030130, 0x00030130, 0x00030130, 0x00030144, 0x00030144, 0x00030144, 0x00030144, 0x00030144, 0x00030144, 0x00030144, 0x00030144, }, + {0x00030148, 0x00030148, 0x00030148, 0x00030148, 0x00030148, 0x00030148, 0x00030148, 0x00030148, 0x00030149, 0x00030149, 0x00030149, 0x00030149, 0x00030149, 0x00030149, 0x00030149, 0x00030149, }, + {0x00030160, 0x00030160, 0x00030160, 0x00030160, 0x00030160, 0x00030160, 0x00030160, 0x00030160, 0x00030161, 0x00030161, 0x00030161, 0x00030161, 0x00030161, 0x00030161, 0x00030161, 0x00030161, }, + {0x00020028, 0x00020028, 0x00020028, 0x00020028, 0x00020043, 0x00020043, 0x00020043, 0x00020043, 0x0002005e, 0x0002005e, 0x0002005e, 0x0002005e, 0x000200ae, 0x000200ae, 0x000200ae, 0x000200ae, }, + {0x000200c8, 0x000200c8, 0x000200c8, 0x000200c8, 0x000200c9, 0x000200c9, 0x000200c9, 0x000200c9, 0x000200e3, 0x000200e3, 0x000200e3, 0x000200e3, 0x000200fd, 0x000200fd, 0x000200fd, 0x000200fd, }, + {0x0001014b, 0x0001014b, 0x00010165, 0x00010165, 0x0001017a, 0x0001017a, 0x0001017c, 0x0001017c, 0x0001017d, 0x0001017d, 0x0001017e, 0x0001017e, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, }, + {0x00020117, 0x00020117, 0x00020117, 0x00020117, 0x00020131, 0x00020131, 0x00020131, 0x00020131, 0x0002014a, 0x0002014a, 0x0002014a, 0x0002014a, 0x0002015f, 0x0002015f, 0x0002015f, 0x0002015f, }, + {0x00020162, 0x00020162, 0x00020162, 0x00020162, 0x00020163, 0x00020163, 0x00020163, 0x00020163, 0x00020164, 0x00020164, 0x00020164, 0x00020164, 0x0002017b, 0x0002017b, 0x0002017b, 0x0002017b, }, + {0x00010029, 0x00010029, 0x00010044, 0x00010044, 0x0001005f, 0x0001005f, 0x00010079, 0x00010079, 0x00010094, 0x00010094, 0x000100af, 0x000100af, 0x000100fe, 0x000100fe, 0x00010118, 0x00010118, }, + {0x0000007a, 0x00000095, 0x000000ca, 0x000000e4, 0x000000ff, 0x00000132, 0x00000133, 0x0000014c, 0x0000014d, 0x0000014e, 0x00000166, 0x00000167, 0x0000017f, 0x00000180, 0x00000196, 0x00000197, }, + {0x003effff, 0x003fffff, 0x0036ffff, 0x0035ffff, 0x0037ffff, 0x0038ffff, 0x0031ffff, 0x002effff, 0x0032ffff, 0x002fffff, 0x0030ffff, 0x0033ffff, 0x0034ffff, 0x0000000e, 0x00000045, 0x00000060, }, + {0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, }, + {0x000300e5, 0x000300e5, 0x000300e5, 0x000300e5, 0x000300e5, 0x000300e5, 0x000300e5, 0x000300e5, 0x0003011a, 0x0003011a, 0x0003011a, 0x0003011a, 0x0003011a, 0x0003011a, 0x0003011a, 0x0003011a, }, + {0x00030134, 0x00030134, 0x00030134, 0x00030134, 0x00030134, 0x00030134, 0x00030134, 0x00030134, 0x00030181, 0x00030181, 0x00030181, 0x00030181, 0x00030181, 0x00030181, 0x00030181, 0x00030181, }, + {0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, }, + {0x000300b0, 0x000300b0, 0x000300b0, 0x000300b0, 0x000300b0, 0x000300b0, 0x000300b0, 0x000300b0, 0x000300b1, 0x000300b1, 0x000300b1, 0x000300b1, 0x000300b1, 0x000300b1, 0x000300b1, 0x000300b1, }, + {0x00030182, 0x00030182, 0x00030182, 0x00030182, 0x00030182, 0x00030182, 0x00030182, 0x00030182, 0x00030198, 0x00030198, 0x00030198, 0x00030198, 0x00030198, 0x00030198, 0x00030198, 0x00030198, }, + {0x00030199, 0x00030199, 0x00030199, 0x00030199, 0x00030199, 0x00030199, 0x00030199, 0x00030199, 0x0003019a, 0x0003019a, 0x0003019a, 0x0003019a, 0x0003019a, 0x0003019a, 0x0003019a, 0x0003019a, }, + {0x000200cc, 0x000200cc, 0x000200cc, 0x000200cc, 0x00020100, 0x00020100, 0x00020100, 0x00020100, 0x00020119, 0x00020119, 0x00020119, 0x00020119, 0x0002014f, 0x0002014f, 0x0002014f, 0x0002014f, }, + {0x000102d5, 0x000102d5, 0x000102d6, 0x000102d6, 0x000102d7, 0x000102d7, 0x000102d8, 0x000102d8, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x000200cb, 0x000200cb, 0x000200cb, 0x000200cb, }, + {0x00020168, 0x00020168, 0x00020168, 0x00020168, 0x00020195, 0x00020195, 0x00020195, 0x00020195, 0x0002019b, 0x0002019b, 0x0002019b, 0x0002019b, 0x0002019e, 0x0002019e, 0x0002019e, 0x0002019e, }, + {0x000201b1, 0x000201b1, 0x000201b1, 0x000201b1, 0x000201b2, 0x000201b2, 0x000201b2, 0x000201b2, 0x000201b3, 0x000201b3, 0x000201b3, 0x000201b3, 0x000201cc, 0x000201cc, 0x000201cc, 0x000201cc, }, + {0x0051ffff, 0x0052ffff, 0x0053ffff, 0x0054ffff, 0x0055ffff, 0x0056ffff, 0x0057ffff, 0x0058ffff, 0x0059ffff, 0x005affff, 0x005bffff, 0x005cffff, 0x003bffff, 0x003affff, 0x003cffff, 0x003dffff, }, + {0x00010062, 0x00010062, 0x000100e7, 0x000100e7, 0x00010101, 0x00010101, 0x0001011b, 0x0001011b, 0x00010135, 0x00010135, 0x00010150, 0x00010150, 0x0001019c, 0x0001019c, 0x0001019d, 0x0001019d, }, + {0x000002ae, 0x000002af, 0x000002b0, 0x000002b1, 0x000002b2, 0x000002b3, 0x000002b4, 0x000002b5, 0x0001002b, 0x0001002b, 0x00010046, 0x00010046, 0x00010047, 0x00010047, 0x00010061, 0x00010061, }, + {0x000101b0, 0x000101b0, 0x000102b6, 0x000102b6, 0x000102b7, 0x000102b7, 0x000102b8, 0x000102b8, 0x000102b9, 0x000102b9, 0x000102ba, 0x000102ba, 0x000102bb, 0x000102bb, 0x000102bc, 0x000102bc, }, + {0x000102bd, 0x000102bd, 0x000102be, 0x000102be, 0x000102bf, 0x000102bf, 0x000102c0, 0x000102c0, 0x000102c1, 0x000102c1, 0x000102c2, 0x000102c2, 0x000102c3, 0x000102c3, 0x000102c4, 0x000102c4, }, + {0x000102c5, 0x000102c5, 0x000102c6, 0x000102c6, 0x000102c7, 0x000102c7, 0x000102c8, 0x000102c8, 0x000102c9, 0x000102c9, 0x000102ca, 0x000102ca, 0x000102cb, 0x000102cb, 0x000102cc, 0x000102cc, }, + {0x000102cd, 0x000102cd, 0x000102ce, 0x000102ce, 0x000102cf, 0x000102cf, 0x000102d0, 0x000102d0, 0x000102d1, 0x000102d1, 0x000102d2, 0x000102d2, 0x000102d3, 0x000102d3, 0x000102d4, 0x000102d4, }, + {0x0044ffff, 0x0041ffff, 0x0042ffff, 0x0043ffff, 0x0045ffff, 0x0048ffff, 0x0046ffff, 0x0047ffff, 0x0049ffff, 0x004affff, 0x004bffff, 0x004cffff, 0x004dffff, 0x004effff, 0x004fffff, 0x0050ffff, }, + {0x00000032, 0x00000033, 0x00000034, 0x00000035, 0x00000048, 0x00000049, 0x0000004a, 0x0000004b, 0x0000004c, 0x0000004d, 0x0000004e, 0x0000004f, 0x00000050, 0x00000063, 0x00000064, 0x00000065, }, + {0x00000066, 0x00000067, 0x00000068, 0x00000069, 0x0000006a, 0x0000006b, 0x0000007c, 0x0000007d, 0x0000007e, 0x0000007f, 0x00000080, 0x00000081, 0x00000082, 0x00000083, 0x00000084, 0x00000085, }, + {0x00000086, 0x00000097, 0x00000098, 0x00000099, 0x0000009a, 0x0000009b, 0x0000009c, 0x0000009d, 0x0000009e, 0x0000009f, 0x000000a0, 0x000000a1, 0x000000b2, 0x000000b3, 0x000000b4, 0x000000b5, }, + {0x00000011, 0x00000012, 0x00000013, 0x00000014, 0x00000015, 0x00000016, 0x00000017, 0x00000018, 0x00000019, 0x0000001a, 0x0000002c, 0x0000002d, 0x0000002e, 0x0000002f, 0x00000030, 0x00000031, }, + {0x000000b6, 0x000000b7, 0x000000b8, 0x000000b9, 0x000000ba, 0x000000bb, 0x000000bc, 0x000000cd, 0x000000ce, 0x000000cf, 0x000000d0, 0x000000d1, 0x000000d2, 0x000000d3, 0x000000d4, 0x000000d5, }, + {0x00000104, 0x00000105, 0x00000106, 0x00000107, 0x00000108, 0x00000109, 0x0000010a, 0x0000010b, 0x0000010c, 0x0000010d, 0x0000011c, 0x0000011d, 0x0000011e, 0x0000011f, 0x00000120, 0x00000121, }, + {0x00000122, 0x00000123, 0x00000124, 0x00000125, 0x00000126, 0x00000127, 0x00000128, 0x00000136, 0x00000137, 0x00000138, 0x00000139, 0x0000013a, 0x0000013b, 0x0000013c, 0x0000013d, 0x0000013e, }, + {0x000000d6, 0x000000d7, 0x000000e6, 0x000000e8, 0x000000e9, 0x000000ea, 0x000000eb, 0x000000ec, 0x000000ed, 0x000000ee, 0x000000ef, 0x000000f0, 0x000000f1, 0x000000f2, 0x00000102, 0x00000103, }, + {0x0000013f, 0x00000140, 0x00000141, 0x00000142, 0x00000143, 0x00000151, 0x00000152, 0x00000153, 0x00000154, 0x00000155, 0x00000156, 0x00000157, 0x00000158, 0x00000159, 0x0000015a, 0x0000015b, }, + {0x0000015c, 0x0000015d, 0x0000015e, 0x00000169, 0x0000016a, 0x0000016b, 0x0000016c, 0x0000016d, 0x0000016e, 0x0000016f, 0x00000170, 0x00000171, 0x00000172, 0x00000173, 0x00000174, 0x00000175, }, + {0x00000176, 0x00000177, 0x00000178, 0x00000179, 0x00000183, 0x00000184, 0x00000185, 0x00000186, 0x00000187, 0x00000188, 0x00000189, 0x0000018a, 0x0000018b, 0x0000018c, 0x0000018d, 0x0000018e, }, + {0x0000018f, 0x00000190, 0x00000191, 0x00000192, 0x00000193, 0x00000194, 0x0000019f, 0x000001a0, 0x000001a1, 0x000001a2, 0x000001a3, 0x000001a4, 0x000001a5, 0x000001a6, 0x000001a7, 0x000001a8, }, + {0x000001a9, 0x000001aa, 0x000001ab, 0x000001ac, 0x000001ad, 0x000001ae, 0x000001af, 0x000001b4, 0x000001b5, 0x000001b6, 0x000001b7, 0x000001b8, 0x000001b9, 0x000001ba, 0x000001bb, 0x000001bc, }, + {0x000001bd, 0x000001be, 0x000001bf, 0x000001c0, 0x000001c1, 0x000001c2, 0x000001c3, 0x000001c4, 0x000001c5, 0x000001c6, 0x000001c7, 0x000001c8, 0x000001c9, 0x000001ca, 0x000001cb, 0x000001cd, }, + {0x000001ce, 0x000001cf, 0x000001d0, 0x000001d1, 0x000001d2, 0x000001d3, 0x000001d4, 0x000001d5, 0x000001d6, 0x000001d7, 0x000001d8, 0x000001d9, 0x000001da, 0x000001db, 0x000001dc, 0x000001dd, }, + {0x000001de, 0x000001df, 0x000001e0, 0x000001e1, 0x000001e2, 0x000001e3, 0x000001e4, 0x000001e5, 0x000001e6, 0x000001e7, 0x000001e8, 0x000001e9, 0x000001ea, 0x000001eb, 0x000001ec, 0x000001ed, }, + {0x000001ee, 0x000001ef, 0x000001f0, 0x000001f1, 0x000001f2, 0x000001f3, 0x000001f4, 0x000001f5, 0x000001f6, 0x000001f7, 0x000001f8, 0x000001f9, 0x000001fa, 0x000001fb, 0x000001fc, 0x000001fd, }, + {0x000001fe, 0x000001ff, 0x00000200, 0x00000201, 0x00000202, 0x00000203, 0x00000204, 0x00000205, 0x00000206, 0x00000207, 0x00000208, 0x00000209, 0x0000020a, 0x0000020b, 0x0000020c, 0x0000020d, }, + {0x0000020e, 0x0000020f, 0x00000210, 0x00000211, 0x00000212, 0x00000213, 0x00000214, 0x00000215, 0x00000216, 0x00000217, 0x00000218, 0x00000219, 0x0000021a, 0x0000021b, 0x0000021c, 0x0000021d, }, + {0x0000021e, 0x0000021f, 0x00000220, 0x00000221, 0x00000222, 0x00000223, 0x00000224, 0x00000225, 0x00000226, 0x00000227, 0x00000228, 0x00000229, 0x0000022a, 0x0000022b, 0x0000022c, 0x0000022d, }, + {0x0000022e, 0x0000022f, 0x00000230, 0x00000231, 0x00000232, 0x00000233, 0x00000234, 0x00000235, 0x00000236, 0x00000237, 0x00000238, 0x00000239, 0x0000023a, 0x0000023b, 0x0000023c, 0x0000023d, }, + {0x0000023e, 0x0000023f, 0x00000240, 0x00000241, 0x00000242, 0x00000243, 0x00000244, 0x00000245, 0x00000246, 0x00000247, 0x00000248, 0x00000249, 0x0000024a, 0x0000024b, 0x0000024c, 0x0000024d, }, + {0x0000024e, 0x0000024f, 0x00000250, 0x00000251, 0x00000252, 0x00000253, 0x00000254, 0x00000255, 0x00000256, 0x00000257, 0x00000258, 0x00000259, 0x0000025a, 0x0000025b, 0x0000025c, 0x0000025d, }, + {0x0000025e, 0x0000025f, 0x00000260, 0x00000261, 0x00000262, 0x00000263, 0x00000264, 0x00000265, 0x00000266, 0x00000267, 0x00000268, 0x00000269, 0x0000026a, 0x0000026b, 0x0000026c, 0x0000026d, }, + {0x0000026e, 0x0000026f, 0x00000270, 0x00000271, 0x00000272, 0x00000273, 0x00000274, 0x00000275, 0x00000276, 0x00000277, 0x00000278, 0x00000279, 0x0000027a, 0x0000027b, 0x0000027c, 0x0000027d, }, + {0x0000027e, 0x0000027f, 0x00000280, 0x00000281, 0x00000282, 0x00000283, 0x00000284, 0x00000285, 0x00000286, 0x00000287, 0x00000288, 0x00000289, 0x0000028a, 0x0000028b, 0x0000028c, 0x0000028d, }, + {0x0000028e, 0x0000028f, 0x00000290, 0x00000291, 0x00000292, 0x00000293, 0x00000294, 0x00000295, 0x00000296, 0x00000297, 0x00000298, 0x00000299, 0x0000029a, 0x0000029b, 0x0000029c, 0x0000029d, }, + {0x0000029e, 0x0000029f, 0x000002a0, 0x000002a1, 0x000002a2, 0x000002a3, 0x000002a4, 0x000002a5, 0x000002a6, 0x000002a7, 0x000002a8, 0x000002a9, 0x000002aa, 0x000002ab, 0x000002ac, 0x000002ad, }, +}; + +const uint32_t c_aauiCQMFHuffEnc18[28][2] = +{ + {0x0004, 0x0001}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0003, 0x0004}, {0x0003, 0x0005}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0002}, + {0x0004, 0x0003}, {0x0005, 0x0001}, {0x0006, 0x0001}, {0x0007, 0x0001}, {0x0008, 0x0001}, {0x0009, 0x0001}, {0x000a, 0x0001}, {0x000b, 0x0001}, + {0x000c, 0x0001}, {0x000d, 0x0001}, {0x000e, 0x0001}, {0x000f, 0x0001}, {0x0011, 0x0003}, {0x0012, 0x0001}, {0x0012, 0x0002}, {0x0012, 0x0003}, + {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0012, 0x0004}, {0x0012, 0x0005}, + +}; + +const uint32_t c_aauiCQMFHuffDec18[6][16] = +{ + {0x0001ffff, 0x00000000, 0x00000007, 0x00000008, 0x00010001, 0x00010001, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00010004, 0x00010004, 0x00010005, 0x00010005, 0x00010006, 0x00010006, }, + {0x0002ffff, 0x0000000c, 0x0001000b, 0x0001000b, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, + {0x0003ffff, 0x00000010, 0x0001000f, 0x0001000f, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, }, + {0x0005ffff, 0x0004ffff, 0x00010013, 0x00010013, 0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, + {0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, }, + {0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x00020015, 0x00020015, 0x00020015, 0x00020015, 0x00020016, 0x00020016, 0x00020016, 0x00020016, 0x00020017, 0x00020017, 0x00020017, 0x00020017, }, +}; + +const uint32_t c_aauiCQMFHuffEnc19[29][2] = +{ + {0x0004, 0x0002}, {0x0003, 0x0003}, {0x0003, 0x0004}, {0x0003, 0x0005}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0003}, {0x0004, 0x0004}, + {0x0004, 0x0005}, {0x0005, 0x0001}, {0x0005, 0x0002}, {0x0005, 0x0003}, {0x0006, 0x0001}, {0x0007, 0x0001}, {0x0008, 0x0001}, {0x0009, 0x0001}, + {0x000a, 0x0001}, {0x000b, 0x0001}, {0x000c, 0x0001}, {0x000d, 0x0001}, {0x000e, 0x0001}, {0x000f, 0x0001}, {0x0010, 0x0001}, {0x0012, 0x0002}, + {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0012, 0x0003}, + +}; + +const uint32_t c_aauiCQMFHuffDec19[6][16] = +{ + {0x0001ffff, 0x0002ffff, 0x00000000, 0x00000006, 0x00000007, 0x00000008, 0x00010001, 0x00010001, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00010004, 0x00010004, 0x00010005, 0x00010005, }, + {0x0003ffff, 0x0000000e, 0x0001000d, 0x0001000d, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, + {0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, + {0x0004ffff, 0x00000012, 0x00010011, 0x00010011, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, + {0x0005ffff, 0x00000016, 0x00010015, 0x00010015, 0x00020014, 0x00020014, 0x00020014, 0x00020014, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, }, + {0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x0001001a, 0x0001001a, 0x0001001b, 0x0001001b, 0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, }, +}; + +const uint32_t c_aauiCQMFHuffEnc20[32][2] = +{ + {0x0004, 0x0002}, {0x0003, 0x0005}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0003}, {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0004, 0x0006}, + {0x0004, 0x0007}, {0x0004, 0x0008}, {0x0004, 0x0009}, {0x0005, 0x0002}, {0x0005, 0x0003}, {0x0006, 0x0001}, {0x0006, 0x0002}, {0x0006, 0x0003}, + {0x0007, 0x0001}, {0x0008, 0x0001}, {0x0009, 0x0001}, {0x000a, 0x0001}, {0x000b, 0x0001}, {0x000c, 0x0001}, {0x000d, 0x0001}, {0x000e, 0x0001}, + {0x000f, 0x0001}, {0x0010, 0x0001}, {0x0011, 0x0001}, {0x0014, 0x0000}, {0x0014, 0x0001}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, +}; + +const uint32_t c_aauiCQMFHuffDec20[6][16] = +{ + {0x0002ffff, 0x0001ffff, 0x00000000, 0x00000004, 0x00000005, 0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x0000000a, 0x00010001, 0x00010001, 0x00010002, 0x00010002, 0x00010003, 0x00010003, }, + {0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, + {0x0003ffff, 0x00000011, 0x00010010, 0x00010010, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, }, + {0x0004ffff, 0x00000015, 0x00010014, 0x00010014, 0x00020013, 0x00020013, 0x00020013, 0x00020013, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, }, + {0x0005ffff, 0x00000019, 0x00010018, 0x00010018, 0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, }, + {0x0000001b, 0x0000001c, 0x0001001d, 0x0001001d, 0x0001001e, 0x0001001e, 0x0001001f, 0x0001001f, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, }, +}; + +const uint32_t c_aauiCQMFHuffEnc21[37][2] = +{ + {0x0005, 0x0002}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0003}, {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0004, 0x0006}, {0x0004, 0x0007}, + {0x0004, 0x0008}, {0x0004, 0x0009}, {0x0004, 0x000a}, {0x0004, 0x000b}, {0x0005, 0x0003}, {0x0005, 0x0004}, {0x0005, 0x0005}, {0x0006, 0x0002}, + {0x0006, 0x0003}, {0x0007, 0x0002}, {0x0007, 0x0003}, {0x0008, 0x0001}, {0x0008, 0x0002}, {0x0008, 0x0003}, {0x0009, 0x0001}, {0x000b, 0x0001}, + {0x000b, 0x0002}, {0x000b, 0x0003}, {0x000c, 0x0001}, {0x000d, 0x0001}, {0x000e, 0x0001}, {0x000f, 0x0001}, {0x0010, 0x0001}, {0x0011, 0x0001}, + {0x0014, 0x0000}, {0x0014, 0x0001}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, + +}; + +const uint32_t c_aauiCQMFHuffDec21[7][16] = +{ + {0x0003ffff, 0x0001ffff, 0x0002ffff, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x00010001, 0x00010001, 0x00010002, 0x00010002, }, + {0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, + {0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, + {0x0004ffff, 0x00000013, 0x00000014, 0x00000015, 0x00010011, 0x00010011, 0x00010012, 0x00010012, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, 0x00020010, 0x00020010, 0x00020010, 0x00020010, }, + {0x0005ffff, 0x0000001a, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, }, + {0x0006ffff, 0x0000001e, 0x0001001d, 0x0001001d, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, }, + {0x00000020, 0x00000021, 0x00010022, 0x00010022, 0x00010023, 0x00010023, 0x00010024, 0x00010024, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, }, +}; + +const uint32_t c_aauiCQMFHuffEnc22[39][2] = +{ + {0x0005, 0x0002}, {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0004, 0x0008}, {0x0004, 0x0009}, {0x0004, 0x000a}, + {0x0004, 0x000b}, {0x0004, 0x000c}, {0x0004, 0x000d}, {0x0004, 0x000e}, {0x0004, 0x000f}, {0x0005, 0x0003}, {0x0005, 0x0004}, {0x0005, 0x0005}, + {0x0005, 0x0006}, {0x0005, 0x0007}, {0x0006, 0x0002}, {0x0006, 0x0003}, {0x0007, 0x0002}, {0x0007, 0x0003}, {0x0008, 0x0002}, {0x0008, 0x0003}, + {0x0009, 0x0002}, {0x0009, 0x0003}, {0x000a, 0x0001}, {0x000a, 0x0002}, {0x000a, 0x0003}, {0x000c, 0x0001}, {0x000c, 0x0002}, {0x000c, 0x0003}, + {0x000e, 0x0001}, {0x000e, 0x0002}, {0x000f, 0x0001}, {0x000e, 0x0003}, {0x0011, 0x0000}, {0x0010, 0x0001}, {0x0011, 0x0001}, + +}; + +const uint32_t c_aauiCQMFHuffDec22[9][16] = +{ + {0x0004ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0000000c, }, + {0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, }, + {0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, + {0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, + {0x0006ffff, 0x0005ffff, 0x00000016, 0x00000017, 0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00020013, 0x00020013, 0x00020013, 0x00020013, }, + {0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, }, + {0x0007ffff, 0x0000001d, 0x0000001e, 0x0000001f, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, }, + {0x0008ffff, 0x00000025, 0x00010022, 0x00010022, 0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020023, 0x00020023, 0x00020023, 0x00020023, }, + {0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, }, +}; + +const uint32_t c_aauiCQMFHuffEnc23[46][2] = +{ + {0x0005, 0x0003}, {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0004, 0x0008}, {0x0004, 0x0009}, {0x0004, 0x000a}, {0x0004, 0x000b}, {0x0004, 0x000c}, + {0x0004, 0x000d}, {0x0004, 0x000e}, {0x0004, 0x000f}, {0x0005, 0x0004}, {0x0005, 0x0005}, {0x0005, 0x0006}, {0x0005, 0x0007}, {0x0005, 0x0008}, + {0x0005, 0x0009}, {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0006, 0x0003}, {0x0006, 0x0004}, {0x0006, 0x0005}, {0x0007, 0x0002}, {0x0007, 0x0003}, + {0x0007, 0x0004}, {0x0007, 0x0005}, {0x0008, 0x0002}, {0x0008, 0x0003}, {0x0009, 0x0002}, {0x0009, 0x0003}, {0x000a, 0x0002}, {0x000a, 0x0003}, + {0x000b, 0x0002}, {0x000b, 0x0003}, {0x000c, 0x0002}, {0x000c, 0x0003}, {0x000d, 0x0002}, {0x000d, 0x0003}, {0x000e, 0x0001}, {0x000e, 0x0002}, + {0x000e, 0x0003}, {0x000f, 0x0001}, {0x0010, 0x0001}, {0x0012, 0x0000}, {0x0012, 0x0001}, {0x0011, 0x0001}, + +}; + +const uint32_t c_aauiCQMFHuffDec23[12][16] = +{ + {0x0006ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x0000000a, }, + {0x00020014, 0x00020014, 0x00020014, 0x00020014, 0x00020015, 0x00020015, 0x00020015, 0x00020015, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, + {0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, + {0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, }, + {0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, }, + {0x0008ffff, 0x0007ffff, 0x0000001a, 0x0000001b, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x00020013, 0x00020013, 0x00020013, 0x00020013, }, + {0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, }, + {0x000affff, 0x0009ffff, 0x00000022, 0x00000023, 0x00010020, 0x00010020, 0x00010021, 0x00010021, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, }, + {0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, }, + {0x000bffff, 0x0000002a, 0x00010029, 0x00010029, 0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00020027, 0x00020027, 0x00020027, 0x00020027, 0x00020028, 0x00020028, 0x00020028, 0x00020028, }, + {0x0002002b, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, }, +}; + +const uint32_t c_aauiCQMFHuffEnc24[55][2] = +{ + {0x0005, 0x0004}, {0x0004, 0x0009}, {0x0004, 0x000a}, {0x0004, 0x000b}, {0x0004, 0x000c}, {0x0004, 0x000d}, {0x0004, 0x000e}, {0x0004, 0x000f}, + {0x0005, 0x0005}, {0x0005, 0x0006}, {0x0005, 0x0007}, {0x0005, 0x0008}, {0x0005, 0x0009}, {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0005, 0x000c}, + {0x0005, 0x000d}, {0x0005, 0x000e}, {0x0005, 0x000f}, {0x0005, 0x0010}, {0x0005, 0x0011}, {0x0006, 0x0003}, {0x0006, 0x0004}, {0x0006, 0x0005}, + {0x0006, 0x0006}, {0x0006, 0x0007}, {0x0007, 0x0003}, {0x0007, 0x0004}, {0x0007, 0x0005}, {0x0008, 0x0003}, {0x0008, 0x0004}, {0x0008, 0x0005}, + {0x0009, 0x0002}, {0x0009, 0x0003}, {0x0009, 0x0004}, {0x0009, 0x0005}, {0x000a, 0x0002}, {0x000a, 0x0003}, {0x000b, 0x0002}, {0x000b, 0x0003}, + {0x000c, 0x0003}, {0x000d, 0x0002}, {0x000d, 0x0003}, {0x000d, 0x0004}, {0x000d, 0x0005}, {0x000e, 0x0002}, {0x000e, 0x0003}, {0x000f, 0x0001}, + {0x000f, 0x0002}, {0x000f, 0x0003}, {0x0010, 0x0001}, {0x0011, 0x0001}, {0x0013, 0x0000}, {0x0012, 0x0001}, {0x0013, 0x0001}, + +}; + +const uint32_t c_aauiCQMFHuffDec24[17][16] = +{ + {0x0008ffff, 0x0009ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, }, + {0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, }, + {0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, }, + {0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, + {0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, + {0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, }, + {0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, }, + {0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, }, + {0x000cffff, 0x000affff, 0x000bffff, 0x0000001d, 0x0000001e, 0x0000001f, 0x0001001a, 0x0001001a, 0x0001001b, 0x0001001b, 0x0001001c, 0x0001001c, 0x00020015, 0x00020015, 0x00020015, 0x00020015, }, + {0x00020016, 0x00020016, 0x00020016, 0x00020016, 0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x00020019, 0x00020019, 0x00020019, 0x00020019, }, + {0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, }, + {0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, }, + {0x000fffff, 0x000dffff, 0x000effff, 0x00000028, 0x00010026, 0x00010026, 0x00010027, 0x00010027, 0x00020024, 0x00020024, 0x00020024, 0x00020024, 0x00020025, 0x00020025, 0x00020025, 0x00020025, }, + {0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, }, + {0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, }, + {0x0010ffff, 0x00000032, 0x0001002f, 0x0001002f, 0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, }, + {0x00010034, 0x00010034, 0x00010036, 0x00010036, 0x00020035, 0x00020035, 0x00020035, 0x00020035, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, }, +}; + +const uint32_t c_aauiCQMFHuffEnc25[65][2] = +{ + {0x0005, 0x0005}, {0x0004, 0x000c}, {0x0004, 0x000d}, {0x0004, 0x000e}, {0x0005, 0x0006}, {0x0004, 0x000f}, {0x0005, 0x0007}, {0x0005, 0x0008}, + {0x0005, 0x0009}, {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0005, 0x000c}, {0x0005, 0x000d}, {0x0005, 0x000e}, {0x0005, 0x000f}, {0x0005, 0x0010}, + {0x0005, 0x0011}, {0x0005, 0x0012}, {0x0005, 0x0013}, {0x0005, 0x0014}, {0x0005, 0x0015}, {0x0005, 0x0016}, {0x0005, 0x0017}, {0x0006, 0x0004}, + {0x0006, 0x0005}, {0x0006, 0x0006}, {0x0006, 0x0007}, {0x0006, 0x0008}, {0x0006, 0x0009}, {0x0007, 0x0003}, {0x0007, 0x0004}, {0x0007, 0x0005}, + {0x0007, 0x0006}, {0x0007, 0x0007}, {0x0008, 0x0003}, {0x0008, 0x0004}, {0x0008, 0x0005}, {0x0009, 0x0003}, {0x0009, 0x0004}, {0x0009, 0x0005}, + {0x000a, 0x0003}, {0x000a, 0x0004}, {0x000a, 0x0005}, {0x000b, 0x0003}, {0x000b, 0x0004}, {0x000b, 0x0005}, {0x000c, 0x0002}, {0x000c, 0x0003}, + {0x000c, 0x0004}, {0x000c, 0x0005}, {0x000d, 0x0003}, {0x000e, 0x0003}, {0x000e, 0x0004}, {0x000f, 0x0003}, {0x000e, 0x0005}, {0x000f, 0x0004}, + {0x0010, 0x0001}, {0x000f, 0x0005}, {0x0010, 0x0002}, {0x0010, 0x0003}, {0x0010, 0x0004}, {0x0010, 0x0005}, {0x0011, 0x0001}, {0x0012, 0x0000}, + {0x0012, 0x0001}, + +}; + +const uint32_t c_aauiCQMFHuffDec25[19][16] = +{ + {0x000cffff, 0x000bffff, 0x0002ffff, 0x0001ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x00000001, 0x00000002, 0x00000003, 0x00000005, }, + {0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, + {0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, }, + {0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, }, + {0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, + {0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, + {0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, }, + {0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, }, + {0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, }, + {0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, }, + {0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, }, + {0x000fffff, 0x000dffff, 0x000effff, 0x00000022, 0x00000023, 0x00000024, 0x0001001d, 0x0001001d, 0x0001001e, 0x0001001e, 0x0001001f, 0x0001001f, 0x00010020, 0x00010020, 0x00010021, 0x00010021, }, + {0x00020029, 0x00020029, 0x00020029, 0x00020029, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, }, + {0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, }, + {0x0011ffff, 0x0010ffff, 0x0000002e, 0x0000002f, 0x00000030, 0x00000031, 0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, 0x00020028, 0x00020028, 0x00020028, 0x00020028, }, + {0x00020034, 0x00020034, 0x00020034, 0x00020034, 0x00020036, 0x00020036, 0x00020036, 0x00020036, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, }, + {0x0012ffff, 0x00000038, 0x0000003a, 0x0000003b, 0x0000003c, 0x0000003d, 0x00010035, 0x00010035, 0x00010037, 0x00010037, 0x00010039, 0x00010039, 0x00020033, 0x00020033, 0x00020033, 0x00020033, }, + {0x0002003f, 0x0002003f, 0x0002003f, 0x0002003f, 0x00020040, 0x00020040, 0x00020040, 0x00020040, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, }, +}; + +const uint32_t c_aauiCQMFHuffEnc26[77][2] = +{ + {0x0006, 0x0004}, {0x0005, 0x0007}, {0x0005, 0x0008}, {0x0005, 0x0009}, {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0005, 0x000c}, {0x0005, 0x000d}, + {0x0005, 0x000e}, {0x0005, 0x000f}, {0x0005, 0x0010}, {0x0005, 0x0011}, {0x0005, 0x0012}, {0x0005, 0x0013}, {0x0005, 0x0014}, {0x0005, 0x0015}, + {0x0005, 0x0016}, {0x0005, 0x0017}, {0x0005, 0x0018}, {0x0005, 0x0019}, {0x0005, 0x001a}, {0x0005, 0x001b}, {0x0005, 0x001c}, {0x0005, 0x001d}, + {0x0005, 0x001e}, {0x0005, 0x001f}, {0x0006, 0x0005}, {0x0006, 0x0006}, {0x0006, 0x0007}, {0x0006, 0x0008}, {0x0006, 0x0009}, {0x0006, 0x000a}, + {0x0006, 0x000b}, {0x0006, 0x000c}, {0x0006, 0x000d}, {0x0007, 0x0004}, {0x0007, 0x0005}, {0x0007, 0x0006}, {0x0007, 0x0007}, {0x0008, 0x0004}, + {0x0008, 0x0005}, {0x0008, 0x0006}, {0x0008, 0x0007}, {0x0009, 0x0003}, {0x0009, 0x0004}, {0x0009, 0x0005}, {0x0009, 0x0006}, {0x0009, 0x0007}, + {0x000a, 0x0003}, {0x000a, 0x0004}, {0x000a, 0x0005}, {0x000b, 0x0004}, {0x000b, 0x0005}, {0x000c, 0x0003}, {0x000c, 0x0004}, {0x000c, 0x0005}, + {0x000c, 0x0006}, {0x000c, 0x0007}, {0x000d, 0x0003}, {0x000d, 0x0004}, {0x000e, 0x0002}, {0x000d, 0x0005}, {0x000e, 0x0003}, {0x000e, 0x0004}, + {0x000f, 0x0003}, {0x000e, 0x0005}, {0x0010, 0x0002}, {0x0010, 0x0003}, {0x0010, 0x0004}, {0x0011, 0x0002}, {0x0012, 0x0001}, {0x0010, 0x0005}, + {0x0012, 0x0002}, {0x0011, 0x0003}, {0x0012, 0x0003}, {0x0013, 0x0000}, {0x0013, 0x0001}, + +}; + +const uint32_t c_aauiCQMFHuffDec26[26][16] = +{ + {0x0010ffff, 0x000effff, 0x000fffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000dffff, }, + {0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, }, + {0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, }, + {0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, }, + {0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, }, + {0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, + {0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, + {0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, }, + {0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, + {0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, + {0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, }, + {0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, }, + {0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, }, + {0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, }, + {0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, }, + {0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x00020020, 0x00020020, 0x00020020, 0x00020020, }, + {0x0014ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x00000027, 0x00000028, 0x00000029, 0x0000002a, 0x00010023, 0x00010023, 0x00010024, 0x00010024, 0x00010025, 0x00010025, 0x00010026, 0x00010026, }, + {0x00020031, 0x00020031, 0x00020031, 0x00020031, 0x00020032, 0x00020032, 0x00020032, 0x00020032, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, }, + {0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, }, + {0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, }, + {0x0017ffff, 0x0015ffff, 0x0016ffff, 0x00000035, 0x00000036, 0x00000037, 0x00000038, 0x00000039, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00020030, 0x00020030, 0x00020030, 0x00020030, }, + {0x0002003f, 0x0002003f, 0x0002003f, 0x0002003f, 0x00020041, 0x00020041, 0x00020041, 0x00020041, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, }, + {0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, }, + {0x0019ffff, 0x0018ffff, 0x00000042, 0x00000043, 0x00000044, 0x00000047, 0x00010040, 0x00010040, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002003e, }, + {0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, }, + {0x0001004b, 0x0001004b, 0x0001004c, 0x0001004c, 0x00020046, 0x00020046, 0x00020046, 0x00020046, 0x00020048, 0x00020048, 0x00020048, 0x00020048, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, }, +}; + +const uint32_t c_aauiCQMFHuffEnc27[91][2] = +{ + {0x0006, 0x0006}, {0x0005, 0x000b}, {0x0005, 0x000c}, {0x0005, 0x000d}, {0x0005, 0x000e}, {0x0005, 0x000f}, {0x0005, 0x0010}, {0x0005, 0x0011}, + {0x0005, 0x0012}, {0x0005, 0x0013}, {0x0005, 0x0014}, {0x0005, 0x0015}, {0x0005, 0x0016}, {0x0005, 0x0017}, {0x0005, 0x0018}, {0x0005, 0x0019}, + {0x0005, 0x001a}, {0x0005, 0x001b}, {0x0005, 0x001c}, {0x0005, 0x001d}, {0x0005, 0x001e}, {0x0005, 0x001f}, {0x0006, 0x0007}, {0x0006, 0x0008}, + {0x0006, 0x0009}, {0x0006, 0x000a}, {0x0006, 0x000b}, {0x0006, 0x000c}, {0x0006, 0x000d}, {0x0006, 0x000e}, {0x0006, 0x000f}, {0x0006, 0x0010}, + {0x0006, 0x0011}, {0x0006, 0x0012}, {0x0006, 0x0013}, {0x0006, 0x0014}, {0x0006, 0x0015}, {0x0007, 0x0005}, {0x0007, 0x0006}, {0x0007, 0x0007}, + {0x0007, 0x0008}, {0x0007, 0x0009}, {0x0007, 0x000a}, {0x0007, 0x000b}, {0x0008, 0x0004}, {0x0008, 0x0005}, {0x0008, 0x0006}, {0x0008, 0x0007}, + {0x0008, 0x0008}, {0x0008, 0x0009}, {0x0009, 0x0004}, {0x0009, 0x0005}, {0x0009, 0x0006}, {0x0009, 0x0007}, {0x000a, 0x0004}, {0x000a, 0x0005}, + {0x000a, 0x0006}, {0x000a, 0x0007}, {0x000b, 0x0004}, {0x000b, 0x0005}, {0x000b, 0x0006}, {0x000b, 0x0007}, {0x000c, 0x0004}, {0x000c, 0x0005}, + {0x000c, 0x0006}, {0x000c, 0x0007}, {0x000d, 0x0004}, {0x000d, 0x0005}, {0x000d, 0x0006}, {0x000d, 0x0007}, {0x000e, 0x0003}, {0x000e, 0x0004}, + {0x000e, 0x0005}, {0x000e, 0x0006}, {0x000e, 0x0007}, {0x000f, 0x0003}, {0x000f, 0x0004}, {0x0010, 0x0003}, {0x000f, 0x0005}, {0x0012, 0x0000}, + {0x0010, 0x0004}, {0x0010, 0x0005}, {0x0012, 0x0001}, {0x0012, 0x0002}, {0x0011, 0x0004}, {0x0011, 0x0005}, {0x0012, 0x0003}, {0x0012, 0x0004}, + {0x0012, 0x0005}, {0x0012, 0x0006}, {0x0012, 0x0007}, + +}; + +const uint32_t c_aauiCQMFHuffDec27[28][16] = +{ + {0x0010ffff, 0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, }, + {0x00020023, 0x00020023, 0x00020023, 0x00020023, 0x00020024, 0x00020024, 0x00020024, 0x00020024, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, }, + {0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, }, + {0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, }, + {0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, }, + {0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, + {0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, + {0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, }, + {0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, + {0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, + {0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, }, + {0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, }, + {0x00010028, 0x00010028, 0x00010029, 0x00010029, 0x0001002a, 0x0001002a, 0x0001002b, 0x0001002b, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020016, 0x00020016, 0x00020016, 0x00020016, }, + {0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, }, + {0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, }, + {0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, }, + {0x0014ffff, 0x0013ffff, 0x0011ffff, 0x0012ffff, 0x0000002c, 0x0000002d, 0x0000002e, 0x0000002f, 0x00000030, 0x00000031, 0x00010025, 0x00010025, 0x00010026, 0x00010026, 0x00010027, 0x00010027, }, + {0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, }, + {0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, }, + {0x00020036, 0x00020036, 0x00020036, 0x00020036, 0x00020037, 0x00020037, 0x00020037, 0x00020037, 0x00020038, 0x00020038, 0x00020038, 0x00020038, 0x00020039, 0x00020039, 0x00020039, 0x00020039, }, + {0x0017ffff, 0x0018ffff, 0x0015ffff, 0x0016ffff, 0x0000003e, 0x0000003f, 0x00000040, 0x00000041, 0x0001003a, 0x0001003a, 0x0001003b, 0x0001003b, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, }, + {0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, }, + {0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, }, + {0x001affff, 0x001bffff, 0x0019ffff, 0x0000004d, 0x00000050, 0x00000051, 0x0001004b, 0x0001004b, 0x0001004c, 0x0001004c, 0x0001004e, 0x0001004e, 0x00020046, 0x00020046, 0x00020046, 0x00020046, }, + {0x00020047, 0x00020047, 0x00020047, 0x00020047, 0x00020048, 0x00020048, 0x00020048, 0x00020048, 0x00020049, 0x00020049, 0x00020049, 0x00020049, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, }, + {0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, }, + {0x0002004f, 0x0002004f, 0x0002004f, 0x0002004f, 0x00020052, 0x00020052, 0x00020052, 0x00020052, 0x00020053, 0x00020053, 0x00020053, 0x00020053, 0x00020056, 0x00020056, 0x00020056, 0x00020056, }, + {0x00020057, 0x00020057, 0x00020057, 0x00020057, 0x00020058, 0x00020058, 0x00020058, 0x00020058, 0x00020059, 0x00020059, 0x00020059, 0x00020059, 0x0002005a, 0x0002005a, 0x0002005a, 0x0002005a, }, +}; + +const uint32_t c_aauiCQMFHuffEnc28[109][2] = +{ + {0x0006, 0x0008}, {0x0005, 0x0010}, {0x0005, 0x0011}, {0x0005, 0x0012}, {0x0005, 0x0013}, {0x0005, 0x0014}, {0x0005, 0x0015}, {0x0005, 0x0016}, + {0x0005, 0x0017}, {0x0005, 0x0018}, {0x0005, 0x0019}, {0x0005, 0x001a}, {0x0005, 0x001b}, {0x0005, 0x001c}, {0x0005, 0x001d}, {0x0005, 0x001e}, + {0x0006, 0x0009}, {0x0005, 0x001f}, {0x0006, 0x000a}, {0x0006, 0x000b}, {0x0006, 0x000c}, {0x0006, 0x000d}, {0x0006, 0x000e}, {0x0006, 0x000f}, + {0x0006, 0x0010}, {0x0006, 0x0011}, {0x0006, 0x0012}, {0x0006, 0x0013}, {0x0006, 0x0014}, {0x0006, 0x0015}, {0x0006, 0x0016}, {0x0006, 0x0017}, + {0x0006, 0x0018}, {0x0006, 0x0019}, {0x0006, 0x001a}, {0x0006, 0x001b}, {0x0006, 0x001c}, {0x0006, 0x001d}, {0x0006, 0x001e}, {0x0006, 0x001f}, + {0x0007, 0x0006}, {0x0007, 0x0007}, {0x0007, 0x0008}, {0x0007, 0x0009}, {0x0007, 0x000a}, {0x0007, 0x000b}, {0x0007, 0x000c}, {0x0007, 0x000d}, + {0x0007, 0x000e}, {0x0007, 0x000f}, {0x0008, 0x0005}, {0x0008, 0x0006}, {0x0008, 0x0007}, {0x0008, 0x0008}, {0x0008, 0x0009}, {0x0008, 0x000a}, + {0x0008, 0x000b}, {0x0009, 0x0004}, {0x0009, 0x0005}, {0x0009, 0x0006}, {0x0009, 0x0007}, {0x0009, 0x0008}, {0x0009, 0x0009}, {0x000a, 0x0005}, + {0x000a, 0x0006}, {0x000a, 0x0007}, {0x000b, 0x0005}, {0x000b, 0x0006}, {0x000b, 0x0007}, {0x000b, 0x0008}, {0x000b, 0x0009}, {0x000c, 0x0004}, + {0x000c, 0x0005}, {0x000c, 0x0006}, {0x000c, 0x0007}, {0x000c, 0x0008}, {0x000c, 0x0009}, {0x000d, 0x0004}, {0x000d, 0x0005}, {0x000d, 0x0006}, + {0x000d, 0x0007}, {0x000e, 0x0004}, {0x000e, 0x0005}, {0x000e, 0x0006}, {0x000e, 0x0007}, {0x0010, 0x0004}, {0x000f, 0x0005}, {0x0010, 0x0005}, + {0x000f, 0x0006}, {0x000f, 0x0007}, {0x0010, 0x0006}, {0x0011, 0x0006}, {0x0010, 0x0007}, {0x0013, 0x0000}, {0x0010, 0x0008}, {0x0010, 0x0009}, + {0x0013, 0x0001}, {0x0011, 0x0007}, {0x0012, 0x0001}, {0x0012, 0x0002}, {0x0012, 0x0003}, {0x0012, 0x0004}, {0x0012, 0x0005}, {0x0012, 0x0006}, + {0x0012, 0x0007}, {0x0012, 0x0008}, {0x0012, 0x0009}, {0x0012, 0x000a}, {0x0012, 0x000b}, + +}; + +const uint32_t c_aauiCQMFHuffDec28[30][16] = +{ + {0x000fffff, 0x0010ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000dffff, 0x000effff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, }, + {0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, }, + {0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, }, + {0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, + {0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, }, + {0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, }, + {0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, + {0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, + {0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, + {0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00020013, 0x00020013, 0x00020013, 0x00020013, }, + {0x00020014, 0x00020014, 0x00020014, 0x00020014, 0x00020015, 0x00020015, 0x00020015, 0x00020015, 0x00020016, 0x00020016, 0x00020016, 0x00020016, 0x00020017, 0x00020017, 0x00020017, 0x00020017, }, + {0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, }, + {0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, }, + {0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x00020023, 0x00020023, 0x00020023, 0x00020023, }, + {0x00020024, 0x00020024, 0x00020024, 0x00020024, 0x00020025, 0x00020025, 0x00020025, 0x00020025, 0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00020027, 0x00020027, 0x00020027, 0x00020027, }, + {0x0015ffff, 0x0014ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x00000032, 0x00000033, 0x00000034, 0x00000035, 0x00000036, 0x00000037, 0x00000038, 0x00010028, 0x00010028, 0x00010029, 0x00010029, }, + {0x0001002a, 0x0001002a, 0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, 0x0001002e, 0x0001002e, 0x0001002f, 0x0001002f, 0x00010030, 0x00010030, 0x00010031, 0x00010031, }, + {0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, }, + {0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, }, + {0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, }, + {0x00010045, 0x00010045, 0x00010046, 0x00010046, 0x0002003f, 0x0002003f, 0x0002003f, 0x0002003f, 0x00020040, 0x00020040, 0x00020040, 0x00020040, 0x00020041, 0x00020041, 0x00020041, 0x00020041, }, + {0x0019ffff, 0x0018ffff, 0x0016ffff, 0x0017ffff, 0x00000047, 0x00000048, 0x00000049, 0x0000004a, 0x0000004b, 0x0000004c, 0x00010042, 0x00010042, 0x00010043, 0x00010043, 0x00010044, 0x00010044, }, + {0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, }, + {0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, }, + {0x00020051, 0x00020051, 0x00020051, 0x00020051, 0x00020052, 0x00020052, 0x00020052, 0x00020052, 0x00020053, 0x00020053, 0x00020053, 0x00020053, 0x00020054, 0x00020054, 0x00020054, 0x00020054, }, + {0x001bffff, 0x001cffff, 0x001dffff, 0x001affff, 0x00000055, 0x00000057, 0x0000005a, 0x0000005c, 0x0000005e, 0x0000005f, 0x00010056, 0x00010056, 0x00010058, 0x00010058, 0x00010059, 0x00010059, }, + {0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, }, + {0x0001005d, 0x0001005d, 0x00010060, 0x00010060, 0x00020062, 0x00020062, 0x00020062, 0x00020062, 0x00020063, 0x00020063, 0x00020063, 0x00020063, 0x00020064, 0x00020064, 0x00020064, 0x00020064, }, + {0x00020065, 0x00020065, 0x00020065, 0x00020065, 0x00020066, 0x00020066, 0x00020066, 0x00020066, 0x00020067, 0x00020067, 0x00020067, 0x00020067, 0x00020068, 0x00020068, 0x00020068, 0x00020068, }, + {0x00020069, 0x00020069, 0x00020069, 0x00020069, 0x0002006a, 0x0002006a, 0x0002006a, 0x0002006a, 0x0002006b, 0x0002006b, 0x0002006b, 0x0002006b, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006c, }, +}; + +const uint32_t c_aauiCQMFHuffEnc29[129][2] = +{ + {0x0006, 0x0009}, {0x0005, 0x0019}, {0x0006, 0x000a}, {0x0005, 0x001a}, {0x0005, 0x001b}, {0x0005, 0x001c}, {0x0006, 0x000b}, {0x0005, 0x001d}, + {0x0005, 0x001e}, {0x0006, 0x000c}, {0x0006, 0x000d}, {0x0005, 0x001f}, {0x0006, 0x000e}, {0x0006, 0x000f}, {0x0006, 0x0010}, {0x0006, 0x0011}, + {0x0006, 0x0012}, {0x0006, 0x0013}, {0x0006, 0x0014}, {0x0006, 0x0015}, {0x0006, 0x0016}, {0x0006, 0x0017}, {0x0006, 0x0018}, {0x0006, 0x0019}, + {0x0006, 0x001a}, {0x0006, 0x001b}, {0x0006, 0x001c}, {0x0006, 0x001d}, {0x0006, 0x001e}, {0x0006, 0x001f}, {0x0006, 0x0020}, {0x0006, 0x0021}, + {0x0006, 0x0022}, {0x0006, 0x0023}, {0x0006, 0x0024}, {0x0006, 0x0025}, {0x0006, 0x0026}, {0x0006, 0x0027}, {0x0006, 0x0028}, {0x0006, 0x0029}, + {0x0006, 0x002a}, {0x0006, 0x002b}, {0x0006, 0x002c}, {0x0006, 0x002d}, {0x0006, 0x002e}, {0x0006, 0x002f}, {0x0006, 0x0030}, {0x0006, 0x0031}, + {0x0007, 0x0007}, {0x0007, 0x0008}, {0x0007, 0x0009}, {0x0007, 0x000a}, {0x0007, 0x000b}, {0x0007, 0x000c}, {0x0007, 0x000d}, {0x0007, 0x000e}, + {0x0007, 0x000f}, {0x0007, 0x0010}, {0x0007, 0x0011}, {0x0008, 0x0006}, {0x0008, 0x0007}, {0x0008, 0x0008}, {0x0008, 0x0009}, {0x0008, 0x000a}, + {0x0008, 0x000b}, {0x0008, 0x000c}, {0x0008, 0x000d}, {0x0009, 0x0006}, {0x0009, 0x0007}, {0x0009, 0x0008}, {0x0009, 0x0009}, {0x0009, 0x000a}, + {0x0009, 0x000b}, {0x000a, 0x0005}, {0x000a, 0x0006}, {0x000a, 0x0007}, {0x000a, 0x0008}, {0x000a, 0x0009}, {0x000a, 0x000a}, {0x000a, 0x000b}, + {0x000b, 0x0006}, {0x000b, 0x0007}, {0x000b, 0x0008}, {0x000b, 0x0009}, {0x000c, 0x0006}, {0x000c, 0x0007}, {0x000c, 0x0008}, {0x000c, 0x0009}, + {0x000c, 0x000a}, {0x000c, 0x000b}, {0x000d, 0x0005}, {0x000d, 0x0006}, {0x000d, 0x0007}, {0x000d, 0x0008}, {0x000d, 0x0009}, {0x000d, 0x000a}, + {0x000d, 0x000b}, {0x000e, 0x0006}, {0x000e, 0x0007}, {0x000e, 0x0008}, {0x000e, 0x0009}, {0x000f, 0x0004}, {0x000f, 0x0005}, {0x000f, 0x0006}, + {0x000f, 0x0007}, {0x0011, 0x0007}, {0x000f, 0x0008}, {0x0012, 0x0000}, {0x000f, 0x0009}, {0x0010, 0x0005}, {0x000f, 0x000a}, {0x000f, 0x000b}, + {0x0012, 0x0001}, {0x0010, 0x0006}, {0x0010, 0x0007}, {0x0012, 0x0002}, {0x0012, 0x0003}, {0x0012, 0x0004}, {0x0012, 0x0005}, {0x0012, 0x0006}, + {0x0012, 0x0007}, {0x0012, 0x0008}, {0x0011, 0x0008}, {0x0012, 0x0009}, {0x0012, 0x000a}, {0x0012, 0x000b}, {0x0012, 0x000c}, {0x0012, 0x000d}, + {0x0011, 0x0009}, + +}; + +const uint32_t c_aauiCQMFHuffDec29[34][16] = +{ + {0x000fffff, 0x0010ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000dffff, 0x000effff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, }, + {0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002f, 0x0002002f, 0x0002002f, 0x0002002f, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, }, + {0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, }, + {0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, }, + {0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, + {0x00010039, 0x00010039, 0x0001003a, 0x0001003a, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x00020006, 0x00020006, 0x00020006, 0x00020006, }, + {0x00020009, 0x00020009, 0x00020009, 0x00020009, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, }, + {0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x00020011, 0x00020011, 0x00020011, 0x00020011, }, + {0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00020013, 0x00020013, 0x00020013, 0x00020013, 0x00020014, 0x00020014, 0x00020014, 0x00020014, 0x00020015, 0x00020015, 0x00020015, 0x00020015, }, + {0x00020016, 0x00020016, 0x00020016, 0x00020016, 0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x00020019, 0x00020019, 0x00020019, 0x00020019, }, + {0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, }, + {0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, }, + {0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x00020023, 0x00020023, 0x00020023, 0x00020023, 0x00020024, 0x00020024, 0x00020024, 0x00020024, 0x00020025, 0x00020025, 0x00020025, 0x00020025, }, + {0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00020027, 0x00020027, 0x00020027, 0x00020027, 0x00020028, 0x00020028, 0x00020028, 0x00020028, 0x00020029, 0x00020029, 0x00020029, 0x00020029, }, + {0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002d, }, + {0x0016ffff, 0x0014ffff, 0x0015ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0000003b, 0x0000003c, 0x0000003d, 0x0000003e, 0x0000003f, 0x00000040, 0x00000041, 0x00000042, 0x00010030, 0x00010030, }, + {0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x00010036, 0x00010036, 0x00010037, 0x00010037, 0x00010038, 0x00010038, }, + {0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, }, + {0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, }, + {0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, }, + {0x00010052, 0x00010052, 0x00010053, 0x00010053, 0x00020049, 0x00020049, 0x00020049, 0x00020049, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004b, 0x0002004b, 0x0002004b, 0x0002004b, }, + {0x0002004c, 0x0002004c, 0x0002004c, 0x0002004c, 0x0002004d, 0x0002004d, 0x0002004d, 0x0002004d, 0x0002004e, 0x0002004e, 0x0002004e, 0x0002004e, 0x0002004f, 0x0002004f, 0x0002004f, 0x0002004f, }, + {0x001cffff, 0x001bffff, 0x0017ffff, 0x0018ffff, 0x0019ffff, 0x001affff, 0x00000054, 0x00000055, 0x00000056, 0x00000057, 0x00000058, 0x00000059, 0x00010050, 0x00010050, 0x00010051, 0x00010051, }, + {0x00020063, 0x00020063, 0x00020063, 0x00020063, 0x00020064, 0x00020064, 0x00020064, 0x00020064, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, }, + {0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, }, + {0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, }, + {0x0003005f, 0x0003005f, 0x0003005f, 0x0003005f, 0x0003005f, 0x0003005f, 0x0003005f, 0x0003005f, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, }, + {0x0001006a, 0x0001006a, 0x0001006c, 0x0001006c, 0x0001006e, 0x0001006e, 0x0001006f, 0x0001006f, 0x00020061, 0x00020061, 0x00020061, 0x00020061, 0x00020062, 0x00020062, 0x00020062, 0x00020062, }, + {0x001fffff, 0x0020ffff, 0x0021ffff, 0x001dffff, 0x001effff, 0x0000006d, 0x00000071, 0x00000072, 0x00010065, 0x00010065, 0x00010066, 0x00010066, 0x00010067, 0x00010067, 0x00010068, 0x00010068, }, + {0x0002007e, 0x0002007e, 0x0002007e, 0x0002007e, 0x0002007f, 0x0002007f, 0x0002007f, 0x0002007f, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, }, + {0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x00030080, 0x00030080, 0x00030080, 0x00030080, 0x00030080, 0x00030080, 0x00030080, 0x00030080, }, + {0x0002006b, 0x0002006b, 0x0002006b, 0x0002006b, 0x00020070, 0x00020070, 0x00020070, 0x00020070, 0x00020073, 0x00020073, 0x00020073, 0x00020073, 0x00020074, 0x00020074, 0x00020074, 0x00020074, }, + {0x00020075, 0x00020075, 0x00020075, 0x00020075, 0x00020076, 0x00020076, 0x00020076, 0x00020076, 0x00020077, 0x00020077, 0x00020077, 0x00020077, 0x00020078, 0x00020078, 0x00020078, 0x00020078, }, + {0x00020079, 0x00020079, 0x00020079, 0x00020079, 0x0002007b, 0x0002007b, 0x0002007b, 0x0002007b, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007d, 0x0002007d, 0x0002007d, 0x0002007d, }, +}; + +const uint32_t c_aauiCQMFHuffEnc30[153][2] = +{ + {0x0007, 0x0009}, {0x0006, 0x000e}, {0x0006, 0x000f}, {0x0006, 0x0010}, {0x0006, 0x0011}, {0x0006, 0x0012}, {0x0006, 0x0013}, {0x0006, 0x0014}, + {0x0006, 0x0015}, {0x0006, 0x0016}, {0x0006, 0x0017}, {0x0006, 0x0018}, {0x0006, 0x0019}, {0x0006, 0x001a}, {0x0006, 0x001b}, {0x0006, 0x001c}, + {0x0006, 0x001d}, {0x0006, 0x001e}, {0x0006, 0x001f}, {0x0006, 0x0020}, {0x0006, 0x0021}, {0x0006, 0x0022}, {0x0006, 0x0023}, {0x0006, 0x0024}, + {0x0006, 0x0025}, {0x0006, 0x0026}, {0x0006, 0x0027}, {0x0006, 0x0028}, {0x0006, 0x0029}, {0x0006, 0x002a}, {0x0006, 0x002b}, {0x0006, 0x002c}, + {0x0006, 0x002d}, {0x0006, 0x002e}, {0x0006, 0x002f}, {0x0006, 0x0030}, {0x0006, 0x0031}, {0x0006, 0x0032}, {0x0006, 0x0033}, {0x0006, 0x0034}, + {0x0006, 0x0035}, {0x0006, 0x0036}, {0x0006, 0x0037}, {0x0006, 0x0038}, {0x0006, 0x0039}, {0x0006, 0x003a}, {0x0006, 0x003b}, {0x0006, 0x003c}, + {0x0006, 0x003d}, {0x0006, 0x003e}, {0x0006, 0x003f}, {0x0007, 0x000a}, {0x0007, 0x000b}, {0x0007, 0x000c}, {0x0007, 0x000d}, {0x0007, 0x000e}, + {0x0007, 0x000f}, {0x0007, 0x0010}, {0x0007, 0x0011}, {0x0007, 0x0012}, {0x0007, 0x0013}, {0x0007, 0x0014}, {0x0007, 0x0015}, {0x0007, 0x0016}, + {0x0007, 0x0017}, {0x0007, 0x0018}, {0x0007, 0x0019}, {0x0007, 0x001a}, {0x0007, 0x001b}, {0x0008, 0x0008}, {0x0008, 0x0009}, {0x0008, 0x000a}, + {0x0008, 0x000b}, {0x0008, 0x000c}, {0x0008, 0x000d}, {0x0008, 0x000e}, {0x0008, 0x000f}, {0x0008, 0x0010}, {0x0008, 0x0011}, {0x0009, 0x0007}, + {0x0009, 0x0008}, {0x0009, 0x0009}, {0x0009, 0x000a}, {0x0009, 0x000b}, {0x0009, 0x000c}, {0x0009, 0x000d}, {0x0009, 0x000e}, {0x000a, 0x0008}, + {0x0009, 0x000f}, {0x000a, 0x0009}, {0x000a, 0x000a}, {0x000a, 0x000b}, {0x000a, 0x000c}, {0x000a, 0x000d}, {0x000b, 0x0007}, {0x000b, 0x0008}, + {0x000b, 0x0009}, {0x000b, 0x000a}, {0x000b, 0x000b}, {0x000b, 0x000c}, {0x000b, 0x000d}, {0x000c, 0x0008}, {0x000b, 0x000e}, {0x000b, 0x000f}, + {0x000c, 0x0009}, {0x000c, 0x000a}, {0x000d, 0x0008}, {0x000c, 0x000b}, {0x000c, 0x000c}, {0x000d, 0x0009}, {0x000c, 0x000d}, {0x000d, 0x000a}, + {0x000d, 0x000b}, {0x000d, 0x000c}, {0x000d, 0x000d}, {0x000e, 0x0008}, {0x000d, 0x000e}, {0x000d, 0x000f}, {0x000e, 0x0009}, {0x000e, 0x000a}, + {0x000e, 0x000b}, {0x000e, 0x000c}, {0x000f, 0x0006}, {0x000f, 0x0007}, {0x000f, 0x0008}, {0x0010, 0x0006}, {0x000e, 0x000d}, {0x000e, 0x000e}, + {0x000e, 0x000f}, {0x0010, 0x0007}, {0x000f, 0x0009}, {0x0010, 0x0008}, {0x000f, 0x000a}, {0x000f, 0x000b}, {0x000f, 0x000c}, {0x000f, 0x000d}, + {0x0010, 0x0009}, {0x0011, 0x0000}, {0x0011, 0x0001}, {0x0011, 0x0002}, {0x000f, 0x000e}, {0x0010, 0x000a}, {0x0011, 0x0003}, {0x0011, 0x0004}, + {0x0011, 0x0005}, {0x000f, 0x000f}, {0x0011, 0x0006}, {0x0011, 0x0007}, {0x0011, 0x0008}, {0x0011, 0x0009}, {0x0011, 0x000a}, {0x0011, 0x000b}, + {0x0010, 0x000b}, + +}; + +const uint32_t c_aauiCQMFHuffDec30[39][16] = +{ + {0x0010ffff, 0x000effff, 0x000fffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000dffff, }, + {0x00010041, 0x00010041, 0x00010042, 0x00010042, 0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00020002, 0x00020002, 0x00020002, 0x00020002, }, + {0x00020003, 0x00020003, 0x00020003, 0x00020003, 0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x00020005, 0x00020005, 0x00020005, 0x00020005, 0x00020006, 0x00020006, 0x00020006, 0x00020006, }, + {0x00020007, 0x00020007, 0x00020007, 0x00020007, 0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x00020009, 0x00020009, 0x00020009, 0x00020009, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, }, + {0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, }, + {0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x00020011, 0x00020011, 0x00020011, 0x00020011, 0x00020012, 0x00020012, 0x00020012, 0x00020012, }, + {0x00020013, 0x00020013, 0x00020013, 0x00020013, 0x00020014, 0x00020014, 0x00020014, 0x00020014, 0x00020015, 0x00020015, 0x00020015, 0x00020015, 0x00020016, 0x00020016, 0x00020016, 0x00020016, }, + {0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, }, + {0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, }, + {0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, }, + {0x00020023, 0x00020023, 0x00020023, 0x00020023, 0x00020024, 0x00020024, 0x00020024, 0x00020024, 0x00020025, 0x00020025, 0x00020025, 0x00020025, 0x00020026, 0x00020026, 0x00020026, 0x00020026, }, + {0x00020027, 0x00020027, 0x00020027, 0x00020027, 0x00020028, 0x00020028, 0x00020028, 0x00020028, 0x00020029, 0x00020029, 0x00020029, 0x00020029, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, }, + {0x0002002b, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, }, + {0x0002002f, 0x0002002f, 0x0002002f, 0x0002002f, 0x00020030, 0x00020030, 0x00020030, 0x00020030, 0x00020031, 0x00020031, 0x00020031, 0x00020031, 0x00020032, 0x00020032, 0x00020032, 0x00020032, }, + {0x0000004d, 0x0000004e, 0x00010000, 0x00010000, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x00010036, 0x00010036, 0x00010037, 0x00010037, 0x00010038, 0x00010038, }, + {0x00010039, 0x00010039, 0x0001003a, 0x0001003a, 0x0001003b, 0x0001003b, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, 0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x00010040, 0x00010040, }, + {0x0017ffff, 0x0018ffff, 0x0016ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, 0x00000045, 0x00000046, 0x00000047, 0x00000048, 0x00000049, 0x0000004a, 0x0000004b, 0x0000004c, }, + {0x0002005c, 0x0002005c, 0x0002005c, 0x0002005c, 0x0002005d, 0x0002005d, 0x0002005d, 0x0002005d, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, }, + {0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, }, + {0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, }, + {0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, }, + {0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, }, + {0x00020057, 0x00020057, 0x00020057, 0x00020057, 0x00020059, 0x00020059, 0x00020059, 0x00020059, 0x0002005a, 0x0002005a, 0x0002005a, 0x0002005a, 0x0002005b, 0x0002005b, 0x0002005b, 0x0002005b, }, + {0x001fffff, 0x0020ffff, 0x001dffff, 0x001effff, 0x0019ffff, 0x001affff, 0x001bffff, 0x001cffff, 0x00000065, 0x00000068, 0x00000069, 0x0000006b, 0x0000006c, 0x0000006e, 0x0001005e, 0x0001005e, }, + {0x0001005f, 0x0001005f, 0x00010060, 0x00010060, 0x00010061, 0x00010061, 0x00010062, 0x00010062, 0x00010063, 0x00010063, 0x00010064, 0x00010064, 0x00010066, 0x00010066, 0x00010067, 0x00010067, }, + {0x0003006a, 0x0003006a, 0x0003006a, 0x0003006a, 0x0003006a, 0x0003006a, 0x0003006a, 0x0003006a, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, }, + {0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, }, + {0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030072, 0x00030072, 0x00030072, 0x00030072, 0x00030072, 0x00030072, 0x00030072, 0x00030072, }, + {0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, }, + {0x00020073, 0x00020073, 0x00020073, 0x00020073, 0x00020076, 0x00020076, 0x00020076, 0x00020076, 0x00020077, 0x00020077, 0x00020077, 0x00020077, 0x00020078, 0x00020078, 0x00020078, 0x00020078, }, + {0x00020079, 0x00020079, 0x00020079, 0x00020079, 0x0002007e, 0x0002007e, 0x0002007e, 0x0002007e, 0x0002007f, 0x0002007f, 0x0002007f, 0x0002007f, 0x00020080, 0x00020080, 0x00020080, 0x00020080, }, + {0x0021ffff, 0x0022ffff, 0x0023ffff, 0x0024ffff, 0x0025ffff, 0x0026ffff, 0x0000007d, 0x00000081, 0x00000083, 0x00000088, 0x0000008d, 0x00000098, 0x0001007a, 0x0001007a, 0x0001007b, 0x0001007b, }, + {0x0001007c, 0x0001007c, 0x00010082, 0x00010082, 0x00010084, 0x00010084, 0x00010085, 0x00010085, 0x00010086, 0x00010086, 0x00010087, 0x00010087, 0x0001008c, 0x0001008c, 0x00010091, 0x00010091, }, + {0x00030089, 0x00030089, 0x00030089, 0x00030089, 0x00030089, 0x00030089, 0x00030089, 0x00030089, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, }, + {0x0003008b, 0x0003008b, 0x0003008b, 0x0003008b, 0x0003008b, 0x0003008b, 0x0003008b, 0x0003008b, 0x0003008e, 0x0003008e, 0x0003008e, 0x0003008e, 0x0003008e, 0x0003008e, 0x0003008e, 0x0003008e, }, + {0x0003008f, 0x0003008f, 0x0003008f, 0x0003008f, 0x0003008f, 0x0003008f, 0x0003008f, 0x0003008f, 0x00030090, 0x00030090, 0x00030090, 0x00030090, 0x00030090, 0x00030090, 0x00030090, 0x00030090, }, + {0x00030092, 0x00030092, 0x00030092, 0x00030092, 0x00030092, 0x00030092, 0x00030092, 0x00030092, 0x00030093, 0x00030093, 0x00030093, 0x00030093, 0x00030093, 0x00030093, 0x00030093, 0x00030093, }, + {0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030095, 0x00030095, 0x00030095, 0x00030095, 0x00030095, 0x00030095, 0x00030095, 0x00030095, }, + {0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030097, 0x00030097, 0x00030097, 0x00030097, 0x00030097, 0x00030097, 0x00030097, 0x00030097, }, +}; + +const uint32_t c_aauiCQMFHuffEnc31[181][2] = +{ + {0x0007, 0x000b}, {0x0006, 0x0015}, {0x0006, 0x0016}, {0x0006, 0x0017}, {0x0006, 0x0018}, {0x0006, 0x0019}, {0x0006, 0x001a}, {0x0006, 0x001b}, + {0x0006, 0x001c}, {0x0006, 0x001d}, {0x0006, 0x001e}, {0x0006, 0x001f}, {0x0006, 0x0020}, {0x0006, 0x0021}, {0x0006, 0x0022}, {0x0006, 0x0023}, + {0x0006, 0x0024}, {0x0006, 0x0025}, {0x0006, 0x0026}, {0x0006, 0x0027}, {0x0006, 0x0028}, {0x0006, 0x0029}, {0x0006, 0x002a}, {0x0006, 0x002b}, + {0x0006, 0x002c}, {0x0006, 0x002d}, {0x0006, 0x002e}, {0x0006, 0x002f}, {0x0006, 0x0030}, {0x0006, 0x0031}, {0x0006, 0x0032}, {0x0006, 0x0033}, + {0x0006, 0x0034}, {0x0006, 0x0035}, {0x0006, 0x0036}, {0x0006, 0x0037}, {0x0006, 0x0038}, {0x0006, 0x0039}, {0x0006, 0x003a}, {0x0006, 0x003b}, + {0x0006, 0x003c}, {0x0006, 0x003d}, {0x0006, 0x003e}, {0x0007, 0x000c}, {0x0006, 0x003f}, {0x0007, 0x000d}, {0x0007, 0x000e}, {0x0007, 0x000f}, + {0x0007, 0x0010}, {0x0007, 0x0011}, {0x0007, 0x0012}, {0x0007, 0x0013}, {0x0007, 0x0014}, {0x0007, 0x0015}, {0x0007, 0x0016}, {0x0007, 0x0017}, + {0x0007, 0x0018}, {0x0007, 0x0019}, {0x0007, 0x001a}, {0x0007, 0x001b}, {0x0007, 0x001c}, {0x0007, 0x001d}, {0x0007, 0x001e}, {0x0007, 0x001f}, + {0x0007, 0x0020}, {0x0007, 0x0021}, {0x0007, 0x0022}, {0x0007, 0x0023}, {0x0007, 0x0024}, {0x0007, 0x0025}, {0x0007, 0x0026}, {0x0007, 0x0027}, + {0x0007, 0x0028}, {0x0007, 0x0029}, {0x0008, 0x0009}, {0x0008, 0x000a}, {0x0008, 0x000b}, {0x0008, 0x000c}, {0x0008, 0x000d}, {0x0008, 0x000e}, + {0x0008, 0x000f}, {0x0008, 0x0010}, {0x0008, 0x0011}, {0x0008, 0x0012}, {0x0008, 0x0013}, {0x0008, 0x0014}, {0x0008, 0x0015}, {0x0009, 0x0008}, + {0x0009, 0x0009}, {0x0009, 0x000a}, {0x0009, 0x000b}, {0x0009, 0x000c}, {0x0009, 0x000d}, {0x0009, 0x000e}, {0x0009, 0x000f}, {0x0009, 0x0010}, + {0x0009, 0x0011}, {0x000a, 0x0008}, {0x000a, 0x0009}, {0x000a, 0x000a}, {0x000a, 0x000b}, {0x000a, 0x000c}, {0x000a, 0x000d}, {0x000a, 0x000e}, + {0x000a, 0x000f}, {0x000b, 0x0008}, {0x000b, 0x0009}, {0x000b, 0x000a}, {0x000b, 0x000b}, {0x000b, 0x000c}, {0x000b, 0x000d}, {0x000b, 0x000e}, + {0x000c, 0x0008}, {0x000c, 0x0009}, {0x000b, 0x000f}, {0x000c, 0x000a}, {0x000c, 0x000b}, {0x000c, 0x000c}, {0x000c, 0x000d}, {0x000d, 0x0008}, + {0x000c, 0x000e}, {0x000d, 0x0009}, {0x000d, 0x000a}, {0x000c, 0x000f}, {0x000d, 0x000b}, {0x000d, 0x000c}, {0x000d, 0x000d}, {0x000d, 0x000e}, + {0x000d, 0x000f}, {0x000e, 0x0008}, {0x000e, 0x0009}, {0x000e, 0x000a}, {0x000e, 0x000b}, {0x000e, 0x000c}, {0x000e, 0x000d}, {0x000e, 0x000e}, + {0x000e, 0x000f}, {0x000f, 0x0009}, {0x000f, 0x000a}, {0x000f, 0x000b}, {0x000f, 0x000c}, {0x0010, 0x0009}, {0x000f, 0x000d}, {0x000f, 0x000e}, + {0x0010, 0x000a}, {0x0010, 0x000b}, {0x0010, 0x000c}, {0x0010, 0x000d}, {0x0011, 0x000a}, {0x0010, 0x000e}, {0x000f, 0x000f}, {0x0010, 0x000f}, + {0x0012, 0x0000}, {0x0012, 0x0001}, {0x0011, 0x000b}, {0x0011, 0x000c}, {0x0010, 0x0010}, {0x0012, 0x0002}, {0x0012, 0x0003}, {0x0011, 0x000d}, + {0x0011, 0x000e}, {0x0011, 0x000f}, {0x0011, 0x0010}, {0x0011, 0x0011}, {0x0010, 0x0011}, {0x0012, 0x0004}, {0x0012, 0x0005}, {0x0012, 0x0006}, + {0x0012, 0x0007}, {0x0012, 0x0008}, {0x0012, 0x0009}, {0x0012, 0x000a}, {0x0012, 0x000b}, {0x0012, 0x000c}, {0x0012, 0x000d}, {0x0012, 0x000e}, + {0x0012, 0x000f}, {0x0012, 0x0010}, {0x0012, 0x0011}, {0x0012, 0x0012}, {0x0012, 0x0013}, + +}; + +const uint32_t c_aauiCQMFHuffDec31[43][16] = +{ + {0x0010ffff, 0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, }, + {0x00010048, 0x00010048, 0x00010049, 0x00010049, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x00020003, 0x00020003, 0x00020003, 0x00020003, }, + {0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x00020005, 0x00020005, 0x00020005, 0x00020005, 0x00020006, 0x00020006, 0x00020006, 0x00020006, 0x00020007, 0x00020007, 0x00020007, 0x00020007, }, + {0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x00020009, 0x00020009, 0x00020009, 0x00020009, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, }, + {0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, }, + {0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x00020011, 0x00020011, 0x00020011, 0x00020011, 0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00020013, 0x00020013, 0x00020013, 0x00020013, }, + {0x00020014, 0x00020014, 0x00020014, 0x00020014, 0x00020015, 0x00020015, 0x00020015, 0x00020015, 0x00020016, 0x00020016, 0x00020016, 0x00020016, 0x00020017, 0x00020017, 0x00020017, 0x00020017, }, + {0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, }, + {0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, }, + {0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x00020023, 0x00020023, 0x00020023, 0x00020023, }, + {0x00020024, 0x00020024, 0x00020024, 0x00020024, 0x00020025, 0x00020025, 0x00020025, 0x00020025, 0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00020027, 0x00020027, 0x00020027, 0x00020027, }, + {0x00020028, 0x00020028, 0x00020028, 0x00020028, 0x00020029, 0x00020029, 0x00020029, 0x00020029, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, }, + {0x00000051, 0x00000052, 0x00000053, 0x00000054, 0x00000055, 0x00000056, 0x00010000, 0x00010000, 0x0001002b, 0x0001002b, 0x0001002d, 0x0001002d, 0x0001002e, 0x0001002e, 0x0001002f, 0x0001002f, }, + {0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x00010036, 0x00010036, 0x00010037, 0x00010037, }, + {0x00010038, 0x00010038, 0x00010039, 0x00010039, 0x0001003a, 0x0001003a, 0x0001003b, 0x0001003b, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, 0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, }, + {0x00010040, 0x00010040, 0x00010041, 0x00010041, 0x00010042, 0x00010042, 0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, 0x00010046, 0x00010046, 0x00010047, 0x00010047, }, + {0x0019ffff, 0x0018ffff, 0x0016ffff, 0x0017ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, 0x0000004a, 0x0000004b, 0x0000004c, 0x0000004d, 0x0000004e, 0x0000004f, 0x00000050, }, + {0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, }, + {0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, }, + {0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, }, + {0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, }, + {0x0003005f, 0x0003005f, 0x0003005f, 0x0003005f, 0x0003005f, 0x0003005f, 0x0003005f, 0x0003005f, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, }, + {0x00020061, 0x00020061, 0x00020061, 0x00020061, 0x00020062, 0x00020062, 0x00020062, 0x00020062, 0x00020063, 0x00020063, 0x00020063, 0x00020063, 0x00020064, 0x00020064, 0x00020064, 0x00020064, }, + {0x00020065, 0x00020065, 0x00020065, 0x00020065, 0x00020066, 0x00020066, 0x00020066, 0x00020066, 0x00020067, 0x00020067, 0x00020067, 0x00020067, 0x00020068, 0x00020068, 0x00020068, 0x00020068, }, + {0x00010069, 0x00010069, 0x0001006a, 0x0001006a, 0x0001006b, 0x0001006b, 0x0001006c, 0x0001006c, 0x0001006d, 0x0001006d, 0x0001006e, 0x0001006e, 0x0001006f, 0x0001006f, 0x00010072, 0x00010072, }, + {0x0021ffff, 0x0020ffff, 0x001effff, 0x001fffff, 0x001affff, 0x001bffff, 0x001cffff, 0x001dffff, 0x00000070, 0x00000071, 0x00000073, 0x00000074, 0x00000075, 0x00000076, 0x00000078, 0x0000007b, }, + {0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, }, + {0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007c, 0x0003007c, 0x0003007c, 0x0003007c, 0x0003007c, 0x0003007c, 0x0003007c, 0x0003007c, }, + {0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, }, + {0x0003007f, 0x0003007f, 0x0003007f, 0x0003007f, 0x0003007f, 0x0003007f, 0x0003007f, 0x0003007f, 0x00030080, 0x00030080, 0x00030080, 0x00030080, 0x00030080, 0x00030080, 0x00030080, 0x00030080, }, + {0x00020081, 0x00020081, 0x00020081, 0x00020081, 0x00020082, 0x00020082, 0x00020082, 0x00020082, 0x00020083, 0x00020083, 0x00020083, 0x00020083, 0x00020084, 0x00020084, 0x00020084, 0x00020084, }, + {0x00020085, 0x00020085, 0x00020085, 0x00020085, 0x00020086, 0x00020086, 0x00020086, 0x00020086, 0x00020087, 0x00020087, 0x00020087, 0x00020087, 0x00020088, 0x00020088, 0x00020088, 0x00020088, }, + {0x0000009c, 0x000000a4, 0x00010089, 0x00010089, 0x0001008a, 0x0001008a, 0x0001008b, 0x0001008b, 0x0001008c, 0x0001008c, 0x0001008e, 0x0001008e, 0x0001008f, 0x0001008f, 0x00010096, 0x00010096, }, + {0x0026ffff, 0x0027ffff, 0x0028ffff, 0x0029ffff, 0x002affff, 0x0022ffff, 0x0023ffff, 0x0024ffff, 0x0025ffff, 0x0000008d, 0x00000090, 0x00000091, 0x00000092, 0x00000093, 0x00000095, 0x00000097, }, + {0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x0003009a, 0x0003009a, 0x0003009a, 0x0003009a, 0x0003009a, 0x0003009a, 0x0003009a, 0x0003009a, }, + {0x0003009b, 0x0003009b, 0x0003009b, 0x0003009b, 0x0003009b, 0x0003009b, 0x0003009b, 0x0003009b, 0x0003009f, 0x0003009f, 0x0003009f, 0x0003009f, 0x0003009f, 0x0003009f, 0x0003009f, 0x0003009f, }, + {0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a1, 0x000300a1, 0x000300a1, 0x000300a1, 0x000300a1, 0x000300a1, 0x000300a1, 0x000300a1, }, + {0x000300a2, 0x000300a2, 0x000300a2, 0x000300a2, 0x000300a2, 0x000300a2, 0x000300a2, 0x000300a2, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, }, + {0x00020098, 0x00020098, 0x00020098, 0x00020098, 0x00020099, 0x00020099, 0x00020099, 0x00020099, 0x0002009d, 0x0002009d, 0x0002009d, 0x0002009d, 0x0002009e, 0x0002009e, 0x0002009e, 0x0002009e, }, + {0x000200a5, 0x000200a5, 0x000200a5, 0x000200a5, 0x000200a6, 0x000200a6, 0x000200a6, 0x000200a6, 0x000200a7, 0x000200a7, 0x000200a7, 0x000200a7, 0x000200a8, 0x000200a8, 0x000200a8, 0x000200a8, }, + {0x000200a9, 0x000200a9, 0x000200a9, 0x000200a9, 0x000200aa, 0x000200aa, 0x000200aa, 0x000200aa, 0x000200ab, 0x000200ab, 0x000200ab, 0x000200ab, 0x000200ac, 0x000200ac, 0x000200ac, 0x000200ac, }, + {0x000200ad, 0x000200ad, 0x000200ad, 0x000200ad, 0x000200ae, 0x000200ae, 0x000200ae, 0x000200ae, 0x000200af, 0x000200af, 0x000200af, 0x000200af, 0x000200b0, 0x000200b0, 0x000200b0, 0x000200b0, }, + {0x000200b1, 0x000200b1, 0x000200b1, 0x000200b1, 0x000200b2, 0x000200b2, 0x000200b2, 0x000200b2, 0x000200b3, 0x000200b3, 0x000200b3, 0x000200b3, 0x000200b4, 0x000200b4, 0x000200b4, 0x000200b4, }, +}; + +const uint32_t c_aauiCQMFHuffEnc33[16][2] = +{ + {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0008, 0x0000}, {0x0008, 0x0001}, {0x0002, 0x0001}, {0x0004, 0x0001}, {0x0008, 0x0002}, {0x0008, 0x0003}, + {0x0008, 0x0004}, {0x0008, 0x0005}, {0x0008, 0x0006}, {0x0008, 0x0007}, {0x0007, 0x0004}, {0x0007, 0x0005}, {0x0007, 0x0006}, {0x0007, 0x0007}, +}; + +const uint32_t c_aauiCQMFHuffDec33[2][16] = +{ + {0x0001ffff, 0x00000005, 0x00010001, 0x00010001, 0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x00000002, 0x00000003, 0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, }, +}; + +const uint32_t c_aauiCQMFHuffEnc34[16][2] = +{ + {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0008, 0x0000}, {0x0008, 0x0001}, {0x0002, 0x0001}, {0x0004, 0x0001}, {0x0008, 0x0002}, {0x0008, 0x0003}, + {0x0008, 0x0004}, {0x0008, 0x0005}, {0x0008, 0x0006}, {0x0008, 0x0007}, {0x0007, 0x0004}, {0x0007, 0x0005}, {0x0007, 0x0006}, {0x0007, 0x0007}, +}; + +const uint32_t c_aauiCQMFHuffDec34[2][16] = +{ + {0x0001ffff, 0x00000005, 0x00010001, 0x00010001, 0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x00000002, 0x00000003, 0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, }, +}; + +const uint32_t c_aauiCQMFHuffEnc35[25][2] = +{ + {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0007, 0x0006}, {0x0009, 0x0000}, {0x0009, 0x0001}, {0x0002, 0x0001}, {0x0004, 0x0001}, {0x0009, 0x0002}, + {0x0009, 0x0003}, {0x0009, 0x0004}, {0x0007, 0x0007}, {0x0009, 0x0005}, {0x0009, 0x0006}, {0x0009, 0x0007}, {0x0009, 0x0008}, {0x0009, 0x0009}, + {0x0009, 0x000a}, {0x0009, 0x000b}, {0x0009, 0x000c}, {0x0009, 0x000d}, {0x0008, 0x0007}, {0x0008, 0x0008}, {0x0008, 0x0009}, {0x0008, 0x000a}, + {0x0008, 0x000b}, + +}; + +const uint32_t c_aauiCQMFHuffDec35[9][16] = +{ + {0x0001ffff, 0x00000006, 0x00010001, 0x00010001, 0x00020005, 0x00020005, 0x00020005, 0x00020005, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x0007ffff, 0x0008ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x00000014, 0x00000015, 0x00000016, 0x00000017, 0x00000018, 0x00010002, 0x00010002, 0x0001000a, 0x0001000a, }, + {0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, + {0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, }, + {0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, + {0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, + {0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, }, + {0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, }, + {0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, }, +}; + +const uint32_t c_aauiCQMFHuffEnc36[36][2] = +{ + {0x0001, 0x0001}, {0x0002, 0x0001}, {0x0006, 0x0002}, {0x000b, 0x0000}, {0x000b, 0x0001}, {0x000b, 0x0002}, {0x0003, 0x0001}, {0x0004, 0x0001}, + {0x0008, 0x0005}, {0x000b, 0x0003}, {0x000b, 0x0004}, {0x000b, 0x0005}, {0x0006, 0x0003}, {0x0007, 0x0003}, {0x000b, 0x0006}, {0x000b, 0x0007}, + {0x000b, 0x0008}, {0x000b, 0x0009}, {0x000b, 0x000a}, {0x000b, 0x000b}, {0x000b, 0x000c}, {0x000b, 0x000d}, {0x000b, 0x000e}, {0x000b, 0x000f}, + {0x000a, 0x0008}, {0x000a, 0x0009}, {0x000a, 0x000a}, {0x000a, 0x000b}, {0x000a, 0x000c}, {0x000a, 0x000d}, {0x000a, 0x000e}, {0x000a, 0x000f}, + {0x000a, 0x0010}, {0x000a, 0x0011}, {0x000a, 0x0012}, {0x000a, 0x0013}, + +}; + +const uint32_t c_aauiCQMFHuffDec36[7][16] = +{ + {0x0001ffff, 0x00000007, 0x00010006, 0x00010006, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x0006ffff, 0x0005ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x00000008, 0x0001000d, 0x0001000d, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, }, + {0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, }, + {0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, }, + {0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x00020023, 0x00020023, 0x00020023, 0x00020023, }, + {0x00010010, 0x00010010, 0x00010011, 0x00010011, 0x00010012, 0x00010012, 0x00010013, 0x00010013, 0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, }, + {0x00010003, 0x00010003, 0x00010004, 0x00010004, 0x00010005, 0x00010005, 0x00010009, 0x00010009, 0x0001000a, 0x0001000a, 0x0001000b, 0x0001000b, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, }, +}; + +const uint32_t c_aauiCQMFHuffEnc37[36][2] = +{ + {0x0001, 0x0001}, {0x0002, 0x0001}, {0x0006, 0x0001}, {0x000c, 0x0000}, {0x000c, 0x0001}, {0x000c, 0x0002}, {0x0003, 0x0001}, {0x0004, 0x0001}, + {0x0006, 0x0002}, {0x000c, 0x0003}, {0x000c, 0x0004}, {0x000c, 0x0005}, {0x0006, 0x0003}, {0x0007, 0x0001}, {0x000a, 0x0007}, {0x000c, 0x0006}, + {0x000c, 0x0007}, {0x000c, 0x0008}, {0x000c, 0x0009}, {0x000c, 0x000a}, {0x000c, 0x000b}, {0x000c, 0x000c}, {0x000c, 0x000d}, {0x000c, 0x000e}, + {0x000c, 0x000f}, {0x000c, 0x0010}, {0x000c, 0x0011}, {0x000c, 0x0012}, {0x000c, 0x0013}, {0x000c, 0x0014}, {0x000c, 0x0015}, {0x000c, 0x0016}, + {0x000c, 0x0017}, {0x000c, 0x0018}, {0x000c, 0x0019}, {0x000b, 0x000d}, + +}; + +const uint32_t c_aauiCQMFHuffDec37[4][16] = +{ + {0x0001ffff, 0x00000007, 0x00010006, 0x00010006, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x0003ffff, 0x0002ffff, 0x0001000d, 0x0001000d, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, }, + {0x00000019, 0x0000001a, 0x0000001b, 0x0000001c, 0x0000001d, 0x0000001e, 0x0000001f, 0x00000020, 0x00000021, 0x00000022, 0x00010023, 0x00010023, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, }, + {0x00000003, 0x00000004, 0x00000005, 0x00000009, 0x0000000a, 0x0000000b, 0x0000000f, 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000014, 0x00000015, 0x00000016, 0x00000017, 0x00000018, }, +}; + +const uint32_t c_aauiCQMFHuffEnc38[49][2] = +{ + {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000c, 0x0012}, {0x000d, 0x0000}, {0x000d, 0x0001}, {0x000d, 0x0002}, {0x0002, 0x0001}, + {0x0004, 0x0001}, {0x0007, 0x0001}, {0x000b, 0x000a}, {0x000d, 0x0003}, {0x000d, 0x0004}, {0x000d, 0x0005}, {0x0006, 0x0002}, {0x0006, 0x0003}, + {0x0009, 0x0003}, {0x000d, 0x0006}, {0x000d, 0x0007}, {0x000d, 0x0008}, {0x000d, 0x0009}, {0x000c, 0x0013}, {0x000b, 0x000b}, {0x000d, 0x000a}, + {0x000d, 0x000b}, {0x000d, 0x000c}, {0x000d, 0x000d}, {0x000d, 0x000e}, {0x000d, 0x000f}, {0x000d, 0x0010}, {0x000d, 0x0011}, {0x000d, 0x0012}, + {0x000d, 0x0013}, {0x000d, 0x0014}, {0x000d, 0x0015}, {0x000d, 0x0016}, {0x000d, 0x0017}, {0x000d, 0x0018}, {0x000d, 0x0019}, {0x000d, 0x001a}, + {0x000d, 0x001b}, {0x000d, 0x001c}, {0x000d, 0x001d}, {0x000d, 0x001e}, {0x000d, 0x001f}, {0x000d, 0x0020}, {0x000d, 0x0021}, {0x000d, 0x0022}, + {0x000d, 0x0023}, + +}; + +const uint32_t c_aauiCQMFHuffDec38[22][16] = +{ + {0x0001ffff, 0x00000008, 0x00010001, 0x00010001, 0x00020007, 0x00020007, 0x00020007, 0x00020007, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x0003ffff, 0x0002ffff, 0x00010009, 0x00010009, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, }, + {0x0014ffff, 0x0015ffff, 0x00000003, 0x00000015, 0x0001000a, 0x0001000a, 0x00010016, 0x00010016, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, }, + {0x0005ffff, 0x0006ffff, 0x0004ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, }, + {0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, }, + {0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, }, + {0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, + {0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, }, + {0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, }, + {0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, }, + {0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, }, + {0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, }, + {0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, }, + {0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, }, + {0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, }, + {0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, }, + {0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, }, + {0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, }, + {0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, }, + {0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, }, + {0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, }, + {0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, }, +}; + +const uint32_t c_aauiCQMFHuffEnc39[64][2] = +{ + {0x0001, 0x0001}, {0x0002, 0x0001}, {0x0006, 0x0001}, {0x000a, 0x0002}, {0x000f, 0x0000}, {0x000f, 0x0001}, {0x000f, 0x0002}, {0x000f, 0x0003}, + {0x0003, 0x0001}, {0x0004, 0x0001}, {0x0007, 0x0001}, {0x000a, 0x0003}, {0x000f, 0x0004}, {0x000f, 0x0005}, {0x000f, 0x0006}, {0x000f, 0x0007}, + {0x0006, 0x0002}, {0x0006, 0x0003}, {0x0009, 0x0003}, {0x000d, 0x000e}, {0x000f, 0x0008}, {0x000f, 0x0009}, {0x000f, 0x000a}, {0x000f, 0x000b}, + {0x000a, 0x0004}, {0x000a, 0x0005}, {0x000d, 0x000f}, {0x000f, 0x000c}, {0x000f, 0x000d}, {0x000f, 0x000e}, {0x000f, 0x000f}, {0x000f, 0x0010}, + {0x000f, 0x0011}, {0x000f, 0x0012}, {0x000f, 0x0013}, {0x000f, 0x0014}, {0x000f, 0x0015}, {0x000f, 0x0016}, {0x000f, 0x0017}, {0x000f, 0x0018}, + {0x000f, 0x0019}, {0x000f, 0x001a}, {0x000f, 0x001b}, {0x000f, 0x001c}, {0x000f, 0x001d}, {0x000f, 0x001e}, {0x000f, 0x001f}, {0x000f, 0x0020}, + {0x000f, 0x0021}, {0x000f, 0x0022}, {0x000f, 0x0023}, {0x000f, 0x0024}, {0x000f, 0x0025}, {0x000f, 0x0026}, {0x000f, 0x0027}, {0x000f, 0x0028}, + {0x000f, 0x0029}, {0x000e, 0x0015}, {0x000e, 0x0016}, {0x000e, 0x0017}, {0x000e, 0x0018}, {0x000e, 0x0019}, {0x000e, 0x001a}, {0x000e, 0x001b}, +}; + +const uint32_t c_aauiCQMFHuffDec39[12][16] = +{ + {0x0001ffff, 0x00000009, 0x00010008, 0x00010008, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x0003ffff, 0x0002ffff, 0x0001000a, 0x0001000a, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x00020011, 0x00020011, 0x00020011, 0x00020011, }, + {0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, }, + {0x0008ffff, 0x0007ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x0005ffff, 0x0006ffff, 0x0004ffff, 0x00020003, 0x00020003, 0x00020003, 0x00020003, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, }, + {0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, }, + {0x00010037, 0x00010037, 0x00010038, 0x00010038, 0x00020039, 0x00020039, 0x00020039, 0x00020039, 0x0002003a, 0x0002003a, 0x0002003a, 0x0002003a, 0x0002003b, 0x0002003b, 0x0002003b, 0x0002003b, }, + {0x0002003c, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002003f, 0x0002003f, 0x0002003f, 0x0002003f, }, + {0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x0001001b, 0x0001001b, 0x0001001c, 0x0001001c, 0x0001001d, 0x0001001d, 0x0001001e, 0x0001001e, }, + {0x00010004, 0x00010004, 0x00010005, 0x00010005, 0x00010006, 0x00010006, 0x00010007, 0x00010007, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, }, + {0x0001001f, 0x0001001f, 0x00010020, 0x00010020, 0x00010021, 0x00010021, 0x00010022, 0x00010022, 0x00010023, 0x00010023, 0x00010024, 0x00010024, 0x00010025, 0x00010025, 0x00010026, 0x00010026, }, + {0x00010027, 0x00010027, 0x00010028, 0x00010028, 0x00010029, 0x00010029, 0x0001002a, 0x0001002a, 0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, 0x0001002e, 0x0001002e, }, + {0x0001002f, 0x0001002f, 0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x00010036, 0x00010036, }, +}; + +const uint32_t c_aauiCQMFHuffEnc40[81][2] = +{ + {0x0001, 0x0001}, {0x0002, 0x0001}, {0x0006, 0x0001}, {0x000b, 0x0002}, {0x000f, 0x0011}, {0x0011, 0x0000}, {0x0011, 0x0001}, {0x0011, 0x0002}, + {0x0011, 0x0003}, {0x0003, 0x0001}, {0x0004, 0x0001}, {0x0007, 0x0001}, {0x000a, 0x0002}, {0x000e, 0x0009}, {0x0011, 0x0004}, {0x0011, 0x0005}, + {0x0011, 0x0006}, {0x0011, 0x0007}, {0x0006, 0x0002}, {0x0006, 0x0003}, {0x0008, 0x0001}, {0x000d, 0x0005}, {0x0011, 0x0008}, {0x0011, 0x0009}, + {0x0011, 0x000a}, {0x0011, 0x000b}, {0x0011, 0x000c}, {0x000b, 0x0003}, {0x000a, 0x0003}, {0x000c, 0x0003}, {0x0011, 0x000d}, {0x0011, 0x000e}, + {0x0011, 0x000f}, {0x0011, 0x0010}, {0x0011, 0x0011}, {0x0011, 0x0012}, {0x0011, 0x0013}, {0x0011, 0x0014}, {0x0011, 0x0015}, {0x0011, 0x0016}, + {0x0011, 0x0017}, {0x0011, 0x0018}, {0x0011, 0x0019}, {0x0011, 0x001a}, {0x0011, 0x001b}, {0x0011, 0x001c}, {0x0011, 0x001d}, {0x0011, 0x001e}, + {0x0011, 0x001f}, {0x0011, 0x0020}, {0x0011, 0x0021}, {0x0011, 0x0022}, {0x0011, 0x0023}, {0x0011, 0x0024}, {0x0011, 0x0025}, {0x0011, 0x0026}, + {0x0011, 0x0027}, {0x0011, 0x0028}, {0x0011, 0x0029}, {0x0011, 0x002a}, {0x0011, 0x002b}, {0x0011, 0x002c}, {0x0011, 0x002d}, {0x0011, 0x002e}, + {0x0011, 0x002f}, {0x0011, 0x0030}, {0x0011, 0x0031}, {0x0011, 0x0032}, {0x0011, 0x0033}, {0x0011, 0x0034}, {0x0011, 0x0035}, {0x0011, 0x0036}, + {0x0011, 0x0037}, {0x0011, 0x0038}, {0x0011, 0x0039}, {0x0011, 0x003a}, {0x0011, 0x003b}, {0x0010, 0x001e}, {0x0010, 0x001f}, {0x0010, 0x0020}, + {0x0010, 0x0021}, + +}; + +const uint32_t c_aauiCQMFHuffDec40[36][16] = +{ + {0x0001ffff, 0x0000000a, 0x00010009, 0x00010009, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x0002ffff, 0x00000014, 0x0001000b, 0x0001000b, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00020013, 0x00020013, 0x00020013, 0x00020013, }, + {0x0005ffff, 0x0004ffff, 0x0003ffff, 0x0000001d, 0x00010003, 0x00010003, 0x0001001b, 0x0001001b, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, }, + {0x0000004f, 0x00000050, 0x00010004, 0x00010004, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, }, + {0x0015ffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x0019ffff, 0x001affff, 0x001bffff, 0x001cffff, 0x001dffff, 0x001effff, 0x001fffff, 0x0020ffff, 0x0021ffff, 0x0022ffff, 0x0000004d, 0x0000004e, }, + {0x0023ffff, 0x000affff, 0x0006ffff, 0x000bffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, }, + {0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, + {0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, }, + {0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, }, + {0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, }, + {0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, }, + {0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, + {0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, }, + {0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, }, + {0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, }, + {0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, }, + {0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, }, + {0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, }, + {0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, }, + {0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, }, + {0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, }, + {0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, }, + {0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, }, + {0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, }, + {0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, }, + {0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, }, + {0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, }, + {0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, }, + {0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, }, + {0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, }, + {0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, }, + {0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, }, + {0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, }, + {0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, }, + {0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, }, + {0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, +}; + +const uint32_t c_aauiCQMFHuffEnc41[100][2] = +{ + {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000b, 0x0001}, {0x0011, 0x0014}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, + {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0002, 0x0001}, {0x0004, 0x0001}, {0x0007, 0x0001}, {0x000a, 0x0001}, {0x0010, 0x000b}, {0x0013, 0x0005}, + {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0006, 0x0002}, {0x0006, 0x0003}, {0x0008, 0x0001}, {0x000d, 0x0002}, + {0x0011, 0x0015}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0013, 0x000c}, {0x0013, 0x000d}, {0x0013, 0x000e}, {0x000a, 0x0002}, {0x000a, 0x0003}, + {0x000d, 0x0003}, {0x0010, 0x000c}, {0x0013, 0x000f}, {0x0013, 0x0010}, {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0013, 0x0014}, + {0x0010, 0x000d}, {0x000f, 0x0007}, {0x0012, 0x0027}, {0x0013, 0x0015}, {0x0013, 0x0016}, {0x0013, 0x0017}, {0x0013, 0x0018}, {0x0013, 0x0019}, + {0x0013, 0x001a}, {0x0013, 0x001b}, {0x0013, 0x001c}, {0x0013, 0x001d}, {0x0013, 0x001e}, {0x0013, 0x001f}, {0x0013, 0x0020}, {0x0013, 0x0021}, + {0x0013, 0x0022}, {0x0013, 0x0023}, {0x0013, 0x0024}, {0x0013, 0x0025}, {0x0013, 0x0026}, {0x0013, 0x0027}, {0x0013, 0x0028}, {0x0013, 0x0029}, + {0x0013, 0x002a}, {0x0013, 0x002b}, {0x0013, 0x002c}, {0x0013, 0x002d}, {0x0013, 0x002e}, {0x0013, 0x002f}, {0x0013, 0x0030}, {0x0013, 0x0031}, + {0x0013, 0x0032}, {0x0013, 0x0033}, {0x0013, 0x0034}, {0x0013, 0x0035}, {0x0013, 0x0036}, {0x0013, 0x0037}, {0x0013, 0x0038}, {0x0013, 0x0039}, + {0x0013, 0x003a}, {0x0013, 0x003b}, {0x0013, 0x003c}, {0x0013, 0x003d}, {0x0013, 0x003e}, {0x0013, 0x003f}, {0x0013, 0x0040}, {0x0013, 0x0041}, + {0x0013, 0x0042}, {0x0013, 0x0043}, {0x0013, 0x0044}, {0x0013, 0x0045}, {0x0013, 0x0046}, {0x0013, 0x0047}, {0x0013, 0x0048}, {0x0013, 0x0049}, + {0x0013, 0x004a}, {0x0013, 0x004b}, {0x0013, 0x004c}, {0x0013, 0x004d}, + +}; + +const uint32_t c_aauiCQMFHuffDec41[16][16] = +{ + {0x0001ffff, 0x0000000b, 0x00010001, 0x00010001, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x0002ffff, 0x00000016, 0x0001000c, 0x0001000c, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x00020014, 0x00020014, 0x00020014, 0x00020014, 0x00020015, 0x00020015, 0x00020015, 0x00020015, }, + {0x0004ffff, 0x0003ffff, 0x00010003, 0x00010003, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, }, + {0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, }, + {0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x0006ffff, 0x0005ffff, 0x0000000e, 0x00000021, 0x00000028, 0x00010029, 0x00010029, }, + {0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, }, + {0x0001005e, 0x0001005e, 0x0001005f, 0x0001005f, 0x00010060, 0x00010060, 0x00010061, 0x00010061, 0x00010062, 0x00010062, 0x00010063, 0x00010063, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, }, + {0x00010005, 0x00010005, 0x00010006, 0x00010006, 0x00010007, 0x00010007, 0x00010008, 0x00010008, 0x00010009, 0x00010009, 0x0001000f, 0x0001000f, 0x00010010, 0x00010010, 0x00010011, 0x00010011, }, + {0x00010012, 0x00010012, 0x00010013, 0x00010013, 0x00010019, 0x00010019, 0x0001001a, 0x0001001a, 0x0001001b, 0x0001001b, 0x0001001c, 0x0001001c, 0x0001001d, 0x0001001d, 0x00010022, 0x00010022, }, + {0x00010023, 0x00010023, 0x00010024, 0x00010024, 0x00010025, 0x00010025, 0x00010026, 0x00010026, 0x00010027, 0x00010027, 0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, }, + {0x0001002e, 0x0001002e, 0x0001002f, 0x0001002f, 0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, }, + {0x00010036, 0x00010036, 0x00010037, 0x00010037, 0x00010038, 0x00010038, 0x00010039, 0x00010039, 0x0001003a, 0x0001003a, 0x0001003b, 0x0001003b, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, }, + {0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x00010040, 0x00010040, 0x00010041, 0x00010041, 0x00010042, 0x00010042, 0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, }, + {0x00010046, 0x00010046, 0x00010047, 0x00010047, 0x00010048, 0x00010048, 0x00010049, 0x00010049, 0x0001004a, 0x0001004a, 0x0001004b, 0x0001004b, 0x0001004c, 0x0001004c, 0x0001004d, 0x0001004d, }, + {0x0001004e, 0x0001004e, 0x0001004f, 0x0001004f, 0x00010050, 0x00010050, 0x00010051, 0x00010051, 0x00010052, 0x00010052, 0x00010053, 0x00010053, 0x00010054, 0x00010054, 0x00010055, 0x00010055, }, + {0x00010056, 0x00010056, 0x00010057, 0x00010057, 0x00010058, 0x00010058, 0x00010059, 0x00010059, 0x0001005a, 0x0001005a, 0x0001005b, 0x0001005b, 0x0001005c, 0x0001005c, 0x0001005d, 0x0001005d, }, +}; + +const uint32_t c_aauiCQMFHuffEnc42[169][2] = +{ + {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x0009, 0x0001}, {0x000e, 0x0006}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, + {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0005, 0x0001}, + {0x0009, 0x0002}, {0x000d, 0x0004}, {0x0010, 0x0013}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0013, 0x000c}, + {0x0013, 0x000d}, {0x0013, 0x000e}, {0x0005, 0x0002}, {0x0005, 0x0003}, {0x0008, 0x0002}, {0x000b, 0x0002}, {0x000f, 0x000b}, {0x0011, 0x0025}, + {0x0013, 0x000f}, {0x0013, 0x0010}, {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0013, 0x0014}, {0x0013, 0x0015}, {0x0009, 0x0003}, + {0x0008, 0x0003}, {0x000b, 0x0003}, {0x000d, 0x0005}, {0x0010, 0x0014}, {0x0013, 0x0016}, {0x0013, 0x0017}, {0x0013, 0x0018}, {0x0013, 0x0019}, + {0x0013, 0x001a}, {0x0013, 0x001b}, {0x0013, 0x001c}, {0x0013, 0x001d}, {0x000d, 0x0006}, {0x000d, 0x0007}, {0x000e, 0x0007}, {0x0010, 0x0015}, + {0x0013, 0x001e}, {0x0013, 0x001f}, {0x0013, 0x0020}, {0x0013, 0x0021}, {0x0013, 0x0022}, {0x0013, 0x0023}, {0x0013, 0x0024}, {0x0013, 0x0025}, + {0x0013, 0x0026}, {0x0012, 0x0045}, {0x0013, 0x0027}, {0x0013, 0x0028}, {0x0013, 0x0029}, {0x0013, 0x002a}, {0x0013, 0x002b}, {0x0013, 0x002c}, + {0x0013, 0x002d}, {0x0013, 0x002e}, {0x0013, 0x002f}, {0x0013, 0x0030}, {0x0013, 0x0031}, {0x0013, 0x0032}, {0x0013, 0x0033}, {0x0013, 0x0034}, + {0x0013, 0x0035}, {0x0013, 0x0036}, {0x0013, 0x0037}, {0x0013, 0x0038}, {0x0013, 0x0039}, {0x0013, 0x003a}, {0x0013, 0x003b}, {0x0013, 0x003c}, + {0x0013, 0x003d}, {0x0013, 0x003e}, {0x0013, 0x003f}, {0x0013, 0x0040}, {0x0013, 0x0041}, {0x0013, 0x0042}, {0x0013, 0x0043}, {0x0013, 0x0044}, + {0x0013, 0x0045}, {0x0013, 0x0046}, {0x0013, 0x0047}, {0x0013, 0x0048}, {0x0013, 0x0049}, {0x0013, 0x004a}, {0x0013, 0x004b}, {0x0013, 0x004c}, + {0x0013, 0x004d}, {0x0013, 0x004e}, {0x0013, 0x004f}, {0x0013, 0x0050}, {0x0013, 0x0051}, {0x0013, 0x0052}, {0x0013, 0x0053}, {0x0013, 0x0054}, + {0x0013, 0x0055}, {0x0013, 0x0056}, {0x0013, 0x0057}, {0x0013, 0x0058}, {0x0013, 0x0059}, {0x0013, 0x005a}, {0x0013, 0x005b}, {0x0013, 0x005c}, + {0x0013, 0x005d}, {0x0013, 0x005e}, {0x0013, 0x005f}, {0x0013, 0x0060}, {0x0013, 0x0061}, {0x0013, 0x0062}, {0x0013, 0x0063}, {0x0013, 0x0064}, + {0x0013, 0x0065}, {0x0013, 0x0066}, {0x0013, 0x0067}, {0x0013, 0x0068}, {0x0013, 0x0069}, {0x0013, 0x006a}, {0x0013, 0x006b}, {0x0013, 0x006c}, + {0x0013, 0x006d}, {0x0013, 0x006e}, {0x0013, 0x006f}, {0x0013, 0x0070}, {0x0013, 0x0071}, {0x0013, 0x0072}, {0x0013, 0x0073}, {0x0013, 0x0074}, + {0x0013, 0x0075}, {0x0013, 0x0076}, {0x0013, 0x0077}, {0x0013, 0x0078}, {0x0013, 0x0079}, {0x0013, 0x007a}, {0x0013, 0x007b}, {0x0013, 0x007c}, + {0x0013, 0x007d}, {0x0013, 0x007e}, {0x0013, 0x007f}, {0x0013, 0x0080}, {0x0013, 0x0081}, {0x0013, 0x0082}, {0x0013, 0x0083}, {0x0013, 0x0084}, + {0x0013, 0x0085}, {0x0013, 0x0086}, {0x0013, 0x0087}, {0x0013, 0x0088}, {0x0013, 0x0089}, {0x0012, 0x0046}, {0x0012, 0x0047}, {0x0012, 0x0048}, + {0x0012, 0x0049}, + +}; + +const uint32_t c_aauiCQMFHuffDec42[28][16] = +{ + {0x0001ffff, 0x0002ffff, 0x00010001, 0x00010001, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x0003ffff, 0x0004ffff, 0x0000001c, 0x00000028, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, + {0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, }, + {0x000affff, 0x0007ffff, 0x0005ffff, 0x0006ffff, 0x0001001d, 0x0001001d, 0x00010029, 0x00010029, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, }, + {0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, }, + {0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, }, + {0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, }, + {0x001bffff, 0x0009ffff, 0x0008ffff, 0x00000012, 0x0000002b, 0x00000037, 0x0001001e, 0x0001001e, 0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x00020036, 0x00020036, 0x00020036, 0x00020036, }, + {0x000200a7, 0x000200a7, 0x000200a7, 0x000200a7, 0x000200a8, 0x000200a8, 0x000200a8, 0x000200a8, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, }, + {0x000100a3, 0x000100a3, 0x000100a4, 0x000100a4, 0x00020041, 0x00020041, 0x00020041, 0x00020041, 0x000200a5, 0x000200a5, 0x000200a5, 0x000200a5, 0x000200a6, 0x000200a6, 0x000200a6, 0x000200a6, }, + {0x000dffff, 0x000bffff, 0x000cffff, 0x000effff, 0x000fffff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x0019ffff, 0x001affff, }, + {0x00010013, 0x00010013, 0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x00010020, 0x00010020, }, + {0x00010021, 0x00010021, 0x00010022, 0x00010022, 0x00010023, 0x00010023, 0x00010024, 0x00010024, 0x00010025, 0x00010025, 0x00010026, 0x00010026, 0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, }, + {0x00010005, 0x00010005, 0x00010006, 0x00010006, 0x00010007, 0x00010007, 0x00010008, 0x00010008, 0x00010009, 0x00010009, 0x0001000a, 0x0001000a, 0x0001000b, 0x0001000b, 0x0001000c, 0x0001000c, }, + {0x0001002e, 0x0001002e, 0x0001002f, 0x0001002f, 0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010038, 0x00010038, 0x00010039, 0x00010039, }, + {0x0001003a, 0x0001003a, 0x0001003b, 0x0001003b, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, 0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x00010040, 0x00010040, 0x00010042, 0x00010042, }, + {0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, 0x00010046, 0x00010046, 0x00010047, 0x00010047, 0x00010048, 0x00010048, 0x00010049, 0x00010049, 0x0001004a, 0x0001004a, }, + {0x0001004b, 0x0001004b, 0x0001004c, 0x0001004c, 0x0001004d, 0x0001004d, 0x0001004e, 0x0001004e, 0x0001004f, 0x0001004f, 0x00010050, 0x00010050, 0x00010051, 0x00010051, 0x00010052, 0x00010052, }, + {0x00010053, 0x00010053, 0x00010054, 0x00010054, 0x00010055, 0x00010055, 0x00010056, 0x00010056, 0x00010057, 0x00010057, 0x00010058, 0x00010058, 0x00010059, 0x00010059, 0x0001005a, 0x0001005a, }, + {0x0001005b, 0x0001005b, 0x0001005c, 0x0001005c, 0x0001005d, 0x0001005d, 0x0001005e, 0x0001005e, 0x0001005f, 0x0001005f, 0x00010060, 0x00010060, 0x00010061, 0x00010061, 0x00010062, 0x00010062, }, + {0x00010063, 0x00010063, 0x00010064, 0x00010064, 0x00010065, 0x00010065, 0x00010066, 0x00010066, 0x00010067, 0x00010067, 0x00010068, 0x00010068, 0x00010069, 0x00010069, 0x0001006a, 0x0001006a, }, + {0x0001006b, 0x0001006b, 0x0001006c, 0x0001006c, 0x0001006d, 0x0001006d, 0x0001006e, 0x0001006e, 0x0001006f, 0x0001006f, 0x00010070, 0x00010070, 0x00010071, 0x00010071, 0x00010072, 0x00010072, }, + {0x00010073, 0x00010073, 0x00010074, 0x00010074, 0x00010075, 0x00010075, 0x00010076, 0x00010076, 0x00010077, 0x00010077, 0x00010078, 0x00010078, 0x00010079, 0x00010079, 0x0001007a, 0x0001007a, }, + {0x0001007b, 0x0001007b, 0x0001007c, 0x0001007c, 0x0001007d, 0x0001007d, 0x0001007e, 0x0001007e, 0x0001007f, 0x0001007f, 0x00010080, 0x00010080, 0x00010081, 0x00010081, 0x00010082, 0x00010082, }, + {0x00010083, 0x00010083, 0x00010084, 0x00010084, 0x00010085, 0x00010085, 0x00010086, 0x00010086, 0x00010087, 0x00010087, 0x00010088, 0x00010088, 0x00010089, 0x00010089, 0x0001008a, 0x0001008a, }, + {0x0001008b, 0x0001008b, 0x0001008c, 0x0001008c, 0x0001008d, 0x0001008d, 0x0001008e, 0x0001008e, 0x0001008f, 0x0001008f, 0x00010090, 0x00010090, 0x00010091, 0x00010091, 0x00010092, 0x00010092, }, + {0x00010093, 0x00010093, 0x00010094, 0x00010094, 0x00010095, 0x00010095, 0x00010096, 0x00010096, 0x00010097, 0x00010097, 0x00010098, 0x00010098, 0x00010099, 0x00010099, 0x0001009a, 0x0001009a, }, + {0x0001009b, 0x0001009b, 0x0001009c, 0x0001009c, 0x0001009d, 0x0001009d, 0x0001009e, 0x0001009e, 0x0001009f, 0x0001009f, 0x000100a0, 0x000100a0, 0x000100a1, 0x000100a1, 0x000100a2, 0x000100a2, }, +}; + +const uint32_t c_aauiCQMFHuffEnc43[196][2] = +{ + {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x0009, 0x0002}, {0x000c, 0x0003}, {0x0010, 0x0017}, {0x0013, 0x0000}, {0x0013, 0x0001}, + {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0003, 0x0002}, {0x0003, 0x0003}, + {0x0005, 0x0001}, {0x0009, 0x0003}, {0x000c, 0x0004}, {0x0010, 0x0018}, {0x0012, 0x0050}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, + {0x0013, 0x000b}, {0x0013, 0x000c}, {0x0013, 0x000d}, {0x0013, 0x000e}, {0x0005, 0x0002}, {0x0005, 0x0003}, {0x0008, 0x0003}, {0x000a, 0x0002}, + {0x000d, 0x0004}, {0x0011, 0x002a}, {0x0013, 0x000f}, {0x0013, 0x0010}, {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0013, 0x0014}, + {0x0013, 0x0015}, {0x0013, 0x0016}, {0x0009, 0x0004}, {0x0009, 0x0005}, {0x000a, 0x0003}, {0x000c, 0x0005}, {0x000f, 0x000d}, {0x0012, 0x0051}, + {0x0013, 0x0017}, {0x0013, 0x0018}, {0x0013, 0x0019}, {0x0013, 0x001a}, {0x0013, 0x001b}, {0x0013, 0x001c}, {0x0013, 0x001d}, {0x0013, 0x001e}, + {0x000c, 0x0006}, {0x000c, 0x0007}, {0x000d, 0x0005}, {0x000f, 0x000e}, {0x0011, 0x002b}, {0x0013, 0x001f}, {0x0013, 0x0020}, {0x0013, 0x0021}, + {0x0013, 0x0022}, {0x0013, 0x0023}, {0x0013, 0x0024}, {0x0013, 0x0025}, {0x0013, 0x0026}, {0x0013, 0x0027}, {0x0011, 0x002c}, {0x000f, 0x000f}, + {0x0010, 0x0019}, {0x0012, 0x0052}, {0x0012, 0x0053}, {0x0013, 0x0028}, {0x0013, 0x0029}, {0x0013, 0x002a}, {0x0013, 0x002b}, {0x0013, 0x002c}, + {0x0013, 0x002d}, {0x0013, 0x002e}, {0x0013, 0x002f}, {0x0013, 0x0030}, {0x0013, 0x0031}, {0x0011, 0x002d}, {0x0013, 0x0032}, {0x0013, 0x0033}, + {0x0013, 0x0034}, {0x0013, 0x0035}, {0x0013, 0x0036}, {0x0013, 0x0037}, {0x0013, 0x0038}, {0x0013, 0x0039}, {0x0013, 0x003a}, {0x0013, 0x003b}, + {0x0013, 0x003c}, {0x0013, 0x003d}, {0x0013, 0x003e}, {0x0013, 0x003f}, {0x0013, 0x0040}, {0x0013, 0x0041}, {0x0013, 0x0042}, {0x0013, 0x0043}, + {0x0013, 0x0044}, {0x0013, 0x0045}, {0x0013, 0x0046}, {0x0013, 0x0047}, {0x0013, 0x0048}, {0x0013, 0x0049}, {0x0013, 0x004a}, {0x0013, 0x004b}, + {0x0013, 0x004c}, {0x0013, 0x004d}, {0x0013, 0x004e}, {0x0013, 0x004f}, {0x0013, 0x0050}, {0x0013, 0x0051}, {0x0013, 0x0052}, {0x0013, 0x0053}, + {0x0013, 0x0054}, {0x0013, 0x0055}, {0x0013, 0x0056}, {0x0013, 0x0057}, {0x0013, 0x0058}, {0x0013, 0x0059}, {0x0013, 0x005a}, {0x0013, 0x005b}, + {0x0013, 0x005c}, {0x0013, 0x005d}, {0x0013, 0x005e}, {0x0013, 0x005f}, {0x0013, 0x0060}, {0x0013, 0x0061}, {0x0013, 0x0062}, {0x0013, 0x0063}, + {0x0013, 0x0064}, {0x0013, 0x0065}, {0x0013, 0x0066}, {0x0013, 0x0067}, {0x0013, 0x0068}, {0x0013, 0x0069}, {0x0013, 0x006a}, {0x0013, 0x006b}, + {0x0013, 0x006c}, {0x0013, 0x006d}, {0x0013, 0x006e}, {0x0013, 0x006f}, {0x0013, 0x0070}, {0x0013, 0x0071}, {0x0013, 0x0072}, {0x0013, 0x0073}, + {0x0013, 0x0074}, {0x0013, 0x0075}, {0x0013, 0x0076}, {0x0013, 0x0077}, {0x0013, 0x0078}, {0x0013, 0x0079}, {0x0013, 0x007a}, {0x0013, 0x007b}, + {0x0013, 0x007c}, {0x0013, 0x007d}, {0x0013, 0x007e}, {0x0013, 0x007f}, {0x0013, 0x0080}, {0x0013, 0x0081}, {0x0013, 0x0082}, {0x0013, 0x0083}, + {0x0013, 0x0084}, {0x0013, 0x0085}, {0x0013, 0x0086}, {0x0013, 0x0087}, {0x0013, 0x0088}, {0x0013, 0x0089}, {0x0013, 0x008a}, {0x0013, 0x008b}, + {0x0013, 0x008c}, {0x0013, 0x008d}, {0x0013, 0x008e}, {0x0013, 0x008f}, {0x0013, 0x0090}, {0x0013, 0x0091}, {0x0013, 0x0092}, {0x0013, 0x0093}, + {0x0013, 0x0094}, {0x0013, 0x0095}, {0x0013, 0x0096}, {0x0013, 0x0097}, {0x0013, 0x0098}, {0x0013, 0x0099}, {0x0013, 0x009a}, {0x0013, 0x009b}, + {0x0013, 0x009c}, {0x0013, 0x009d}, {0x0013, 0x009e}, {0x0013, 0x009f}, + +}; + +const uint32_t c_aauiCQMFHuffDec43[32][16] = +{ + {0x0001ffff, 0x0002ffff, 0x00010001, 0x00010001, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x0005ffff, 0x0003ffff, 0x0004ffff, 0x0000001e, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, }, + {0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, }, + {0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, + {0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, }, + {0x000bffff, 0x0007ffff, 0x0006ffff, 0x00000004, 0x00000012, 0x0000002d, 0x00000038, 0x00000039, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, }, + {0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, }, + {0x001cffff, 0x001dffff, 0x001effff, 0x001fffff, 0x000affff, 0x0008ffff, 0x0009ffff, 0x00000005, 0x00000013, 0x00000048, 0x0001002e, 0x0001002e, 0x0001003b, 0x0001003b, 0x00010047, 0x00010047, }, + {0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, }, + {0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, }, + {0x00020014, 0x00020014, 0x00020014, 0x00020014, 0x0002002f, 0x0002002f, 0x0002002f, 0x0002002f, 0x00020049, 0x00020049, 0x00020049, 0x00020049, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, }, + {0x000dffff, 0x000effff, 0x000cffff, 0x000fffff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x0019ffff, 0x001affff, 0x001bffff, }, + {0x00010023, 0x00010023, 0x00010024, 0x00010024, 0x00010025, 0x00010025, 0x00010026, 0x00010026, 0x00010027, 0x00010027, 0x00010028, 0x00010028, 0x00010029, 0x00010029, 0x00010030, 0x00010030, }, + {0x00010006, 0x00010006, 0x00010007, 0x00010007, 0x00010008, 0x00010008, 0x00010009, 0x00010009, 0x0001000a, 0x0001000a, 0x0001000b, 0x0001000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, }, + {0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x0001001a, 0x0001001a, 0x0001001b, 0x0001001b, 0x00010022, 0x00010022, }, + {0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x00010036, 0x00010036, 0x00010037, 0x00010037, 0x0001003d, 0x0001003d, }, + {0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x00010040, 0x00010040, 0x00010041, 0x00010041, 0x00010042, 0x00010042, 0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, }, + {0x0001004b, 0x0001004b, 0x0001004c, 0x0001004c, 0x0001004d, 0x0001004d, 0x0001004e, 0x0001004e, 0x0001004f, 0x0001004f, 0x00010050, 0x00010050, 0x00010051, 0x00010051, 0x00010052, 0x00010052, }, + {0x00010053, 0x00010053, 0x00010054, 0x00010054, 0x00010056, 0x00010056, 0x00010057, 0x00010057, 0x00010058, 0x00010058, 0x00010059, 0x00010059, 0x0001005a, 0x0001005a, 0x0001005b, 0x0001005b, }, + {0x0001005c, 0x0001005c, 0x0001005d, 0x0001005d, 0x0001005e, 0x0001005e, 0x0001005f, 0x0001005f, 0x00010060, 0x00010060, 0x00010061, 0x00010061, 0x00010062, 0x00010062, 0x00010063, 0x00010063, }, + {0x00010064, 0x00010064, 0x00010065, 0x00010065, 0x00010066, 0x00010066, 0x00010067, 0x00010067, 0x00010068, 0x00010068, 0x00010069, 0x00010069, 0x0001006a, 0x0001006a, 0x0001006b, 0x0001006b, }, + {0x0001006c, 0x0001006c, 0x0001006d, 0x0001006d, 0x0001006e, 0x0001006e, 0x0001006f, 0x0001006f, 0x00010070, 0x00010070, 0x00010071, 0x00010071, 0x00010072, 0x00010072, 0x00010073, 0x00010073, }, + {0x00010074, 0x00010074, 0x00010075, 0x00010075, 0x00010076, 0x00010076, 0x00010077, 0x00010077, 0x00010078, 0x00010078, 0x00010079, 0x00010079, 0x0001007a, 0x0001007a, 0x0001007b, 0x0001007b, }, + {0x0001007c, 0x0001007c, 0x0001007d, 0x0001007d, 0x0001007e, 0x0001007e, 0x0001007f, 0x0001007f, 0x00010080, 0x00010080, 0x00010081, 0x00010081, 0x00010082, 0x00010082, 0x00010083, 0x00010083, }, + {0x00010084, 0x00010084, 0x00010085, 0x00010085, 0x00010086, 0x00010086, 0x00010087, 0x00010087, 0x00010088, 0x00010088, 0x00010089, 0x00010089, 0x0001008a, 0x0001008a, 0x0001008b, 0x0001008b, }, + {0x0001008c, 0x0001008c, 0x0001008d, 0x0001008d, 0x0001008e, 0x0001008e, 0x0001008f, 0x0001008f, 0x00010090, 0x00010090, 0x00010091, 0x00010091, 0x00010092, 0x00010092, 0x00010093, 0x00010093, }, + {0x00010094, 0x00010094, 0x00010095, 0x00010095, 0x00010096, 0x00010096, 0x00010097, 0x00010097, 0x00010098, 0x00010098, 0x00010099, 0x00010099, 0x0001009a, 0x0001009a, 0x0001009b, 0x0001009b, }, + {0x0001009c, 0x0001009c, 0x0001009d, 0x0001009d, 0x0001009e, 0x0001009e, 0x0001009f, 0x0001009f, 0x000100a0, 0x000100a0, 0x000100a1, 0x000100a1, 0x000100a2, 0x000100a2, 0x000100a3, 0x000100a3, }, + {0x000100a4, 0x000100a4, 0x000100a5, 0x000100a5, 0x000100a6, 0x000100a6, 0x000100a7, 0x000100a7, 0x000100a8, 0x000100a8, 0x000100a9, 0x000100a9, 0x000100aa, 0x000100aa, 0x000100ab, 0x000100ab, }, + {0x000100ac, 0x000100ac, 0x000100ad, 0x000100ad, 0x000100ae, 0x000100ae, 0x000100af, 0x000100af, 0x000100b0, 0x000100b0, 0x000100b1, 0x000100b1, 0x000100b2, 0x000100b2, 0x000100b3, 0x000100b3, }, + {0x000100b4, 0x000100b4, 0x000100b5, 0x000100b5, 0x000100b6, 0x000100b6, 0x000100b7, 0x000100b7, 0x000100b8, 0x000100b8, 0x000100b9, 0x000100b9, 0x000100ba, 0x000100ba, 0x000100bb, 0x000100bb, }, + {0x000100bc, 0x000100bc, 0x000100bd, 0x000100bd, 0x000100be, 0x000100be, 0x000100bf, 0x000100bf, 0x000100c0, 0x000100c0, 0x000100c1, 0x000100c1, 0x000100c2, 0x000100c2, 0x000100c3, 0x000100c3, }, +}; + +const uint32_t c_aauiCQMFHuffEnc44[289][2] = +{ + {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0002}, {0x0008, 0x0002}, {0x000b, 0x0002}, {0x000f, 0x000a}, {0x0011, 0x0022}, {0x0014, 0x0000}, + {0x0014, 0x0001}, {0x0014, 0x0002}, {0x0014, 0x0003}, {0x0014, 0x0004}, {0x0014, 0x0005}, {0x0014, 0x0006}, {0x0014, 0x0007}, {0x0014, 0x0008}, + {0x0014, 0x0009}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0005, 0x0002}, {0x0008, 0x0003}, {0x000b, 0x0003}, {0x000e, 0x0007}, {0x0012, 0x003f}, + {0x0014, 0x000a}, {0x0014, 0x000b}, {0x0014, 0x000c}, {0x0014, 0x000d}, {0x0014, 0x000e}, {0x0014, 0x000f}, {0x0014, 0x0010}, {0x0014, 0x0011}, + {0x0014, 0x0012}, {0x0014, 0x0013}, {0x0006, 0x0003}, {0x0005, 0x0003}, {0x0007, 0x0003}, {0x0009, 0x0002}, {0x000c, 0x0003}, {0x000f, 0x000b}, + {0x0012, 0x0040}, {0x0014, 0x0014}, {0x0014, 0x0015}, {0x0014, 0x0016}, {0x0014, 0x0017}, {0x0014, 0x0018}, {0x0014, 0x0019}, {0x0014, 0x001a}, + {0x0014, 0x001b}, {0x0014, 0x001c}, {0x0014, 0x001d}, {0x0008, 0x0004}, {0x0008, 0x0005}, {0x0009, 0x0003}, {0x000b, 0x0004}, {0x000d, 0x0005}, + {0x0010, 0x0013}, {0x0014, 0x001e}, {0x0014, 0x001f}, {0x0014, 0x0020}, {0x0014, 0x0021}, {0x0014, 0x0022}, {0x0014, 0x0023}, {0x0014, 0x0024}, + {0x0014, 0x0025}, {0x0014, 0x0026}, {0x0014, 0x0027}, {0x0014, 0x0028}, {0x000b, 0x0005}, {0x000b, 0x0006}, {0x000b, 0x0007}, {0x000e, 0x0008}, + {0x0011, 0x0023}, {0x0012, 0x0041}, {0x0014, 0x0029}, {0x0014, 0x002a}, {0x0013, 0x007b}, {0x0014, 0x002b}, {0x0014, 0x002c}, {0x0014, 0x002d}, + {0x0014, 0x002e}, {0x0014, 0x002f}, {0x0014, 0x0030}, {0x0014, 0x0031}, {0x0014, 0x0032}, {0x000f, 0x000c}, {0x000e, 0x0009}, {0x000f, 0x000d}, + {0x0011, 0x0024}, {0x0012, 0x0042}, {0x0014, 0x0033}, {0x0014, 0x0034}, {0x0014, 0x0035}, {0x0014, 0x0036}, {0x0014, 0x0037}, {0x0014, 0x0038}, + {0x0014, 0x0039}, {0x0014, 0x003a}, {0x0014, 0x003b}, {0x0014, 0x003c}, {0x0014, 0x003d}, {0x0014, 0x003e}, {0x0013, 0x007c}, {0x0011, 0x0025}, + {0x0012, 0x0043}, {0x0014, 0x003f}, {0x0014, 0x0040}, {0x0014, 0x0041}, {0x0014, 0x0042}, {0x0014, 0x0043}, {0x0014, 0x0044}, {0x0014, 0x0045}, + {0x0014, 0x0046}, {0x0014, 0x0047}, {0x0014, 0x0048}, {0x0014, 0x0049}, {0x0014, 0x004a}, {0x0014, 0x004b}, {0x0014, 0x004c}, {0x0014, 0x004d}, + {0x0014, 0x004e}, {0x0014, 0x004f}, {0x0014, 0x0050}, {0x0014, 0x0051}, {0x0014, 0x0052}, {0x0014, 0x0053}, {0x0014, 0x0054}, {0x0014, 0x0055}, + {0x0014, 0x0056}, {0x0014, 0x0057}, {0x0014, 0x0058}, {0x0014, 0x0059}, {0x0014, 0x005a}, {0x0014, 0x005b}, {0x0014, 0x005c}, {0x0014, 0x005d}, + {0x0014, 0x005e}, {0x0014, 0x005f}, {0x0014, 0x0060}, {0x0014, 0x0061}, {0x0014, 0x0062}, {0x0014, 0x0063}, {0x0014, 0x0064}, {0x0014, 0x0065}, + {0x0014, 0x0066}, {0x0014, 0x0067}, {0x0014, 0x0068}, {0x0014, 0x0069}, {0x0014, 0x006a}, {0x0014, 0x006b}, {0x0014, 0x006c}, {0x0014, 0x006d}, + {0x0014, 0x006e}, {0x0014, 0x006f}, {0x0014, 0x0070}, {0x0014, 0x0071}, {0x0014, 0x0072}, {0x0014, 0x0073}, {0x0014, 0x0074}, {0x0014, 0x0075}, + {0x0014, 0x0076}, {0x0014, 0x0077}, {0x0014, 0x0078}, {0x0014, 0x0079}, {0x0014, 0x007a}, {0x0014, 0x007b}, {0x0014, 0x007c}, {0x0014, 0x007d}, + {0x0014, 0x007e}, {0x0014, 0x007f}, {0x0014, 0x0080}, {0x0014, 0x0081}, {0x0014, 0x0082}, {0x0014, 0x0083}, {0x0014, 0x0084}, {0x0014, 0x0085}, + {0x0014, 0x0086}, {0x0014, 0x0087}, {0x0014, 0x0088}, {0x0014, 0x0089}, {0x0014, 0x008a}, {0x0014, 0x008b}, {0x0014, 0x008c}, {0x0014, 0x008d}, + {0x0014, 0x008e}, {0x0014, 0x008f}, {0x0014, 0x0090}, {0x0014, 0x0091}, {0x0014, 0x0092}, {0x0014, 0x0093}, {0x0014, 0x0094}, {0x0014, 0x0095}, + {0x0014, 0x0096}, {0x0014, 0x0097}, {0x0014, 0x0098}, {0x0014, 0x0099}, {0x0014, 0x009a}, {0x0014, 0x009b}, {0x0014, 0x009c}, {0x0014, 0x009d}, + {0x0014, 0x009e}, {0x0014, 0x009f}, {0x0014, 0x00a0}, {0x0014, 0x00a1}, {0x0014, 0x00a2}, {0x0014, 0x00a3}, {0x0014, 0x00a4}, {0x0014, 0x00a5}, + {0x0014, 0x00a6}, {0x0014, 0x00a7}, {0x0014, 0x00a8}, {0x0014, 0x00a9}, {0x0014, 0x00aa}, {0x0014, 0x00ab}, {0x0014, 0x00ac}, {0x0014, 0x00ad}, + {0x0014, 0x00ae}, {0x0014, 0x00af}, {0x0014, 0x00b0}, {0x0014, 0x00b1}, {0x0014, 0x00b2}, {0x0014, 0x00b3}, {0x0014, 0x00b4}, {0x0014, 0x00b5}, + {0x0014, 0x00b6}, {0x0014, 0x00b7}, {0x0014, 0x00b8}, {0x0014, 0x00b9}, {0x0014, 0x00ba}, {0x0014, 0x00bb}, {0x0014, 0x00bc}, {0x0014, 0x00bd}, + {0x0014, 0x00be}, {0x0014, 0x00bf}, {0x0014, 0x00c0}, {0x0014, 0x00c1}, {0x0014, 0x00c2}, {0x0014, 0x00c3}, {0x0014, 0x00c4}, {0x0014, 0x00c5}, + {0x0014, 0x00c6}, {0x0014, 0x00c7}, {0x0014, 0x00c8}, {0x0014, 0x00c9}, {0x0014, 0x00ca}, {0x0014, 0x00cb}, {0x0014, 0x00cc}, {0x0014, 0x00cd}, + {0x0014, 0x00ce}, {0x0014, 0x00cf}, {0x0014, 0x00d0}, {0x0014, 0x00d1}, {0x0014, 0x00d2}, {0x0014, 0x00d3}, {0x0014, 0x00d4}, {0x0014, 0x00d5}, + {0x0014, 0x00d6}, {0x0014, 0x00d7}, {0x0014, 0x00d8}, {0x0014, 0x00d9}, {0x0014, 0x00da}, {0x0014, 0x00db}, {0x0014, 0x00dc}, {0x0014, 0x00dd}, + {0x0014, 0x00de}, {0x0014, 0x00df}, {0x0014, 0x00e0}, {0x0014, 0x00e1}, {0x0014, 0x00e2}, {0x0014, 0x00e3}, {0x0014, 0x00e4}, {0x0014, 0x00e5}, + {0x0014, 0x00e6}, {0x0014, 0x00e7}, {0x0014, 0x00e8}, {0x0014, 0x00e9}, {0x0014, 0x00ea}, {0x0014, 0x00eb}, {0x0014, 0x00ec}, {0x0014, 0x00ed}, + {0x0014, 0x00ee}, {0x0014, 0x00ef}, {0x0014, 0x00f0}, {0x0014, 0x00f1}, {0x0014, 0x00f2}, {0x0014, 0x00f3}, {0x0014, 0x00f4}, {0x0014, 0x00f5}, + {0x0013, 0x007d}, + +}; + +const uint32_t c_aauiCQMFHuffDec44[27][16] = +{ + {0x0002ffff, 0x0001ffff, 0x00010001, 0x00010001, 0x00010011, 0x00010011, 0x00010012, 0x00010012, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, + {0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, }, + {0x0004ffff, 0x0003ffff, 0x00000003, 0x00000014, 0x00000033, 0x00000034, 0x00010024, 0x00010024, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x00020022, 0x00020022, 0x00020022, 0x00020022, }, + {0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, }, + {0x000affff, 0x0006ffff, 0x0005ffff, 0x00000026, 0x00010004, 0x00010004, 0x00010015, 0x00010015, 0x00010036, 0x00010036, 0x00010044, 0x00010044, 0x00010045, 0x00010045, 0x00010046, 0x00010046, }, + {0x00020047, 0x00020047, 0x00020047, 0x00020047, 0x00020056, 0x00020056, 0x00020056, 0x00020056, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, }, + {0x0009ffff, 0x0007ffff, 0x0008ffff, 0x00000038, 0x00010005, 0x00010005, 0x00010027, 0x00010027, 0x00010055, 0x00010055, 0x00010057, 0x00010057, 0x00020016, 0x00020016, 0x00020016, 0x00020016, }, + {0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, }, + {0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, }, + {0x00020028, 0x00020028, 0x00020028, 0x00020028, 0x00020049, 0x00020049, 0x00020049, 0x00020049, 0x00020059, 0x00020059, 0x00020059, 0x00020059, 0x00020068, 0x00020068, 0x00020068, 0x00020068, }, + {0x000dffff, 0x000cffff, 0x000effff, 0x000fffff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x0019ffff, 0x001affff, 0x000bffff, }, + {0x0000011a, 0x0000011b, 0x0000011c, 0x0000011d, 0x0000011e, 0x0000011f, 0x0001004c, 0x0001004c, 0x00010066, 0x00010066, 0x00010120, 0x00010120, 0x00020017, 0x00020017, 0x00020017, 0x00020017, }, + {0x0000001e, 0x0000001f, 0x00000020, 0x00000021, 0x00000029, 0x0000002a, 0x0000002b, 0x0000002c, 0x0000002d, 0x0000002e, 0x0000002f, 0x00000030, 0x00000031, 0x00000032, 0x00000039, 0x0000003a, }, + {0x00000007, 0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0000000c, 0x0000000d, 0x0000000e, 0x0000000f, 0x00000010, 0x00000018, 0x00000019, 0x0000001a, 0x0000001b, 0x0000001c, 0x0000001d, }, + {0x0000003b, 0x0000003c, 0x0000003d, 0x0000003e, 0x0000003f, 0x00000040, 0x00000041, 0x00000042, 0x00000043, 0x0000004a, 0x0000004b, 0x0000004d, 0x0000004e, 0x0000004f, 0x00000050, 0x00000051, }, + {0x00000052, 0x00000053, 0x00000054, 0x0000005a, 0x0000005b, 0x0000005c, 0x0000005d, 0x0000005e, 0x0000005f, 0x00000060, 0x00000061, 0x00000062, 0x00000063, 0x00000064, 0x00000065, 0x00000069, }, + {0x0000006a, 0x0000006b, 0x0000006c, 0x0000006d, 0x0000006e, 0x0000006f, 0x00000070, 0x00000071, 0x00000072, 0x00000073, 0x00000074, 0x00000075, 0x00000076, 0x00000077, 0x00000078, 0x00000079, }, + {0x0000007a, 0x0000007b, 0x0000007c, 0x0000007d, 0x0000007e, 0x0000007f, 0x00000080, 0x00000081, 0x00000082, 0x00000083, 0x00000084, 0x00000085, 0x00000086, 0x00000087, 0x00000088, 0x00000089, }, + {0x0000008a, 0x0000008b, 0x0000008c, 0x0000008d, 0x0000008e, 0x0000008f, 0x00000090, 0x00000091, 0x00000092, 0x00000093, 0x00000094, 0x00000095, 0x00000096, 0x00000097, 0x00000098, 0x00000099, }, + {0x0000009a, 0x0000009b, 0x0000009c, 0x0000009d, 0x0000009e, 0x0000009f, 0x000000a0, 0x000000a1, 0x000000a2, 0x000000a3, 0x000000a4, 0x000000a5, 0x000000a6, 0x000000a7, 0x000000a8, 0x000000a9, }, + {0x000000aa, 0x000000ab, 0x000000ac, 0x000000ad, 0x000000ae, 0x000000af, 0x000000b0, 0x000000b1, 0x000000b2, 0x000000b3, 0x000000b4, 0x000000b5, 0x000000b6, 0x000000b7, 0x000000b8, 0x000000b9, }, + {0x000000ba, 0x000000bb, 0x000000bc, 0x000000bd, 0x000000be, 0x000000bf, 0x000000c0, 0x000000c1, 0x000000c2, 0x000000c3, 0x000000c4, 0x000000c5, 0x000000c6, 0x000000c7, 0x000000c8, 0x000000c9, }, + {0x000000ca, 0x000000cb, 0x000000cc, 0x000000cd, 0x000000ce, 0x000000cf, 0x000000d0, 0x000000d1, 0x000000d2, 0x000000d3, 0x000000d4, 0x000000d5, 0x000000d6, 0x000000d7, 0x000000d8, 0x000000d9, }, + {0x000000da, 0x000000db, 0x000000dc, 0x000000dd, 0x000000de, 0x000000df, 0x000000e0, 0x000000e1, 0x000000e2, 0x000000e3, 0x000000e4, 0x000000e5, 0x000000e6, 0x000000e7, 0x000000e8, 0x000000e9, }, + {0x000000ea, 0x000000eb, 0x000000ec, 0x000000ed, 0x000000ee, 0x000000ef, 0x000000f0, 0x000000f1, 0x000000f2, 0x000000f3, 0x000000f4, 0x000000f5, 0x000000f6, 0x000000f7, 0x000000f8, 0x000000f9, }, + {0x000000fa, 0x000000fb, 0x000000fc, 0x000000fd, 0x000000fe, 0x000000ff, 0x00000100, 0x00000101, 0x00000102, 0x00000103, 0x00000104, 0x00000105, 0x00000106, 0x00000107, 0x00000108, 0x00000109, }, + {0x0000010a, 0x0000010b, 0x0000010c, 0x0000010d, 0x0000010e, 0x0000010f, 0x00000110, 0x00000111, 0x00000112, 0x00000113, 0x00000114, 0x00000115, 0x00000116, 0x00000117, 0x00000118, 0x00000119, }, +}; + +const uint32_t c_aauiCQMFHuffEnc45[324][2] = +{ + {0x0002, 0x0002}, {0x0003, 0x0002}, {0x0005, 0x0003}, {0x0007, 0x0002}, {0x0009, 0x0003}, {0x000c, 0x0005}, {0x0010, 0x0025}, {0x0012, 0x0088}, + {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, {0x0013, 0x0006}, {0x0013, 0x0007}, + {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0002, 0x0003}, {0x0003, 0x0003}, {0x0005, 0x0004}, {0x0006, 0x0003}, {0x0009, 0x0004}, {0x000b, 0x0004}, + {0x000f, 0x0014}, {0x0011, 0x0048}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0013, 0x000c}, {0x0013, 0x000d}, {0x0013, 0x000e}, {0x0013, 0x000f}, + {0x0013, 0x0010}, {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0005, 0x0005}, {0x0004, 0x0003}, {0x0006, 0x0004}, {0x0007, 0x0003}, + {0x000a, 0x0004}, {0x000d, 0x0007}, {0x000f, 0x0015}, {0x0013, 0x0014}, {0x0013, 0x0015}, {0x0013, 0x0016}, {0x0013, 0x0017}, {0x0013, 0x0018}, + {0x0013, 0x0019}, {0x0013, 0x001a}, {0x0013, 0x001b}, {0x0013, 0x001c}, {0x0013, 0x001d}, {0x0013, 0x001e}, {0x0007, 0x0004}, {0x0006, 0x0005}, + {0x0007, 0x0005}, {0x0009, 0x0005}, {0x000b, 0x0005}, {0x000d, 0x0008}, {0x0010, 0x0026}, {0x0012, 0x0089}, {0x0012, 0x008a}, {0x0013, 0x001f}, + {0x0013, 0x0020}, {0x0013, 0x0021}, {0x0013, 0x0022}, {0x0013, 0x0023}, {0x0013, 0x0024}, {0x0013, 0x0025}, {0x0013, 0x0026}, {0x0013, 0x0027}, + {0x0009, 0x0006}, {0x0009, 0x0007}, {0x000a, 0x0005}, {0x000b, 0x0006}, {0x000d, 0x0009}, {0x000f, 0x0016}, {0x0011, 0x0049}, {0x0013, 0x0028}, + {0x0013, 0x0029}, {0x0013, 0x002a}, {0x0013, 0x002b}, {0x0013, 0x002c}, {0x0013, 0x002d}, {0x0013, 0x002e}, {0x0013, 0x002f}, {0x0013, 0x0030}, + {0x0013, 0x0031}, {0x0013, 0x0032}, {0x000c, 0x0006}, {0x000b, 0x0007}, {0x000c, 0x0007}, {0x000e, 0x000d}, {0x0010, 0x0027}, {0x0012, 0x008b}, + {0x0012, 0x008c}, {0x0013, 0x0033}, {0x0013, 0x0034}, {0x0013, 0x0035}, {0x0013, 0x0036}, {0x0013, 0x0037}, {0x0013, 0x0038}, {0x0013, 0x0039}, + {0x0013, 0x003a}, {0x0013, 0x003b}, {0x0013, 0x003c}, {0x0013, 0x003d}, {0x000f, 0x0017}, {0x000f, 0x0018}, {0x000f, 0x0019}, {0x0012, 0x008d}, + {0x0013, 0x003e}, {0x0013, 0x003f}, {0x0013, 0x0040}, {0x0013, 0x0041}, {0x0013, 0x0042}, {0x0013, 0x0043}, {0x0013, 0x0044}, {0x0013, 0x0045}, + {0x0013, 0x0046}, {0x0013, 0x0047}, {0x0013, 0x0048}, {0x0013, 0x0049}, {0x0013, 0x004a}, {0x0013, 0x004b}, {0x0013, 0x004c}, {0x0012, 0x008e}, + {0x0012, 0x008f}, {0x0013, 0x004d}, {0x0013, 0x004e}, {0x0013, 0x004f}, {0x0013, 0x0050}, {0x0013, 0x0051}, {0x0013, 0x0052}, {0x0013, 0x0053}, + {0x0013, 0x0054}, {0x0013, 0x0055}, {0x0013, 0x0056}, {0x0013, 0x0057}, {0x0013, 0x0058}, {0x0013, 0x0059}, {0x0013, 0x005a}, {0x0013, 0x005b}, + {0x0013, 0x005c}, {0x0013, 0x005d}, {0x0013, 0x005e}, {0x0013, 0x005f}, {0x0013, 0x0060}, {0x0013, 0x0061}, {0x0013, 0x0062}, {0x0013, 0x0063}, + {0x0013, 0x0064}, {0x0013, 0x0065}, {0x0013, 0x0066}, {0x0013, 0x0067}, {0x0013, 0x0068}, {0x0013, 0x0069}, {0x0013, 0x006a}, {0x0013, 0x006b}, + {0x0013, 0x006c}, {0x0013, 0x006d}, {0x0013, 0x006e}, {0x0013, 0x006f}, {0x0013, 0x0070}, {0x0013, 0x0071}, {0x0013, 0x0072}, {0x0013, 0x0073}, + {0x0013, 0x0074}, {0x0013, 0x0075}, {0x0013, 0x0076}, {0x0013, 0x0077}, {0x0013, 0x0078}, {0x0013, 0x0079}, {0x0013, 0x007a}, {0x0013, 0x007b}, + {0x0013, 0x007c}, {0x0013, 0x007d}, {0x0013, 0x007e}, {0x0013, 0x007f}, {0x0013, 0x0080}, {0x0013, 0x0081}, {0x0013, 0x0082}, {0x0013, 0x0083}, + {0x0013, 0x0084}, {0x0013, 0x0085}, {0x0013, 0x0086}, {0x0013, 0x0087}, {0x0013, 0x0088}, {0x0013, 0x0089}, {0x0013, 0x008a}, {0x0013, 0x008b}, + {0x0013, 0x008c}, {0x0013, 0x008d}, {0x0013, 0x008e}, {0x0013, 0x008f}, {0x0013, 0x0090}, {0x0013, 0x0091}, {0x0013, 0x0092}, {0x0013, 0x0093}, + {0x0013, 0x0094}, {0x0013, 0x0095}, {0x0013, 0x0096}, {0x0013, 0x0097}, {0x0013, 0x0098}, {0x0013, 0x0099}, {0x0013, 0x009a}, {0x0013, 0x009b}, + {0x0013, 0x009c}, {0x0013, 0x009d}, {0x0013, 0x009e}, {0x0013, 0x009f}, {0x0013, 0x00a0}, {0x0013, 0x00a1}, {0x0013, 0x00a2}, {0x0013, 0x00a3}, + {0x0013, 0x00a4}, {0x0013, 0x00a5}, {0x0013, 0x00a6}, {0x0013, 0x00a7}, {0x0013, 0x00a8}, {0x0013, 0x00a9}, {0x0013, 0x00aa}, {0x0013, 0x00ab}, + {0x0013, 0x00ac}, {0x0013, 0x00ad}, {0x0013, 0x00ae}, {0x0013, 0x00af}, {0x0013, 0x00b0}, {0x0013, 0x00b1}, {0x0013, 0x00b2}, {0x0013, 0x00b3}, + {0x0013, 0x00b4}, {0x0013, 0x00b5}, {0x0013, 0x00b6}, {0x0013, 0x00b7}, {0x0013, 0x00b8}, {0x0013, 0x00b9}, {0x0013, 0x00ba}, {0x0013, 0x00bb}, + {0x0013, 0x00bc}, {0x0013, 0x00bd}, {0x0013, 0x00be}, {0x0013, 0x00bf}, {0x0013, 0x00c0}, {0x0013, 0x00c1}, {0x0013, 0x00c2}, {0x0013, 0x00c3}, + {0x0013, 0x00c4}, {0x0013, 0x00c5}, {0x0013, 0x00c6}, {0x0013, 0x00c7}, {0x0013, 0x00c8}, {0x0013, 0x00c9}, {0x0013, 0x00ca}, {0x0013, 0x00cb}, + {0x0013, 0x00cc}, {0x0013, 0x00cd}, {0x0013, 0x00ce}, {0x0013, 0x00cf}, {0x0013, 0x00d0}, {0x0013, 0x00d1}, {0x0013, 0x00d2}, {0x0013, 0x00d3}, + {0x0013, 0x00d4}, {0x0013, 0x00d5}, {0x0013, 0x00d6}, {0x0013, 0x00d7}, {0x0013, 0x00d8}, {0x0013, 0x00d9}, {0x0013, 0x00da}, {0x0013, 0x00db}, + {0x0013, 0x00dc}, {0x0013, 0x00dd}, {0x0013, 0x00de}, {0x0013, 0x00df}, {0x0013, 0x00e0}, {0x0013, 0x00e1}, {0x0013, 0x00e2}, {0x0013, 0x00e3}, + {0x0013, 0x00e4}, {0x0013, 0x00e5}, {0x0013, 0x00e6}, {0x0013, 0x00e7}, {0x0013, 0x00e8}, {0x0013, 0x00e9}, {0x0013, 0x00ea}, {0x0013, 0x00eb}, + {0x0013, 0x00ec}, {0x0013, 0x00ed}, {0x0013, 0x00ee}, {0x0013, 0x00ef}, {0x0013, 0x00f0}, {0x0013, 0x00f1}, {0x0013, 0x00f2}, {0x0013, 0x00f3}, + {0x0013, 0x00f4}, {0x0013, 0x00f5}, {0x0013, 0x00f6}, {0x0013, 0x00f7}, {0x0013, 0x00f8}, {0x0013, 0x00f9}, {0x0013, 0x00fa}, {0x0013, 0x00fb}, + {0x0013, 0x00fc}, {0x0013, 0x00fd}, {0x0013, 0x00fe}, {0x0013, 0x00ff}, {0x0013, 0x0100}, {0x0013, 0x0101}, {0x0013, 0x0102}, {0x0013, 0x0103}, + {0x0013, 0x0104}, {0x0013, 0x0105}, {0x0013, 0x0106}, {0x0013, 0x0107}, {0x0013, 0x0108}, {0x0013, 0x0109}, {0x0013, 0x010a}, {0x0013, 0x010b}, + {0x0013, 0x010c}, {0x0013, 0x010d}, {0x0013, 0x010e}, {0x0013, 0x010f}, + +}; + +const uint32_t c_aauiCQMFHuffDec45[50][16] = +{ + {0x0003ffff, 0x0001ffff, 0x0002ffff, 0x00000025, 0x00010001, 0x00010001, 0x00010013, 0x00010013, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020012, 0x00020012, 0x00020012, 0x00020012, }, + {0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00020037, 0x00020037, 0x00020037, 0x00020037, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, }, + {0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, }, + {0x0007ffff, 0x0005ffff, 0x0004ffff, 0x0006ffff, 0x00010003, 0x00010003, 0x00010027, 0x00010027, 0x00010036, 0x00010036, 0x00010038, 0x00010038, 0x00020015, 0x00020015, 0x00020015, 0x00020015, }, + {0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, }, + {0x00020028, 0x00020028, 0x00020028, 0x00020028, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, }, + {0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, }, + {0x000effff, 0x001fffff, 0x000affff, 0x0008ffff, 0x0009ffff, 0x00000005, 0x0000005a, 0x0000005c, 0x00010017, 0x00010017, 0x0001003a, 0x0001003a, 0x0001004b, 0x0001004b, 0x0001005b, 0x0001005b, }, + {0x0001006d, 0x0001006d, 0x0001006e, 0x0001006e, 0x0002005d, 0x0002005d, 0x0002005d, 0x0002005d, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, }, + {0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, }, + {0x0030ffff, 0x0031ffff, 0x000cffff, 0x000dffff, 0x000bffff, 0x00000006, 0x0000003c, 0x0000005e, 0x00010018, 0x00010018, 0x0001002a, 0x0001002a, 0x0001004d, 0x0001004d, 0x0001006c, 0x0001006c, }, + {0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, }, + {0x00020007, 0x00020007, 0x00020007, 0x00020007, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002005f, 0x0002005f, 0x0002005f, 0x0002005f, }, + {0x00020060, 0x00020060, 0x00020060, 0x00020060, 0x0002006f, 0x0002006f, 0x0002006f, 0x0002006f, 0x0002007f, 0x0002007f, 0x0002007f, 0x0002007f, 0x00020080, 0x00020080, 0x00020080, 0x00020080, }, + {0x0010ffff, 0x0011ffff, 0x0012ffff, 0x000fffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x0019ffff, 0x001affff, 0x001bffff, 0x001cffff, 0x001dffff, 0x001effff, }, + {0x0001002f, 0x0001002f, 0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x0001003f, 0x0001003f, }, + {0x00010008, 0x00010008, 0x00010009, 0x00010009, 0x0001000a, 0x0001000a, 0x0001000b, 0x0001000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, }, + {0x00010010, 0x00010010, 0x00010011, 0x00010011, 0x0001001a, 0x0001001a, 0x0001001b, 0x0001001b, 0x0001001c, 0x0001001c, 0x0001001d, 0x0001001d, 0x0001001e, 0x0001001e, 0x0001001f, 0x0001001f, }, + {0x00010020, 0x00010020, 0x00010021, 0x00010021, 0x00010022, 0x00010022, 0x00010023, 0x00010023, 0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, 0x0001002e, 0x0001002e, }, + {0x00010040, 0x00010040, 0x00010041, 0x00010041, 0x00010042, 0x00010042, 0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, 0x00010046, 0x00010046, 0x00010047, 0x00010047, }, + {0x0001004f, 0x0001004f, 0x00010050, 0x00010050, 0x00010051, 0x00010051, 0x00010052, 0x00010052, 0x00010053, 0x00010053, 0x00010054, 0x00010054, 0x00010055, 0x00010055, 0x00010056, 0x00010056, }, + {0x00010057, 0x00010057, 0x00010058, 0x00010058, 0x00010059, 0x00010059, 0x00010061, 0x00010061, 0x00010062, 0x00010062, 0x00010063, 0x00010063, 0x00010064, 0x00010064, 0x00010065, 0x00010065, }, + {0x00010066, 0x00010066, 0x00010067, 0x00010067, 0x00010068, 0x00010068, 0x00010069, 0x00010069, 0x0001006a, 0x0001006a, 0x0001006b, 0x0001006b, 0x00010070, 0x00010070, 0x00010071, 0x00010071, }, + {0x00010072, 0x00010072, 0x00010073, 0x00010073, 0x00010074, 0x00010074, 0x00010075, 0x00010075, 0x00010076, 0x00010076, 0x00010077, 0x00010077, 0x00010078, 0x00010078, 0x00010079, 0x00010079, }, + {0x0001007a, 0x0001007a, 0x0001007b, 0x0001007b, 0x0001007c, 0x0001007c, 0x0001007d, 0x0001007d, 0x0001007e, 0x0001007e, 0x00010081, 0x00010081, 0x00010082, 0x00010082, 0x00010083, 0x00010083, }, + {0x00010084, 0x00010084, 0x00010085, 0x00010085, 0x00010086, 0x00010086, 0x00010087, 0x00010087, 0x00010088, 0x00010088, 0x00010089, 0x00010089, 0x0001008a, 0x0001008a, 0x0001008b, 0x0001008b, }, + {0x0001008c, 0x0001008c, 0x0001008d, 0x0001008d, 0x0001008e, 0x0001008e, 0x0001008f, 0x0001008f, 0x00010090, 0x00010090, 0x00010091, 0x00010091, 0x00010092, 0x00010092, 0x00010093, 0x00010093, }, + {0x00010094, 0x00010094, 0x00010095, 0x00010095, 0x00010096, 0x00010096, 0x00010097, 0x00010097, 0x00010098, 0x00010098, 0x00010099, 0x00010099, 0x0001009a, 0x0001009a, 0x0001009b, 0x0001009b, }, + {0x0001009c, 0x0001009c, 0x0001009d, 0x0001009d, 0x0001009e, 0x0001009e, 0x0001009f, 0x0001009f, 0x000100a0, 0x000100a0, 0x000100a1, 0x000100a1, 0x000100a2, 0x000100a2, 0x000100a3, 0x000100a3, }, + {0x000100a4, 0x000100a4, 0x000100a5, 0x000100a5, 0x000100a6, 0x000100a6, 0x000100a7, 0x000100a7, 0x000100a8, 0x000100a8, 0x000100a9, 0x000100a9, 0x000100aa, 0x000100aa, 0x000100ab, 0x000100ab, }, + {0x000100ac, 0x000100ac, 0x000100ad, 0x000100ad, 0x000100ae, 0x000100ae, 0x000100af, 0x000100af, 0x000100b0, 0x000100b0, 0x000100b1, 0x000100b1, 0x000100b2, 0x000100b2, 0x000100b3, 0x000100b3, }, + {0x0020ffff, 0x0021ffff, 0x0022ffff, 0x0023ffff, 0x0024ffff, 0x0025ffff, 0x0026ffff, 0x0027ffff, 0x0028ffff, 0x0029ffff, 0x002affff, 0x002bffff, 0x002cffff, 0x002dffff, 0x002effff, 0x002fffff, }, + {0x000100b4, 0x000100b4, 0x000100b5, 0x000100b5, 0x000100b6, 0x000100b6, 0x000100b7, 0x000100b7, 0x000100b8, 0x000100b8, 0x000100b9, 0x000100b9, 0x000100ba, 0x000100ba, 0x000100bb, 0x000100bb, }, + {0x000100bc, 0x000100bc, 0x000100bd, 0x000100bd, 0x000100be, 0x000100be, 0x000100bf, 0x000100bf, 0x000100c0, 0x000100c0, 0x000100c1, 0x000100c1, 0x000100c2, 0x000100c2, 0x000100c3, 0x000100c3, }, + {0x000100c4, 0x000100c4, 0x000100c5, 0x000100c5, 0x000100c6, 0x000100c6, 0x000100c7, 0x000100c7, 0x000100c8, 0x000100c8, 0x000100c9, 0x000100c9, 0x000100ca, 0x000100ca, 0x000100cb, 0x000100cb, }, + {0x000100cc, 0x000100cc, 0x000100cd, 0x000100cd, 0x000100ce, 0x000100ce, 0x000100cf, 0x000100cf, 0x000100d0, 0x000100d0, 0x000100d1, 0x000100d1, 0x000100d2, 0x000100d2, 0x000100d3, 0x000100d3, }, + {0x000100d4, 0x000100d4, 0x000100d5, 0x000100d5, 0x000100d6, 0x000100d6, 0x000100d7, 0x000100d7, 0x000100d8, 0x000100d8, 0x000100d9, 0x000100d9, 0x000100da, 0x000100da, 0x000100db, 0x000100db, }, + {0x000100dc, 0x000100dc, 0x000100dd, 0x000100dd, 0x000100de, 0x000100de, 0x000100df, 0x000100df, 0x000100e0, 0x000100e0, 0x000100e1, 0x000100e1, 0x000100e2, 0x000100e2, 0x000100e3, 0x000100e3, }, + {0x000100e4, 0x000100e4, 0x000100e5, 0x000100e5, 0x000100e6, 0x000100e6, 0x000100e7, 0x000100e7, 0x000100e8, 0x000100e8, 0x000100e9, 0x000100e9, 0x000100ea, 0x000100ea, 0x000100eb, 0x000100eb, }, + {0x000100ec, 0x000100ec, 0x000100ed, 0x000100ed, 0x000100ee, 0x000100ee, 0x000100ef, 0x000100ef, 0x000100f0, 0x000100f0, 0x000100f1, 0x000100f1, 0x000100f2, 0x000100f2, 0x000100f3, 0x000100f3, }, + {0x000100f4, 0x000100f4, 0x000100f5, 0x000100f5, 0x000100f6, 0x000100f6, 0x000100f7, 0x000100f7, 0x000100f8, 0x000100f8, 0x000100f9, 0x000100f9, 0x000100fa, 0x000100fa, 0x000100fb, 0x000100fb, }, + {0x000100fc, 0x000100fc, 0x000100fd, 0x000100fd, 0x000100fe, 0x000100fe, 0x000100ff, 0x000100ff, 0x00010100, 0x00010100, 0x00010101, 0x00010101, 0x00010102, 0x00010102, 0x00010103, 0x00010103, }, + {0x00010104, 0x00010104, 0x00010105, 0x00010105, 0x00010106, 0x00010106, 0x00010107, 0x00010107, 0x00010108, 0x00010108, 0x00010109, 0x00010109, 0x0001010a, 0x0001010a, 0x0001010b, 0x0001010b, }, + {0x0001010c, 0x0001010c, 0x0001010d, 0x0001010d, 0x0001010e, 0x0001010e, 0x0001010f, 0x0001010f, 0x00010110, 0x00010110, 0x00010111, 0x00010111, 0x00010112, 0x00010112, 0x00010113, 0x00010113, }, + {0x00010114, 0x00010114, 0x00010115, 0x00010115, 0x00010116, 0x00010116, 0x00010117, 0x00010117, 0x00010118, 0x00010118, 0x00010119, 0x00010119, 0x0001011a, 0x0001011a, 0x0001011b, 0x0001011b, }, + {0x0001011c, 0x0001011c, 0x0001011d, 0x0001011d, 0x0001011e, 0x0001011e, 0x0001011f, 0x0001011f, 0x00010120, 0x00010120, 0x00010121, 0x00010121, 0x00010122, 0x00010122, 0x00010123, 0x00010123, }, + {0x00010124, 0x00010124, 0x00010125, 0x00010125, 0x00010126, 0x00010126, 0x00010127, 0x00010127, 0x00010128, 0x00010128, 0x00010129, 0x00010129, 0x0001012a, 0x0001012a, 0x0001012b, 0x0001012b, }, + {0x0001012c, 0x0001012c, 0x0001012d, 0x0001012d, 0x0001012e, 0x0001012e, 0x0001012f, 0x0001012f, 0x00010130, 0x00010130, 0x00010131, 0x00010131, 0x00010132, 0x00010132, 0x00010133, 0x00010133, }, + {0x00010134, 0x00010134, 0x00010135, 0x00010135, 0x00010136, 0x00010136, 0x00010137, 0x00010137, 0x00010138, 0x00010138, 0x00010139, 0x00010139, 0x0001013a, 0x0001013a, 0x0001013b, 0x0001013b, }, + {0x0001013c, 0x0001013c, 0x0001013d, 0x0001013d, 0x0001013e, 0x0001013e, 0x0001013f, 0x0001013f, 0x00010140, 0x00010140, 0x00010141, 0x00010141, 0x00010142, 0x00010142, 0x00010143, 0x00010143, }, +}; + +const uint32_t c_aauiCQMFHuffEnc46[400][2] = +{ + {0x0002, 0x0002}, {0x0003, 0x0002}, {0x0005, 0x0003}, {0x0007, 0x0004}, {0x0009, 0x0005}, {0x000b, 0x0006}, {0x000d, 0x000a}, {0x000f, 0x0018}, + {0x0012, 0x00a6}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, {0x0013, 0x0006}, + {0x0013, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0002, 0x0003}, {0x0003, 0x0003}, {0x0005, 0x0004}, {0x0006, 0x0004}, + {0x0008, 0x0004}, {0x000a, 0x0006}, {0x000c, 0x0008}, {0x000e, 0x0011}, {0x0012, 0x00a7}, {0x0013, 0x000b}, {0x0013, 0x000c}, {0x0013, 0x000d}, + {0x0013, 0x000e}, {0x0013, 0x000f}, {0x0013, 0x0010}, {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0013, 0x0014}, {0x0013, 0x0015}, + {0x0005, 0x0005}, {0x0005, 0x0006}, {0x0005, 0x0007}, {0x0007, 0x0005}, {0x0009, 0x0006}, {0x000b, 0x0007}, {0x000d, 0x000b}, {0x000f, 0x0019}, + {0x0013, 0x0016}, {0x0013, 0x0017}, {0x0013, 0x0018}, {0x0013, 0x0019}, {0x0013, 0x001a}, {0x0013, 0x001b}, {0x0013, 0x001c}, {0x0013, 0x001d}, + {0x0013, 0x001e}, {0x0013, 0x001f}, {0x0013, 0x0020}, {0x0013, 0x0021}, {0x0007, 0x0006}, {0x0006, 0x0005}, {0x0007, 0x0007}, {0x0008, 0x0005}, + {0x000a, 0x0007}, {0x000c, 0x0009}, {0x000e, 0x0012}, {0x000f, 0x001a}, {0x0012, 0x00a8}, {0x0013, 0x0022}, {0x0013, 0x0023}, {0x0013, 0x0024}, + {0x0013, 0x0025}, {0x0013, 0x0026}, {0x0013, 0x0027}, {0x0013, 0x0028}, {0x0013, 0x0029}, {0x0013, 0x002a}, {0x0013, 0x002b}, {0x0013, 0x002c}, + {0x0009, 0x0007}, {0x0008, 0x0006}, {0x0008, 0x0007}, {0x000a, 0x0008}, {0x000b, 0x0008}, {0x000d, 0x000c}, {0x000e, 0x0013}, {0x0010, 0x002c}, + {0x0013, 0x002d}, {0x0013, 0x002e}, {0x0013, 0x002f}, {0x0013, 0x0030}, {0x0013, 0x0031}, {0x0013, 0x0032}, {0x0013, 0x0033}, {0x0013, 0x0034}, + {0x0013, 0x0035}, {0x0013, 0x0036}, {0x0013, 0x0037}, {0x0013, 0x0038}, {0x000b, 0x0009}, {0x000a, 0x0009}, {0x000b, 0x000a}, {0x000b, 0x000b}, + {0x000d, 0x000d}, {0x000f, 0x001b}, {0x0010, 0x002d}, {0x0013, 0x0039}, {0x0013, 0x003a}, {0x0013, 0x003b}, {0x0013, 0x003c}, {0x0013, 0x003d}, + {0x0013, 0x003e}, {0x0013, 0x003f}, {0x0013, 0x0040}, {0x0013, 0x0041}, {0x0013, 0x0042}, {0x0013, 0x0043}, {0x0013, 0x0044}, {0x0013, 0x0045}, + {0x000d, 0x000e}, {0x000c, 0x000a}, {0x000c, 0x000b}, {0x000d, 0x000f}, {0x000f, 0x001c}, {0x000f, 0x001d}, {0x0013, 0x0046}, {0x0013, 0x0047}, + {0x0013, 0x0048}, {0x0013, 0x0049}, {0x0013, 0x004a}, {0x0013, 0x004b}, {0x0013, 0x004c}, {0x0013, 0x004d}, {0x0013, 0x004e}, {0x0013, 0x004f}, + {0x0013, 0x0050}, {0x0013, 0x0051}, {0x0013, 0x0052}, {0x0013, 0x0053}, {0x000f, 0x001e}, {0x000f, 0x001f}, {0x000f, 0x0020}, {0x000f, 0x0021}, + {0x0010, 0x002e}, {0x0012, 0x00a9}, {0x0013, 0x0054}, {0x0013, 0x0055}, {0x0012, 0x00aa}, {0x0013, 0x0056}, {0x0013, 0x0057}, {0x0013, 0x0058}, + {0x0013, 0x0059}, {0x0013, 0x005a}, {0x0013, 0x005b}, {0x0013, 0x005c}, {0x0013, 0x005d}, {0x0013, 0x005e}, {0x0013, 0x005f}, {0x0013, 0x0060}, + {0x0013, 0x0061}, {0x0010, 0x002f}, {0x0013, 0x0062}, {0x0011, 0x0057}, {0x0013, 0x0063}, {0x0013, 0x0064}, {0x0013, 0x0065}, {0x0013, 0x0066}, + {0x0013, 0x0067}, {0x0013, 0x0068}, {0x0013, 0x0069}, {0x0013, 0x006a}, {0x0013, 0x006b}, {0x0013, 0x006c}, {0x0013, 0x006d}, {0x0013, 0x006e}, + {0x0013, 0x006f}, {0x0013, 0x0070}, {0x0013, 0x0071}, {0x0013, 0x0072}, {0x0013, 0x0073}, {0x0013, 0x0074}, {0x0013, 0x0075}, {0x0013, 0x0076}, + {0x0013, 0x0077}, {0x0013, 0x0078}, {0x0013, 0x0079}, {0x0013, 0x007a}, {0x0013, 0x007b}, {0x0013, 0x007c}, {0x0013, 0x007d}, {0x0013, 0x007e}, + {0x0013, 0x007f}, {0x0013, 0x0080}, {0x0013, 0x0081}, {0x0013, 0x0082}, {0x0013, 0x0083}, {0x0013, 0x0084}, {0x0013, 0x0085}, {0x0013, 0x0086}, + {0x0013, 0x0087}, {0x0013, 0x0088}, {0x0013, 0x0089}, {0x0013, 0x008a}, {0x0013, 0x008b}, {0x0013, 0x008c}, {0x0013, 0x008d}, {0x0013, 0x008e}, + {0x0013, 0x008f}, {0x0013, 0x0090}, {0x0013, 0x0091}, {0x0013, 0x0092}, {0x0013, 0x0093}, {0x0013, 0x0094}, {0x0013, 0x0095}, {0x0013, 0x0096}, + {0x0013, 0x0097}, {0x0013, 0x0098}, {0x0013, 0x0099}, {0x0013, 0x009a}, {0x0013, 0x009b}, {0x0013, 0x009c}, {0x0013, 0x009d}, {0x0013, 0x009e}, + {0x0013, 0x009f}, {0x0013, 0x00a0}, {0x0013, 0x00a1}, {0x0013, 0x00a2}, {0x0013, 0x00a3}, {0x0013, 0x00a4}, {0x0013, 0x00a5}, {0x0013, 0x00a6}, + {0x0013, 0x00a7}, {0x0013, 0x00a8}, {0x0013, 0x00a9}, {0x0013, 0x00aa}, {0x0013, 0x00ab}, {0x0013, 0x00ac}, {0x0013, 0x00ad}, {0x0013, 0x00ae}, + {0x0013, 0x00af}, {0x0013, 0x00b0}, {0x0013, 0x00b1}, {0x0013, 0x00b2}, {0x0013, 0x00b3}, {0x0013, 0x00b4}, {0x0013, 0x00b5}, {0x0013, 0x00b6}, + {0x0013, 0x00b7}, {0x0013, 0x00b8}, {0x0013, 0x00b9}, {0x0013, 0x00ba}, {0x0013, 0x00bb}, {0x0013, 0x00bc}, {0x0013, 0x00bd}, {0x0013, 0x00be}, + {0x0013, 0x00bf}, {0x0013, 0x00c0}, {0x0013, 0x00c1}, {0x0013, 0x00c2}, {0x0013, 0x00c3}, {0x0013, 0x00c4}, {0x0013, 0x00c5}, {0x0013, 0x00c6}, + {0x0013, 0x00c7}, {0x0013, 0x00c8}, {0x0013, 0x00c9}, {0x0013, 0x00ca}, {0x0013, 0x00cb}, {0x0013, 0x00cc}, {0x0013, 0x00cd}, {0x0013, 0x00ce}, + {0x0013, 0x00cf}, {0x0013, 0x00d0}, {0x0013, 0x00d1}, {0x0013, 0x00d2}, {0x0013, 0x00d3}, {0x0013, 0x00d4}, {0x0013, 0x00d5}, {0x0013, 0x00d6}, + {0x0013, 0x00d7}, {0x0013, 0x00d8}, {0x0013, 0x00d9}, {0x0013, 0x00da}, {0x0013, 0x00db}, {0x0013, 0x00dc}, {0x0013, 0x00dd}, {0x0013, 0x00de}, + {0x0013, 0x00df}, {0x0013, 0x00e0}, {0x0013, 0x00e1}, {0x0013, 0x00e2}, {0x0013, 0x00e3}, {0x0013, 0x00e4}, {0x0013, 0x00e5}, {0x0013, 0x00e6}, + {0x0013, 0x00e7}, {0x0013, 0x00e8}, {0x0013, 0x00e9}, {0x0013, 0x00ea}, {0x0013, 0x00eb}, {0x0013, 0x00ec}, {0x0013, 0x00ed}, {0x0013, 0x00ee}, + {0x0013, 0x00ef}, {0x0013, 0x00f0}, {0x0013, 0x00f1}, {0x0013, 0x00f2}, {0x0013, 0x00f3}, {0x0013, 0x00f4}, {0x0013, 0x00f5}, {0x0013, 0x00f6}, + {0x0013, 0x00f7}, {0x0013, 0x00f8}, {0x0013, 0x00f9}, {0x0013, 0x00fa}, {0x0013, 0x00fb}, {0x0013, 0x00fc}, {0x0013, 0x00fd}, {0x0013, 0x00fe}, + {0x0013, 0x00ff}, {0x0013, 0x0100}, {0x0013, 0x0101}, {0x0013, 0x0102}, {0x0013, 0x0103}, {0x0013, 0x0104}, {0x0013, 0x0105}, {0x0013, 0x0106}, + {0x0013, 0x0107}, {0x0013, 0x0108}, {0x0013, 0x0109}, {0x0013, 0x010a}, {0x0013, 0x010b}, {0x0013, 0x010c}, {0x0013, 0x010d}, {0x0013, 0x010e}, + {0x0013, 0x010f}, {0x0013, 0x0110}, {0x0013, 0x0111}, {0x0013, 0x0112}, {0x0013, 0x0113}, {0x0013, 0x0114}, {0x0013, 0x0115}, {0x0013, 0x0116}, + {0x0013, 0x0117}, {0x0013, 0x0118}, {0x0013, 0x0119}, {0x0013, 0x011a}, {0x0013, 0x011b}, {0x0013, 0x011c}, {0x0013, 0x011d}, {0x0013, 0x011e}, + {0x0013, 0x011f}, {0x0013, 0x0120}, {0x0013, 0x0121}, {0x0013, 0x0122}, {0x0013, 0x0123}, {0x0013, 0x0124}, {0x0013, 0x0125}, {0x0013, 0x0126}, + {0x0013, 0x0127}, {0x0013, 0x0128}, {0x0013, 0x0129}, {0x0013, 0x012a}, {0x0013, 0x012b}, {0x0013, 0x012c}, {0x0013, 0x012d}, {0x0013, 0x012e}, + {0x0013, 0x012f}, {0x0013, 0x0130}, {0x0013, 0x0131}, {0x0013, 0x0132}, {0x0013, 0x0133}, {0x0013, 0x0134}, {0x0013, 0x0135}, {0x0013, 0x0136}, + {0x0013, 0x0137}, {0x0013, 0x0138}, {0x0013, 0x0139}, {0x0013, 0x013a}, {0x0013, 0x013b}, {0x0013, 0x013c}, {0x0013, 0x013d}, {0x0013, 0x013e}, + {0x0013, 0x013f}, {0x0013, 0x0140}, {0x0013, 0x0141}, {0x0013, 0x0142}, {0x0013, 0x0143}, {0x0013, 0x0144}, {0x0013, 0x0145}, {0x0013, 0x0146}, + {0x0013, 0x0147}, {0x0013, 0x0148}, {0x0013, 0x0149}, {0x0013, 0x014a}, {0x0013, 0x014b}, {0x0012, 0x00ab}, {0x0012, 0x00ac}, {0x0012, 0x00ad}, +}; + +const uint32_t c_aauiCQMFHuffDec46[61][16] = +{ + {0x0004ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x00010001, 0x00010001, 0x00010015, 0x00010015, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020014, 0x00020014, 0x00020014, 0x00020014, }, + {0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003d, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, }, + {0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, }, + {0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, }, + {0x0008ffff, 0x0007ffff, 0x0005ffff, 0x0006ffff, 0x00000018, 0x0000003f, 0x00000051, 0x00000052, 0x00010003, 0x00010003, 0x0001002b, 0x0001002b, 0x0001003c, 0x0001003c, 0x0001003e, 0x0001003e, }, + {0x00020053, 0x00020053, 0x00020053, 0x00020053, 0x00020065, 0x00020065, 0x00020065, 0x00020065, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, }, + {0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, }, + {0x00010054, 0x00010054, 0x00010064, 0x00010064, 0x00010066, 0x00010066, 0x00010067, 0x00010067, 0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x00020040, 0x00020040, 0x00020040, 0x00020040, }, + {0x0012ffff, 0x0023ffff, 0x000effff, 0x000dffff, 0x000cffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x0000001a, 0x00000041, 0x00000079, 0x0000007a, 0x00010005, 0x00010005, 0x0001002d, 0x0001002d, }, + {0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, }, + {0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, }, + {0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, }, + {0x0001008e, 0x0001008e, 0x0001008f, 0x0001008f, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x00020042, 0x00020042, 0x00020042, 0x00020042, 0x00020056, 0x00020056, 0x00020056, 0x00020056, }, + {0x00010007, 0x00010007, 0x0001002f, 0x0001002f, 0x00010043, 0x00010043, 0x00010069, 0x00010069, 0x0001007c, 0x0001007c, 0x0001007d, 0x0001007d, 0x0001008c, 0x0001008c, 0x0001008d, 0x0001008d, }, + {0x0034ffff, 0x0035ffff, 0x0036ffff, 0x0037ffff, 0x0038ffff, 0x0039ffff, 0x003affff, 0x003bffff, 0x003cffff, 0x0010ffff, 0x0011ffff, 0x000fffff, 0x00000057, 0x0000006a, 0x00000090, 0x000000a1, }, + {0x0002018e, 0x0002018e, 0x0002018e, 0x0002018e, 0x0002018f, 0x0002018f, 0x0002018f, 0x0002018f, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, }, + {0x00010189, 0x00010189, 0x0001018a, 0x0001018a, 0x0001018b, 0x0001018b, 0x0001018c, 0x0001018c, 0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, }, + {0x00020044, 0x00020044, 0x00020044, 0x00020044, 0x00020091, 0x00020091, 0x00020091, 0x00020091, 0x00020094, 0x00020094, 0x00020094, 0x00020094, 0x0002018d, 0x0002018d, 0x0002018d, 0x0002018d, }, + {0x0013ffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x0014ffff, 0x0015ffff, 0x0019ffff, 0x001affff, 0x001bffff, 0x001cffff, 0x001dffff, 0x001effff, 0x001fffff, 0x0020ffff, 0x0021ffff, 0x0022ffff, }, + {0x00010009, 0x00010009, 0x0001000a, 0x0001000a, 0x0001000b, 0x0001000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, 0x00010010, 0x00010010, }, + {0x0001003a, 0x0001003a, 0x0001003b, 0x0001003b, 0x00010045, 0x00010045, 0x00010046, 0x00010046, 0x00010047, 0x00010047, 0x00010048, 0x00010048, 0x00010049, 0x00010049, 0x0001004a, 0x0001004a, }, + {0x0001004b, 0x0001004b, 0x0001004c, 0x0001004c, 0x0001004d, 0x0001004d, 0x0001004e, 0x0001004e, 0x0001004f, 0x0001004f, 0x00010058, 0x00010058, 0x00010059, 0x00010059, 0x0001005a, 0x0001005a, }, + {0x00010011, 0x00010011, 0x00010012, 0x00010012, 0x00010013, 0x00010013, 0x0001001d, 0x0001001d, 0x0001001e, 0x0001001e, 0x0001001f, 0x0001001f, 0x00010020, 0x00010020, 0x00010021, 0x00010021, }, + {0x00010022, 0x00010022, 0x00010023, 0x00010023, 0x00010024, 0x00010024, 0x00010025, 0x00010025, 0x00010026, 0x00010026, 0x00010027, 0x00010027, 0x00010030, 0x00010030, 0x00010031, 0x00010031, }, + {0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x00010036, 0x00010036, 0x00010037, 0x00010037, 0x00010038, 0x00010038, 0x00010039, 0x00010039, }, + {0x0001005b, 0x0001005b, 0x0001005c, 0x0001005c, 0x0001005d, 0x0001005d, 0x0001005e, 0x0001005e, 0x0001005f, 0x0001005f, 0x00010060, 0x00010060, 0x00010061, 0x00010061, 0x00010062, 0x00010062, }, + {0x00010063, 0x00010063, 0x0001006b, 0x0001006b, 0x0001006c, 0x0001006c, 0x0001006d, 0x0001006d, 0x0001006e, 0x0001006e, 0x0001006f, 0x0001006f, 0x00010070, 0x00010070, 0x00010071, 0x00010071, }, + {0x00010072, 0x00010072, 0x00010073, 0x00010073, 0x00010074, 0x00010074, 0x00010075, 0x00010075, 0x00010076, 0x00010076, 0x00010077, 0x00010077, 0x0001007e, 0x0001007e, 0x0001007f, 0x0001007f, }, + {0x00010080, 0x00010080, 0x00010081, 0x00010081, 0x00010082, 0x00010082, 0x00010083, 0x00010083, 0x00010084, 0x00010084, 0x00010085, 0x00010085, 0x00010086, 0x00010086, 0x00010087, 0x00010087, }, + {0x00010088, 0x00010088, 0x00010089, 0x00010089, 0x0001008a, 0x0001008a, 0x0001008b, 0x0001008b, 0x00010092, 0x00010092, 0x00010093, 0x00010093, 0x00010095, 0x00010095, 0x00010096, 0x00010096, }, + {0x00010097, 0x00010097, 0x00010098, 0x00010098, 0x00010099, 0x00010099, 0x0001009a, 0x0001009a, 0x0001009b, 0x0001009b, 0x0001009c, 0x0001009c, 0x0001009d, 0x0001009d, 0x0001009e, 0x0001009e, }, + {0x0001009f, 0x0001009f, 0x000100a0, 0x000100a0, 0x000100a2, 0x000100a2, 0x000100a4, 0x000100a4, 0x000100a5, 0x000100a5, 0x000100a6, 0x000100a6, 0x000100a7, 0x000100a7, 0x000100a8, 0x000100a8, }, + {0x000100a9, 0x000100a9, 0x000100aa, 0x000100aa, 0x000100ab, 0x000100ab, 0x000100ac, 0x000100ac, 0x000100ad, 0x000100ad, 0x000100ae, 0x000100ae, 0x000100af, 0x000100af, 0x000100b0, 0x000100b0, }, + {0x000100b1, 0x000100b1, 0x000100b2, 0x000100b2, 0x000100b3, 0x000100b3, 0x000100b4, 0x000100b4, 0x000100b5, 0x000100b5, 0x000100b6, 0x000100b6, 0x000100b7, 0x000100b7, 0x000100b8, 0x000100b8, }, + {0x000100b9, 0x000100b9, 0x000100ba, 0x000100ba, 0x000100bb, 0x000100bb, 0x000100bc, 0x000100bc, 0x000100bd, 0x000100bd, 0x000100be, 0x000100be, 0x000100bf, 0x000100bf, 0x000100c0, 0x000100c0, }, + {0x0024ffff, 0x0025ffff, 0x0026ffff, 0x0027ffff, 0x0028ffff, 0x0029ffff, 0x002affff, 0x002bffff, 0x002cffff, 0x002dffff, 0x002effff, 0x002fffff, 0x0030ffff, 0x0031ffff, 0x0032ffff, 0x0033ffff, }, + {0x000100c1, 0x000100c1, 0x000100c2, 0x000100c2, 0x000100c3, 0x000100c3, 0x000100c4, 0x000100c4, 0x000100c5, 0x000100c5, 0x000100c6, 0x000100c6, 0x000100c7, 0x000100c7, 0x000100c8, 0x000100c8, }, + {0x000100c9, 0x000100c9, 0x000100ca, 0x000100ca, 0x000100cb, 0x000100cb, 0x000100cc, 0x000100cc, 0x000100cd, 0x000100cd, 0x000100ce, 0x000100ce, 0x000100cf, 0x000100cf, 0x000100d0, 0x000100d0, }, + {0x000100d1, 0x000100d1, 0x000100d2, 0x000100d2, 0x000100d3, 0x000100d3, 0x000100d4, 0x000100d4, 0x000100d5, 0x000100d5, 0x000100d6, 0x000100d6, 0x000100d7, 0x000100d7, 0x000100d8, 0x000100d8, }, + {0x000100d9, 0x000100d9, 0x000100da, 0x000100da, 0x000100db, 0x000100db, 0x000100dc, 0x000100dc, 0x000100dd, 0x000100dd, 0x000100de, 0x000100de, 0x000100df, 0x000100df, 0x000100e0, 0x000100e0, }, + {0x000100e1, 0x000100e1, 0x000100e2, 0x000100e2, 0x000100e3, 0x000100e3, 0x000100e4, 0x000100e4, 0x000100e5, 0x000100e5, 0x000100e6, 0x000100e6, 0x000100e7, 0x000100e7, 0x000100e8, 0x000100e8, }, + {0x000100e9, 0x000100e9, 0x000100ea, 0x000100ea, 0x000100eb, 0x000100eb, 0x000100ec, 0x000100ec, 0x000100ed, 0x000100ed, 0x000100ee, 0x000100ee, 0x000100ef, 0x000100ef, 0x000100f0, 0x000100f0, }, + {0x000100f1, 0x000100f1, 0x000100f2, 0x000100f2, 0x000100f3, 0x000100f3, 0x000100f4, 0x000100f4, 0x000100f5, 0x000100f5, 0x000100f6, 0x000100f6, 0x000100f7, 0x000100f7, 0x000100f8, 0x000100f8, }, + {0x000100f9, 0x000100f9, 0x000100fa, 0x000100fa, 0x000100fb, 0x000100fb, 0x000100fc, 0x000100fc, 0x000100fd, 0x000100fd, 0x000100fe, 0x000100fe, 0x000100ff, 0x000100ff, 0x00010100, 0x00010100, }, + {0x00010101, 0x00010101, 0x00010102, 0x00010102, 0x00010103, 0x00010103, 0x00010104, 0x00010104, 0x00010105, 0x00010105, 0x00010106, 0x00010106, 0x00010107, 0x00010107, 0x00010108, 0x00010108, }, + {0x00010109, 0x00010109, 0x0001010a, 0x0001010a, 0x0001010b, 0x0001010b, 0x0001010c, 0x0001010c, 0x0001010d, 0x0001010d, 0x0001010e, 0x0001010e, 0x0001010f, 0x0001010f, 0x00010110, 0x00010110, }, + {0x00010111, 0x00010111, 0x00010112, 0x00010112, 0x00010113, 0x00010113, 0x00010114, 0x00010114, 0x00010115, 0x00010115, 0x00010116, 0x00010116, 0x00010117, 0x00010117, 0x00010118, 0x00010118, }, + {0x00010119, 0x00010119, 0x0001011a, 0x0001011a, 0x0001011b, 0x0001011b, 0x0001011c, 0x0001011c, 0x0001011d, 0x0001011d, 0x0001011e, 0x0001011e, 0x0001011f, 0x0001011f, 0x00010120, 0x00010120, }, + {0x00010121, 0x00010121, 0x00010122, 0x00010122, 0x00010123, 0x00010123, 0x00010124, 0x00010124, 0x00010125, 0x00010125, 0x00010126, 0x00010126, 0x00010127, 0x00010127, 0x00010128, 0x00010128, }, + {0x00010129, 0x00010129, 0x0001012a, 0x0001012a, 0x0001012b, 0x0001012b, 0x0001012c, 0x0001012c, 0x0001012d, 0x0001012d, 0x0001012e, 0x0001012e, 0x0001012f, 0x0001012f, 0x00010130, 0x00010130, }, + {0x00010131, 0x00010131, 0x00010132, 0x00010132, 0x00010133, 0x00010133, 0x00010134, 0x00010134, 0x00010135, 0x00010135, 0x00010136, 0x00010136, 0x00010137, 0x00010137, 0x00010138, 0x00010138, }, + {0x00010139, 0x00010139, 0x0001013a, 0x0001013a, 0x0001013b, 0x0001013b, 0x0001013c, 0x0001013c, 0x0001013d, 0x0001013d, 0x0001013e, 0x0001013e, 0x0001013f, 0x0001013f, 0x00010140, 0x00010140, }, + {0x00010141, 0x00010141, 0x00010142, 0x00010142, 0x00010143, 0x00010143, 0x00010144, 0x00010144, 0x00010145, 0x00010145, 0x00010146, 0x00010146, 0x00010147, 0x00010147, 0x00010148, 0x00010148, }, + {0x00010149, 0x00010149, 0x0001014a, 0x0001014a, 0x0001014b, 0x0001014b, 0x0001014c, 0x0001014c, 0x0001014d, 0x0001014d, 0x0001014e, 0x0001014e, 0x0001014f, 0x0001014f, 0x00010150, 0x00010150, }, + {0x00010151, 0x00010151, 0x00010152, 0x00010152, 0x00010153, 0x00010153, 0x00010154, 0x00010154, 0x00010155, 0x00010155, 0x00010156, 0x00010156, 0x00010157, 0x00010157, 0x00010158, 0x00010158, }, + {0x00010159, 0x00010159, 0x0001015a, 0x0001015a, 0x0001015b, 0x0001015b, 0x0001015c, 0x0001015c, 0x0001015d, 0x0001015d, 0x0001015e, 0x0001015e, 0x0001015f, 0x0001015f, 0x00010160, 0x00010160, }, + {0x00010161, 0x00010161, 0x00010162, 0x00010162, 0x00010163, 0x00010163, 0x00010164, 0x00010164, 0x00010165, 0x00010165, 0x00010166, 0x00010166, 0x00010167, 0x00010167, 0x00010168, 0x00010168, }, + {0x00010169, 0x00010169, 0x0001016a, 0x0001016a, 0x0001016b, 0x0001016b, 0x0001016c, 0x0001016c, 0x0001016d, 0x0001016d, 0x0001016e, 0x0001016e, 0x0001016f, 0x0001016f, 0x00010170, 0x00010170, }, + {0x00010171, 0x00010171, 0x00010172, 0x00010172, 0x00010173, 0x00010173, 0x00010174, 0x00010174, 0x00010175, 0x00010175, 0x00010176, 0x00010176, 0x00010177, 0x00010177, 0x00010178, 0x00010178, }, + {0x00010179, 0x00010179, 0x0001017a, 0x0001017a, 0x0001017b, 0x0001017b, 0x0001017c, 0x0001017c, 0x0001017d, 0x0001017d, 0x0001017e, 0x0001017e, 0x0001017f, 0x0001017f, 0x00010180, 0x00010180, }, + {0x00010181, 0x00010181, 0x00010182, 0x00010182, 0x00010183, 0x00010183, 0x00010184, 0x00010184, 0x00010185, 0x00010185, 0x00010186, 0x00010186, 0x00010187, 0x00010187, 0x00010188, 0x00010188, }, +}; + +const uint32_t c_aauiCQMFHuffEnc47[576][2] = +{ + {0x0002, 0x0003}, {0x0003, 0x0003}, {0x0005, 0x0005}, {0x0006, 0x0004}, {0x0008, 0x0006}, {0x000a, 0x0007}, {0x000c, 0x000b}, {0x000d, 0x000d}, + {0x0010, 0x0041}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, {0x0013, 0x0006}, + {0x0013, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0013, 0x000c}, {0x0013, 0x000d}, {0x0013, 0x000e}, + {0x0003, 0x0004}, {0x0003, 0x0005}, {0x0004, 0x0004}, {0x0006, 0x0005}, {0x0007, 0x0005}, {0x0009, 0x0006}, {0x000b, 0x0007}, {0x000d, 0x000e}, + {0x000f, 0x0025}, {0x000f, 0x0026}, {0x0012, 0x00f6}, {0x0013, 0x000f}, {0x0013, 0x0010}, {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, + {0x0013, 0x0014}, {0x0013, 0x0015}, {0x0013, 0x0016}, {0x0013, 0x0017}, {0x0013, 0x0018}, {0x0013, 0x0019}, {0x0013, 0x001a}, {0x0013, 0x001b}, + {0x0005, 0x0006}, {0x0004, 0x0005}, {0x0005, 0x0007}, {0x0006, 0x0006}, {0x0008, 0x0007}, {0x0009, 0x0007}, {0x000b, 0x0008}, {0x000d, 0x000f}, + {0x000f, 0x0027}, {0x0012, 0x00f7}, {0x0013, 0x001c}, {0x0013, 0x001d}, {0x0013, 0x001e}, {0x0013, 0x001f}, {0x0013, 0x0020}, {0x0013, 0x0021}, + {0x0013, 0x0022}, {0x0013, 0x0023}, {0x0013, 0x0024}, {0x0013, 0x0025}, {0x0013, 0x0026}, {0x0013, 0x0027}, {0x0013, 0x0028}, {0x0013, 0x0029}, + {0x0006, 0x0007}, {0x0006, 0x0008}, {0x0006, 0x0009}, {0x0007, 0x0006}, {0x0009, 0x0008}, {0x000a, 0x0008}, {0x000c, 0x000c}, {0x000e, 0x0017}, + {0x0010, 0x0042}, {0x0012, 0x00f8}, {0x0013, 0x002a}, {0x0013, 0x002b}, {0x0013, 0x002c}, {0x0013, 0x002d}, {0x0013, 0x002e}, {0x0013, 0x002f}, + {0x0013, 0x0030}, {0x0013, 0x0031}, {0x0013, 0x0032}, {0x0013, 0x0033}, {0x0013, 0x0034}, {0x0013, 0x0035}, {0x0013, 0x0036}, {0x0013, 0x0037}, + {0x0008, 0x0008}, {0x0007, 0x0007}, {0x0008, 0x0009}, {0x0009, 0x0009}, {0x000a, 0x0009}, {0x000b, 0x0009}, {0x000d, 0x0010}, {0x000f, 0x0028}, + {0x000f, 0x0029}, {0x0011, 0x007f}, {0x0013, 0x0038}, {0x0013, 0x0039}, {0x0013, 0x003a}, {0x0013, 0x003b}, {0x0013, 0x003c}, {0x0013, 0x003d}, + {0x0013, 0x003e}, {0x0013, 0x003f}, {0x0013, 0x0040}, {0x0013, 0x0041}, {0x0013, 0x0042}, {0x0013, 0x0043}, {0x0013, 0x0044}, {0x0013, 0x0045}, + {0x000a, 0x000a}, {0x0009, 0x000a}, {0x0009, 0x000b}, {0x000a, 0x000b}, {0x000b, 0x000a}, {0x000d, 0x0011}, {0x000f, 0x002a}, {0x0010, 0x0043}, + {0x0012, 0x00f9}, {0x0013, 0x0046}, {0x0013, 0x0047}, {0x0013, 0x0048}, {0x0013, 0x0049}, {0x0013, 0x004a}, {0x0013, 0x004b}, {0x0013, 0x004c}, + {0x0013, 0x004d}, {0x0013, 0x004e}, {0x0013, 0x004f}, {0x0013, 0x0050}, {0x0013, 0x0051}, {0x0013, 0x0052}, {0x0013, 0x0053}, {0x0013, 0x0054}, + {0x000b, 0x000b}, {0x000b, 0x000c}, {0x000b, 0x000d}, {0x000c, 0x000d}, {0x000d, 0x0012}, {0x000e, 0x0018}, {0x0010, 0x0044}, {0x0013, 0x0055}, + {0x0013, 0x0056}, {0x0013, 0x0057}, {0x0013, 0x0058}, {0x0013, 0x0059}, {0x0013, 0x005a}, {0x0013, 0x005b}, {0x0013, 0x005c}, {0x0013, 0x005d}, + {0x0013, 0x005e}, {0x0013, 0x005f}, {0x0013, 0x0060}, {0x0013, 0x0061}, {0x0013, 0x0062}, {0x0013, 0x0063}, {0x0013, 0x0064}, {0x0013, 0x0065}, + {0x000e, 0x0019}, {0x000d, 0x0013}, {0x000d, 0x0014}, {0x000d, 0x0015}, {0x000f, 0x002b}, {0x0010, 0x0045}, {0x0013, 0x0066}, {0x0012, 0x00fa}, + {0x0013, 0x0067}, {0x0013, 0x0068}, {0x0013, 0x0069}, {0x0013, 0x006a}, {0x0013, 0x006b}, {0x0013, 0x006c}, {0x0013, 0x006d}, {0x0013, 0x006e}, + {0x0013, 0x006f}, {0x0013, 0x0070}, {0x0013, 0x0071}, {0x0013, 0x0072}, {0x0013, 0x0073}, {0x0013, 0x0074}, {0x0013, 0x0075}, {0x0013, 0x0076}, + {0x0010, 0x0046}, {0x000f, 0x002c}, {0x000f, 0x002d}, {0x0010, 0x0047}, {0x0011, 0x0080}, {0x0013, 0x0077}, {0x0013, 0x0078}, {0x0013, 0x0079}, + {0x0013, 0x007a}, {0x0013, 0x007b}, {0x0013, 0x007c}, {0x0013, 0x007d}, {0x0013, 0x007e}, {0x0013, 0x007f}, {0x0013, 0x0080}, {0x0013, 0x0081}, + {0x0013, 0x0082}, {0x0013, 0x0083}, {0x0013, 0x0084}, {0x0013, 0x0085}, {0x0013, 0x0086}, {0x0013, 0x0087}, {0x0013, 0x0088}, {0x0013, 0x0089}, + {0x0013, 0x008a}, {0x0010, 0x0048}, {0x0010, 0x0049}, {0x0011, 0x0081}, {0x0013, 0x008b}, {0x0012, 0x00fb}, {0x0013, 0x008c}, {0x0013, 0x008d}, + {0x0013, 0x008e}, {0x0013, 0x008f}, {0x0013, 0x0090}, {0x0013, 0x0091}, {0x0013, 0x0092}, {0x0013, 0x0093}, {0x0013, 0x0094}, {0x0013, 0x0095}, + {0x0013, 0x0096}, {0x0013, 0x0097}, {0x0013, 0x0098}, {0x0013, 0x0099}, {0x0013, 0x009a}, {0x0013, 0x009b}, {0x0013, 0x009c}, {0x0013, 0x009d}, + {0x0013, 0x009e}, {0x0013, 0x009f}, {0x0013, 0x00a0}, {0x0012, 0x00fc}, {0x0013, 0x00a1}, {0x0013, 0x00a2}, {0x0013, 0x00a3}, {0x0013, 0x00a4}, + {0x0013, 0x00a5}, {0x0013, 0x00a6}, {0x0013, 0x00a7}, {0x0013, 0x00a8}, {0x0013, 0x00a9}, {0x0013, 0x00aa}, {0x0013, 0x00ab}, {0x0013, 0x00ac}, + {0x0013, 0x00ad}, {0x0013, 0x00ae}, {0x0013, 0x00af}, {0x0013, 0x00b0}, {0x0013, 0x00b1}, {0x0013, 0x00b2}, {0x0013, 0x00b3}, {0x0013, 0x00b4}, + {0x0013, 0x00b5}, {0x0013, 0x00b6}, {0x0013, 0x00b7}, {0x0013, 0x00b8}, {0x0013, 0x00b9}, {0x0013, 0x00ba}, {0x0013, 0x00bb}, {0x0013, 0x00bc}, + {0x0013, 0x00bd}, {0x0013, 0x00be}, {0x0013, 0x00bf}, {0x0013, 0x00c0}, {0x0013, 0x00c1}, {0x0013, 0x00c2}, {0x0013, 0x00c3}, {0x0013, 0x00c4}, + {0x0013, 0x00c5}, {0x0013, 0x00c6}, {0x0013, 0x00c7}, {0x0013, 0x00c8}, {0x0013, 0x00c9}, {0x0013, 0x00ca}, {0x0013, 0x00cb}, {0x0013, 0x00cc}, + {0x0013, 0x00cd}, {0x0013, 0x00ce}, {0x0013, 0x00cf}, {0x0013, 0x00d0}, {0x0013, 0x00d1}, {0x0013, 0x00d2}, {0x0013, 0x00d3}, {0x0013, 0x00d4}, + {0x0013, 0x00d5}, {0x0013, 0x00d6}, {0x0013, 0x00d7}, {0x0013, 0x00d8}, {0x0013, 0x00d9}, {0x0013, 0x00da}, {0x0013, 0x00db}, {0x0013, 0x00dc}, + {0x0013, 0x00dd}, {0x0013, 0x00de}, {0x0013, 0x00df}, {0x0013, 0x00e0}, {0x0013, 0x00e1}, {0x0013, 0x00e2}, {0x0013, 0x00e3}, {0x0013, 0x00e4}, + {0x0013, 0x00e5}, {0x0013, 0x00e6}, {0x0013, 0x00e7}, {0x0013, 0x00e8}, {0x0013, 0x00e9}, {0x0013, 0x00ea}, {0x0013, 0x00eb}, {0x0013, 0x00ec}, + {0x0013, 0x00ed}, {0x0013, 0x00ee}, {0x0013, 0x00ef}, {0x0013, 0x00f0}, {0x0013, 0x00f1}, {0x0013, 0x00f2}, {0x0013, 0x00f3}, {0x0013, 0x00f4}, + {0x0013, 0x00f5}, {0x0013, 0x00f6}, {0x0013, 0x00f7}, {0x0013, 0x00f8}, {0x0013, 0x00f9}, {0x0013, 0x00fa}, {0x0013, 0x00fb}, {0x0013, 0x00fc}, + {0x0013, 0x00fd}, {0x0013, 0x00fe}, {0x0013, 0x00ff}, {0x0013, 0x0100}, {0x0013, 0x0101}, {0x0013, 0x0102}, {0x0013, 0x0103}, {0x0013, 0x0104}, + {0x0013, 0x0105}, {0x0013, 0x0106}, {0x0013, 0x0107}, {0x0013, 0x0108}, {0x0013, 0x0109}, {0x0013, 0x010a}, {0x0013, 0x010b}, {0x0013, 0x010c}, + {0x0013, 0x010d}, {0x0013, 0x010e}, {0x0013, 0x010f}, {0x0013, 0x0110}, {0x0013, 0x0111}, {0x0013, 0x0112}, {0x0013, 0x0113}, {0x0013, 0x0114}, + {0x0013, 0x0115}, {0x0013, 0x0116}, {0x0013, 0x0117}, {0x0013, 0x0118}, {0x0013, 0x0119}, {0x0013, 0x011a}, {0x0013, 0x011b}, {0x0013, 0x011c}, + {0x0013, 0x011d}, {0x0013, 0x011e}, {0x0013, 0x011f}, {0x0013, 0x0120}, {0x0013, 0x0121}, {0x0013, 0x0122}, {0x0013, 0x0123}, {0x0013, 0x0124}, + {0x0013, 0x0125}, {0x0013, 0x0126}, {0x0013, 0x0127}, {0x0013, 0x0128}, {0x0013, 0x0129}, {0x0013, 0x012a}, {0x0013, 0x012b}, {0x0013, 0x012c}, + {0x0013, 0x012d}, {0x0013, 0x012e}, {0x0013, 0x012f}, {0x0013, 0x0130}, {0x0013, 0x0131}, {0x0013, 0x0132}, {0x0013, 0x0133}, {0x0013, 0x0134}, + {0x0013, 0x0135}, {0x0013, 0x0136}, {0x0013, 0x0137}, {0x0013, 0x0138}, {0x0013, 0x0139}, {0x0013, 0x013a}, {0x0013, 0x013b}, {0x0013, 0x013c}, + {0x0013, 0x013d}, {0x0013, 0x013e}, {0x0013, 0x013f}, {0x0013, 0x0140}, {0x0013, 0x0141}, {0x0013, 0x0142}, {0x0013, 0x0143}, {0x0013, 0x0144}, + {0x0013, 0x0145}, {0x0013, 0x0146}, {0x0013, 0x0147}, {0x0013, 0x0148}, {0x0013, 0x0149}, {0x0013, 0x014a}, {0x0013, 0x014b}, {0x0013, 0x014c}, + {0x0013, 0x014d}, {0x0013, 0x014e}, {0x0013, 0x014f}, {0x0013, 0x0150}, {0x0013, 0x0151}, {0x0013, 0x0152}, {0x0013, 0x0153}, {0x0013, 0x0154}, + {0x0013, 0x0155}, {0x0013, 0x0156}, {0x0013, 0x0157}, {0x0013, 0x0158}, {0x0013, 0x0159}, {0x0013, 0x015a}, {0x0013, 0x015b}, {0x0013, 0x015c}, + {0x0013, 0x015d}, {0x0013, 0x015e}, {0x0013, 0x015f}, {0x0013, 0x0160}, {0x0013, 0x0161}, {0x0013, 0x0162}, {0x0013, 0x0163}, {0x0013, 0x0164}, + {0x0013, 0x0165}, {0x0013, 0x0166}, {0x0013, 0x0167}, {0x0013, 0x0168}, {0x0013, 0x0169}, {0x0013, 0x016a}, {0x0013, 0x016b}, {0x0013, 0x016c}, + {0x0013, 0x016d}, {0x0013, 0x016e}, {0x0013, 0x016f}, {0x0013, 0x0170}, {0x0013, 0x0171}, {0x0013, 0x0172}, {0x0013, 0x0173}, {0x0013, 0x0174}, + {0x0013, 0x0175}, {0x0013, 0x0176}, {0x0013, 0x0177}, {0x0013, 0x0178}, {0x0013, 0x0179}, {0x0013, 0x017a}, {0x0013, 0x017b}, {0x0013, 0x017c}, + {0x0013, 0x017d}, {0x0013, 0x017e}, {0x0013, 0x017f}, {0x0013, 0x0180}, {0x0013, 0x0181}, {0x0013, 0x0182}, {0x0013, 0x0183}, {0x0013, 0x0184}, + {0x0013, 0x0185}, {0x0013, 0x0186}, {0x0013, 0x0187}, {0x0013, 0x0188}, {0x0013, 0x0189}, {0x0013, 0x018a}, {0x0013, 0x018b}, {0x0013, 0x018c}, + {0x0013, 0x018d}, {0x0013, 0x018e}, {0x0013, 0x018f}, {0x0013, 0x0190}, {0x0013, 0x0191}, {0x0013, 0x0192}, {0x0013, 0x0193}, {0x0013, 0x0194}, + {0x0013, 0x0195}, {0x0013, 0x0196}, {0x0013, 0x0197}, {0x0013, 0x0198}, {0x0013, 0x0199}, {0x0013, 0x019a}, {0x0013, 0x019b}, {0x0013, 0x019c}, + {0x0013, 0x019d}, {0x0013, 0x019e}, {0x0013, 0x019f}, {0x0013, 0x01a0}, {0x0013, 0x01a1}, {0x0013, 0x01a2}, {0x0013, 0x01a3}, {0x0013, 0x01a4}, + {0x0013, 0x01a5}, {0x0013, 0x01a6}, {0x0013, 0x01a7}, {0x0013, 0x01a8}, {0x0013, 0x01a9}, {0x0013, 0x01aa}, {0x0013, 0x01ab}, {0x0013, 0x01ac}, + {0x0013, 0x01ad}, {0x0013, 0x01ae}, {0x0013, 0x01af}, {0x0013, 0x01b0}, {0x0013, 0x01b1}, {0x0013, 0x01b2}, {0x0013, 0x01b3}, {0x0013, 0x01b4}, + {0x0013, 0x01b5}, {0x0013, 0x01b6}, {0x0013, 0x01b7}, {0x0013, 0x01b8}, {0x0013, 0x01b9}, {0x0013, 0x01ba}, {0x0013, 0x01bb}, {0x0013, 0x01bc}, + {0x0013, 0x01bd}, {0x0013, 0x01be}, {0x0013, 0x01bf}, {0x0013, 0x01c0}, {0x0013, 0x01c1}, {0x0013, 0x01c2}, {0x0013, 0x01c3}, {0x0013, 0x01c4}, + {0x0013, 0x01c5}, {0x0013, 0x01c6}, {0x0013, 0x01c7}, {0x0013, 0x01c8}, {0x0013, 0x01c9}, {0x0013, 0x01ca}, {0x0013, 0x01cb}, {0x0013, 0x01cc}, + {0x0013, 0x01cd}, {0x0013, 0x01ce}, {0x0013, 0x01cf}, {0x0013, 0x01d0}, {0x0013, 0x01d1}, {0x0013, 0x01d2}, {0x0013, 0x01d3}, {0x0013, 0x01d4}, + {0x0013, 0x01d5}, {0x0013, 0x01d6}, {0x0013, 0x01d7}, {0x0013, 0x01d8}, {0x0013, 0x01d9}, {0x0013, 0x01da}, {0x0013, 0x01db}, {0x0013, 0x01dc}, + {0x0013, 0x01dd}, {0x0013, 0x01de}, {0x0013, 0x01df}, {0x0013, 0x01e0}, {0x0013, 0x01e1}, {0x0013, 0x01e2}, {0x0013, 0x01e3}, {0x0013, 0x01e4}, + {0x0013, 0x01e5}, {0x0013, 0x01e6}, {0x0013, 0x01e7}, {0x0013, 0x01e8}, {0x0013, 0x01e9}, {0x0013, 0x01ea}, {0x0013, 0x01eb}, {0x0012, 0x00fd}, +}; + +const uint32_t c_aauiCQMFHuffDec47[87][16] = +{ + {0x0004ffff, 0x0003ffff, 0x0001ffff, 0x0002ffff, 0x0000001a, 0x00000031, 0x00010001, 0x00010001, 0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x00020000, 0x00020000, 0x00020000, 0x00020000, }, + {0x00020049, 0x00020049, 0x00020049, 0x00020049, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, }, + {0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, }, + {0x00020003, 0x00020003, 0x00020003, 0x00020003, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x00020033, 0x00020033, 0x00020033, 0x00020033, 0x00020048, 0x00020048, 0x00020048, 0x00020048, }, + {0x000affff, 0x0008ffff, 0x0009ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x00000004, 0x00000034, 0x00000060, 0x00000062, 0x0001001c, 0x0001001c, 0x0001004b, 0x0001004b, 0x00010061, 0x00010061, }, + {0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, }, + {0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, }, + {0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, }, + {0x00010036, 0x00010036, 0x00010065, 0x00010065, 0x0001007c, 0x0001007c, 0x00010090, 0x00010090, 0x00010091, 0x00010091, 0x00010092, 0x00010092, 0x00020005, 0x00020005, 0x00020005, 0x00020005, }, + {0x0002004d, 0x0002004d, 0x0002004d, 0x0002004d, 0x00020064, 0x00020064, 0x00020064, 0x00020064, 0x00020078, 0x00020078, 0x00020078, 0x00020078, 0x0002007b, 0x0002007b, 0x0002007b, 0x0002007b, }, + {0x0017ffff, 0x0028ffff, 0x0039ffff, 0x0012ffff, 0x0011ffff, 0x0010ffff, 0x000bffff, 0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x00000006, 0x0000004e, 0x00000093, 0x0001001e, 0x0001001e, }, + {0x00020095, 0x00020095, 0x00020095, 0x00020095, 0x000200a8, 0x000200a8, 0x000200a8, 0x000200a8, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, }, + {0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, }, + {0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, }, + {0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, }, + {0x000300aa, 0x000300aa, 0x000300aa, 0x000300aa, 0x000300aa, 0x000300aa, 0x000300aa, 0x000300aa, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, }, + {0x00010067, 0x00010067, 0x00010068, 0x00010068, 0x0001007e, 0x0001007e, 0x000100ac, 0x000100ac, 0x000100c1, 0x000100c1, 0x000100c2, 0x000100c2, 0x0002004f, 0x0002004f, 0x0002004f, 0x0002004f, }, + {0x0014ffff, 0x00000008, 0x00000050, 0x0000007f, 0x00000096, 0x000000ad, 0x000000c0, 0x000000c3, 0x000000d9, 0x000000da, 0x00010020, 0x00010020, 0x00010021, 0x00010021, 0x00010038, 0x00010038, }, + {0x004affff, 0x004bffff, 0x004cffff, 0x004dffff, 0x004effff, 0x004fffff, 0x0050ffff, 0x0051ffff, 0x0052ffff, 0x0053ffff, 0x0054ffff, 0x0055ffff, 0x0056ffff, 0x0016ffff, 0x0015ffff, 0x0013ffff, }, + {0x000200f3, 0x000200f3, 0x000200f3, 0x000200f3, 0x0002023f, 0x0002023f, 0x0002023f, 0x0002023f, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, }, + {0x000300c4, 0x000300c4, 0x000300c4, 0x000300c4, 0x000300c4, 0x000300c4, 0x000300c4, 0x000300c4, 0x000300db, 0x000300db, 0x000300db, 0x000300db, 0x000300db, 0x000300db, 0x000300db, 0x000300db, }, + {0x00020051, 0x00020051, 0x00020051, 0x00020051, 0x00020080, 0x00020080, 0x00020080, 0x00020080, 0x000200af, 0x000200af, 0x000200af, 0x000200af, 0x000200dd, 0x000200dd, 0x000200dd, 0x000200dd, }, + {0x0001023b, 0x0001023b, 0x0001023c, 0x0001023c, 0x0001023d, 0x0001023d, 0x0001023e, 0x0001023e, 0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x00020039, 0x00020039, 0x00020039, 0x00020039, }, + {0x001bffff, 0x001affff, 0x001dffff, 0x001cffff, 0x0020ffff, 0x0018ffff, 0x0019ffff, 0x001effff, 0x001fffff, 0x0021ffff, 0x0022ffff, 0x0023ffff, 0x0024ffff, 0x0025ffff, 0x0026ffff, 0x0027ffff, }, + {0x00010046, 0x00010046, 0x00010047, 0x00010047, 0x00010052, 0x00010052, 0x00010053, 0x00010053, 0x00010054, 0x00010054, 0x00010055, 0x00010055, 0x00010056, 0x00010056, 0x00010057, 0x00010057, }, + {0x00010058, 0x00010058, 0x00010059, 0x00010059, 0x0001005a, 0x0001005a, 0x0001005b, 0x0001005b, 0x0001005c, 0x0001005c, 0x0001005d, 0x0001005d, 0x0001005e, 0x0001005e, 0x0001005f, 0x0001005f, }, + {0x00010011, 0x00010011, 0x00010012, 0x00010012, 0x00010013, 0x00010013, 0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010023, 0x00010023, }, + {0x00010009, 0x00010009, 0x0001000a, 0x0001000a, 0x0001000b, 0x0001000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, 0x00010010, 0x00010010, }, + {0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, 0x0001002e, 0x0001002e, 0x0001002f, 0x0001002f, 0x0001003a, 0x0001003a, 0x0001003b, 0x0001003b, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, }, + {0x00010024, 0x00010024, 0x00010025, 0x00010025, 0x00010026, 0x00010026, 0x00010027, 0x00010027, 0x00010028, 0x00010028, 0x00010029, 0x00010029, 0x0001002a, 0x0001002a, 0x0001002b, 0x0001002b, }, + {0x0001006a, 0x0001006a, 0x0001006b, 0x0001006b, 0x0001006c, 0x0001006c, 0x0001006d, 0x0001006d, 0x0001006e, 0x0001006e, 0x0001006f, 0x0001006f, 0x00010070, 0x00010070, 0x00010071, 0x00010071, }, + {0x00010072, 0x00010072, 0x00010073, 0x00010073, 0x00010074, 0x00010074, 0x00010075, 0x00010075, 0x00010076, 0x00010076, 0x00010077, 0x00010077, 0x00010081, 0x00010081, 0x00010082, 0x00010082, }, + {0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x00010040, 0x00010040, 0x00010041, 0x00010041, 0x00010042, 0x00010042, 0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, }, + {0x00010083, 0x00010083, 0x00010084, 0x00010084, 0x00010085, 0x00010085, 0x00010086, 0x00010086, 0x00010087, 0x00010087, 0x00010088, 0x00010088, 0x00010089, 0x00010089, 0x0001008a, 0x0001008a, }, + {0x0001008b, 0x0001008b, 0x0001008c, 0x0001008c, 0x0001008d, 0x0001008d, 0x0001008e, 0x0001008e, 0x0001008f, 0x0001008f, 0x00010097, 0x00010097, 0x00010098, 0x00010098, 0x00010099, 0x00010099, }, + {0x0001009a, 0x0001009a, 0x0001009b, 0x0001009b, 0x0001009c, 0x0001009c, 0x0001009d, 0x0001009d, 0x0001009e, 0x0001009e, 0x0001009f, 0x0001009f, 0x000100a0, 0x000100a0, 0x000100a1, 0x000100a1, }, + {0x000100a2, 0x000100a2, 0x000100a3, 0x000100a3, 0x000100a4, 0x000100a4, 0x000100a5, 0x000100a5, 0x000100a6, 0x000100a6, 0x000100a7, 0x000100a7, 0x000100ae, 0x000100ae, 0x000100b0, 0x000100b0, }, + {0x000100b1, 0x000100b1, 0x000100b2, 0x000100b2, 0x000100b3, 0x000100b3, 0x000100b4, 0x000100b4, 0x000100b5, 0x000100b5, 0x000100b6, 0x000100b6, 0x000100b7, 0x000100b7, 0x000100b8, 0x000100b8, }, + {0x000100b9, 0x000100b9, 0x000100ba, 0x000100ba, 0x000100bb, 0x000100bb, 0x000100bc, 0x000100bc, 0x000100bd, 0x000100bd, 0x000100be, 0x000100be, 0x000100bf, 0x000100bf, 0x000100c5, 0x000100c5, }, + {0x000100c6, 0x000100c6, 0x000100c7, 0x000100c7, 0x000100c8, 0x000100c8, 0x000100c9, 0x000100c9, 0x000100ca, 0x000100ca, 0x000100cb, 0x000100cb, 0x000100cc, 0x000100cc, 0x000100cd, 0x000100cd, }, + {0x0029ffff, 0x002affff, 0x002bffff, 0x002cffff, 0x002dffff, 0x002effff, 0x002fffff, 0x0030ffff, 0x0031ffff, 0x0032ffff, 0x0033ffff, 0x0034ffff, 0x0035ffff, 0x0036ffff, 0x0037ffff, 0x0038ffff, }, + {0x000100ce, 0x000100ce, 0x000100cf, 0x000100cf, 0x000100d0, 0x000100d0, 0x000100d1, 0x000100d1, 0x000100d2, 0x000100d2, 0x000100d3, 0x000100d3, 0x000100d4, 0x000100d4, 0x000100d5, 0x000100d5, }, + {0x000100d6, 0x000100d6, 0x000100d7, 0x000100d7, 0x000100d8, 0x000100d8, 0x000100dc, 0x000100dc, 0x000100de, 0x000100de, 0x000100df, 0x000100df, 0x000100e0, 0x000100e0, 0x000100e1, 0x000100e1, }, + {0x000100e2, 0x000100e2, 0x000100e3, 0x000100e3, 0x000100e4, 0x000100e4, 0x000100e5, 0x000100e5, 0x000100e6, 0x000100e6, 0x000100e7, 0x000100e7, 0x000100e8, 0x000100e8, 0x000100e9, 0x000100e9, }, + {0x000100ea, 0x000100ea, 0x000100eb, 0x000100eb, 0x000100ec, 0x000100ec, 0x000100ed, 0x000100ed, 0x000100ee, 0x000100ee, 0x000100ef, 0x000100ef, 0x000100f0, 0x000100f0, 0x000100f1, 0x000100f1, }, + {0x000100f2, 0x000100f2, 0x000100f4, 0x000100f4, 0x000100f5, 0x000100f5, 0x000100f6, 0x000100f6, 0x000100f7, 0x000100f7, 0x000100f8, 0x000100f8, 0x000100f9, 0x000100f9, 0x000100fa, 0x000100fa, }, + {0x000100fb, 0x000100fb, 0x000100fc, 0x000100fc, 0x000100fd, 0x000100fd, 0x000100fe, 0x000100fe, 0x000100ff, 0x000100ff, 0x00010100, 0x00010100, 0x00010101, 0x00010101, 0x00010102, 0x00010102, }, + {0x00010103, 0x00010103, 0x00010104, 0x00010104, 0x00010105, 0x00010105, 0x00010106, 0x00010106, 0x00010107, 0x00010107, 0x00010108, 0x00010108, 0x00010109, 0x00010109, 0x0001010a, 0x0001010a, }, + {0x0001010b, 0x0001010b, 0x0001010c, 0x0001010c, 0x0001010d, 0x0001010d, 0x0001010e, 0x0001010e, 0x0001010f, 0x0001010f, 0x00010110, 0x00010110, 0x00010111, 0x00010111, 0x00010112, 0x00010112, }, + {0x00010113, 0x00010113, 0x00010114, 0x00010114, 0x00010115, 0x00010115, 0x00010116, 0x00010116, 0x00010117, 0x00010117, 0x00010118, 0x00010118, 0x00010119, 0x00010119, 0x0001011a, 0x0001011a, }, + {0x0001011b, 0x0001011b, 0x0001011c, 0x0001011c, 0x0001011d, 0x0001011d, 0x0001011e, 0x0001011e, 0x0001011f, 0x0001011f, 0x00010120, 0x00010120, 0x00010121, 0x00010121, 0x00010122, 0x00010122, }, + {0x00010123, 0x00010123, 0x00010124, 0x00010124, 0x00010125, 0x00010125, 0x00010126, 0x00010126, 0x00010127, 0x00010127, 0x00010128, 0x00010128, 0x00010129, 0x00010129, 0x0001012a, 0x0001012a, }, + {0x0001012b, 0x0001012b, 0x0001012c, 0x0001012c, 0x0001012d, 0x0001012d, 0x0001012e, 0x0001012e, 0x0001012f, 0x0001012f, 0x00010130, 0x00010130, 0x00010131, 0x00010131, 0x00010132, 0x00010132, }, + {0x00010133, 0x00010133, 0x00010134, 0x00010134, 0x00010135, 0x00010135, 0x00010136, 0x00010136, 0x00010137, 0x00010137, 0x00010138, 0x00010138, 0x00010139, 0x00010139, 0x0001013a, 0x0001013a, }, + {0x0001013b, 0x0001013b, 0x0001013c, 0x0001013c, 0x0001013d, 0x0001013d, 0x0001013e, 0x0001013e, 0x0001013f, 0x0001013f, 0x00010140, 0x00010140, 0x00010141, 0x00010141, 0x00010142, 0x00010142, }, + {0x00010143, 0x00010143, 0x00010144, 0x00010144, 0x00010145, 0x00010145, 0x00010146, 0x00010146, 0x00010147, 0x00010147, 0x00010148, 0x00010148, 0x00010149, 0x00010149, 0x0001014a, 0x0001014a, }, + {0x0001014b, 0x0001014b, 0x0001014c, 0x0001014c, 0x0001014d, 0x0001014d, 0x0001014e, 0x0001014e, 0x0001014f, 0x0001014f, 0x00010150, 0x00010150, 0x00010151, 0x00010151, 0x00010152, 0x00010152, }, + {0x003affff, 0x003bffff, 0x003cffff, 0x003dffff, 0x003effff, 0x003fffff, 0x0040ffff, 0x0041ffff, 0x0042ffff, 0x0043ffff, 0x0044ffff, 0x0045ffff, 0x0046ffff, 0x0047ffff, 0x0048ffff, 0x0049ffff, }, + {0x00010153, 0x00010153, 0x00010154, 0x00010154, 0x00010155, 0x00010155, 0x00010156, 0x00010156, 0x00010157, 0x00010157, 0x00010158, 0x00010158, 0x00010159, 0x00010159, 0x0001015a, 0x0001015a, }, + {0x0001015b, 0x0001015b, 0x0001015c, 0x0001015c, 0x0001015d, 0x0001015d, 0x0001015e, 0x0001015e, 0x0001015f, 0x0001015f, 0x00010160, 0x00010160, 0x00010161, 0x00010161, 0x00010162, 0x00010162, }, + {0x00010163, 0x00010163, 0x00010164, 0x00010164, 0x00010165, 0x00010165, 0x00010166, 0x00010166, 0x00010167, 0x00010167, 0x00010168, 0x00010168, 0x00010169, 0x00010169, 0x0001016a, 0x0001016a, }, + {0x0001016b, 0x0001016b, 0x0001016c, 0x0001016c, 0x0001016d, 0x0001016d, 0x0001016e, 0x0001016e, 0x0001016f, 0x0001016f, 0x00010170, 0x00010170, 0x00010171, 0x00010171, 0x00010172, 0x00010172, }, + {0x00010173, 0x00010173, 0x00010174, 0x00010174, 0x00010175, 0x00010175, 0x00010176, 0x00010176, 0x00010177, 0x00010177, 0x00010178, 0x00010178, 0x00010179, 0x00010179, 0x0001017a, 0x0001017a, }, + {0x0001017b, 0x0001017b, 0x0001017c, 0x0001017c, 0x0001017d, 0x0001017d, 0x0001017e, 0x0001017e, 0x0001017f, 0x0001017f, 0x00010180, 0x00010180, 0x00010181, 0x00010181, 0x00010182, 0x00010182, }, + {0x00010183, 0x00010183, 0x00010184, 0x00010184, 0x00010185, 0x00010185, 0x00010186, 0x00010186, 0x00010187, 0x00010187, 0x00010188, 0x00010188, 0x00010189, 0x00010189, 0x0001018a, 0x0001018a, }, + {0x0001018b, 0x0001018b, 0x0001018c, 0x0001018c, 0x0001018d, 0x0001018d, 0x0001018e, 0x0001018e, 0x0001018f, 0x0001018f, 0x00010190, 0x00010190, 0x00010191, 0x00010191, 0x00010192, 0x00010192, }, + {0x00010193, 0x00010193, 0x00010194, 0x00010194, 0x00010195, 0x00010195, 0x00010196, 0x00010196, 0x00010197, 0x00010197, 0x00010198, 0x00010198, 0x00010199, 0x00010199, 0x0001019a, 0x0001019a, }, + {0x0001019b, 0x0001019b, 0x0001019c, 0x0001019c, 0x0001019d, 0x0001019d, 0x0001019e, 0x0001019e, 0x0001019f, 0x0001019f, 0x000101a0, 0x000101a0, 0x000101a1, 0x000101a1, 0x000101a2, 0x000101a2, }, + {0x000101a3, 0x000101a3, 0x000101a4, 0x000101a4, 0x000101a5, 0x000101a5, 0x000101a6, 0x000101a6, 0x000101a7, 0x000101a7, 0x000101a8, 0x000101a8, 0x000101a9, 0x000101a9, 0x000101aa, 0x000101aa, }, + {0x000101ab, 0x000101ab, 0x000101ac, 0x000101ac, 0x000101ad, 0x000101ad, 0x000101ae, 0x000101ae, 0x000101af, 0x000101af, 0x000101b0, 0x000101b0, 0x000101b1, 0x000101b1, 0x000101b2, 0x000101b2, }, + {0x000101b3, 0x000101b3, 0x000101b4, 0x000101b4, 0x000101b5, 0x000101b5, 0x000101b6, 0x000101b6, 0x000101b7, 0x000101b7, 0x000101b8, 0x000101b8, 0x000101b9, 0x000101b9, 0x000101ba, 0x000101ba, }, + {0x000101bb, 0x000101bb, 0x000101bc, 0x000101bc, 0x000101bd, 0x000101bd, 0x000101be, 0x000101be, 0x000101bf, 0x000101bf, 0x000101c0, 0x000101c0, 0x000101c1, 0x000101c1, 0x000101c2, 0x000101c2, }, + {0x000101c3, 0x000101c3, 0x000101c4, 0x000101c4, 0x000101c5, 0x000101c5, 0x000101c6, 0x000101c6, 0x000101c7, 0x000101c7, 0x000101c8, 0x000101c8, 0x000101c9, 0x000101c9, 0x000101ca, 0x000101ca, }, + {0x000101cb, 0x000101cb, 0x000101cc, 0x000101cc, 0x000101cd, 0x000101cd, 0x000101ce, 0x000101ce, 0x000101cf, 0x000101cf, 0x000101d0, 0x000101d0, 0x000101d1, 0x000101d1, 0x000101d2, 0x000101d2, }, + {0x000101d3, 0x000101d3, 0x000101d4, 0x000101d4, 0x000101d5, 0x000101d5, 0x000101d6, 0x000101d6, 0x000101d7, 0x000101d7, 0x000101d8, 0x000101d8, 0x000101d9, 0x000101d9, 0x000101da, 0x000101da, }, + {0x000101db, 0x000101db, 0x000101dc, 0x000101dc, 0x000101dd, 0x000101dd, 0x000101de, 0x000101de, 0x000101df, 0x000101df, 0x000101e0, 0x000101e0, 0x000101e1, 0x000101e1, 0x000101e2, 0x000101e2, }, + {0x000101e3, 0x000101e3, 0x000101e4, 0x000101e4, 0x000101e5, 0x000101e5, 0x000101e6, 0x000101e6, 0x000101e7, 0x000101e7, 0x000101e8, 0x000101e8, 0x000101e9, 0x000101e9, 0x000101ea, 0x000101ea, }, + {0x000101eb, 0x000101eb, 0x000101ec, 0x000101ec, 0x000101ed, 0x000101ed, 0x000101ee, 0x000101ee, 0x000101ef, 0x000101ef, 0x000101f0, 0x000101f0, 0x000101f1, 0x000101f1, 0x000101f2, 0x000101f2, }, + {0x000101f3, 0x000101f3, 0x000101f4, 0x000101f4, 0x000101f5, 0x000101f5, 0x000101f6, 0x000101f6, 0x000101f7, 0x000101f7, 0x000101f8, 0x000101f8, 0x000101f9, 0x000101f9, 0x000101fa, 0x000101fa, }, + {0x000101fb, 0x000101fb, 0x000101fc, 0x000101fc, 0x000101fd, 0x000101fd, 0x000101fe, 0x000101fe, 0x000101ff, 0x000101ff, 0x00010200, 0x00010200, 0x00010201, 0x00010201, 0x00010202, 0x00010202, }, + {0x00010203, 0x00010203, 0x00010204, 0x00010204, 0x00010205, 0x00010205, 0x00010206, 0x00010206, 0x00010207, 0x00010207, 0x00010208, 0x00010208, 0x00010209, 0x00010209, 0x0001020a, 0x0001020a, }, + {0x0001020b, 0x0001020b, 0x0001020c, 0x0001020c, 0x0001020d, 0x0001020d, 0x0001020e, 0x0001020e, 0x0001020f, 0x0001020f, 0x00010210, 0x00010210, 0x00010211, 0x00010211, 0x00010212, 0x00010212, }, + {0x00010213, 0x00010213, 0x00010214, 0x00010214, 0x00010215, 0x00010215, 0x00010216, 0x00010216, 0x00010217, 0x00010217, 0x00010218, 0x00010218, 0x00010219, 0x00010219, 0x0001021a, 0x0001021a, }, + {0x0001021b, 0x0001021b, 0x0001021c, 0x0001021c, 0x0001021d, 0x0001021d, 0x0001021e, 0x0001021e, 0x0001021f, 0x0001021f, 0x00010220, 0x00010220, 0x00010221, 0x00010221, 0x00010222, 0x00010222, }, + {0x00010223, 0x00010223, 0x00010224, 0x00010224, 0x00010225, 0x00010225, 0x00010226, 0x00010226, 0x00010227, 0x00010227, 0x00010228, 0x00010228, 0x00010229, 0x00010229, 0x0001022a, 0x0001022a, }, + {0x0001022b, 0x0001022b, 0x0001022c, 0x0001022c, 0x0001022d, 0x0001022d, 0x0001022e, 0x0001022e, 0x0001022f, 0x0001022f, 0x00010230, 0x00010230, 0x00010231, 0x00010231, 0x00010232, 0x00010232, }, + {0x00010233, 0x00010233, 0x00010234, 0x00010234, 0x00010235, 0x00010235, 0x00010236, 0x00010236, 0x00010237, 0x00010237, 0x00010238, 0x00010238, 0x00010239, 0x00010239, 0x0001023a, 0x0001023a, }, +}; + +const uint32_t c_aauiCQMFHuffEnc48[729][2] = +{ + {0x0002, 0x0003}, {0x0003, 0x0003}, {0x0005, 0x0006}, {0x0006, 0x0006}, {0x0008, 0x0006}, {0x0009, 0x0007}, {0x000b, 0x000b}, {0x000c, 0x000d}, + {0x000f, 0x0030}, {0x0010, 0x0055}, {0x0012, 0x0136}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, + {0x0013, 0x0005}, {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0013, 0x000c}, + {0x0013, 0x000d}, {0x0013, 0x000e}, {0x0013, 0x000f}, {0x0003, 0x0004}, {0x0003, 0x0005}, {0x0005, 0x0007}, {0x0006, 0x0007}, {0x0007, 0x0007}, + {0x0008, 0x0007}, {0x000a, 0x0008}, {0x000c, 0x000e}, {0x000d, 0x0012}, {0x000f, 0x0031}, {0x0011, 0x00a0}, {0x0013, 0x0010}, {0x0013, 0x0011}, + {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0013, 0x0014}, {0x0013, 0x0015}, {0x0013, 0x0016}, {0x0013, 0x0017}, {0x0013, 0x0018}, {0x0013, 0x0019}, + {0x0013, 0x001a}, {0x0013, 0x001b}, {0x0013, 0x001c}, {0x0013, 0x001d}, {0x0013, 0x001e}, {0x0013, 0x001f}, {0x0005, 0x0008}, {0x0004, 0x0005}, + {0x0005, 0x0009}, {0x0006, 0x0008}, {0x0007, 0x0008}, {0x0008, 0x0008}, {0x000a, 0x0009}, {0x000c, 0x000f}, {0x000d, 0x0013}, {0x000f, 0x0032}, + {0x0011, 0x00a1}, {0x0013, 0x0020}, {0x0013, 0x0021}, {0x0013, 0x0022}, {0x0013, 0x0023}, {0x0013, 0x0024}, {0x0013, 0x0025}, {0x0013, 0x0026}, + {0x0013, 0x0027}, {0x0013, 0x0028}, {0x0013, 0x0029}, {0x0013, 0x002a}, {0x0013, 0x002b}, {0x0013, 0x002c}, {0x0013, 0x002d}, {0x0013, 0x002e}, + {0x0013, 0x002f}, {0x0006, 0x0009}, {0x0006, 0x000a}, {0x0006, 0x000b}, {0x0007, 0x0009}, {0x0008, 0x0009}, {0x0009, 0x0008}, {0x000b, 0x000c}, + {0x000d, 0x0014}, {0x000e, 0x001d}, {0x000f, 0x0033}, {0x0012, 0x0137}, {0x0013, 0x0030}, {0x0013, 0x0031}, {0x0013, 0x0032}, {0x0013, 0x0033}, + {0x0013, 0x0034}, {0x0013, 0x0035}, {0x0013, 0x0036}, {0x0013, 0x0037}, {0x0013, 0x0038}, {0x0013, 0x0039}, {0x0013, 0x003a}, {0x0013, 0x003b}, + {0x0013, 0x003c}, {0x0013, 0x003d}, {0x0013, 0x003e}, {0x0013, 0x003f}, {0x0008, 0x000a}, {0x0007, 0x000a}, {0x0007, 0x000b}, {0x0008, 0x000b}, + {0x0009, 0x0009}, {0x000a, 0x000a}, {0x000c, 0x0010}, {0x000d, 0x0015}, {0x000f, 0x0034}, {0x0010, 0x0056}, {0x0012, 0x0138}, {0x0013, 0x0040}, + {0x0013, 0x0041}, {0x0013, 0x0042}, {0x0013, 0x0043}, {0x0013, 0x0044}, {0x0013, 0x0045}, {0x0013, 0x0046}, {0x0013, 0x0047}, {0x0013, 0x0048}, + {0x0013, 0x0049}, {0x0013, 0x004a}, {0x0013, 0x004b}, {0x0013, 0x004c}, {0x0013, 0x004d}, {0x0013, 0x004e}, {0x0013, 0x004f}, {0x0009, 0x000a}, + {0x0008, 0x000c}, {0x0008, 0x000d}, {0x0009, 0x000b}, {0x000a, 0x000b}, {0x000c, 0x0011}, {0x000d, 0x0016}, {0x000e, 0x001e}, {0x0010, 0x0057}, + {0x0011, 0x00a2}, {0x0011, 0x00a3}, {0x0013, 0x0050}, {0x0013, 0x0051}, {0x0013, 0x0052}, {0x0013, 0x0053}, {0x0013, 0x0054}, {0x0013, 0x0055}, + {0x0013, 0x0056}, {0x0013, 0x0057}, {0x0013, 0x0058}, {0x0013, 0x0059}, {0x0013, 0x005a}, {0x0013, 0x005b}, {0x0013, 0x005c}, {0x0013, 0x005d}, + {0x0013, 0x005e}, {0x0013, 0x005f}, {0x000b, 0x000d}, {0x000a, 0x000c}, {0x000a, 0x000d}, {0x000b, 0x000e}, {0x000c, 0x0012}, {0x000d, 0x0017}, + {0x000e, 0x001f}, {0x0010, 0x0058}, {0x0012, 0x0139}, {0x0011, 0x00a4}, {0x0012, 0x013a}, {0x0013, 0x0060}, {0x0013, 0x0061}, {0x0013, 0x0062}, + {0x0013, 0x0063}, {0x0013, 0x0064}, {0x0013, 0x0065}, {0x0013, 0x0066}, {0x0013, 0x0067}, {0x0013, 0x0068}, {0x0013, 0x0069}, {0x0013, 0x006a}, + {0x0013, 0x006b}, {0x0013, 0x006c}, {0x0013, 0x006d}, {0x0013, 0x006e}, {0x0013, 0x006f}, {0x000c, 0x0013}, {0x000b, 0x000f}, {0x000c, 0x0014}, + {0x000c, 0x0015}, {0x000d, 0x0018}, {0x000e, 0x0020}, {0x000f, 0x0035}, {0x0012, 0x013b}, {0x0013, 0x0070}, {0x0013, 0x0071}, {0x0013, 0x0072}, + {0x0013, 0x0073}, {0x0013, 0x0074}, {0x0013, 0x0075}, {0x0013, 0x0076}, {0x0013, 0x0077}, {0x0013, 0x0078}, {0x0013, 0x0079}, {0x0013, 0x007a}, + {0x0013, 0x007b}, {0x0013, 0x007c}, {0x0013, 0x007d}, {0x0013, 0x007e}, {0x0013, 0x007f}, {0x0013, 0x0080}, {0x0013, 0x0081}, {0x0013, 0x0082}, + {0x000e, 0x0021}, {0x000d, 0x0019}, {0x000e, 0x0022}, {0x000e, 0x0023}, {0x000f, 0x0036}, {0x0010, 0x0059}, {0x0011, 0x00a5}, {0x0013, 0x0083}, + {0x0011, 0x00a6}, {0x0012, 0x013c}, {0x0013, 0x0084}, {0x0013, 0x0085}, {0x0013, 0x0086}, {0x0013, 0x0087}, {0x0013, 0x0088}, {0x0013, 0x0089}, + {0x0013, 0x008a}, {0x0013, 0x008b}, {0x0013, 0x008c}, {0x0013, 0x008d}, {0x0013, 0x008e}, {0x0013, 0x008f}, {0x0013, 0x0090}, {0x0013, 0x0091}, + {0x0013, 0x0092}, {0x0013, 0x0093}, {0x0013, 0x0094}, {0x0010, 0x005a}, {0x000f, 0x0037}, {0x000f, 0x0038}, {0x000f, 0x0039}, {0x0010, 0x005b}, + {0x0010, 0x005c}, {0x0013, 0x0095}, {0x0011, 0x00a7}, {0x0013, 0x0096}, {0x0013, 0x0097}, {0x0013, 0x0098}, {0x0013, 0x0099}, {0x0013, 0x009a}, + {0x0013, 0x009b}, {0x0013, 0x009c}, {0x0013, 0x009d}, {0x0013, 0x009e}, {0x0013, 0x009f}, {0x0013, 0x00a0}, {0x0013, 0x00a1}, {0x0013, 0x00a2}, + {0x0013, 0x00a3}, {0x0013, 0x00a4}, {0x0013, 0x00a5}, {0x0013, 0x00a6}, {0x0013, 0x00a7}, {0x0013, 0x00a8}, {0x0010, 0x005d}, {0x0010, 0x005e}, + {0x0013, 0x00a9}, {0x0010, 0x005f}, {0x0013, 0x00aa}, {0x0012, 0x013d}, {0x0013, 0x00ab}, {0x0013, 0x00ac}, {0x0013, 0x00ad}, {0x0013, 0x00ae}, + {0x0013, 0x00af}, {0x0013, 0x00b0}, {0x0013, 0x00b1}, {0x0013, 0x00b2}, {0x0013, 0x00b3}, {0x0013, 0x00b4}, {0x0013, 0x00b5}, {0x0013, 0x00b6}, + {0x0013, 0x00b7}, {0x0013, 0x00b8}, {0x0013, 0x00b9}, {0x0013, 0x00ba}, {0x0013, 0x00bb}, {0x0013, 0x00bc}, {0x0013, 0x00bd}, {0x0013, 0x00be}, + {0x0013, 0x00bf}, {0x0013, 0x00c0}, {0x0011, 0x00a8}, {0x0013, 0x00c1}, {0x0011, 0x00a9}, {0x0013, 0x00c2}, {0x0013, 0x00c3}, {0x0013, 0x00c4}, + {0x0013, 0x00c5}, {0x0013, 0x00c6}, {0x0013, 0x00c7}, {0x0013, 0x00c8}, {0x0013, 0x00c9}, {0x0013, 0x00ca}, {0x0013, 0x00cb}, {0x0013, 0x00cc}, + {0x0013, 0x00cd}, {0x0013, 0x00ce}, {0x0013, 0x00cf}, {0x0013, 0x00d0}, {0x0013, 0x00d1}, {0x0013, 0x00d2}, {0x0013, 0x00d3}, {0x0013, 0x00d4}, + {0x0013, 0x00d5}, {0x0013, 0x00d6}, {0x0013, 0x00d7}, {0x0013, 0x00d8}, {0x0013, 0x00d9}, {0x0013, 0x00da}, {0x0012, 0x013e}, {0x0013, 0x00db}, + {0x0013, 0x00dc}, {0x0013, 0x00dd}, {0x0013, 0x00de}, {0x0013, 0x00df}, {0x0013, 0x00e0}, {0x0013, 0x00e1}, {0x0013, 0x00e2}, {0x0013, 0x00e3}, + {0x0013, 0x00e4}, {0x0013, 0x00e5}, {0x0013, 0x00e6}, {0x0013, 0x00e7}, {0x0013, 0x00e8}, {0x0013, 0x00e9}, {0x0013, 0x00ea}, {0x0013, 0x00eb}, + {0x0013, 0x00ec}, {0x0013, 0x00ed}, {0x0013, 0x00ee}, {0x0013, 0x00ef}, {0x0013, 0x00f0}, {0x0013, 0x00f1}, {0x0013, 0x00f2}, {0x0013, 0x00f3}, + {0x0013, 0x00f4}, {0x0013, 0x00f5}, {0x0013, 0x00f6}, {0x0013, 0x00f7}, {0x0013, 0x00f8}, {0x0013, 0x00f9}, {0x0013, 0x00fa}, {0x0013, 0x00fb}, + {0x0013, 0x00fc}, {0x0013, 0x00fd}, {0x0013, 0x00fe}, {0x0013, 0x00ff}, {0x0013, 0x0100}, {0x0013, 0x0101}, {0x0013, 0x0102}, {0x0013, 0x0103}, + {0x0013, 0x0104}, {0x0013, 0x0105}, {0x0013, 0x0106}, {0x0013, 0x0107}, {0x0013, 0x0108}, {0x0013, 0x0109}, {0x0013, 0x010a}, {0x0013, 0x010b}, + {0x0013, 0x010c}, {0x0013, 0x010d}, {0x0013, 0x010e}, {0x0013, 0x010f}, {0x0013, 0x0110}, {0x0013, 0x0111}, {0x0013, 0x0112}, {0x0013, 0x0113}, + {0x0013, 0x0114}, {0x0013, 0x0115}, {0x0013, 0x0116}, {0x0013, 0x0117}, {0x0013, 0x0118}, {0x0013, 0x0119}, {0x0013, 0x011a}, {0x0013, 0x011b}, + {0x0013, 0x011c}, {0x0013, 0x011d}, {0x0013, 0x011e}, {0x0013, 0x011f}, {0x0013, 0x0120}, {0x0013, 0x0121}, {0x0013, 0x0122}, {0x0013, 0x0123}, + {0x0013, 0x0124}, {0x0013, 0x0125}, {0x0013, 0x0126}, {0x0013, 0x0127}, {0x0013, 0x0128}, {0x0013, 0x0129}, {0x0013, 0x012a}, {0x0013, 0x012b}, + {0x0013, 0x012c}, {0x0013, 0x012d}, {0x0013, 0x012e}, {0x0013, 0x012f}, {0x0013, 0x0130}, {0x0013, 0x0131}, {0x0013, 0x0132}, {0x0013, 0x0133}, + {0x0013, 0x0134}, {0x0013, 0x0135}, {0x0013, 0x0136}, {0x0013, 0x0137}, {0x0013, 0x0138}, {0x0013, 0x0139}, {0x0013, 0x013a}, {0x0013, 0x013b}, + {0x0013, 0x013c}, {0x0013, 0x013d}, {0x0013, 0x013e}, {0x0013, 0x013f}, {0x0013, 0x0140}, {0x0013, 0x0141}, {0x0013, 0x0142}, {0x0013, 0x0143}, + {0x0013, 0x0144}, {0x0013, 0x0145}, {0x0013, 0x0146}, {0x0013, 0x0147}, {0x0013, 0x0148}, {0x0013, 0x0149}, {0x0013, 0x014a}, {0x0013, 0x014b}, + {0x0013, 0x014c}, {0x0013, 0x014d}, {0x0013, 0x014e}, {0x0013, 0x014f}, {0x0013, 0x0150}, {0x0013, 0x0151}, {0x0013, 0x0152}, {0x0013, 0x0153}, + {0x0013, 0x0154}, {0x0013, 0x0155}, {0x0013, 0x0156}, {0x0013, 0x0157}, {0x0013, 0x0158}, {0x0013, 0x0159}, {0x0013, 0x015a}, {0x0013, 0x015b}, + {0x0013, 0x015c}, {0x0013, 0x015d}, {0x0013, 0x015e}, {0x0013, 0x015f}, {0x0013, 0x0160}, {0x0013, 0x0161}, {0x0013, 0x0162}, {0x0013, 0x0163}, + {0x0013, 0x0164}, {0x0013, 0x0165}, {0x0013, 0x0166}, {0x0013, 0x0167}, {0x0013, 0x0168}, {0x0013, 0x0169}, {0x0013, 0x016a}, {0x0013, 0x016b}, + {0x0013, 0x016c}, {0x0013, 0x016d}, {0x0013, 0x016e}, {0x0013, 0x016f}, {0x0013, 0x0170}, {0x0013, 0x0171}, {0x0013, 0x0172}, {0x0013, 0x0173}, + {0x0013, 0x0174}, {0x0013, 0x0175}, {0x0013, 0x0176}, {0x0013, 0x0177}, {0x0013, 0x0178}, {0x0013, 0x0179}, {0x0013, 0x017a}, {0x0013, 0x017b}, + {0x0013, 0x017c}, {0x0013, 0x017d}, {0x0013, 0x017e}, {0x0013, 0x017f}, {0x0013, 0x0180}, {0x0013, 0x0181}, {0x0013, 0x0182}, {0x0013, 0x0183}, + {0x0013, 0x0184}, {0x0013, 0x0185}, {0x0013, 0x0186}, {0x0013, 0x0187}, {0x0013, 0x0188}, {0x0013, 0x0189}, {0x0013, 0x018a}, {0x0013, 0x018b}, + {0x0013, 0x018c}, {0x0013, 0x018d}, {0x0013, 0x018e}, {0x0013, 0x018f}, {0x0013, 0x0190}, {0x0013, 0x0191}, {0x0013, 0x0192}, {0x0013, 0x0193}, + {0x0013, 0x0194}, {0x0013, 0x0195}, {0x0013, 0x0196}, {0x0013, 0x0197}, {0x0013, 0x0198}, {0x0013, 0x0199}, {0x0013, 0x019a}, {0x0013, 0x019b}, + {0x0013, 0x019c}, {0x0013, 0x019d}, {0x0013, 0x019e}, {0x0013, 0x019f}, {0x0013, 0x01a0}, {0x0013, 0x01a1}, {0x0013, 0x01a2}, {0x0013, 0x01a3}, + {0x0013, 0x01a4}, {0x0013, 0x01a5}, {0x0013, 0x01a6}, {0x0013, 0x01a7}, {0x0013, 0x01a8}, {0x0013, 0x01a9}, {0x0013, 0x01aa}, {0x0013, 0x01ab}, + {0x0013, 0x01ac}, {0x0013, 0x01ad}, {0x0013, 0x01ae}, {0x0013, 0x01af}, {0x0013, 0x01b0}, {0x0013, 0x01b1}, {0x0013, 0x01b2}, {0x0013, 0x01b3}, + {0x0013, 0x01b4}, {0x0013, 0x01b5}, {0x0013, 0x01b6}, {0x0013, 0x01b7}, {0x0013, 0x01b8}, {0x0013, 0x01b9}, {0x0013, 0x01ba}, {0x0013, 0x01bb}, + {0x0013, 0x01bc}, {0x0013, 0x01bd}, {0x0013, 0x01be}, {0x0013, 0x01bf}, {0x0013, 0x01c0}, {0x0013, 0x01c1}, {0x0013, 0x01c2}, {0x0013, 0x01c3}, + {0x0013, 0x01c4}, {0x0013, 0x01c5}, {0x0013, 0x01c6}, {0x0013, 0x01c7}, {0x0013, 0x01c8}, {0x0013, 0x01c9}, {0x0013, 0x01ca}, {0x0013, 0x01cb}, + {0x0013, 0x01cc}, {0x0013, 0x01cd}, {0x0013, 0x01ce}, {0x0013, 0x01cf}, {0x0013, 0x01d0}, {0x0013, 0x01d1}, {0x0013, 0x01d2}, {0x0013, 0x01d3}, + {0x0013, 0x01d4}, {0x0013, 0x01d5}, {0x0013, 0x01d6}, {0x0013, 0x01d7}, {0x0013, 0x01d8}, {0x0013, 0x01d9}, {0x0013, 0x01da}, {0x0013, 0x01db}, + {0x0013, 0x01dc}, {0x0013, 0x01dd}, {0x0013, 0x01de}, {0x0013, 0x01df}, {0x0013, 0x01e0}, {0x0013, 0x01e1}, {0x0013, 0x01e2}, {0x0013, 0x01e3}, + {0x0013, 0x01e4}, {0x0013, 0x01e5}, {0x0013, 0x01e6}, {0x0013, 0x01e7}, {0x0013, 0x01e8}, {0x0013, 0x01e9}, {0x0013, 0x01ea}, {0x0013, 0x01eb}, + {0x0013, 0x01ec}, {0x0013, 0x01ed}, {0x0013, 0x01ee}, {0x0013, 0x01ef}, {0x0013, 0x01f0}, {0x0013, 0x01f1}, {0x0013, 0x01f2}, {0x0013, 0x01f3}, + {0x0013, 0x01f4}, {0x0013, 0x01f5}, {0x0013, 0x01f6}, {0x0013, 0x01f7}, {0x0013, 0x01f8}, {0x0013, 0x01f9}, {0x0013, 0x01fa}, {0x0013, 0x01fb}, + {0x0013, 0x01fc}, {0x0013, 0x01fd}, {0x0013, 0x01fe}, {0x0013, 0x01ff}, {0x0013, 0x0200}, {0x0013, 0x0201}, {0x0013, 0x0202}, {0x0013, 0x0203}, + {0x0013, 0x0204}, {0x0013, 0x0205}, {0x0013, 0x0206}, {0x0013, 0x0207}, {0x0013, 0x0208}, {0x0013, 0x0209}, {0x0013, 0x020a}, {0x0013, 0x020b}, + {0x0013, 0x020c}, {0x0013, 0x020d}, {0x0013, 0x020e}, {0x0013, 0x020f}, {0x0013, 0x0210}, {0x0013, 0x0211}, {0x0013, 0x0212}, {0x0013, 0x0213}, + {0x0013, 0x0214}, {0x0013, 0x0215}, {0x0013, 0x0216}, {0x0013, 0x0217}, {0x0013, 0x0218}, {0x0013, 0x0219}, {0x0013, 0x021a}, {0x0013, 0x021b}, + {0x0013, 0x021c}, {0x0013, 0x021d}, {0x0013, 0x021e}, {0x0013, 0x021f}, {0x0013, 0x0220}, {0x0013, 0x0221}, {0x0013, 0x0222}, {0x0013, 0x0223}, + {0x0013, 0x0224}, {0x0013, 0x0225}, {0x0013, 0x0226}, {0x0013, 0x0227}, {0x0013, 0x0228}, {0x0013, 0x0229}, {0x0013, 0x022a}, {0x0013, 0x022b}, + {0x0013, 0x022c}, {0x0013, 0x022d}, {0x0013, 0x022e}, {0x0013, 0x022f}, {0x0013, 0x0230}, {0x0013, 0x0231}, {0x0013, 0x0232}, {0x0013, 0x0233}, + {0x0013, 0x0234}, {0x0013, 0x0235}, {0x0013, 0x0236}, {0x0013, 0x0237}, {0x0013, 0x0238}, {0x0013, 0x0239}, {0x0013, 0x023a}, {0x0013, 0x023b}, + {0x0013, 0x023c}, {0x0013, 0x023d}, {0x0013, 0x023e}, {0x0013, 0x023f}, {0x0013, 0x0240}, {0x0013, 0x0241}, {0x0013, 0x0242}, {0x0013, 0x0243}, + {0x0013, 0x0244}, {0x0013, 0x0245}, {0x0013, 0x0246}, {0x0013, 0x0247}, {0x0013, 0x0248}, {0x0013, 0x0249}, {0x0013, 0x024a}, {0x0013, 0x024b}, + {0x0013, 0x024c}, {0x0013, 0x024d}, {0x0013, 0x024e}, {0x0013, 0x024f}, {0x0013, 0x0250}, {0x0013, 0x0251}, {0x0013, 0x0252}, {0x0013, 0x0253}, + {0x0013, 0x0254}, {0x0013, 0x0255}, {0x0013, 0x0256}, {0x0013, 0x0257}, {0x0013, 0x0258}, {0x0013, 0x0259}, {0x0013, 0x025a}, {0x0013, 0x025b}, + {0x0013, 0x025c}, {0x0013, 0x025d}, {0x0013, 0x025e}, {0x0013, 0x025f}, {0x0013, 0x0260}, {0x0013, 0x0261}, {0x0013, 0x0262}, {0x0013, 0x0263}, + {0x0013, 0x0264}, {0x0013, 0x0265}, {0x0013, 0x0266}, {0x0013, 0x0267}, {0x0013, 0x0268}, {0x0013, 0x0269}, {0x0013, 0x026a}, {0x0013, 0x026b}, + {0x0012, 0x013f}, + +}; + +const uint32_t c_aauiCQMFHuffDec48[110][16] = +{ + {0x0005ffff, 0x0003ffff, 0x0004ffff, 0x0001ffff, 0x0002ffff, 0x00000037, 0x00010001, 0x00010001, 0x0001001b, 0x0001001b, 0x0001001c, 0x0001001c, 0x00020000, 0x00020000, 0x00020000, 0x00020000, }, + {0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, }, + {0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, }, + {0x0001003a, 0x0001003a, 0x00010054, 0x00010054, 0x0001006d, 0x0001006d, 0x0001006e, 0x0001006e, 0x00020003, 0x00020003, 0x00020003, 0x00020003, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, }, + {0x00020039, 0x00020039, 0x00020039, 0x00020039, 0x00020051, 0x00020051, 0x00020051, 0x00020051, 0x00020052, 0x00020052, 0x00020052, 0x00020052, 0x00020053, 0x00020053, 0x00020053, 0x00020053, }, + {0x000bffff, 0x000affff, 0x0009ffff, 0x0008ffff, 0x0006ffff, 0x0007ffff, 0x00000004, 0x00000020, 0x0000003b, 0x00000055, 0x0000006c, 0x0000006f, 0x00000088, 0x00000089, 0x0001001f, 0x0001001f, }, + {0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, }, + {0x00030087, 0x00030087, 0x00030087, 0x00030087, 0x00030087, 0x00030087, 0x00030087, 0x00030087, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, }, + {0x000200a3, 0x000200a3, 0x000200a3, 0x000200a3, 0x000200a4, 0x000200a4, 0x000200a4, 0x000200a4, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, }, + {0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003c, 0x00020071, 0x00020071, 0x00020071, 0x00020071, 0x0002008b, 0x0002008b, 0x0002008b, 0x0002008b, }, + {0x00000072, 0x0000008c, 0x000000a6, 0x000000bd, 0x000000bf, 0x000000c0, 0x00010006, 0x00010006, 0x00010057, 0x00010057, 0x000100a2, 0x000100a2, 0x000100a5, 0x000100a5, 0x000100be, 0x000100be, }, + {0x001dffff, 0x002effff, 0x003fffff, 0x0050ffff, 0x0019ffff, 0x0013ffff, 0x0012ffff, 0x0010ffff, 0x0011ffff, 0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x00000007, 0x00000022, 0x0000003d, }, + {0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, }, + {0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, }, + {0x0003008d, 0x0003008d, 0x0003008d, 0x0003008d, 0x0003008d, 0x0003008d, 0x0003008d, 0x0003008d, 0x000300a7, 0x000300a7, 0x000300a7, 0x000300a7, 0x000300a7, 0x000300a7, 0x000300a7, 0x000300a7, }, + {0x000300c1, 0x000300c1, 0x000300c1, 0x000300c1, 0x000300c1, 0x000300c1, 0x000300c1, 0x000300c1, 0x000300d9, 0x000300d9, 0x000300d9, 0x000300d9, 0x000300d9, 0x000300d9, 0x000300d9, 0x000300d9, }, + {0x000100f5, 0x000100f5, 0x000100f6, 0x000100f6, 0x00020059, 0x00020059, 0x00020059, 0x00020059, 0x0002008e, 0x0002008e, 0x0002008e, 0x0002008e, 0x000200a8, 0x000200a8, 0x000200a8, 0x000200a8, }, + {0x000200c2, 0x000200c2, 0x000200c2, 0x000200c2, 0x000200d8, 0x000200d8, 0x000200d8, 0x000200d8, 0x000200da, 0x000200da, 0x000200da, 0x000200da, 0x000200db, 0x000200db, 0x000200db, 0x000200db, }, + {0x00010008, 0x00010008, 0x00010024, 0x00010024, 0x0001003f, 0x0001003f, 0x0001005a, 0x0001005a, 0x00010074, 0x00010074, 0x000100c3, 0x000100c3, 0x000100dc, 0x000100dc, 0x000100f4, 0x000100f4, }, + {0x0015ffff, 0x0014ffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x00000009, 0x00000075, 0x0000008f, 0x000000a9, 0x000000dd, 0x000000f3, 0x000000f7, 0x000000f8, 0x0000010e, 0x0000010f, 0x00000111, }, + {0x00030090, 0x00030090, 0x00030090, 0x00030090, 0x00030090, 0x00030090, 0x00030090, 0x00030090, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, }, + {0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, }, + {0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300de, 0x000300de, 0x000300de, 0x000300de, 0x000300de, 0x000300de, 0x000300de, 0x000300de, }, + {0x000300e0, 0x000300e0, 0x000300e0, 0x000300e0, 0x000300e0, 0x000300e0, 0x000300e0, 0x000300e0, 0x000300fa, 0x000300fa, 0x000300fa, 0x000300fa, 0x000300fa, 0x000300fa, 0x000300fa, 0x000300fa, }, + {0x0003012a, 0x0003012a, 0x0003012a, 0x0003012a, 0x0003012a, 0x0003012a, 0x0003012a, 0x0003012a, 0x0003012c, 0x0003012c, 0x0003012c, 0x0003012c, 0x0003012c, 0x0003012c, 0x0003012c, 0x0003012c, }, + {0x0061ffff, 0x0062ffff, 0x0063ffff, 0x0064ffff, 0x0065ffff, 0x0066ffff, 0x0067ffff, 0x0068ffff, 0x0069ffff, 0x006affff, 0x006bffff, 0x006cffff, 0x006dffff, 0x001bffff, 0x001affff, 0x001cffff, }, + {0x00020076, 0x00020076, 0x00020076, 0x00020076, 0x000200aa, 0x000200aa, 0x000200aa, 0x000200aa, 0x000200ac, 0x000200ac, 0x000200ac, 0x000200ac, 0x000200c4, 0x000200c4, 0x000200c4, 0x000200c4, }, + {0x000102d4, 0x000102d4, 0x000102d5, 0x000102d5, 0x000102d6, 0x000102d6, 0x000102d7, 0x000102d7, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002005b, 0x0002005b, 0x0002005b, 0x0002005b, }, + {0x000200e1, 0x000200e1, 0x000200e1, 0x000200e1, 0x00020113, 0x00020113, 0x00020113, 0x00020113, 0x00020146, 0x00020146, 0x00020146, 0x00020146, 0x000202d8, 0x000202d8, 0x000202d8, 0x000202d8, }, + {0x001effff, 0x001fffff, 0x0020ffff, 0x0021ffff, 0x0022ffff, 0x0023ffff, 0x0024ffff, 0x0027ffff, 0x0025ffff, 0x0026ffff, 0x0028ffff, 0x0029ffff, 0x002affff, 0x002bffff, 0x002cffff, 0x002dffff, }, + {0x0001000b, 0x0001000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, 0x00010010, 0x00010010, 0x00010011, 0x00010011, 0x00010012, 0x00010012, }, + {0x00010013, 0x00010013, 0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x0001001a, 0x0001001a, }, + {0x00010026, 0x00010026, 0x00010027, 0x00010027, 0x00010028, 0x00010028, 0x00010029, 0x00010029, 0x0001002a, 0x0001002a, 0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, }, + {0x0001002e, 0x0001002e, 0x0001002f, 0x0001002f, 0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, }, + {0x00010041, 0x00010041, 0x00010042, 0x00010042, 0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, 0x00010046, 0x00010046, 0x00010047, 0x00010047, 0x00010048, 0x00010048, }, + {0x00010049, 0x00010049, 0x0001004a, 0x0001004a, 0x0001004b, 0x0001004b, 0x0001004c, 0x0001004c, 0x0001004d, 0x0001004d, 0x0001004e, 0x0001004e, 0x0001004f, 0x0001004f, 0x00010050, 0x00010050, }, + {0x0001005c, 0x0001005c, 0x0001005d, 0x0001005d, 0x0001005e, 0x0001005e, 0x0001005f, 0x0001005f, 0x00010060, 0x00010060, 0x00010061, 0x00010061, 0x00010062, 0x00010062, 0x00010063, 0x00010063, }, + {0x00010077, 0x00010077, 0x00010078, 0x00010078, 0x00010079, 0x00010079, 0x0001007a, 0x0001007a, 0x0001007b, 0x0001007b, 0x0001007c, 0x0001007c, 0x0001007d, 0x0001007d, 0x0001007e, 0x0001007e, }, + {0x0001007f, 0x0001007f, 0x00010080, 0x00010080, 0x00010081, 0x00010081, 0x00010082, 0x00010082, 0x00010083, 0x00010083, 0x00010084, 0x00010084, 0x00010085, 0x00010085, 0x00010086, 0x00010086, }, + {0x00010064, 0x00010064, 0x00010065, 0x00010065, 0x00010066, 0x00010066, 0x00010067, 0x00010067, 0x00010068, 0x00010068, 0x00010069, 0x00010069, 0x0001006a, 0x0001006a, 0x0001006b, 0x0001006b, }, + {0x00010092, 0x00010092, 0x00010093, 0x00010093, 0x00010094, 0x00010094, 0x00010095, 0x00010095, 0x00010096, 0x00010096, 0x00010097, 0x00010097, 0x00010098, 0x00010098, 0x00010099, 0x00010099, }, + {0x0001009a, 0x0001009a, 0x0001009b, 0x0001009b, 0x0001009c, 0x0001009c, 0x0001009d, 0x0001009d, 0x0001009e, 0x0001009e, 0x0001009f, 0x0001009f, 0x000100a0, 0x000100a0, 0x000100a1, 0x000100a1, }, + {0x000100ad, 0x000100ad, 0x000100ae, 0x000100ae, 0x000100af, 0x000100af, 0x000100b0, 0x000100b0, 0x000100b1, 0x000100b1, 0x000100b2, 0x000100b2, 0x000100b3, 0x000100b3, 0x000100b4, 0x000100b4, }, + {0x000100b5, 0x000100b5, 0x000100b6, 0x000100b6, 0x000100b7, 0x000100b7, 0x000100b8, 0x000100b8, 0x000100b9, 0x000100b9, 0x000100ba, 0x000100ba, 0x000100bb, 0x000100bb, 0x000100bc, 0x000100bc, }, + {0x000100c5, 0x000100c5, 0x000100c6, 0x000100c6, 0x000100c7, 0x000100c7, 0x000100c8, 0x000100c8, 0x000100c9, 0x000100c9, 0x000100ca, 0x000100ca, 0x000100cb, 0x000100cb, 0x000100cc, 0x000100cc, }, + {0x000100cd, 0x000100cd, 0x000100ce, 0x000100ce, 0x000100cf, 0x000100cf, 0x000100d0, 0x000100d0, 0x000100d1, 0x000100d1, 0x000100d2, 0x000100d2, 0x000100d3, 0x000100d3, 0x000100d4, 0x000100d4, }, + {0x002fffff, 0x0030ffff, 0x0031ffff, 0x0032ffff, 0x0033ffff, 0x0034ffff, 0x0035ffff, 0x0036ffff, 0x0037ffff, 0x0038ffff, 0x0039ffff, 0x003affff, 0x003bffff, 0x003cffff, 0x003dffff, 0x003effff, }, + {0x000100d5, 0x000100d5, 0x000100d6, 0x000100d6, 0x000100d7, 0x000100d7, 0x000100df, 0x000100df, 0x000100e2, 0x000100e2, 0x000100e3, 0x000100e3, 0x000100e4, 0x000100e4, 0x000100e5, 0x000100e5, }, + {0x000100e6, 0x000100e6, 0x000100e7, 0x000100e7, 0x000100e8, 0x000100e8, 0x000100e9, 0x000100e9, 0x000100ea, 0x000100ea, 0x000100eb, 0x000100eb, 0x000100ec, 0x000100ec, 0x000100ed, 0x000100ed, }, + {0x000100ee, 0x000100ee, 0x000100ef, 0x000100ef, 0x000100f0, 0x000100f0, 0x000100f1, 0x000100f1, 0x000100f2, 0x000100f2, 0x000100f9, 0x000100f9, 0x000100fb, 0x000100fb, 0x000100fc, 0x000100fc, }, + {0x000100fd, 0x000100fd, 0x000100fe, 0x000100fe, 0x000100ff, 0x000100ff, 0x00010100, 0x00010100, 0x00010101, 0x00010101, 0x00010102, 0x00010102, 0x00010103, 0x00010103, 0x00010104, 0x00010104, }, + {0x00010105, 0x00010105, 0x00010106, 0x00010106, 0x00010107, 0x00010107, 0x00010108, 0x00010108, 0x00010109, 0x00010109, 0x0001010a, 0x0001010a, 0x0001010b, 0x0001010b, 0x0001010c, 0x0001010c, }, + {0x0001010d, 0x0001010d, 0x00010110, 0x00010110, 0x00010112, 0x00010112, 0x00010114, 0x00010114, 0x00010115, 0x00010115, 0x00010116, 0x00010116, 0x00010117, 0x00010117, 0x00010118, 0x00010118, }, + {0x00010119, 0x00010119, 0x0001011a, 0x0001011a, 0x0001011b, 0x0001011b, 0x0001011c, 0x0001011c, 0x0001011d, 0x0001011d, 0x0001011e, 0x0001011e, 0x0001011f, 0x0001011f, 0x00010120, 0x00010120, }, + {0x00010121, 0x00010121, 0x00010122, 0x00010122, 0x00010123, 0x00010123, 0x00010124, 0x00010124, 0x00010125, 0x00010125, 0x00010126, 0x00010126, 0x00010127, 0x00010127, 0x00010128, 0x00010128, }, + {0x00010129, 0x00010129, 0x0001012b, 0x0001012b, 0x0001012d, 0x0001012d, 0x0001012e, 0x0001012e, 0x0001012f, 0x0001012f, 0x00010130, 0x00010130, 0x00010131, 0x00010131, 0x00010132, 0x00010132, }, + {0x00010133, 0x00010133, 0x00010134, 0x00010134, 0x00010135, 0x00010135, 0x00010136, 0x00010136, 0x00010137, 0x00010137, 0x00010138, 0x00010138, 0x00010139, 0x00010139, 0x0001013a, 0x0001013a, }, + {0x0001013b, 0x0001013b, 0x0001013c, 0x0001013c, 0x0001013d, 0x0001013d, 0x0001013e, 0x0001013e, 0x0001013f, 0x0001013f, 0x00010140, 0x00010140, 0x00010141, 0x00010141, 0x00010142, 0x00010142, }, + {0x00010143, 0x00010143, 0x00010144, 0x00010144, 0x00010145, 0x00010145, 0x00010147, 0x00010147, 0x00010148, 0x00010148, 0x00010149, 0x00010149, 0x0001014a, 0x0001014a, 0x0001014b, 0x0001014b, }, + {0x0001014c, 0x0001014c, 0x0001014d, 0x0001014d, 0x0001014e, 0x0001014e, 0x0001014f, 0x0001014f, 0x00010150, 0x00010150, 0x00010151, 0x00010151, 0x00010152, 0x00010152, 0x00010153, 0x00010153, }, + {0x00010154, 0x00010154, 0x00010155, 0x00010155, 0x00010156, 0x00010156, 0x00010157, 0x00010157, 0x00010158, 0x00010158, 0x00010159, 0x00010159, 0x0001015a, 0x0001015a, 0x0001015b, 0x0001015b, }, + {0x0001015c, 0x0001015c, 0x0001015d, 0x0001015d, 0x0001015e, 0x0001015e, 0x0001015f, 0x0001015f, 0x00010160, 0x00010160, 0x00010161, 0x00010161, 0x00010162, 0x00010162, 0x00010163, 0x00010163, }, + {0x00010164, 0x00010164, 0x00010165, 0x00010165, 0x00010166, 0x00010166, 0x00010167, 0x00010167, 0x00010168, 0x00010168, 0x00010169, 0x00010169, 0x0001016a, 0x0001016a, 0x0001016b, 0x0001016b, }, + {0x0040ffff, 0x0041ffff, 0x0042ffff, 0x0043ffff, 0x0044ffff, 0x0045ffff, 0x0046ffff, 0x0047ffff, 0x0048ffff, 0x0049ffff, 0x004affff, 0x004bffff, 0x004cffff, 0x004dffff, 0x004effff, 0x004fffff, }, + {0x0001016c, 0x0001016c, 0x0001016d, 0x0001016d, 0x0001016e, 0x0001016e, 0x0001016f, 0x0001016f, 0x00010170, 0x00010170, 0x00010171, 0x00010171, 0x00010172, 0x00010172, 0x00010173, 0x00010173, }, + {0x00010174, 0x00010174, 0x00010175, 0x00010175, 0x00010176, 0x00010176, 0x00010177, 0x00010177, 0x00010178, 0x00010178, 0x00010179, 0x00010179, 0x0001017a, 0x0001017a, 0x0001017b, 0x0001017b, }, + {0x0001017c, 0x0001017c, 0x0001017d, 0x0001017d, 0x0001017e, 0x0001017e, 0x0001017f, 0x0001017f, 0x00010180, 0x00010180, 0x00010181, 0x00010181, 0x00010182, 0x00010182, 0x00010183, 0x00010183, }, + {0x00010184, 0x00010184, 0x00010185, 0x00010185, 0x00010186, 0x00010186, 0x00010187, 0x00010187, 0x00010188, 0x00010188, 0x00010189, 0x00010189, 0x0001018a, 0x0001018a, 0x0001018b, 0x0001018b, }, + {0x0001018c, 0x0001018c, 0x0001018d, 0x0001018d, 0x0001018e, 0x0001018e, 0x0001018f, 0x0001018f, 0x00010190, 0x00010190, 0x00010191, 0x00010191, 0x00010192, 0x00010192, 0x00010193, 0x00010193, }, + {0x00010194, 0x00010194, 0x00010195, 0x00010195, 0x00010196, 0x00010196, 0x00010197, 0x00010197, 0x00010198, 0x00010198, 0x00010199, 0x00010199, 0x0001019a, 0x0001019a, 0x0001019b, 0x0001019b, }, + {0x0001019c, 0x0001019c, 0x0001019d, 0x0001019d, 0x0001019e, 0x0001019e, 0x0001019f, 0x0001019f, 0x000101a0, 0x000101a0, 0x000101a1, 0x000101a1, 0x000101a2, 0x000101a2, 0x000101a3, 0x000101a3, }, + {0x000101a4, 0x000101a4, 0x000101a5, 0x000101a5, 0x000101a6, 0x000101a6, 0x000101a7, 0x000101a7, 0x000101a8, 0x000101a8, 0x000101a9, 0x000101a9, 0x000101aa, 0x000101aa, 0x000101ab, 0x000101ab, }, + {0x000101ac, 0x000101ac, 0x000101ad, 0x000101ad, 0x000101ae, 0x000101ae, 0x000101af, 0x000101af, 0x000101b0, 0x000101b0, 0x000101b1, 0x000101b1, 0x000101b2, 0x000101b2, 0x000101b3, 0x000101b3, }, + {0x000101b4, 0x000101b4, 0x000101b5, 0x000101b5, 0x000101b6, 0x000101b6, 0x000101b7, 0x000101b7, 0x000101b8, 0x000101b8, 0x000101b9, 0x000101b9, 0x000101ba, 0x000101ba, 0x000101bb, 0x000101bb, }, + {0x000101bc, 0x000101bc, 0x000101bd, 0x000101bd, 0x000101be, 0x000101be, 0x000101bf, 0x000101bf, 0x000101c0, 0x000101c0, 0x000101c1, 0x000101c1, 0x000101c2, 0x000101c2, 0x000101c3, 0x000101c3, }, + {0x000101c4, 0x000101c4, 0x000101c5, 0x000101c5, 0x000101c6, 0x000101c6, 0x000101c7, 0x000101c7, 0x000101c8, 0x000101c8, 0x000101c9, 0x000101c9, 0x000101ca, 0x000101ca, 0x000101cb, 0x000101cb, }, + {0x000101cc, 0x000101cc, 0x000101cd, 0x000101cd, 0x000101ce, 0x000101ce, 0x000101cf, 0x000101cf, 0x000101d0, 0x000101d0, 0x000101d1, 0x000101d1, 0x000101d2, 0x000101d2, 0x000101d3, 0x000101d3, }, + {0x000101d4, 0x000101d4, 0x000101d5, 0x000101d5, 0x000101d6, 0x000101d6, 0x000101d7, 0x000101d7, 0x000101d8, 0x000101d8, 0x000101d9, 0x000101d9, 0x000101da, 0x000101da, 0x000101db, 0x000101db, }, + {0x000101dc, 0x000101dc, 0x000101dd, 0x000101dd, 0x000101de, 0x000101de, 0x000101df, 0x000101df, 0x000101e0, 0x000101e0, 0x000101e1, 0x000101e1, 0x000101e2, 0x000101e2, 0x000101e3, 0x000101e3, }, + {0x000101e4, 0x000101e4, 0x000101e5, 0x000101e5, 0x000101e6, 0x000101e6, 0x000101e7, 0x000101e7, 0x000101e8, 0x000101e8, 0x000101e9, 0x000101e9, 0x000101ea, 0x000101ea, 0x000101eb, 0x000101eb, }, + {0x0051ffff, 0x0052ffff, 0x0053ffff, 0x0054ffff, 0x0055ffff, 0x0056ffff, 0x0057ffff, 0x0058ffff, 0x0059ffff, 0x005affff, 0x005bffff, 0x005cffff, 0x005dffff, 0x005effff, 0x005fffff, 0x0060ffff, }, + {0x000101ec, 0x000101ec, 0x000101ed, 0x000101ed, 0x000101ee, 0x000101ee, 0x000101ef, 0x000101ef, 0x000101f0, 0x000101f0, 0x000101f1, 0x000101f1, 0x000101f2, 0x000101f2, 0x000101f3, 0x000101f3, }, + {0x000101f4, 0x000101f4, 0x000101f5, 0x000101f5, 0x000101f6, 0x000101f6, 0x000101f7, 0x000101f7, 0x000101f8, 0x000101f8, 0x000101f9, 0x000101f9, 0x000101fa, 0x000101fa, 0x000101fb, 0x000101fb, }, + {0x000101fc, 0x000101fc, 0x000101fd, 0x000101fd, 0x000101fe, 0x000101fe, 0x000101ff, 0x000101ff, 0x00010200, 0x00010200, 0x00010201, 0x00010201, 0x00010202, 0x00010202, 0x00010203, 0x00010203, }, + {0x00010204, 0x00010204, 0x00010205, 0x00010205, 0x00010206, 0x00010206, 0x00010207, 0x00010207, 0x00010208, 0x00010208, 0x00010209, 0x00010209, 0x0001020a, 0x0001020a, 0x0001020b, 0x0001020b, }, + {0x0001020c, 0x0001020c, 0x0001020d, 0x0001020d, 0x0001020e, 0x0001020e, 0x0001020f, 0x0001020f, 0x00010210, 0x00010210, 0x00010211, 0x00010211, 0x00010212, 0x00010212, 0x00010213, 0x00010213, }, + {0x00010214, 0x00010214, 0x00010215, 0x00010215, 0x00010216, 0x00010216, 0x00010217, 0x00010217, 0x00010218, 0x00010218, 0x00010219, 0x00010219, 0x0001021a, 0x0001021a, 0x0001021b, 0x0001021b, }, + {0x0001021c, 0x0001021c, 0x0001021d, 0x0001021d, 0x0001021e, 0x0001021e, 0x0001021f, 0x0001021f, 0x00010220, 0x00010220, 0x00010221, 0x00010221, 0x00010222, 0x00010222, 0x00010223, 0x00010223, }, + {0x00010224, 0x00010224, 0x00010225, 0x00010225, 0x00010226, 0x00010226, 0x00010227, 0x00010227, 0x00010228, 0x00010228, 0x00010229, 0x00010229, 0x0001022a, 0x0001022a, 0x0001022b, 0x0001022b, }, + {0x0001022c, 0x0001022c, 0x0001022d, 0x0001022d, 0x0001022e, 0x0001022e, 0x0001022f, 0x0001022f, 0x00010230, 0x00010230, 0x00010231, 0x00010231, 0x00010232, 0x00010232, 0x00010233, 0x00010233, }, + {0x00010234, 0x00010234, 0x00010235, 0x00010235, 0x00010236, 0x00010236, 0x00010237, 0x00010237, 0x00010238, 0x00010238, 0x00010239, 0x00010239, 0x0001023a, 0x0001023a, 0x0001023b, 0x0001023b, }, + {0x0001023c, 0x0001023c, 0x0001023d, 0x0001023d, 0x0001023e, 0x0001023e, 0x0001023f, 0x0001023f, 0x00010240, 0x00010240, 0x00010241, 0x00010241, 0x00010242, 0x00010242, 0x00010243, 0x00010243, }, + {0x00010244, 0x00010244, 0x00010245, 0x00010245, 0x00010246, 0x00010246, 0x00010247, 0x00010247, 0x00010248, 0x00010248, 0x00010249, 0x00010249, 0x0001024a, 0x0001024a, 0x0001024b, 0x0001024b, }, + {0x0001024c, 0x0001024c, 0x0001024d, 0x0001024d, 0x0001024e, 0x0001024e, 0x0001024f, 0x0001024f, 0x00010250, 0x00010250, 0x00010251, 0x00010251, 0x00010252, 0x00010252, 0x00010253, 0x00010253, }, + {0x00010254, 0x00010254, 0x00010255, 0x00010255, 0x00010256, 0x00010256, 0x00010257, 0x00010257, 0x00010258, 0x00010258, 0x00010259, 0x00010259, 0x0001025a, 0x0001025a, 0x0001025b, 0x0001025b, }, + {0x0001025c, 0x0001025c, 0x0001025d, 0x0001025d, 0x0001025e, 0x0001025e, 0x0001025f, 0x0001025f, 0x00010260, 0x00010260, 0x00010261, 0x00010261, 0x00010262, 0x00010262, 0x00010263, 0x00010263, }, + {0x00010264, 0x00010264, 0x00010265, 0x00010265, 0x00010266, 0x00010266, 0x00010267, 0x00010267, 0x00010268, 0x00010268, 0x00010269, 0x00010269, 0x0001026a, 0x0001026a, 0x0001026b, 0x0001026b, }, + {0x0001026c, 0x0001026c, 0x0001026d, 0x0001026d, 0x0001026e, 0x0001026e, 0x0001026f, 0x0001026f, 0x00010270, 0x00010270, 0x00010271, 0x00010271, 0x00010272, 0x00010272, 0x00010273, 0x00010273, }, + {0x00010274, 0x00010274, 0x00010275, 0x00010275, 0x00010276, 0x00010276, 0x00010277, 0x00010277, 0x00010278, 0x00010278, 0x00010279, 0x00010279, 0x0001027a, 0x0001027a, 0x0001027b, 0x0001027b, }, + {0x0001027c, 0x0001027c, 0x0001027d, 0x0001027d, 0x0001027e, 0x0001027e, 0x0001027f, 0x0001027f, 0x00010280, 0x00010280, 0x00010281, 0x00010281, 0x00010282, 0x00010282, 0x00010283, 0x00010283, }, + {0x00010284, 0x00010284, 0x00010285, 0x00010285, 0x00010286, 0x00010286, 0x00010287, 0x00010287, 0x00010288, 0x00010288, 0x00010289, 0x00010289, 0x0001028a, 0x0001028a, 0x0001028b, 0x0001028b, }, + {0x0001028c, 0x0001028c, 0x0001028d, 0x0001028d, 0x0001028e, 0x0001028e, 0x0001028f, 0x0001028f, 0x00010290, 0x00010290, 0x00010291, 0x00010291, 0x00010292, 0x00010292, 0x00010293, 0x00010293, }, + {0x00010294, 0x00010294, 0x00010295, 0x00010295, 0x00010296, 0x00010296, 0x00010297, 0x00010297, 0x00010298, 0x00010298, 0x00010299, 0x00010299, 0x0001029a, 0x0001029a, 0x0001029b, 0x0001029b, }, + {0x0001029c, 0x0001029c, 0x0001029d, 0x0001029d, 0x0001029e, 0x0001029e, 0x0001029f, 0x0001029f, 0x000102a0, 0x000102a0, 0x000102a1, 0x000102a1, 0x000102a2, 0x000102a2, 0x000102a3, 0x000102a3, }, + {0x000102a4, 0x000102a4, 0x000102a5, 0x000102a5, 0x000102a6, 0x000102a6, 0x000102a7, 0x000102a7, 0x000102a8, 0x000102a8, 0x000102a9, 0x000102a9, 0x000102aa, 0x000102aa, 0x000102ab, 0x000102ab, }, + {0x000102ac, 0x000102ac, 0x000102ad, 0x000102ad, 0x000102ae, 0x000102ae, 0x000102af, 0x000102af, 0x000102b0, 0x000102b0, 0x000102b1, 0x000102b1, 0x000102b2, 0x000102b2, 0x000102b3, 0x000102b3, }, + {0x000102b4, 0x000102b4, 0x000102b5, 0x000102b5, 0x000102b6, 0x000102b6, 0x000102b7, 0x000102b7, 0x000102b8, 0x000102b8, 0x000102b9, 0x000102b9, 0x000102ba, 0x000102ba, 0x000102bb, 0x000102bb, }, + {0x000102bc, 0x000102bc, 0x000102bd, 0x000102bd, 0x000102be, 0x000102be, 0x000102bf, 0x000102bf, 0x000102c0, 0x000102c0, 0x000102c1, 0x000102c1, 0x000102c2, 0x000102c2, 0x000102c3, 0x000102c3, }, + {0x000102c4, 0x000102c4, 0x000102c5, 0x000102c5, 0x000102c6, 0x000102c6, 0x000102c7, 0x000102c7, 0x000102c8, 0x000102c8, 0x000102c9, 0x000102c9, 0x000102ca, 0x000102ca, 0x000102cb, 0x000102cb, }, + {0x000102cc, 0x000102cc, 0x000102cd, 0x000102cd, 0x000102ce, 0x000102ce, 0x000102cf, 0x000102cf, 0x000102d0, 0x000102d0, 0x000102d1, 0x000102d1, 0x000102d2, 0x000102d2, 0x000102d3, 0x000102d3, }, +}; + +const uint32_t c_aauiCQMFHuffEnc49[729][2] = +{ + {0x0002, 0x0003}, {0x0003, 0x0003}, {0x0005, 0x0007}, {0x0007, 0x000a}, {0x0008, 0x0009}, {0x0008, 0x000a}, {0x0009, 0x0009}, {0x000b, 0x000d}, + {0x000d, 0x0014}, {0x000d, 0x0015}, {0x0010, 0x0052}, {0x0011, 0x0098}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, + {0x0013, 0x0004}, {0x0013, 0x0005}, {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0013, 0x000b}, + {0x0013, 0x000c}, {0x0013, 0x000d}, {0x0013, 0x000e}, {0x0003, 0x0004}, {0x0003, 0x0005}, {0x0005, 0x0008}, {0x0006, 0x000a}, {0x0007, 0x000b}, + {0x0008, 0x000b}, {0x0008, 0x000c}, {0x000a, 0x000a}, {0x000b, 0x000e}, {0x000d, 0x0016}, {0x000f, 0x0031}, {0x0010, 0x0053}, {0x0012, 0x012a}, + {0x0013, 0x000f}, {0x0013, 0x0010}, {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0013, 0x0014}, {0x0013, 0x0015}, {0x0013, 0x0016}, + {0x0013, 0x0017}, {0x0013, 0x0018}, {0x0013, 0x0019}, {0x0013, 0x001a}, {0x0013, 0x001b}, {0x0013, 0x001c}, {0x0005, 0x0009}, {0x0005, 0x000a}, + {0x0005, 0x000b}, {0x0006, 0x000b}, {0x0007, 0x000c}, {0x0008, 0x000d}, {0x0009, 0x000a}, {0x000a, 0x000b}, {0x000c, 0x000f}, {0x000d, 0x0017}, + {0x000f, 0x0032}, {0x0010, 0x0054}, {0x0013, 0x001d}, {0x0013, 0x001e}, {0x0013, 0x001f}, {0x0013, 0x0020}, {0x0013, 0x0021}, {0x0013, 0x0022}, + {0x0013, 0x0023}, {0x0013, 0x0024}, {0x0013, 0x0025}, {0x0013, 0x0026}, {0x0013, 0x0027}, {0x0013, 0x0028}, {0x0013, 0x0029}, {0x0013, 0x002a}, + {0x0013, 0x002b}, {0x0007, 0x000d}, {0x0006, 0x000c}, {0x0006, 0x000d}, {0x0007, 0x000e}, {0x0007, 0x000f}, {0x0008, 0x000e}, {0x0009, 0x000b}, + {0x000b, 0x000f}, {0x000c, 0x0010}, {0x000e, 0x001d}, {0x000f, 0x0033}, {0x0011, 0x0099}, {0x0013, 0x002c}, {0x0013, 0x002d}, {0x0013, 0x002e}, + {0x0013, 0x002f}, {0x0013, 0x0030}, {0x0013, 0x0031}, {0x0013, 0x0032}, {0x0013, 0x0033}, {0x0013, 0x0034}, {0x0013, 0x0035}, {0x0013, 0x0036}, + {0x0013, 0x0037}, {0x0013, 0x0038}, {0x0013, 0x0039}, {0x0013, 0x003a}, {0x0008, 0x000f}, {0x0007, 0x0010}, {0x0007, 0x0011}, {0x0007, 0x0012}, + {0x0008, 0x0010}, {0x0009, 0x000c}, {0x000a, 0x000c}, {0x000c, 0x0011}, {0x000d, 0x0018}, {0x000e, 0x001e}, {0x0011, 0x009a}, {0x0011, 0x009b}, + {0x0013, 0x003b}, {0x0013, 0x003c}, {0x0013, 0x003d}, {0x0013, 0x003e}, {0x0013, 0x003f}, {0x0013, 0x0040}, {0x0013, 0x0041}, {0x0013, 0x0042}, + {0x0013, 0x0043}, {0x0013, 0x0044}, {0x0013, 0x0045}, {0x0013, 0x0046}, {0x0013, 0x0047}, {0x0013, 0x0048}, {0x0013, 0x0049}, {0x0008, 0x0011}, + {0x0007, 0x0013}, {0x0008, 0x0012}, {0x0008, 0x0013}, {0x0009, 0x000d}, {0x000a, 0x000d}, {0x000b, 0x0010}, {0x000c, 0x0012}, {0x000e, 0x001f}, + {0x000e, 0x0020}, {0x0010, 0x0055}, {0x0011, 0x009c}, {0x0013, 0x004a}, {0x0013, 0x004b}, {0x0013, 0x004c}, {0x0013, 0x004d}, {0x0013, 0x004e}, + {0x0013, 0x004f}, {0x0013, 0x0050}, {0x0013, 0x0051}, {0x0013, 0x0052}, {0x0013, 0x0053}, {0x0013, 0x0054}, {0x0013, 0x0055}, {0x0013, 0x0056}, + {0x0013, 0x0057}, {0x0013, 0x0058}, {0x0009, 0x000e}, {0x0009, 0x000f}, {0x0009, 0x0010}, {0x0009, 0x0011}, {0x000a, 0x000e}, {0x000b, 0x0011}, + {0x000c, 0x0013}, {0x000d, 0x0019}, {0x000e, 0x0021}, {0x0010, 0x0056}, {0x0010, 0x0057}, {0x0013, 0x0059}, {0x0013, 0x005a}, {0x0013, 0x005b}, + {0x0013, 0x005c}, {0x0013, 0x005d}, {0x0013, 0x005e}, {0x0013, 0x005f}, {0x0013, 0x0060}, {0x0013, 0x0061}, {0x0013, 0x0062}, {0x0013, 0x0063}, + {0x0013, 0x0064}, {0x0013, 0x0065}, {0x0013, 0x0066}, {0x0013, 0x0067}, {0x0013, 0x0068}, {0x000b, 0x0012}, {0x000a, 0x000f}, {0x000a, 0x0010}, + {0x000a, 0x0011}, {0x000c, 0x0014}, {0x000c, 0x0015}, {0x000d, 0x001a}, {0x000e, 0x0022}, {0x0010, 0x0058}, {0x0010, 0x0059}, {0x0013, 0x0069}, + {0x0013, 0x006a}, {0x0013, 0x006b}, {0x0013, 0x006c}, {0x0013, 0x006d}, {0x0013, 0x006e}, {0x0013, 0x006f}, {0x0013, 0x0070}, {0x0013, 0x0071}, + {0x0013, 0x0072}, {0x0013, 0x0073}, {0x0013, 0x0074}, {0x0013, 0x0075}, {0x0013, 0x0076}, {0x0013, 0x0077}, {0x0013, 0x0078}, {0x0013, 0x0079}, + {0x000c, 0x0016}, {0x000b, 0x0013}, {0x000c, 0x0017}, {0x000c, 0x0018}, {0x000c, 0x0019}, {0x000e, 0x0023}, {0x000e, 0x0024}, {0x000f, 0x0034}, + {0x0010, 0x005a}, {0x0011, 0x009d}, {0x0013, 0x007a}, {0x0013, 0x007b}, {0x0013, 0x007c}, {0x0013, 0x007d}, {0x0013, 0x007e}, {0x0013, 0x007f}, + {0x0013, 0x0080}, {0x0013, 0x0081}, {0x0013, 0x0082}, {0x0013, 0x0083}, {0x0013, 0x0084}, {0x0013, 0x0085}, {0x0013, 0x0086}, {0x0013, 0x0087}, + {0x0013, 0x0088}, {0x0013, 0x0089}, {0x0013, 0x008a}, {0x000e, 0x0025}, {0x000d, 0x001b}, {0x000d, 0x001c}, {0x000d, 0x001d}, {0x000e, 0x0026}, + {0x000f, 0x0035}, {0x0010, 0x005b}, {0x0011, 0x009e}, {0x0011, 0x009f}, {0x0012, 0x012b}, {0x0013, 0x008b}, {0x0013, 0x008c}, {0x0013, 0x008d}, + {0x0013, 0x008e}, {0x0013, 0x008f}, {0x0013, 0x0090}, {0x0013, 0x0091}, {0x0013, 0x0092}, {0x0013, 0x0093}, {0x0013, 0x0094}, {0x0013, 0x0095}, + {0x0013, 0x0096}, {0x0013, 0x0097}, {0x0013, 0x0098}, {0x0013, 0x0099}, {0x0013, 0x009a}, {0x0013, 0x009b}, {0x0010, 0x005c}, {0x000f, 0x0036}, + {0x000e, 0x0027}, {0x000f, 0x0037}, {0x000f, 0x0038}, {0x0010, 0x005d}, {0x0011, 0x00a0}, {0x0013, 0x009c}, {0x0012, 0x012c}, {0x0013, 0x009d}, + {0x0013, 0x009e}, {0x0013, 0x009f}, {0x0013, 0x00a0}, {0x0013, 0x00a1}, {0x0013, 0x00a2}, {0x0013, 0x00a3}, {0x0013, 0x00a4}, {0x0013, 0x00a5}, + {0x0013, 0x00a6}, {0x0013, 0x00a7}, {0x0013, 0x00a8}, {0x0013, 0x00a9}, {0x0013, 0x00aa}, {0x0013, 0x00ab}, {0x0013, 0x00ac}, {0x0013, 0x00ad}, + {0x0013, 0x00ae}, {0x0010, 0x005e}, {0x000f, 0x0039}, {0x0010, 0x005f}, {0x0010, 0x0060}, {0x0011, 0x00a1}, {0x0010, 0x0061}, {0x0013, 0x00af}, + {0x0013, 0x00b0}, {0x0012, 0x012d}, {0x0013, 0x00b1}, {0x0013, 0x00b2}, {0x0013, 0x00b3}, {0x0013, 0x00b4}, {0x0013, 0x00b5}, {0x0013, 0x00b6}, + {0x0013, 0x00b7}, {0x0013, 0x00b8}, {0x0013, 0x00b9}, {0x0013, 0x00ba}, {0x0013, 0x00bb}, {0x0013, 0x00bc}, {0x0013, 0x00bd}, {0x0013, 0x00be}, + {0x0013, 0x00bf}, {0x0013, 0x00c0}, {0x0013, 0x00c1}, {0x0013, 0x00c2}, {0x0012, 0x012e}, {0x0011, 0x00a2}, {0x0011, 0x00a3}, {0x0013, 0x00c3}, + {0x0013, 0x00c4}, {0x0013, 0x00c5}, {0x0013, 0x00c6}, {0x0013, 0x00c7}, {0x0013, 0x00c8}, {0x0013, 0x00c9}, {0x0013, 0x00ca}, {0x0013, 0x00cb}, + {0x0013, 0x00cc}, {0x0013, 0x00cd}, {0x0013, 0x00ce}, {0x0013, 0x00cf}, {0x0013, 0x00d0}, {0x0013, 0x00d1}, {0x0013, 0x00d2}, {0x0013, 0x00d3}, + {0x0013, 0x00d4}, {0x0013, 0x00d5}, {0x0013, 0x00d6}, {0x0013, 0x00d7}, {0x0013, 0x00d8}, {0x0013, 0x00d9}, {0x0013, 0x00da}, {0x0013, 0x00db}, + {0x0013, 0x00dc}, {0x0013, 0x00dd}, {0x0013, 0x00de}, {0x0013, 0x00df}, {0x0012, 0x012f}, {0x0013, 0x00e0}, {0x0013, 0x00e1}, {0x0013, 0x00e2}, + {0x0013, 0x00e3}, {0x0013, 0x00e4}, {0x0013, 0x00e5}, {0x0013, 0x00e6}, {0x0013, 0x00e7}, {0x0013, 0x00e8}, {0x0013, 0x00e9}, {0x0013, 0x00ea}, + {0x0013, 0x00eb}, {0x0013, 0x00ec}, {0x0013, 0x00ed}, {0x0013, 0x00ee}, {0x0013, 0x00ef}, {0x0013, 0x00f0}, {0x0013, 0x00f1}, {0x0013, 0x00f2}, + {0x0013, 0x00f3}, {0x0013, 0x00f4}, {0x0013, 0x00f5}, {0x0013, 0x00f6}, {0x0013, 0x00f7}, {0x0013, 0x00f8}, {0x0013, 0x00f9}, {0x0013, 0x00fa}, + {0x0013, 0x00fb}, {0x0013, 0x00fc}, {0x0013, 0x00fd}, {0x0013, 0x00fe}, {0x0013, 0x00ff}, {0x0013, 0x0100}, {0x0013, 0x0101}, {0x0013, 0x0102}, + {0x0013, 0x0103}, {0x0013, 0x0104}, {0x0013, 0x0105}, {0x0013, 0x0106}, {0x0013, 0x0107}, {0x0013, 0x0108}, {0x0013, 0x0109}, {0x0013, 0x010a}, + {0x0013, 0x010b}, {0x0013, 0x010c}, {0x0013, 0x010d}, {0x0013, 0x010e}, {0x0013, 0x010f}, {0x0013, 0x0110}, {0x0013, 0x0111}, {0x0013, 0x0112}, + {0x0013, 0x0113}, {0x0013, 0x0114}, {0x0013, 0x0115}, {0x0013, 0x0116}, {0x0013, 0x0117}, {0x0013, 0x0118}, {0x0013, 0x0119}, {0x0013, 0x011a}, + {0x0013, 0x011b}, {0x0013, 0x011c}, {0x0013, 0x011d}, {0x0013, 0x011e}, {0x0013, 0x011f}, {0x0013, 0x0120}, {0x0013, 0x0121}, {0x0013, 0x0122}, + {0x0013, 0x0123}, {0x0013, 0x0124}, {0x0013, 0x0125}, {0x0013, 0x0126}, {0x0013, 0x0127}, {0x0013, 0x0128}, {0x0013, 0x0129}, {0x0013, 0x012a}, + {0x0013, 0x012b}, {0x0013, 0x012c}, {0x0013, 0x012d}, {0x0013, 0x012e}, {0x0013, 0x012f}, {0x0013, 0x0130}, {0x0013, 0x0131}, {0x0013, 0x0132}, + {0x0013, 0x0133}, {0x0013, 0x0134}, {0x0013, 0x0135}, {0x0013, 0x0136}, {0x0013, 0x0137}, {0x0013, 0x0138}, {0x0013, 0x0139}, {0x0013, 0x013a}, + {0x0013, 0x013b}, {0x0013, 0x013c}, {0x0013, 0x013d}, {0x0013, 0x013e}, {0x0013, 0x013f}, {0x0013, 0x0140}, {0x0013, 0x0141}, {0x0013, 0x0142}, + {0x0013, 0x0143}, {0x0013, 0x0144}, {0x0013, 0x0145}, {0x0013, 0x0146}, {0x0013, 0x0147}, {0x0013, 0x0148}, {0x0013, 0x0149}, {0x0013, 0x014a}, + {0x0013, 0x014b}, {0x0013, 0x014c}, {0x0013, 0x014d}, {0x0013, 0x014e}, {0x0013, 0x014f}, {0x0013, 0x0150}, {0x0013, 0x0151}, {0x0013, 0x0152}, + {0x0013, 0x0153}, {0x0013, 0x0154}, {0x0013, 0x0155}, {0x0013, 0x0156}, {0x0013, 0x0157}, {0x0013, 0x0158}, {0x0013, 0x0159}, {0x0013, 0x015a}, + {0x0013, 0x015b}, {0x0013, 0x015c}, {0x0013, 0x015d}, {0x0013, 0x015e}, {0x0013, 0x015f}, {0x0013, 0x0160}, {0x0013, 0x0161}, {0x0013, 0x0162}, + {0x0013, 0x0163}, {0x0013, 0x0164}, {0x0013, 0x0165}, {0x0013, 0x0166}, {0x0013, 0x0167}, {0x0013, 0x0168}, {0x0013, 0x0169}, {0x0013, 0x016a}, + {0x0013, 0x016b}, {0x0013, 0x016c}, {0x0013, 0x016d}, {0x0013, 0x016e}, {0x0013, 0x016f}, {0x0013, 0x0170}, {0x0013, 0x0171}, {0x0013, 0x0172}, + {0x0013, 0x0173}, {0x0013, 0x0174}, {0x0013, 0x0175}, {0x0013, 0x0176}, {0x0013, 0x0177}, {0x0013, 0x0178}, {0x0013, 0x0179}, {0x0013, 0x017a}, + {0x0013, 0x017b}, {0x0013, 0x017c}, {0x0013, 0x017d}, {0x0013, 0x017e}, {0x0013, 0x017f}, {0x0013, 0x0180}, {0x0013, 0x0181}, {0x0013, 0x0182}, + {0x0013, 0x0183}, {0x0013, 0x0184}, {0x0013, 0x0185}, {0x0013, 0x0186}, {0x0013, 0x0187}, {0x0013, 0x0188}, {0x0013, 0x0189}, {0x0013, 0x018a}, + {0x0013, 0x018b}, {0x0013, 0x018c}, {0x0013, 0x018d}, {0x0013, 0x018e}, {0x0013, 0x018f}, {0x0013, 0x0190}, {0x0013, 0x0191}, {0x0013, 0x0192}, + {0x0013, 0x0193}, {0x0013, 0x0194}, {0x0013, 0x0195}, {0x0013, 0x0196}, {0x0013, 0x0197}, {0x0013, 0x0198}, {0x0013, 0x0199}, {0x0013, 0x019a}, + {0x0013, 0x019b}, {0x0013, 0x019c}, {0x0013, 0x019d}, {0x0013, 0x019e}, {0x0013, 0x019f}, {0x0013, 0x01a0}, {0x0013, 0x01a1}, {0x0013, 0x01a2}, + {0x0013, 0x01a3}, {0x0013, 0x01a4}, {0x0013, 0x01a5}, {0x0013, 0x01a6}, {0x0013, 0x01a7}, {0x0013, 0x01a8}, {0x0013, 0x01a9}, {0x0013, 0x01aa}, + {0x0013, 0x01ab}, {0x0013, 0x01ac}, {0x0013, 0x01ad}, {0x0013, 0x01ae}, {0x0013, 0x01af}, {0x0013, 0x01b0}, {0x0013, 0x01b1}, {0x0013, 0x01b2}, + {0x0013, 0x01b3}, {0x0013, 0x01b4}, {0x0013, 0x01b5}, {0x0013, 0x01b6}, {0x0013, 0x01b7}, {0x0013, 0x01b8}, {0x0013, 0x01b9}, {0x0013, 0x01ba}, + {0x0013, 0x01bb}, {0x0013, 0x01bc}, {0x0013, 0x01bd}, {0x0013, 0x01be}, {0x0013, 0x01bf}, {0x0013, 0x01c0}, {0x0013, 0x01c1}, {0x0013, 0x01c2}, + {0x0013, 0x01c3}, {0x0013, 0x01c4}, {0x0013, 0x01c5}, {0x0013, 0x01c6}, {0x0013, 0x01c7}, {0x0013, 0x01c8}, {0x0013, 0x01c9}, {0x0013, 0x01ca}, + {0x0013, 0x01cb}, {0x0013, 0x01cc}, {0x0013, 0x01cd}, {0x0013, 0x01ce}, {0x0013, 0x01cf}, {0x0013, 0x01d0}, {0x0013, 0x01d1}, {0x0013, 0x01d2}, + {0x0013, 0x01d3}, {0x0013, 0x01d4}, {0x0013, 0x01d5}, {0x0013, 0x01d6}, {0x0013, 0x01d7}, {0x0013, 0x01d8}, {0x0013, 0x01d9}, {0x0013, 0x01da}, + {0x0013, 0x01db}, {0x0013, 0x01dc}, {0x0013, 0x01dd}, {0x0013, 0x01de}, {0x0013, 0x01df}, {0x0013, 0x01e0}, {0x0013, 0x01e1}, {0x0013, 0x01e2}, + {0x0013, 0x01e3}, {0x0013, 0x01e4}, {0x0013, 0x01e5}, {0x0013, 0x01e6}, {0x0013, 0x01e7}, {0x0013, 0x01e8}, {0x0013, 0x01e9}, {0x0013, 0x01ea}, + {0x0013, 0x01eb}, {0x0013, 0x01ec}, {0x0013, 0x01ed}, {0x0013, 0x01ee}, {0x0013, 0x01ef}, {0x0013, 0x01f0}, {0x0013, 0x01f1}, {0x0013, 0x01f2}, + {0x0013, 0x01f3}, {0x0013, 0x01f4}, {0x0013, 0x01f5}, {0x0013, 0x01f6}, {0x0013, 0x01f7}, {0x0013, 0x01f8}, {0x0013, 0x01f9}, {0x0013, 0x01fa}, + {0x0013, 0x01fb}, {0x0013, 0x01fc}, {0x0013, 0x01fd}, {0x0013, 0x01fe}, {0x0013, 0x01ff}, {0x0013, 0x0200}, {0x0013, 0x0201}, {0x0013, 0x0202}, + {0x0013, 0x0203}, {0x0013, 0x0204}, {0x0013, 0x0205}, {0x0013, 0x0206}, {0x0013, 0x0207}, {0x0013, 0x0208}, {0x0013, 0x0209}, {0x0013, 0x020a}, + {0x0013, 0x020b}, {0x0013, 0x020c}, {0x0013, 0x020d}, {0x0013, 0x020e}, {0x0013, 0x020f}, {0x0013, 0x0210}, {0x0013, 0x0211}, {0x0013, 0x0212}, + {0x0013, 0x0213}, {0x0013, 0x0214}, {0x0013, 0x0215}, {0x0013, 0x0216}, {0x0013, 0x0217}, {0x0013, 0x0218}, {0x0013, 0x0219}, {0x0013, 0x021a}, + {0x0013, 0x021b}, {0x0013, 0x021c}, {0x0013, 0x021d}, {0x0013, 0x021e}, {0x0013, 0x021f}, {0x0013, 0x0220}, {0x0013, 0x0221}, {0x0013, 0x0222}, + {0x0013, 0x0223}, {0x0013, 0x0224}, {0x0013, 0x0225}, {0x0013, 0x0226}, {0x0013, 0x0227}, {0x0013, 0x0228}, {0x0013, 0x0229}, {0x0013, 0x022a}, + {0x0013, 0x022b}, {0x0013, 0x022c}, {0x0013, 0x022d}, {0x0013, 0x022e}, {0x0013, 0x022f}, {0x0013, 0x0230}, {0x0013, 0x0231}, {0x0013, 0x0232}, + {0x0013, 0x0233}, {0x0013, 0x0234}, {0x0013, 0x0235}, {0x0013, 0x0236}, {0x0013, 0x0237}, {0x0013, 0x0238}, {0x0013, 0x0239}, {0x0013, 0x023a}, + {0x0013, 0x023b}, {0x0013, 0x023c}, {0x0013, 0x023d}, {0x0013, 0x023e}, {0x0013, 0x023f}, {0x0013, 0x0240}, {0x0013, 0x0241}, {0x0013, 0x0242}, + {0x0013, 0x0243}, {0x0013, 0x0244}, {0x0013, 0x0245}, {0x0013, 0x0246}, {0x0013, 0x0247}, {0x0013, 0x0248}, {0x0013, 0x0249}, {0x0013, 0x024a}, + {0x0013, 0x024b}, {0x0013, 0x024c}, {0x0013, 0x024d}, {0x0013, 0x024e}, {0x0013, 0x024f}, {0x0013, 0x0250}, {0x0013, 0x0251}, {0x0013, 0x0252}, + {0x0013, 0x0253}, + +}; + +const uint32_t c_aauiCQMFHuffDec49[113][16] = +{ + {0x0006ffff, 0x0005ffff, 0x0004ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x00010001, 0x00010001, 0x0001001b, 0x0001001b, 0x0001001c, 0x0001001c, 0x00020000, 0x00020000, 0x00020000, 0x00020000, }, + {0x00020052, 0x00020052, 0x00020052, 0x00020052, 0x00020053, 0x00020053, 0x00020053, 0x00020053, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, }, + {0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, }, + {0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, }, + {0x0001006d, 0x0001006d, 0x0001006e, 0x0001006e, 0x0001006f, 0x0001006f, 0x00010088, 0x00010088, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, 0x00020039, 0x00020039, 0x00020039, 0x00020039, }, + {0x00000070, 0x00000087, 0x00000089, 0x0000008a, 0x00010003, 0x00010003, 0x0001001f, 0x0001001f, 0x0001003a, 0x0001003a, 0x00010051, 0x00010051, 0x00010054, 0x00010054, 0x00010055, 0x00010055, }, + {0x000fffff, 0x000effff, 0x000cffff, 0x000dffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x00000004, 0x00000005, 0x00000020, 0x00000021, 0x0000003b, 0x00000056, 0x0000006c, }, + {0x000200bf, 0x000200bf, 0x000200bf, 0x000200bf, 0x000200c0, 0x000200c0, 0x000200c0, 0x000200c0, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, + {0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, }, + {0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x0003008b, 0x0003008b, 0x0003008b, 0x0003008b, 0x0003008b, 0x0003008b, 0x0003008b, 0x0003008b, }, + {0x000300a2, 0x000300a2, 0x000300a2, 0x000300a2, 0x000300a2, 0x000300a2, 0x000300a2, 0x000300a2, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, }, + {0x000300a4, 0x000300a4, 0x000300a4, 0x000300a4, 0x000300a4, 0x000300a4, 0x000300a4, 0x000300a4, 0x000300a5, 0x000300a5, 0x000300a5, 0x000300a5, 0x000300a5, 0x000300a5, 0x000300a5, 0x000300a5, }, + {0x0001008d, 0x0001008d, 0x000100a7, 0x000100a7, 0x000100bd, 0x000100bd, 0x000100d9, 0x000100d9, 0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003d, }, + {0x00020072, 0x00020072, 0x00020072, 0x00020072, 0x0002008c, 0x0002008c, 0x0002008c, 0x0002008c, 0x000200a6, 0x000200a6, 0x000200a6, 0x000200a6, 0x000200be, 0x000200be, 0x000200be, 0x000200be, }, + {0x00000059, 0x00000073, 0x0000008e, 0x000000a8, 0x000000c1, 0x000000c2, 0x000000d8, 0x000000da, 0x000000db, 0x000000dc, 0x00010007, 0x00010007, 0x00010023, 0x00010023, 0x00010058, 0x00010058, }, + {0x0023ffff, 0x0034ffff, 0x0045ffff, 0x0056ffff, 0x001affff, 0x0019ffff, 0x0018ffff, 0x0015ffff, 0x0016ffff, 0x0017ffff, 0x0011ffff, 0x0010ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, 0x0000003e, }, + {0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, }, + {0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, + {0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, }, + {0x000300c3, 0x000300c3, 0x000300c3, 0x000300c3, 0x000300c3, 0x000300c3, 0x000300c3, 0x000300c3, 0x000300f4, 0x000300f4, 0x000300f4, 0x000300f4, 0x000300f4, 0x000300f4, 0x000300f4, 0x000300f4, }, + {0x000300f5, 0x000300f5, 0x000300f5, 0x000300f5, 0x000300f5, 0x000300f5, 0x000300f5, 0x000300f5, 0x000300f6, 0x000300f6, 0x000300f6, 0x000300f6, 0x000300f6, 0x000300f6, 0x000300f6, 0x000300f6, }, + {0x00010112, 0x00010112, 0x0001012a, 0x0001012a, 0x0002005a, 0x0002005a, 0x0002005a, 0x0002005a, 0x00020075, 0x00020075, 0x00020075, 0x00020075, 0x0002008f, 0x0002008f, 0x0002008f, 0x0002008f, }, + {0x00020090, 0x00020090, 0x00020090, 0x00020090, 0x000200aa, 0x000200aa, 0x000200aa, 0x000200aa, 0x000200c4, 0x000200c4, 0x000200c4, 0x000200c4, 0x000200dd, 0x000200dd, 0x000200dd, 0x000200dd, }, + {0x000200de, 0x000200de, 0x000200de, 0x000200de, 0x000200f3, 0x000200f3, 0x000200f3, 0x000200f3, 0x000200f7, 0x000200f7, 0x000200f7, 0x000200f7, 0x00020110, 0x00020110, 0x00020110, 0x00020110, }, + {0x0000012c, 0x0000012e, 0x00010025, 0x00010025, 0x00010040, 0x00010040, 0x0001005b, 0x0001005b, 0x000100df, 0x000100df, 0x000100f8, 0x000100f8, 0x0001010f, 0x0001010f, 0x00010111, 0x00010111, }, + {0x001fffff, 0x0020ffff, 0x0000000a, 0x00000026, 0x00000041, 0x00000091, 0x000000ab, 0x000000ac, 0x000000c5, 0x000000c6, 0x000000e0, 0x000000f9, 0x0000010e, 0x00000113, 0x00000129, 0x0000012b, }, + {0x0067ffff, 0x0068ffff, 0x0069ffff, 0x006affff, 0x006bffff, 0x006cffff, 0x006dffff, 0x006effff, 0x006fffff, 0x0070ffff, 0x0021ffff, 0x0022ffff, 0x001cffff, 0x001bffff, 0x001dffff, 0x001effff, }, + {0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, }, + {0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, }, + {0x00030092, 0x00030092, 0x00030092, 0x00030092, 0x00030092, 0x00030092, 0x00030092, 0x00030092, 0x000300e1, 0x000300e1, 0x000300e1, 0x000300e1, 0x000300e1, 0x000300e1, 0x000300e1, 0x000300e1, }, + {0x000300fa, 0x000300fa, 0x000300fa, 0x000300fa, 0x000300fa, 0x000300fa, 0x000300fa, 0x000300fa, 0x000300fb, 0x000300fb, 0x000300fb, 0x000300fb, 0x000300fb, 0x000300fb, 0x000300fb, 0x000300fb, }, + {0x00030114, 0x00030114, 0x00030114, 0x00030114, 0x00030114, 0x00030114, 0x00030114, 0x00030114, 0x0003012d, 0x0003012d, 0x0003012d, 0x0003012d, 0x0003012d, 0x0003012d, 0x0003012d, 0x0003012d, }, + {0x00030145, 0x00030145, 0x00030145, 0x00030145, 0x00030145, 0x00030145, 0x00030145, 0x00030145, 0x00030146, 0x00030146, 0x00030146, 0x00030146, 0x00030146, 0x00030146, 0x00030146, 0x00030146, }, + {0x000102d5, 0x000102d5, 0x000102d6, 0x000102d6, 0x000102d7, 0x000102d7, 0x000102d8, 0x000102d8, 0x00020027, 0x00020027, 0x00020027, 0x00020027, 0x000200fc, 0x000200fc, 0x000200fc, 0x000200fc, }, + {0x00020116, 0x00020116, 0x00020116, 0x00020116, 0x00020131, 0x00020131, 0x00020131, 0x00020131, 0x00020144, 0x00020144, 0x00020144, 0x00020144, 0x00020164, 0x00020164, 0x00020164, 0x00020164, }, + {0x0025ffff, 0x0026ffff, 0x0028ffff, 0x002affff, 0x002effff, 0x0029ffff, 0x0027ffff, 0x0033ffff, 0x002dffff, 0x0024ffff, 0x002bffff, 0x002cffff, 0x002fffff, 0x0030ffff, 0x0031ffff, 0x0032ffff, }, + {0x00010085, 0x00010085, 0x00010086, 0x00010086, 0x00010093, 0x00010093, 0x00010094, 0x00010094, 0x00010095, 0x00010095, 0x00010096, 0x00010096, 0x00010097, 0x00010097, 0x00010098, 0x00010098, }, + {0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, 0x00010010, 0x00010010, 0x00010011, 0x00010011, 0x00010012, 0x00010012, 0x00010013, 0x00010013, }, + {0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x0001001a, 0x0001001a, 0x00010028, 0x00010028, }, + {0x00010061, 0x00010061, 0x00010062, 0x00010062, 0x00010063, 0x00010063, 0x00010064, 0x00010064, 0x00010065, 0x00010065, 0x00010066, 0x00010066, 0x00010067, 0x00010067, 0x00010068, 0x00010068, }, + {0x00010029, 0x00010029, 0x0001002a, 0x0001002a, 0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, 0x0001002e, 0x0001002e, 0x0001002f, 0x0001002f, 0x00010030, 0x00010030, }, + {0x0001004d, 0x0001004d, 0x0001004e, 0x0001004e, 0x0001004f, 0x0001004f, 0x00010050, 0x00010050, 0x0001005d, 0x0001005d, 0x0001005e, 0x0001005e, 0x0001005f, 0x0001005f, 0x00010060, 0x00010060, }, + {0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x00010042, 0x00010042, 0x00010043, 0x00010043, 0x00010044, 0x00010044, }, + {0x00010099, 0x00010099, 0x0001009a, 0x0001009a, 0x0001009b, 0x0001009b, 0x0001009c, 0x0001009c, 0x0001009d, 0x0001009d, 0x0001009e, 0x0001009e, 0x0001009f, 0x0001009f, 0x000100a0, 0x000100a0, }, + {0x000100a1, 0x000100a1, 0x000100ad, 0x000100ad, 0x000100ae, 0x000100ae, 0x000100af, 0x000100af, 0x000100b0, 0x000100b0, 0x000100b1, 0x000100b1, 0x000100b2, 0x000100b2, 0x000100b3, 0x000100b3, }, + {0x0001007d, 0x0001007d, 0x0001007e, 0x0001007e, 0x0001007f, 0x0001007f, 0x00010080, 0x00010080, 0x00010081, 0x00010081, 0x00010082, 0x00010082, 0x00010083, 0x00010083, 0x00010084, 0x00010084, }, + {0x00010045, 0x00010045, 0x00010046, 0x00010046, 0x00010047, 0x00010047, 0x00010048, 0x00010048, 0x00010049, 0x00010049, 0x0001004a, 0x0001004a, 0x0001004b, 0x0001004b, 0x0001004c, 0x0001004c, }, + {0x000100b4, 0x000100b4, 0x000100b5, 0x000100b5, 0x000100b6, 0x000100b6, 0x000100b7, 0x000100b7, 0x000100b8, 0x000100b8, 0x000100b9, 0x000100b9, 0x000100ba, 0x000100ba, 0x000100bb, 0x000100bb, }, + {0x000100bc, 0x000100bc, 0x000100c7, 0x000100c7, 0x000100c8, 0x000100c8, 0x000100c9, 0x000100c9, 0x000100ca, 0x000100ca, 0x000100cb, 0x000100cb, 0x000100cc, 0x000100cc, 0x000100cd, 0x000100cd, }, + {0x000100ce, 0x000100ce, 0x000100cf, 0x000100cf, 0x000100d0, 0x000100d0, 0x000100d1, 0x000100d1, 0x000100d2, 0x000100d2, 0x000100d3, 0x000100d3, 0x000100d4, 0x000100d4, 0x000100d5, 0x000100d5, }, + {0x000100d6, 0x000100d6, 0x000100d7, 0x000100d7, 0x000100e2, 0x000100e2, 0x000100e3, 0x000100e3, 0x000100e4, 0x000100e4, 0x000100e5, 0x000100e5, 0x000100e6, 0x000100e6, 0x000100e7, 0x000100e7, }, + {0x00010069, 0x00010069, 0x0001006a, 0x0001006a, 0x0001006b, 0x0001006b, 0x00010078, 0x00010078, 0x00010079, 0x00010079, 0x0001007a, 0x0001007a, 0x0001007b, 0x0001007b, 0x0001007c, 0x0001007c, }, + {0x0035ffff, 0x0036ffff, 0x0037ffff, 0x0038ffff, 0x0039ffff, 0x003affff, 0x003bffff, 0x003cffff, 0x003dffff, 0x003effff, 0x003fffff, 0x0040ffff, 0x0041ffff, 0x0042ffff, 0x0043ffff, 0x0044ffff, }, + {0x000100e8, 0x000100e8, 0x000100e9, 0x000100e9, 0x000100ea, 0x000100ea, 0x000100eb, 0x000100eb, 0x000100ec, 0x000100ec, 0x000100ed, 0x000100ed, 0x000100ee, 0x000100ee, 0x000100ef, 0x000100ef, }, + {0x000100f0, 0x000100f0, 0x000100f1, 0x000100f1, 0x000100f2, 0x000100f2, 0x000100fd, 0x000100fd, 0x000100fe, 0x000100fe, 0x000100ff, 0x000100ff, 0x00010100, 0x00010100, 0x00010101, 0x00010101, }, + {0x00010102, 0x00010102, 0x00010103, 0x00010103, 0x00010104, 0x00010104, 0x00010105, 0x00010105, 0x00010106, 0x00010106, 0x00010107, 0x00010107, 0x00010108, 0x00010108, 0x00010109, 0x00010109, }, + {0x0001010a, 0x0001010a, 0x0001010b, 0x0001010b, 0x0001010c, 0x0001010c, 0x0001010d, 0x0001010d, 0x00010115, 0x00010115, 0x00010117, 0x00010117, 0x00010118, 0x00010118, 0x00010119, 0x00010119, }, + {0x0001011a, 0x0001011a, 0x0001011b, 0x0001011b, 0x0001011c, 0x0001011c, 0x0001011d, 0x0001011d, 0x0001011e, 0x0001011e, 0x0001011f, 0x0001011f, 0x00010120, 0x00010120, 0x00010121, 0x00010121, }, + {0x00010122, 0x00010122, 0x00010123, 0x00010123, 0x00010124, 0x00010124, 0x00010125, 0x00010125, 0x00010126, 0x00010126, 0x00010127, 0x00010127, 0x00010128, 0x00010128, 0x0001012f, 0x0001012f, }, + {0x00010130, 0x00010130, 0x00010132, 0x00010132, 0x00010133, 0x00010133, 0x00010134, 0x00010134, 0x00010135, 0x00010135, 0x00010136, 0x00010136, 0x00010137, 0x00010137, 0x00010138, 0x00010138, }, + {0x00010139, 0x00010139, 0x0001013a, 0x0001013a, 0x0001013b, 0x0001013b, 0x0001013c, 0x0001013c, 0x0001013d, 0x0001013d, 0x0001013e, 0x0001013e, 0x0001013f, 0x0001013f, 0x00010140, 0x00010140, }, + {0x00010141, 0x00010141, 0x00010142, 0x00010142, 0x00010143, 0x00010143, 0x00010147, 0x00010147, 0x00010148, 0x00010148, 0x00010149, 0x00010149, 0x0001014a, 0x0001014a, 0x0001014b, 0x0001014b, }, + {0x0001014c, 0x0001014c, 0x0001014d, 0x0001014d, 0x0001014e, 0x0001014e, 0x0001014f, 0x0001014f, 0x00010150, 0x00010150, 0x00010151, 0x00010151, 0x00010152, 0x00010152, 0x00010153, 0x00010153, }, + {0x00010154, 0x00010154, 0x00010155, 0x00010155, 0x00010156, 0x00010156, 0x00010157, 0x00010157, 0x00010158, 0x00010158, 0x00010159, 0x00010159, 0x0001015a, 0x0001015a, 0x0001015b, 0x0001015b, }, + {0x0001015c, 0x0001015c, 0x0001015d, 0x0001015d, 0x0001015e, 0x0001015e, 0x0001015f, 0x0001015f, 0x00010160, 0x00010160, 0x00010161, 0x00010161, 0x00010162, 0x00010162, 0x00010163, 0x00010163, }, + {0x00010165, 0x00010165, 0x00010166, 0x00010166, 0x00010167, 0x00010167, 0x00010168, 0x00010168, 0x00010169, 0x00010169, 0x0001016a, 0x0001016a, 0x0001016b, 0x0001016b, 0x0001016c, 0x0001016c, }, + {0x0001016d, 0x0001016d, 0x0001016e, 0x0001016e, 0x0001016f, 0x0001016f, 0x00010170, 0x00010170, 0x00010171, 0x00010171, 0x00010172, 0x00010172, 0x00010173, 0x00010173, 0x00010174, 0x00010174, }, + {0x00010175, 0x00010175, 0x00010176, 0x00010176, 0x00010177, 0x00010177, 0x00010178, 0x00010178, 0x00010179, 0x00010179, 0x0001017a, 0x0001017a, 0x0001017b, 0x0001017b, 0x0001017c, 0x0001017c, }, + {0x0001017d, 0x0001017d, 0x0001017e, 0x0001017e, 0x0001017f, 0x0001017f, 0x00010180, 0x00010180, 0x00010181, 0x00010181, 0x00010182, 0x00010182, 0x00010183, 0x00010183, 0x00010184, 0x00010184, }, + {0x0046ffff, 0x0047ffff, 0x0048ffff, 0x0049ffff, 0x004affff, 0x004bffff, 0x004cffff, 0x004dffff, 0x004effff, 0x004fffff, 0x0050ffff, 0x0051ffff, 0x0052ffff, 0x0053ffff, 0x0054ffff, 0x0055ffff, }, + {0x00010185, 0x00010185, 0x00010186, 0x00010186, 0x00010187, 0x00010187, 0x00010188, 0x00010188, 0x00010189, 0x00010189, 0x0001018a, 0x0001018a, 0x0001018b, 0x0001018b, 0x0001018c, 0x0001018c, }, + {0x0001018d, 0x0001018d, 0x0001018e, 0x0001018e, 0x0001018f, 0x0001018f, 0x00010190, 0x00010190, 0x00010191, 0x00010191, 0x00010192, 0x00010192, 0x00010193, 0x00010193, 0x00010194, 0x00010194, }, + {0x00010195, 0x00010195, 0x00010196, 0x00010196, 0x00010197, 0x00010197, 0x00010198, 0x00010198, 0x00010199, 0x00010199, 0x0001019a, 0x0001019a, 0x0001019b, 0x0001019b, 0x0001019c, 0x0001019c, }, + {0x0001019d, 0x0001019d, 0x0001019e, 0x0001019e, 0x0001019f, 0x0001019f, 0x000101a0, 0x000101a0, 0x000101a1, 0x000101a1, 0x000101a2, 0x000101a2, 0x000101a3, 0x000101a3, 0x000101a4, 0x000101a4, }, + {0x000101a5, 0x000101a5, 0x000101a6, 0x000101a6, 0x000101a7, 0x000101a7, 0x000101a8, 0x000101a8, 0x000101a9, 0x000101a9, 0x000101aa, 0x000101aa, 0x000101ab, 0x000101ab, 0x000101ac, 0x000101ac, }, + {0x000101ad, 0x000101ad, 0x000101ae, 0x000101ae, 0x000101af, 0x000101af, 0x000101b0, 0x000101b0, 0x000101b1, 0x000101b1, 0x000101b2, 0x000101b2, 0x000101b3, 0x000101b3, 0x000101b4, 0x000101b4, }, + {0x000101b5, 0x000101b5, 0x000101b6, 0x000101b6, 0x000101b7, 0x000101b7, 0x000101b8, 0x000101b8, 0x000101b9, 0x000101b9, 0x000101ba, 0x000101ba, 0x000101bb, 0x000101bb, 0x000101bc, 0x000101bc, }, + {0x000101bd, 0x000101bd, 0x000101be, 0x000101be, 0x000101bf, 0x000101bf, 0x000101c0, 0x000101c0, 0x000101c1, 0x000101c1, 0x000101c2, 0x000101c2, 0x000101c3, 0x000101c3, 0x000101c4, 0x000101c4, }, + {0x000101c5, 0x000101c5, 0x000101c6, 0x000101c6, 0x000101c7, 0x000101c7, 0x000101c8, 0x000101c8, 0x000101c9, 0x000101c9, 0x000101ca, 0x000101ca, 0x000101cb, 0x000101cb, 0x000101cc, 0x000101cc, }, + {0x000101cd, 0x000101cd, 0x000101ce, 0x000101ce, 0x000101cf, 0x000101cf, 0x000101d0, 0x000101d0, 0x000101d1, 0x000101d1, 0x000101d2, 0x000101d2, 0x000101d3, 0x000101d3, 0x000101d4, 0x000101d4, }, + {0x000101d5, 0x000101d5, 0x000101d6, 0x000101d6, 0x000101d7, 0x000101d7, 0x000101d8, 0x000101d8, 0x000101d9, 0x000101d9, 0x000101da, 0x000101da, 0x000101db, 0x000101db, 0x000101dc, 0x000101dc, }, + {0x000101dd, 0x000101dd, 0x000101de, 0x000101de, 0x000101df, 0x000101df, 0x000101e0, 0x000101e0, 0x000101e1, 0x000101e1, 0x000101e2, 0x000101e2, 0x000101e3, 0x000101e3, 0x000101e4, 0x000101e4, }, + {0x000101e5, 0x000101e5, 0x000101e6, 0x000101e6, 0x000101e7, 0x000101e7, 0x000101e8, 0x000101e8, 0x000101e9, 0x000101e9, 0x000101ea, 0x000101ea, 0x000101eb, 0x000101eb, 0x000101ec, 0x000101ec, }, + {0x000101ed, 0x000101ed, 0x000101ee, 0x000101ee, 0x000101ef, 0x000101ef, 0x000101f0, 0x000101f0, 0x000101f1, 0x000101f1, 0x000101f2, 0x000101f2, 0x000101f3, 0x000101f3, 0x000101f4, 0x000101f4, }, + {0x000101f5, 0x000101f5, 0x000101f6, 0x000101f6, 0x000101f7, 0x000101f7, 0x000101f8, 0x000101f8, 0x000101f9, 0x000101f9, 0x000101fa, 0x000101fa, 0x000101fb, 0x000101fb, 0x000101fc, 0x000101fc, }, + {0x000101fd, 0x000101fd, 0x000101fe, 0x000101fe, 0x000101ff, 0x000101ff, 0x00010200, 0x00010200, 0x00010201, 0x00010201, 0x00010202, 0x00010202, 0x00010203, 0x00010203, 0x00010204, 0x00010204, }, + {0x0057ffff, 0x0058ffff, 0x0059ffff, 0x005affff, 0x005bffff, 0x005cffff, 0x005dffff, 0x005effff, 0x005fffff, 0x0060ffff, 0x0061ffff, 0x0062ffff, 0x0063ffff, 0x0064ffff, 0x0065ffff, 0x0066ffff, }, + {0x00010205, 0x00010205, 0x00010206, 0x00010206, 0x00010207, 0x00010207, 0x00010208, 0x00010208, 0x00010209, 0x00010209, 0x0001020a, 0x0001020a, 0x0001020b, 0x0001020b, 0x0001020c, 0x0001020c, }, + {0x0001020d, 0x0001020d, 0x0001020e, 0x0001020e, 0x0001020f, 0x0001020f, 0x00010210, 0x00010210, 0x00010211, 0x00010211, 0x00010212, 0x00010212, 0x00010213, 0x00010213, 0x00010214, 0x00010214, }, + {0x00010215, 0x00010215, 0x00010216, 0x00010216, 0x00010217, 0x00010217, 0x00010218, 0x00010218, 0x00010219, 0x00010219, 0x0001021a, 0x0001021a, 0x0001021b, 0x0001021b, 0x0001021c, 0x0001021c, }, + {0x0001021d, 0x0001021d, 0x0001021e, 0x0001021e, 0x0001021f, 0x0001021f, 0x00010220, 0x00010220, 0x00010221, 0x00010221, 0x00010222, 0x00010222, 0x00010223, 0x00010223, 0x00010224, 0x00010224, }, + {0x00010225, 0x00010225, 0x00010226, 0x00010226, 0x00010227, 0x00010227, 0x00010228, 0x00010228, 0x00010229, 0x00010229, 0x0001022a, 0x0001022a, 0x0001022b, 0x0001022b, 0x0001022c, 0x0001022c, }, + {0x0001022d, 0x0001022d, 0x0001022e, 0x0001022e, 0x0001022f, 0x0001022f, 0x00010230, 0x00010230, 0x00010231, 0x00010231, 0x00010232, 0x00010232, 0x00010233, 0x00010233, 0x00010234, 0x00010234, }, + {0x00010235, 0x00010235, 0x00010236, 0x00010236, 0x00010237, 0x00010237, 0x00010238, 0x00010238, 0x00010239, 0x00010239, 0x0001023a, 0x0001023a, 0x0001023b, 0x0001023b, 0x0001023c, 0x0001023c, }, + {0x0001023d, 0x0001023d, 0x0001023e, 0x0001023e, 0x0001023f, 0x0001023f, 0x00010240, 0x00010240, 0x00010241, 0x00010241, 0x00010242, 0x00010242, 0x00010243, 0x00010243, 0x00010244, 0x00010244, }, + {0x00010245, 0x00010245, 0x00010246, 0x00010246, 0x00010247, 0x00010247, 0x00010248, 0x00010248, 0x00010249, 0x00010249, 0x0001024a, 0x0001024a, 0x0001024b, 0x0001024b, 0x0001024c, 0x0001024c, }, + {0x0001024d, 0x0001024d, 0x0001024e, 0x0001024e, 0x0001024f, 0x0001024f, 0x00010250, 0x00010250, 0x00010251, 0x00010251, 0x00010252, 0x00010252, 0x00010253, 0x00010253, 0x00010254, 0x00010254, }, + {0x00010255, 0x00010255, 0x00010256, 0x00010256, 0x00010257, 0x00010257, 0x00010258, 0x00010258, 0x00010259, 0x00010259, 0x0001025a, 0x0001025a, 0x0001025b, 0x0001025b, 0x0001025c, 0x0001025c, }, + {0x0001025d, 0x0001025d, 0x0001025e, 0x0001025e, 0x0001025f, 0x0001025f, 0x00010260, 0x00010260, 0x00010261, 0x00010261, 0x00010262, 0x00010262, 0x00010263, 0x00010263, 0x00010264, 0x00010264, }, + {0x00010265, 0x00010265, 0x00010266, 0x00010266, 0x00010267, 0x00010267, 0x00010268, 0x00010268, 0x00010269, 0x00010269, 0x0001026a, 0x0001026a, 0x0001026b, 0x0001026b, 0x0001026c, 0x0001026c, }, + {0x0001026d, 0x0001026d, 0x0001026e, 0x0001026e, 0x0001026f, 0x0001026f, 0x00010270, 0x00010270, 0x00010271, 0x00010271, 0x00010272, 0x00010272, 0x00010273, 0x00010273, 0x00010274, 0x00010274, }, + {0x00010275, 0x00010275, 0x00010276, 0x00010276, 0x00010277, 0x00010277, 0x00010278, 0x00010278, 0x00010279, 0x00010279, 0x0001027a, 0x0001027a, 0x0001027b, 0x0001027b, 0x0001027c, 0x0001027c, }, + {0x0001027d, 0x0001027d, 0x0001027e, 0x0001027e, 0x0001027f, 0x0001027f, 0x00010280, 0x00010280, 0x00010281, 0x00010281, 0x00010282, 0x00010282, 0x00010283, 0x00010283, 0x00010284, 0x00010284, }, + {0x00010285, 0x00010285, 0x00010286, 0x00010286, 0x00010287, 0x00010287, 0x00010288, 0x00010288, 0x00010289, 0x00010289, 0x0001028a, 0x0001028a, 0x0001028b, 0x0001028b, 0x0001028c, 0x0001028c, }, + {0x0001028d, 0x0001028d, 0x0001028e, 0x0001028e, 0x0001028f, 0x0001028f, 0x00010290, 0x00010290, 0x00010291, 0x00010291, 0x00010292, 0x00010292, 0x00010293, 0x00010293, 0x00010294, 0x00010294, }, + {0x00010295, 0x00010295, 0x00010296, 0x00010296, 0x00010297, 0x00010297, 0x00010298, 0x00010298, 0x00010299, 0x00010299, 0x0001029a, 0x0001029a, 0x0001029b, 0x0001029b, 0x0001029c, 0x0001029c, }, + {0x0001029d, 0x0001029d, 0x0001029e, 0x0001029e, 0x0001029f, 0x0001029f, 0x000102a0, 0x000102a0, 0x000102a1, 0x000102a1, 0x000102a2, 0x000102a2, 0x000102a3, 0x000102a3, 0x000102a4, 0x000102a4, }, + {0x000102a5, 0x000102a5, 0x000102a6, 0x000102a6, 0x000102a7, 0x000102a7, 0x000102a8, 0x000102a8, 0x000102a9, 0x000102a9, 0x000102aa, 0x000102aa, 0x000102ab, 0x000102ab, 0x000102ac, 0x000102ac, }, + {0x000102ad, 0x000102ad, 0x000102ae, 0x000102ae, 0x000102af, 0x000102af, 0x000102b0, 0x000102b0, 0x000102b1, 0x000102b1, 0x000102b2, 0x000102b2, 0x000102b3, 0x000102b3, 0x000102b4, 0x000102b4, }, + {0x000102b5, 0x000102b5, 0x000102b6, 0x000102b6, 0x000102b7, 0x000102b7, 0x000102b8, 0x000102b8, 0x000102b9, 0x000102b9, 0x000102ba, 0x000102ba, 0x000102bb, 0x000102bb, 0x000102bc, 0x000102bc, }, + {0x000102bd, 0x000102bd, 0x000102be, 0x000102be, 0x000102bf, 0x000102bf, 0x000102c0, 0x000102c0, 0x000102c1, 0x000102c1, 0x000102c2, 0x000102c2, 0x000102c3, 0x000102c3, 0x000102c4, 0x000102c4, }, + {0x000102c5, 0x000102c5, 0x000102c6, 0x000102c6, 0x000102c7, 0x000102c7, 0x000102c8, 0x000102c8, 0x000102c9, 0x000102c9, 0x000102ca, 0x000102ca, 0x000102cb, 0x000102cb, 0x000102cc, 0x000102cc, }, + {0x000102cd, 0x000102cd, 0x000102ce, 0x000102ce, 0x000102cf, 0x000102cf, 0x000102d0, 0x000102d0, 0x000102d1, 0x000102d1, 0x000102d2, 0x000102d2, 0x000102d3, 0x000102d3, 0x000102d4, 0x000102d4, }, +}; + +const uint32_t c_aauiCQMFHuffEnc50[28][2] = +{ + {0x0002, 0x0001}, {0x0002, 0x0002}, {0x0002, 0x0003}, {0x0003, 0x0001}, {0x0004, 0x0001}, {0x0005, 0x0001}, {0x0006, 0x0001}, {0x0007, 0x0001}, + {0x0008, 0x0001}, {0x0009, 0x0001}, {0x000a, 0x0001}, {0x000b, 0x0001}, {0x000c, 0x0001}, {0x000d, 0x0001}, {0x000e, 0x0001}, {0x000f, 0x0001}, + {0x0011, 0x0003}, {0x0012, 0x0005}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, + {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, + +}; + +const uint32_t c_aauiCQMFHuffDec50[6][16] = +{ + {0x0001ffff, 0x00000004, 0x00010003, 0x00010003, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00020002, 0x00020002, 0x00020002, 0x00020002, }, + {0x0002ffff, 0x00000008, 0x00010007, 0x00010007, 0x00020006, 0x00020006, 0x00020006, 0x00020006, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, }, + {0x0003ffff, 0x0000000c, 0x0001000b, 0x0001000b, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, + {0x0005ffff, 0x0004ffff, 0x0001000f, 0x0001000f, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, }, + {0x0001001a, 0x0001001a, 0x0001001b, 0x0001001b, 0x00020011, 0x00020011, 0x00020011, 0x00020011, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, }, + {0x00010012, 0x00010012, 0x00010013, 0x00010013, 0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010019, 0x00010019, }, +}; + +const uint32_t c_aauiCQMFHuffEnc51[29][2] = +{ + {0x0002, 0x0002}, {0x0002, 0x0003}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0004, 0x0001}, {0x0004, 0x0002}, {0x0004, 0x0003}, {0x0005, 0x0001}, + {0x0006, 0x0001}, {0x0007, 0x0001}, {0x0008, 0x0001}, {0x0009, 0x0001}, {0x000a, 0x0001}, {0x000b, 0x0001}, {0x000c, 0x0001}, {0x000d, 0x0001}, + {0x000e, 0x0001}, {0x0010, 0x0002}, {0x0010, 0x0003}, {0x0012, 0x0002}, {0x0012, 0x0003}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, + {0x0013, 0x0003}, {0x0012, 0x0004}, {0x0012, 0x0005}, {0x0012, 0x0006}, {0x0012, 0x0007}, + +}; + +const uint32_t c_aauiCQMFHuffDec51[6][16] = +{ + {0x0001ffff, 0x00000004, 0x00000005, 0x00000006, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020001, 0x00020001, 0x00020001, 0x00020001, }, + {0x0002ffff, 0x0000000a, 0x00010009, 0x00010009, 0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, }, + {0x0003ffff, 0x0000000e, 0x0001000d, 0x0001000d, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, + {0x0004ffff, 0x0005ffff, 0x00000011, 0x00000012, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, + {0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00020013, 0x00020013, 0x00020013, 0x00020013, 0x00020014, 0x00020014, 0x00020014, 0x00020014, }, + {0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, }, +}; + +const uint32_t c_aauiCQMFHuffEnc52[32][2] = +{ + {0x0002, 0x0002}, {0x0002, 0x0003}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0004, 0x0002}, {0x0004, 0x0003}, {0x0005, 0x0001}, {0x0005, 0x0002}, + {0x0005, 0x0003}, {0x0006, 0x0001}, {0x0007, 0x0001}, {0x0008, 0x0001}, {0x0009, 0x0001}, {0x000a, 0x0001}, {0x000b, 0x0001}, {0x000c, 0x0001}, + {0x000e, 0x0001}, {0x000e, 0x0002}, {0x000e, 0x0003}, {0x000f, 0x0001}, {0x0011, 0x0002}, {0x0011, 0x0003}, {0x0012, 0x0003}, {0x0014, 0x0000}, + {0x0013, 0x0003}, {0x0014, 0x0001}, {0x0014, 0x0002}, {0x0014, 0x0003}, {0x0014, 0x0004}, {0x0014, 0x0005}, {0x0013, 0x0004}, {0x0013, 0x0005}, +}; + +const uint32_t c_aauiCQMFHuffDec52[7][16] = +{ + {0x0001ffff, 0x0002ffff, 0x00000004, 0x00000005, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020001, 0x00020001, 0x00020001, 0x00020001, }, + {0x0003ffff, 0x0000000b, 0x0001000a, 0x0001000a, 0x00020009, 0x00020009, 0x00020009, 0x00020009, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, + {0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, }, + {0x0004ffff, 0x0000000f, 0x0001000e, 0x0001000e, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, + {0x0006ffff, 0x0005ffff, 0x00010013, 0x00010013, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x00020011, 0x00020011, 0x00020011, 0x00020011, 0x00020012, 0x00020012, 0x00020012, 0x00020012, }, + {0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, }, + {0x00000017, 0x00000019, 0x0000001a, 0x0000001b, 0x0000001c, 0x0000001d, 0x00010018, 0x00010018, 0x0001001e, 0x0001001e, 0x0001001f, 0x0001001f, 0x00020016, 0x00020016, 0x00020016, 0x00020016, }, +}; + +const uint32_t c_aauiCQMFHuffEnc53[37][2] = +{ + {0x0002, 0x0002}, {0x0002, 0x0003}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0004, 0x0002}, {0x0004, 0x0003}, {0x0005, 0x0002}, {0x0005, 0x0003}, + {0x0006, 0x0002}, {0x0006, 0x0003}, {0x0007, 0x0001}, {0x0007, 0x0002}, {0x0007, 0x0003}, {0x0008, 0x0001}, {0x0009, 0x0001}, {0x000b, 0x0002}, + {0x000b, 0x0003}, {0x000c, 0x0002}, {0x000c, 0x0003}, {0x000d, 0x0002}, {0x000d, 0x0003}, {0x000e, 0x0002}, {0x000e, 0x0003}, {0x000f, 0x0002}, + {0x000f, 0x0003}, {0x0011, 0x0004}, {0x0010, 0x0003}, {0x0011, 0x0005}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0012, 0x0001}, {0x0012, 0x0002}, + {0x0012, 0x0003}, {0x0012, 0x0004}, {0x0012, 0x0005}, {0x0012, 0x0006}, {0x0012, 0x0007}, + +}; + +const uint32_t c_aauiCQMFHuffDec53[9][16] = +{ + {0x0002ffff, 0x0001ffff, 0x00000004, 0x00000005, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020001, 0x00020001, 0x00020001, 0x00020001, }, + {0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, }, + {0x0003ffff, 0x0000000d, 0x0001000a, 0x0001000a, 0x0001000b, 0x0001000b, 0x0001000c, 0x0001000c, 0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x00020009, 0x00020009, 0x00020009, 0x00020009, }, + {0x0005ffff, 0x0004ffff, 0x00000011, 0x00000012, 0x0001000f, 0x0001000f, 0x00010010, 0x00010010, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, + {0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, }, + {0x0007ffff, 0x0008ffff, 0x0006ffff, 0x0000001a, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00020015, 0x00020015, 0x00020015, 0x00020015, 0x00020016, 0x00020016, 0x00020016, 0x00020016, }, + {0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, }, + {0x0001001c, 0x0001001c, 0x0001001d, 0x0001001d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x00020020, 0x00020020, 0x00020020, 0x00020020, }, + {0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x00020023, 0x00020023, 0x00020023, 0x00020023, 0x00020024, 0x00020024, 0x00020024, 0x00020024, }, +}; + +const uint32_t c_aauiCQMFHuffEnc54[39][2] = +{ + {0x0002, 0x0002}, {0x0002, 0x0003}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0004, 0x0003}, {0x0005, 0x0003}, {0x0005, 0x0004}, {0x0005, 0x0005}, + {0x0006, 0x0002}, {0x0006, 0x0003}, {0x0006, 0x0004}, {0x0006, 0x0005}, {0x0007, 0x0002}, {0x0007, 0x0003}, {0x0008, 0x0001}, {0x0008, 0x0002}, + {0x0008, 0x0003}, {0x000a, 0x0002}, {0x000a, 0x0003}, {0x000b, 0x0002}, {0x000b, 0x0003}, {0x000c, 0x0002}, {0x000c, 0x0003}, {0x000d, 0x0002}, + {0x000d, 0x0003}, {0x000e, 0x0002}, {0x000e, 0x0003}, {0x000f, 0x0002}, {0x000f, 0x0003}, {0x0011, 0x0002}, {0x0010, 0x0002}, {0x0010, 0x0003}, + {0x0011, 0x0003}, {0x0012, 0x0002}, {0x0012, 0x0003}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, + +}; + +const uint32_t c_aauiCQMFHuffDec54[9][16] = +{ + {0x0003ffff, 0x0001ffff, 0x0002ffff, 0x00000004, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020001, 0x00020001, 0x00020001, 0x00020001, }, + {0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, }, + {0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, }, + {0x0004ffff, 0x0000000e, 0x0000000f, 0x00000010, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x00020009, 0x00020009, 0x00020009, 0x00020009, }, + {0x0006ffff, 0x0005ffff, 0x00000015, 0x00000016, 0x00010013, 0x00010013, 0x00010014, 0x00010014, 0x00020011, 0x00020011, 0x00020011, 0x00020011, 0x00020012, 0x00020012, 0x00020012, 0x00020012, }, + {0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, }, + {0x0008ffff, 0x0007ffff, 0x0000001e, 0x0000001f, 0x0001001b, 0x0001001b, 0x0001001c, 0x0001001c, 0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, }, + {0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, }, + {0x00010023, 0x00010023, 0x00010024, 0x00010024, 0x00010025, 0x00010025, 0x00010026, 0x00010026, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, }, +}; + +const uint32_t c_aauiCQMFHuffEnc55[46][2] = +{ + {0x0003, 0x0003}, {0x0002, 0x0003}, {0x0003, 0x0004}, {0x0003, 0x0005}, {0x0004, 0x0003}, {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0005, 0x0003}, + {0x0005, 0x0004}, {0x0005, 0x0005}, {0x0006, 0x0003}, {0x0006, 0x0004}, {0x0006, 0x0005}, {0x0007, 0x0002}, {0x0007, 0x0003}, {0x0007, 0x0004}, + {0x0007, 0x0005}, {0x0008, 0x0002}, {0x0008, 0x0003}, {0x0009, 0x0002}, {0x0009, 0x0003}, {0x000a, 0x0002}, {0x000a, 0x0003}, {0x000b, 0x0002}, + {0x000b, 0x0003}, {0x000c, 0x0002}, {0x000c, 0x0003}, {0x000d, 0x0002}, {0x000d, 0x0003}, {0x000e, 0x0002}, {0x000e, 0x0003}, {0x000f, 0x0003}, + {0x0010, 0x0002}, {0x0010, 0x0003}, {0x0010, 0x0004}, {0x0010, 0x0005}, {0x0011, 0x0003}, {0x0012, 0x0003}, {0x0012, 0x0004}, {0x0012, 0x0005}, + {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, + +}; + +const uint32_t c_aauiCQMFHuffDec55[10][16] = +{ + {0x0003ffff, 0x0001ffff, 0x0002ffff, 0x00000004, 0x00000005, 0x00000006, 0x00010000, 0x00010000, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00020001, 0x00020001, 0x00020001, 0x00020001, }, + {0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, }, + {0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, + {0x0005ffff, 0x0004ffff, 0x00000011, 0x00000012, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, 0x00010010, 0x00010010, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, }, + {0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, }, + {0x0007ffff, 0x0006ffff, 0x00000019, 0x0000001a, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00020015, 0x00020015, 0x00020015, 0x00020015, 0x00020016, 0x00020016, 0x00020016, 0x00020016, }, + {0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, }, + {0x0009ffff, 0x0008ffff, 0x00000020, 0x00000021, 0x00000022, 0x00000023, 0x0001001f, 0x0001001f, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, }, + {0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00020027, 0x00020027, 0x00020027, 0x00020027, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, }, + {0x00010028, 0x00010028, 0x00010029, 0x00010029, 0x0001002a, 0x0001002a, 0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, 0x00020025, 0x00020025, 0x00020025, 0x00020025, }, +}; + +const uint32_t c_aauiCQMFHuffEnc56[55][2] = +{ + {0x0003, 0x0003}, {0x0002, 0x0003}, {0x0003, 0x0004}, {0x0003, 0x0005}, {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0005, 0x0003}, {0x0005, 0x0004}, + {0x0005, 0x0005}, {0x0005, 0x0006}, {0x0005, 0x0007}, {0x0006, 0x0003}, {0x0006, 0x0004}, {0x0006, 0x0005}, {0x0007, 0x0003}, {0x0007, 0x0004}, + {0x0007, 0x0005}, {0x0008, 0x0002}, {0x0008, 0x0003}, {0x0008, 0x0004}, {0x0008, 0x0005}, {0x0009, 0x0002}, {0x0009, 0x0003}, {0x000a, 0x0002}, + {0x000a, 0x0003}, {0x000b, 0x0003}, {0x000c, 0x0003}, {0x000c, 0x0004}, {0x000c, 0x0005}, {0x000d, 0x0003}, {0x000d, 0x0004}, {0x000d, 0x0005}, + {0x000e, 0x0003}, {0x000e, 0x0004}, {0x000e, 0x0005}, {0x000f, 0x0004}, {0x000f, 0x0005}, {0x0010, 0x0002}, {0x0010, 0x0003}, {0x0010, 0x0004}, + {0x0010, 0x0005}, {0x0010, 0x0006}, {0x0010, 0x0007}, {0x0013, 0x0000}, {0x0011, 0x0003}, {0x0012, 0x0005}, {0x0013, 0x0001}, {0x0013, 0x0002}, + {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, + +}; + +const uint32_t c_aauiCQMFHuffDec56[12][16] = +{ + {0x0004ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x00000004, 0x00000005, 0x00010000, 0x00010000, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00020001, 0x00020001, 0x00020001, 0x00020001, }, + {0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, + {0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, }, + {0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, }, + {0x0006ffff, 0x0005ffff, 0x00000011, 0x00000012, 0x00000013, 0x00000014, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, 0x00010010, 0x00010010, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, }, + {0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, }, + {0x0009ffff, 0x0007ffff, 0x0008ffff, 0x0000001a, 0x0000001b, 0x0000001c, 0x00010019, 0x00010019, 0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x00020018, 0x00020018, 0x00020018, 0x00020018, }, + {0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, }, + {0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, }, + {0x000bffff, 0x000affff, 0x00000025, 0x00000026, 0x00000027, 0x00000028, 0x00000029, 0x0000002a, 0x00010023, 0x00010023, 0x00010024, 0x00010024, 0x00020020, 0x00020020, 0x00020020, 0x00020020, }, + {0x00010035, 0x00010035, 0x00010036, 0x00010036, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002d, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, }, + {0x0001002b, 0x0001002b, 0x0001002e, 0x0001002e, 0x0001002f, 0x0001002f, 0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, }, +}; + +const uint32_t c_aauiCQMFHuffEnc57[65][2] = +{ + {0x0003, 0x0004}, {0x0002, 0x0003}, {0x0003, 0x0005}, {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0005, 0x0004}, + {0x0005, 0x0005}, {0x0005, 0x0006}, {0x0005, 0x0007}, {0x0006, 0x0004}, {0x0006, 0x0005}, {0x0006, 0x0006}, {0x0006, 0x0007}, {0x0007, 0x0003}, + {0x0007, 0x0004}, {0x0007, 0x0005}, {0x0007, 0x0006}, {0x0007, 0x0007}, {0x0008, 0x0003}, {0x0008, 0x0004}, {0x0008, 0x0005}, {0x0009, 0x0003}, + {0x0009, 0x0004}, {0x0009, 0x0005}, {0x000a, 0x0003}, {0x000a, 0x0004}, {0x000a, 0x0005}, {0x000b, 0x0003}, {0x000b, 0x0004}, {0x000b, 0x0005}, + {0x000c, 0x0003}, {0x000c, 0x0004}, {0x000d, 0x0003}, {0x000c, 0x0005}, {0x000d, 0x0004}, {0x000d, 0x0005}, {0x000e, 0x0003}, {0x000e, 0x0004}, + {0x000e, 0x0005}, {0x000f, 0x0003}, {0x0010, 0x0003}, {0x000f, 0x0004}, {0x000f, 0x0005}, {0x0010, 0x0004}, {0x0010, 0x0005}, {0x0013, 0x0000}, + {0x0011, 0x0005}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0012, 0x0007}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0012, 0x0008}, {0x0012, 0x0009}, + {0x0013, 0x0005}, {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0013, 0x000c}, + {0x0013, 0x000d}, + +}; + +const uint32_t c_aauiCQMFHuffDec57[14][16] = +{ + {0x0004ffff, 0x0003ffff, 0x0001ffff, 0x0002ffff, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00010000, 0x00010000, 0x00010002, 0x00010002, 0x00020001, 0x00020001, 0x00020001, 0x00020001, }, + {0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, }, + {0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, }, + {0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, }, + {0x0007ffff, 0x0005ffff, 0x0006ffff, 0x00000014, 0x00000015, 0x00000016, 0x0001000f, 0x0001000f, 0x00010010, 0x00010010, 0x00010011, 0x00010011, 0x00010012, 0x00010012, 0x00010013, 0x00010013, }, + {0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, }, + {0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, }, + {0x000affff, 0x0008ffff, 0x0009ffff, 0x00000020, 0x00000021, 0x00000023, 0x0001001d, 0x0001001d, 0x0001001e, 0x0001001e, 0x0001001f, 0x0001001f, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, }, + {0x00020027, 0x00020027, 0x00020027, 0x00020027, 0x00020028, 0x00020028, 0x00020028, 0x00020028, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, }, + {0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, }, + {0x000dffff, 0x000cffff, 0x000bffff, 0x0000002a, 0x0000002d, 0x0000002e, 0x00010029, 0x00010029, 0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x00020026, 0x00020026, 0x00020026, 0x00020026, }, + {0x00020036, 0x00020036, 0x00020036, 0x00020036, 0x00020037, 0x00020037, 0x00020037, 0x00020037, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, }, + {0x0001003b, 0x0001003b, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, 0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x00010040, 0x00010040, 0x00020033, 0x00020033, 0x00020033, 0x00020033, }, + {0x0001002f, 0x0001002f, 0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x00010038, 0x00010038, 0x00010039, 0x00010039, 0x0001003a, 0x0001003a, }, +}; + +const uint32_t c_aauiCQMFHuffEnc58[77][2] = +{ + {0x0004, 0x0005}, {0x0003, 0x0005}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0004, 0x0008}, {0x0004, 0x0009}, + {0x0005, 0x0005}, {0x0005, 0x0006}, {0x0005, 0x0007}, {0x0005, 0x0008}, {0x0005, 0x0009}, {0x0006, 0x0004}, {0x0006, 0x0005}, {0x0006, 0x0006}, + {0x0006, 0x0007}, {0x0006, 0x0008}, {0x0006, 0x0009}, {0x0007, 0x0004}, {0x0007, 0x0005}, {0x0007, 0x0006}, {0x0007, 0x0007}, {0x0008, 0x0003}, + {0x0008, 0x0004}, {0x0008, 0x0005}, {0x0008, 0x0006}, {0x0008, 0x0007}, {0x0009, 0x0003}, {0x0009, 0x0004}, {0x0009, 0x0005}, {0x000a, 0x0003}, + {0x000a, 0x0004}, {0x000a, 0x0005}, {0x000b, 0x0004}, {0x000b, 0x0005}, {0x000c, 0x0004}, {0x000c, 0x0005}, {0x000c, 0x0006}, {0x000c, 0x0007}, + {0x000d, 0x0004}, {0x000d, 0x0005}, {0x000d, 0x0006}, {0x000d, 0x0007}, {0x000e, 0x0004}, {0x000e, 0x0005}, {0x000e, 0x0006}, {0x000e, 0x0007}, + {0x000f, 0x0004}, {0x000f, 0x0005}, {0x000f, 0x0006}, {0x0010, 0x0004}, {0x000f, 0x0007}, {0x0010, 0x0005}, {0x0010, 0x0006}, {0x0010, 0x0007}, + {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0012, 0x0006}, {0x0011, 0x0007}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, + {0x0012, 0x0007}, {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0012, 0x0008}, + {0x0012, 0x0009}, {0x0012, 0x000a}, {0x0012, 0x000b}, {0x0012, 0x000c}, {0x0012, 0x000d}, + +}; + +const uint32_t c_aauiCQMFHuffDec58[17][16] = +{ + {0x0005ffff, 0x0004ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x00000000, 0x00000004, 0x00000005, 0x00000006, 0x00000007, 0x00010001, 0x00010001, 0x00010002, 0x00010002, 0x00010003, 0x00010003, }, + {0x00020011, 0x00020011, 0x00020011, 0x00020011, 0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, }, + {0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, }, + {0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, + {0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, 0x00020010, 0x00020010, 0x00020010, 0x00020010, }, + {0x0008ffff, 0x0006ffff, 0x0007ffff, 0x00000017, 0x00000018, 0x00000019, 0x0000001a, 0x0000001b, 0x00010013, 0x00010013, 0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00010016, 0x00010016, }, + {0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, }, + {0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, }, + {0x000cffff, 0x000bffff, 0x0009ffff, 0x000affff, 0x00000024, 0x00000025, 0x00000026, 0x00000027, 0x00010022, 0x00010022, 0x00010023, 0x00010023, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, }, + {0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, }, + {0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, }, + {0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002f, 0x0002002f, 0x0002002f, 0x0002002f, }, + {0x0010ffff, 0x000effff, 0x000fffff, 0x000dffff, 0x00000033, 0x00000035, 0x00000036, 0x00000037, 0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010034, 0x00010034, }, + {0x0002004b, 0x0002004b, 0x0002004b, 0x0002004b, 0x0002004c, 0x0002004c, 0x0002004c, 0x0002004c, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, }, + {0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, 0x00010046, 0x00010046, 0x0002003a, 0x0002003a, 0x0002003a, 0x0002003a, 0x00020040, 0x00020040, 0x00020040, 0x00020040, }, + {0x00020047, 0x00020047, 0x00020047, 0x00020047, 0x00020048, 0x00020048, 0x00020048, 0x00020048, 0x00020049, 0x00020049, 0x00020049, 0x00020049, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, }, + {0x00010038, 0x00010038, 0x00010039, 0x00010039, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, 0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x00010041, 0x00010041, 0x00010042, 0x00010042, }, +}; + +const uint32_t c_aauiCQMFHuffEnc59[91][2] = +{ + {0x0003, 0x0005}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0004, 0x0008}, {0x0004, 0x0009}, {0x0005, 0x0006}, + {0x0005, 0x0007}, {0x0005, 0x0008}, {0x0005, 0x0009}, {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0006, 0x0006}, {0x0006, 0x0007}, {0x0006, 0x0008}, + {0x0006, 0x0009}, {0x0006, 0x000a}, {0x0006, 0x000b}, {0x0007, 0x0005}, {0x0007, 0x0006}, {0x0007, 0x0007}, {0x0007, 0x0008}, {0x0007, 0x0009}, + {0x0007, 0x000a}, {0x0007, 0x000b}, {0x0008, 0x0003}, {0x0008, 0x0004}, {0x0008, 0x0005}, {0x0008, 0x0006}, {0x0008, 0x0007}, {0x0008, 0x0008}, + {0x0008, 0x0009}, {0x0009, 0x0004}, {0x0009, 0x0005}, {0x000a, 0x0004}, {0x000a, 0x0005}, {0x000a, 0x0006}, {0x000a, 0x0007}, {0x000b, 0x0004}, + {0x000b, 0x0005}, {0x000b, 0x0006}, {0x000b, 0x0007}, {0x000c, 0x0004}, {0x000c, 0x0005}, {0x000c, 0x0006}, {0x000c, 0x0007}, {0x000d, 0x0003}, + {0x000d, 0x0004}, {0x000d, 0x0005}, {0x000d, 0x0006}, {0x000d, 0x0007}, {0x000e, 0x0003}, {0x000e, 0x0004}, {0x000e, 0x0005}, {0x000f, 0x0003}, + {0x000f, 0x0004}, {0x000f, 0x0005}, {0x0011, 0x0008}, {0x0011, 0x0009}, {0x0013, 0x0000}, {0x0011, 0x000a}, {0x0013, 0x0001}, {0x0013, 0x0002}, + {0x0012, 0x000d}, {0x0012, 0x000e}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, {0x0011, 0x000b}, {0x0013, 0x0006}, {0x0013, 0x0007}, + {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0013, 0x000c}, {0x0013, 0x000d}, {0x0013, 0x000e}, {0x0013, 0x000f}, + {0x0013, 0x0010}, {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0013, 0x0014}, {0x0013, 0x0015}, {0x0013, 0x0016}, {0x0013, 0x0017}, + {0x0013, 0x0018}, {0x0013, 0x0019}, {0x0012, 0x000f}, + +}; + +const uint32_t c_aauiCQMFHuffDec59[20][16] = +{ + {0x0006ffff, 0x0004ffff, 0x0005ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00010000, 0x00010000, 0x00010001, 0x00010001, 0x00010002, 0x00010002, }, + {0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, }, + {0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, }, + {0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, + {0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, }, + {0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x00020011, 0x00020011, 0x00020011, 0x00020011, 0x00020012, 0x00020012, 0x00020012, 0x00020012, }, + {0x0009ffff, 0x0008ffff, 0x0007ffff, 0x0000001a, 0x0000001b, 0x0000001c, 0x0000001d, 0x0000001e, 0x0000001f, 0x00000020, 0x00010013, 0x00010013, 0x00010014, 0x00010014, 0x00010015, 0x00010015, }, + {0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, }, + {0x00020023, 0x00020023, 0x00020023, 0x00020023, 0x00020024, 0x00020024, 0x00020024, 0x00020024, 0x00020025, 0x00020025, 0x00020025, 0x00020025, 0x00020026, 0x00020026, 0x00020026, 0x00020026, }, + {0x000dffff, 0x000affff, 0x000bffff, 0x000cffff, 0x0000002b, 0x0000002c, 0x0000002d, 0x0000002e, 0x00010027, 0x00010027, 0x00010028, 0x00010028, 0x00010029, 0x00010029, 0x0001002a, 0x0001002a, }, + {0x00020035, 0x00020035, 0x00020035, 0x00020035, 0x00020036, 0x00020036, 0x00020036, 0x00020036, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, }, + {0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, }, + {0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, }, + {0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0010ffff, 0x000effff, 0x000fffff, 0x00010037, 0x00010037, 0x00010038, 0x00010038, 0x00010039, 0x00010039, 0x00020034, 0x00020034, 0x00020034, 0x00020034, }, + {0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, }, + {0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, }, + {0x00010058, 0x00010058, 0x00010059, 0x00010059, 0x00020040, 0x00020040, 0x00020040, 0x00020040, 0x00020041, 0x00020041, 0x00020041, 0x00020041, 0x0002005a, 0x0002005a, 0x0002005a, 0x0002005a, }, + {0x0001003c, 0x0001003c, 0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x00010042, 0x00010042, 0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010046, 0x00010046, 0x00010047, 0x00010047, }, + {0x00010048, 0x00010048, 0x00010049, 0x00010049, 0x0001004a, 0x0001004a, 0x0001004b, 0x0001004b, 0x0001004c, 0x0001004c, 0x0001004d, 0x0001004d, 0x0001004e, 0x0001004e, 0x0001004f, 0x0001004f, }, + {0x00010050, 0x00010050, 0x00010051, 0x00010051, 0x00010052, 0x00010052, 0x00010053, 0x00010053, 0x00010054, 0x00010054, 0x00010055, 0x00010055, 0x00010056, 0x00010056, 0x00010057, 0x00010057, }, +}; + +const uint32_t c_aauiCQMFHuffEnc60[109][2] = +{ + {0x0004, 0x0007}, {0x0002, 0x0003}, {0x0003, 0x0005}, {0x0004, 0x0008}, {0x0004, 0x0009}, {0x0005, 0x0007}, {0x0005, 0x0008}, {0x0005, 0x0009}, + {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0005, 0x000c}, {0x0005, 0x000d}, {0x0006, 0x0007}, {0x0006, 0x0008}, {0x0006, 0x0009}, {0x0006, 0x000a}, + {0x0006, 0x000b}, {0x0006, 0x000c}, {0x0006, 0x000d}, {0x0007, 0x0006}, {0x0007, 0x0007}, {0x0007, 0x0008}, {0x0007, 0x0009}, {0x0007, 0x000a}, + {0x0007, 0x000b}, {0x0007, 0x000c}, {0x0007, 0x000d}, {0x0008, 0x0006}, {0x0008, 0x0007}, {0x0008, 0x0008}, {0x0008, 0x0009}, {0x0008, 0x000a}, + {0x0008, 0x000b}, {0x0009, 0x0004}, {0x0009, 0x0005}, {0x0009, 0x0006}, {0x0009, 0x0007}, {0x0009, 0x0008}, {0x0009, 0x0009}, {0x0009, 0x000a}, + {0x0009, 0x000b}, {0x000a, 0x0004}, {0x000a, 0x0005}, {0x000a, 0x0006}, {0x000a, 0x0007}, {0x000b, 0x0004}, {0x000b, 0x0005}, {0x000b, 0x0006}, + {0x000b, 0x0007}, {0x000c, 0x0004}, {0x000c, 0x0005}, {0x000c, 0x0006}, {0x000d, 0x0005}, {0x000d, 0x0006}, {0x000d, 0x0007}, {0x000c, 0x0007}, + {0x000e, 0x0005}, {0x000e, 0x0006}, {0x000e, 0x0007}, {0x000e, 0x0008}, {0x000f, 0x0005}, {0x000e, 0x0009}, {0x000f, 0x0006}, {0x0010, 0x0006}, + {0x000f, 0x0007}, {0x000f, 0x0008}, {0x000f, 0x0009}, {0x0010, 0x0007}, {0x0010, 0x0008}, {0x0010, 0x0009}, {0x0011, 0x000a}, {0x0013, 0x0000}, + {0x0011, 0x000b}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0012, 0x0011}, {0x0012, 0x0012}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, + {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0013, 0x000c}, {0x0013, 0x000d}, + {0x0013, 0x000e}, {0x0013, 0x000f}, {0x0013, 0x0010}, {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0013, 0x0014}, {0x0013, 0x0015}, + {0x0013, 0x0016}, {0x0013, 0x0017}, {0x0013, 0x0018}, {0x0013, 0x0019}, {0x0013, 0x001a}, {0x0013, 0x001b}, {0x0013, 0x001c}, {0x0013, 0x001d}, + {0x0013, 0x001e}, {0x0013, 0x001f}, {0x0013, 0x0020}, {0x0013, 0x0021}, {0x0012, 0x0013}, + +}; + +const uint32_t c_aauiCQMFHuffDec60[24][16] = +{ + {0x0007ffff, 0x0005ffff, 0x0006ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x00000000, 0x00000003, 0x00000004, 0x00010002, 0x00010002, 0x00020001, 0x00020001, 0x00020001, 0x00020001, }, + {0x00020011, 0x00020011, 0x00020011, 0x00020011, 0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, }, + {0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, }, + {0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, + {0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, + {0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x0001001a, 0x0001001a, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, }, + {0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, 0x00020010, 0x00020010, 0x00020010, 0x00020010, }, + {0x000dffff, 0x000cffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x0000001b, 0x0000001c, 0x0000001d, 0x0000001e, 0x0000001f, 0x00000020, 0x00010013, 0x00010013, 0x00010014, 0x00010014, }, + {0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, }, + {0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, }, + {0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, }, + {0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, }, + {0x00020029, 0x00020029, 0x00020029, 0x00020029, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, }, + {0x0011ffff, 0x0010ffff, 0x000fffff, 0x000effff, 0x00000031, 0x00000032, 0x00000033, 0x00000037, 0x0001002d, 0x0001002d, 0x0001002e, 0x0001002e, 0x0001002f, 0x0001002f, 0x00010030, 0x00010030, }, + {0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, }, + {0x0002003b, 0x0002003b, 0x0002003b, 0x0002003b, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003d, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, }, + {0x00010041, 0x00010041, 0x00010042, 0x00010042, 0x00020038, 0x00020038, 0x00020038, 0x00020038, 0x00020039, 0x00020039, 0x00020039, 0x00020039, 0x0002003a, 0x0002003a, 0x0002003a, 0x0002003a, }, + {0x0014ffff, 0x0015ffff, 0x0016ffff, 0x0017ffff, 0x0013ffff, 0x0012ffff, 0x0000003f, 0x00000043, 0x00000044, 0x00000045, 0x0001003c, 0x0001003c, 0x0001003e, 0x0001003e, 0x00010040, 0x00010040, }, + {0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, }, + {0x0001006a, 0x0001006a, 0x0001006b, 0x0001006b, 0x0002004b, 0x0002004b, 0x0002004b, 0x0002004b, 0x0002004c, 0x0002004c, 0x0002004c, 0x0002004c, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006c, }, + {0x00010047, 0x00010047, 0x00010049, 0x00010049, 0x0001004a, 0x0001004a, 0x0001004d, 0x0001004d, 0x0001004e, 0x0001004e, 0x0001004f, 0x0001004f, 0x00010050, 0x00010050, 0x00010051, 0x00010051, }, + {0x00010052, 0x00010052, 0x00010053, 0x00010053, 0x00010054, 0x00010054, 0x00010055, 0x00010055, 0x00010056, 0x00010056, 0x00010057, 0x00010057, 0x00010058, 0x00010058, 0x00010059, 0x00010059, }, + {0x0001005a, 0x0001005a, 0x0001005b, 0x0001005b, 0x0001005c, 0x0001005c, 0x0001005d, 0x0001005d, 0x0001005e, 0x0001005e, 0x0001005f, 0x0001005f, 0x00010060, 0x00010060, 0x00010061, 0x00010061, }, + {0x00010062, 0x00010062, 0x00010063, 0x00010063, 0x00010064, 0x00010064, 0x00010065, 0x00010065, 0x00010066, 0x00010066, 0x00010067, 0x00010067, 0x00010068, 0x00010068, 0x00010069, 0x00010069, }, +}; + +const uint32_t c_aauiCQMFHuffEnc61[129][2] = +{ + {0x0004, 0x0008}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0009}, {0x0004, 0x000a}, {0x0004, 0x000b}, {0x0005, 0x0008}, {0x0005, 0x0009}, + {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0005, 0x000c}, {0x0005, 0x000d}, {0x0005, 0x000e}, {0x0005, 0x000f}, {0x0006, 0x0008}, {0x0006, 0x0009}, + {0x0006, 0x000a}, {0x0006, 0x000b}, {0x0006, 0x000c}, {0x0006, 0x000d}, {0x0006, 0x000e}, {0x0006, 0x000f}, {0x0007, 0x0008}, {0x0007, 0x0009}, + {0x0007, 0x000a}, {0x0007, 0x000b}, {0x0007, 0x000c}, {0x0007, 0x000d}, {0x0007, 0x000e}, {0x0007, 0x000f}, {0x0008, 0x0006}, {0x0008, 0x0007}, + {0x0008, 0x0008}, {0x0008, 0x0009}, {0x0008, 0x000a}, {0x0008, 0x000b}, {0x0008, 0x000c}, {0x0008, 0x000d}, {0x0008, 0x000e}, {0x0008, 0x000f}, + {0x0009, 0x0006}, {0x0009, 0x0007}, {0x0009, 0x0008}, {0x0009, 0x0009}, {0x0009, 0x000a}, {0x0009, 0x000b}, {0x000a, 0x0005}, {0x000a, 0x0006}, + {0x000a, 0x0007}, {0x000a, 0x0008}, {0x000a, 0x0009}, {0x000a, 0x000a}, {0x000a, 0x000b}, {0x000b, 0x0005}, {0x000b, 0x0006}, {0x000b, 0x0007}, + {0x000b, 0x0008}, {0x000b, 0x0009}, {0x000c, 0x0006}, {0x000c, 0x0007}, {0x000c, 0x0008}, {0x000c, 0x0009}, {0x000d, 0x0005}, {0x000d, 0x0006}, + {0x000d, 0x0007}, {0x000d, 0x0008}, {0x000d, 0x0009}, {0x000d, 0x000a}, {0x000e, 0x0008}, {0x000d, 0x000b}, {0x000e, 0x0009}, {0x000f, 0x0009}, + {0x000f, 0x000a}, {0x000f, 0x000b}, {0x000f, 0x000c}, {0x000f, 0x000d}, {0x000f, 0x000e}, {0x0010, 0x000c}, {0x0011, 0x0015}, {0x0010, 0x000d}, + {0x000f, 0x000f}, {0x0010, 0x000e}, {0x0010, 0x000f}, {0x0012, 0x0000}, {0x0011, 0x0016}, {0x0010, 0x0010}, {0x0010, 0x0011}, {0x0011, 0x0017}, + {0x0012, 0x0001}, {0x0012, 0x0002}, {0x0012, 0x0003}, {0x0012, 0x0004}, {0x0012, 0x0005}, {0x0012, 0x0006}, {0x0012, 0x0007}, {0x0012, 0x0008}, + {0x0012, 0x0009}, {0x0012, 0x000a}, {0x0012, 0x000b}, {0x0012, 0x000c}, {0x0012, 0x000d}, {0x0012, 0x000e}, {0x0012, 0x000f}, {0x0012, 0x0010}, + {0x0012, 0x0011}, {0x0012, 0x0012}, {0x0012, 0x0013}, {0x0012, 0x0014}, {0x0012, 0x0015}, {0x0012, 0x0016}, {0x0012, 0x0017}, {0x0012, 0x0018}, + {0x0012, 0x0019}, {0x0012, 0x001a}, {0x0012, 0x001b}, {0x0012, 0x001c}, {0x0012, 0x001d}, {0x0012, 0x001e}, {0x0012, 0x001f}, {0x0012, 0x0020}, + {0x0012, 0x0021}, {0x0012, 0x0022}, {0x0012, 0x0023}, {0x0012, 0x0024}, {0x0012, 0x0025}, {0x0012, 0x0026}, {0x0012, 0x0027}, {0x0012, 0x0028}, + {0x0012, 0x0029}, + +}; + +const uint32_t c_aauiCQMFHuffDec61[33][16] = +{ + {0x0008ffff, 0x0007ffff, 0x0005ffff, 0x0006ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x00000000, 0x00000003, 0x00000004, 0x00000005, 0x00010001, 0x00010001, 0x00010002, 0x00010002, }, + {0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, }, + {0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, + {0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, + {0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, }, + {0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x00020011, 0x00020011, 0x00020011, 0x00020011, }, + {0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00020013, 0x00020013, 0x00020013, 0x00020013, 0x00020014, 0x00020014, 0x00020014, 0x00020014, 0x00020015, 0x00020015, 0x00020015, 0x00020015, }, + {0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x0001001a, 0x0001001a, 0x0001001b, 0x0001001b, 0x0001001c, 0x0001001c, 0x0001001d, 0x0001001d, }, + {0x000effff, 0x000cffff, 0x000dffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x0000001e, 0x0000001f, 0x00000020, 0x00000021, 0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000026, 0x00000027, }, + {0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, }, + {0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, }, + {0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, }, + {0x00010038, 0x00010038, 0x00010039, 0x00010039, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002f, 0x0002002f, 0x0002002f, 0x0002002f, 0x00020030, 0x00020030, 0x00020030, 0x00020030, }, + {0x00020031, 0x00020031, 0x00020031, 0x00020031, 0x00020032, 0x00020032, 0x00020032, 0x00020032, 0x00020033, 0x00020033, 0x00020033, 0x00020033, 0x00020034, 0x00020034, 0x00020034, 0x00020034, }, + {0x0014ffff, 0x0013ffff, 0x000fffff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0000003a, 0x0000003b, 0x0000003c, 0x0000003d, 0x00010035, 0x00010035, 0x00010036, 0x00010036, 0x00010037, 0x00010037, }, + {0x00020044, 0x00020044, 0x00020044, 0x00020044, 0x00020046, 0x00020046, 0x00020046, 0x00020046, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, }, + {0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, }, + {0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, }, + {0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, }, + {0x00000055, 0x00000056, 0x00010047, 0x00010047, 0x00010048, 0x00010048, 0x00010049, 0x00010049, 0x0001004a, 0x0001004a, 0x0001004b, 0x0001004b, 0x0001004c, 0x0001004c, 0x00010050, 0x00010050, }, + {0x0017ffff, 0x0018ffff, 0x0019ffff, 0x001affff, 0x001bffff, 0x001cffff, 0x001dffff, 0x001effff, 0x001fffff, 0x0020ffff, 0x0016ffff, 0x0015ffff, 0x0000004d, 0x0000004f, 0x00000051, 0x00000052, }, + {0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, }, + {0x0002007f, 0x0002007f, 0x0002007f, 0x0002007f, 0x00020080, 0x00020080, 0x00020080, 0x00020080, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, }, + {0x00020053, 0x00020053, 0x00020053, 0x00020053, 0x00020058, 0x00020058, 0x00020058, 0x00020058, 0x00020059, 0x00020059, 0x00020059, 0x00020059, 0x0002005a, 0x0002005a, 0x0002005a, 0x0002005a, }, + {0x0002005b, 0x0002005b, 0x0002005b, 0x0002005b, 0x0002005c, 0x0002005c, 0x0002005c, 0x0002005c, 0x0002005d, 0x0002005d, 0x0002005d, 0x0002005d, 0x0002005e, 0x0002005e, 0x0002005e, 0x0002005e, }, + {0x0002005f, 0x0002005f, 0x0002005f, 0x0002005f, 0x00020060, 0x00020060, 0x00020060, 0x00020060, 0x00020061, 0x00020061, 0x00020061, 0x00020061, 0x00020062, 0x00020062, 0x00020062, 0x00020062, }, + {0x00020063, 0x00020063, 0x00020063, 0x00020063, 0x00020064, 0x00020064, 0x00020064, 0x00020064, 0x00020065, 0x00020065, 0x00020065, 0x00020065, 0x00020066, 0x00020066, 0x00020066, 0x00020066, }, + {0x00020067, 0x00020067, 0x00020067, 0x00020067, 0x00020068, 0x00020068, 0x00020068, 0x00020068, 0x00020069, 0x00020069, 0x00020069, 0x00020069, 0x0002006a, 0x0002006a, 0x0002006a, 0x0002006a, }, + {0x0002006b, 0x0002006b, 0x0002006b, 0x0002006b, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006d, 0x0002006d, 0x0002006d, 0x0002006d, 0x0002006e, 0x0002006e, 0x0002006e, 0x0002006e, }, + {0x0002006f, 0x0002006f, 0x0002006f, 0x0002006f, 0x00020070, 0x00020070, 0x00020070, 0x00020070, 0x00020071, 0x00020071, 0x00020071, 0x00020071, 0x00020072, 0x00020072, 0x00020072, 0x00020072, }, + {0x00020073, 0x00020073, 0x00020073, 0x00020073, 0x00020074, 0x00020074, 0x00020074, 0x00020074, 0x00020075, 0x00020075, 0x00020075, 0x00020075, 0x00020076, 0x00020076, 0x00020076, 0x00020076, }, + {0x00020077, 0x00020077, 0x00020077, 0x00020077, 0x00020078, 0x00020078, 0x00020078, 0x00020078, 0x00020079, 0x00020079, 0x00020079, 0x00020079, 0x0002007a, 0x0002007a, 0x0002007a, 0x0002007a, }, + {0x0002007b, 0x0002007b, 0x0002007b, 0x0002007b, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007d, 0x0002007d, 0x0002007d, 0x0002007d, 0x0002007e, 0x0002007e, 0x0002007e, 0x0002007e, }, +}; + +const uint32_t c_aauiCQMFHuffEnc62[153][2] = +{ + {0x0004, 0x0009}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x000a}, {0x0004, 0x000b}, {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0005, 0x000c}, + {0x0005, 0x000d}, {0x0005, 0x000e}, {0x0005, 0x000f}, {0x0005, 0x0010}, {0x0005, 0x0011}, {0x0006, 0x000a}, {0x0006, 0x000b}, {0x0006, 0x000c}, + {0x0006, 0x000d}, {0x0006, 0x000e}, {0x0006, 0x000f}, {0x0006, 0x0010}, {0x0006, 0x0011}, {0x0006, 0x0012}, {0x0006, 0x0013}, {0x0007, 0x0009}, + {0x0007, 0x000a}, {0x0007, 0x000b}, {0x0007, 0x000c}, {0x0007, 0x000d}, {0x0007, 0x000e}, {0x0007, 0x000f}, {0x0007, 0x0010}, {0x0007, 0x0011}, + {0x0007, 0x0012}, {0x0007, 0x0013}, {0x0008, 0x0009}, {0x0008, 0x000a}, {0x0008, 0x000b}, {0x0008, 0x000c}, {0x0008, 0x000d}, {0x0008, 0x000e}, + {0x0008, 0x000f}, {0x0008, 0x0010}, {0x0008, 0x0011}, {0x0009, 0x0007}, {0x0009, 0x0008}, {0x0009, 0x0009}, {0x0009, 0x000a}, {0x0009, 0x000b}, + {0x0009, 0x000c}, {0x0009, 0x000d}, {0x0009, 0x000e}, {0x0009, 0x000f}, {0x0009, 0x0010}, {0x0009, 0x0011}, {0x000a, 0x0004}, {0x000a, 0x0005}, + {0x000a, 0x0006}, {0x000a, 0x0007}, {0x000a, 0x0008}, {0x000a, 0x0009}, {0x000a, 0x000a}, {0x000a, 0x000b}, {0x000a, 0x000c}, {0x000a, 0x000d}, + {0x000b, 0x0007}, {0x000c, 0x0007}, {0x000c, 0x0008}, {0x000c, 0x0009}, {0x000c, 0x000a}, {0x000c, 0x000b}, {0x000c, 0x000c}, {0x000d, 0x0007}, + {0x000c, 0x000d}, {0x000d, 0x0008}, {0x000d, 0x0009}, {0x000d, 0x000a}, {0x000d, 0x000b}, {0x000e, 0x0008}, {0x000d, 0x000c}, {0x000d, 0x000d}, + {0x000e, 0x0009}, {0x000e, 0x000a}, {0x000e, 0x000b}, {0x000e, 0x000c}, {0x000f, 0x000c}, {0x000e, 0x000d}, {0x000f, 0x000d}, {0x000f, 0x000e}, + {0x000f, 0x000f}, {0x0010, 0x000f}, {0x0010, 0x0010}, {0x0011, 0x0019}, {0x0010, 0x0011}, {0x0010, 0x0012}, {0x0010, 0x0013}, {0x0010, 0x0014}, + {0x0010, 0x0015}, {0x0012, 0x0000}, {0x0010, 0x0016}, {0x0011, 0x001a}, {0x0010, 0x0017}, {0x0012, 0x0001}, {0x0012, 0x0002}, {0x0012, 0x0003}, + {0x0011, 0x001b}, {0x0012, 0x0004}, {0x0012, 0x0005}, {0x0012, 0x0006}, {0x0012, 0x0007}, {0x0012, 0x0008}, {0x0012, 0x0009}, {0x0012, 0x000a}, + {0x0012, 0x000b}, {0x0012, 0x000c}, {0x0012, 0x000d}, {0x0012, 0x000e}, {0x0012, 0x000f}, {0x0012, 0x0010}, {0x0012, 0x0011}, {0x0012, 0x0012}, + {0x0012, 0x0013}, {0x0012, 0x0014}, {0x0012, 0x0015}, {0x0012, 0x0016}, {0x0012, 0x0017}, {0x0012, 0x0018}, {0x0011, 0x001c}, {0x0012, 0x0019}, + {0x0012, 0x001a}, {0x0012, 0x001b}, {0x0012, 0x001c}, {0x0012, 0x001d}, {0x0012, 0x001e}, {0x0012, 0x001f}, {0x0012, 0x0020}, {0x0012, 0x0021}, + {0x0012, 0x0022}, {0x0012, 0x0023}, {0x0012, 0x0024}, {0x0012, 0x0025}, {0x0012, 0x0026}, {0x0012, 0x0027}, {0x0012, 0x0028}, {0x0012, 0x0029}, + {0x0012, 0x002a}, {0x0012, 0x002b}, {0x0012, 0x002c}, {0x0012, 0x002d}, {0x0012, 0x002e}, {0x0012, 0x002f}, {0x0012, 0x0030}, {0x0012, 0x0031}, + {0x0011, 0x001d}, + +}; + +const uint32_t c_aauiCQMFHuffDec62[41][16] = +{ + {0x0009ffff, 0x0008ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x00000000, 0x00000003, 0x00000004, 0x00010001, 0x00010001, 0x00010002, 0x00010002, }, + {0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, + {0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, }, + {0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, }, + {0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, + {0x0001001e, 0x0001001e, 0x0001001f, 0x0001001f, 0x00010020, 0x00010020, 0x00010021, 0x00010021, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, }, + {0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x00020011, 0x00020011, 0x00020011, 0x00020011, 0x00020012, 0x00020012, 0x00020012, 0x00020012, }, + {0x00020013, 0x00020013, 0x00020013, 0x00020013, 0x00020014, 0x00020014, 0x00020014, 0x00020014, 0x00020015, 0x00020015, 0x00020015, 0x00020015, 0x00020016, 0x00020016, 0x00020016, 0x00020016, }, + {0x00000029, 0x0000002a, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x0001001a, 0x0001001a, 0x0001001b, 0x0001001b, 0x0001001c, 0x0001001c, 0x0001001d, 0x0001001d, }, + {0x0012ffff, 0x0010ffff, 0x0011ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000026, 0x00000027, 0x00000028, }, + {0x0002003e, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002003f, 0x0002003f, 0x0002003f, 0x0002003f, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, }, + {0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, }, + {0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, }, + {0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, }, + {0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, }, + {0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, }, + {0x00020036, 0x00020036, 0x00020036, 0x00020036, 0x00020037, 0x00020037, 0x00020037, 0x00020037, 0x00020038, 0x00020038, 0x00020038, 0x00020038, 0x00020039, 0x00020039, 0x00020039, 0x00020039, }, + {0x0002003a, 0x0002003a, 0x0002003a, 0x0002003a, 0x0002003b, 0x0002003b, 0x0002003b, 0x0002003b, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003d, }, + {0x0019ffff, 0x0018ffff, 0x0017ffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, 0x0016ffff, 0x00000041, 0x00000042, 0x00000043, 0x00000044, 0x00000045, 0x00000046, 0x00000048, 0x00010040, 0x00010040, }, + {0x00020053, 0x00020053, 0x00020053, 0x00020053, 0x00020055, 0x00020055, 0x00020055, 0x00020055, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, }, + {0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, }, + {0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, }, + {0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, }, + {0x0002004d, 0x0002004d, 0x0002004d, 0x0002004d, 0x00020050, 0x00020050, 0x00020050, 0x00020050, 0x00020051, 0x00020051, 0x00020051, 0x00020051, 0x00020052, 0x00020052, 0x00020052, 0x00020052, }, + {0x0000005a, 0x0000005c, 0x0000005d, 0x0000005e, 0x0000005f, 0x00000060, 0x00000062, 0x00000064, 0x00010054, 0x00010054, 0x00010056, 0x00010056, 0x00010057, 0x00010057, 0x00010058, 0x00010058, }, + {0x001dffff, 0x001effff, 0x001fffff, 0x0020ffff, 0x0021ffff, 0x0022ffff, 0x0023ffff, 0x0024ffff, 0x0025ffff, 0x0026ffff, 0x0027ffff, 0x0028ffff, 0x001affff, 0x001bffff, 0x001cffff, 0x00000059, }, + {0x00020096, 0x00020096, 0x00020096, 0x00020096, 0x00020097, 0x00020097, 0x00020097, 0x00020097, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, }, + {0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, }, + {0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, }, + {0x00020061, 0x00020061, 0x00020061, 0x00020061, 0x00020065, 0x00020065, 0x00020065, 0x00020065, 0x00020066, 0x00020066, 0x00020066, 0x00020066, 0x00020067, 0x00020067, 0x00020067, 0x00020067, }, + {0x00020069, 0x00020069, 0x00020069, 0x00020069, 0x0002006a, 0x0002006a, 0x0002006a, 0x0002006a, 0x0002006b, 0x0002006b, 0x0002006b, 0x0002006b, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006c, }, + {0x0002006d, 0x0002006d, 0x0002006d, 0x0002006d, 0x0002006e, 0x0002006e, 0x0002006e, 0x0002006e, 0x0002006f, 0x0002006f, 0x0002006f, 0x0002006f, 0x00020070, 0x00020070, 0x00020070, 0x00020070, }, + {0x00020071, 0x00020071, 0x00020071, 0x00020071, 0x00020072, 0x00020072, 0x00020072, 0x00020072, 0x00020073, 0x00020073, 0x00020073, 0x00020073, 0x00020074, 0x00020074, 0x00020074, 0x00020074, }, + {0x00020075, 0x00020075, 0x00020075, 0x00020075, 0x00020076, 0x00020076, 0x00020076, 0x00020076, 0x00020077, 0x00020077, 0x00020077, 0x00020077, 0x00020078, 0x00020078, 0x00020078, 0x00020078, }, + {0x00020079, 0x00020079, 0x00020079, 0x00020079, 0x0002007a, 0x0002007a, 0x0002007a, 0x0002007a, 0x0002007b, 0x0002007b, 0x0002007b, 0x0002007b, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007c, }, + {0x0002007d, 0x0002007d, 0x0002007d, 0x0002007d, 0x0002007f, 0x0002007f, 0x0002007f, 0x0002007f, 0x00020080, 0x00020080, 0x00020080, 0x00020080, 0x00020081, 0x00020081, 0x00020081, 0x00020081, }, + {0x00020082, 0x00020082, 0x00020082, 0x00020082, 0x00020083, 0x00020083, 0x00020083, 0x00020083, 0x00020084, 0x00020084, 0x00020084, 0x00020084, 0x00020085, 0x00020085, 0x00020085, 0x00020085, }, + {0x00020086, 0x00020086, 0x00020086, 0x00020086, 0x00020087, 0x00020087, 0x00020087, 0x00020087, 0x00020088, 0x00020088, 0x00020088, 0x00020088, 0x00020089, 0x00020089, 0x00020089, 0x00020089, }, + {0x0002008a, 0x0002008a, 0x0002008a, 0x0002008a, 0x0002008b, 0x0002008b, 0x0002008b, 0x0002008b, 0x0002008c, 0x0002008c, 0x0002008c, 0x0002008c, 0x0002008d, 0x0002008d, 0x0002008d, 0x0002008d, }, + {0x0002008e, 0x0002008e, 0x0002008e, 0x0002008e, 0x0002008f, 0x0002008f, 0x0002008f, 0x0002008f, 0x00020090, 0x00020090, 0x00020090, 0x00020090, 0x00020091, 0x00020091, 0x00020091, 0x00020091, }, + {0x00020092, 0x00020092, 0x00020092, 0x00020092, 0x00020093, 0x00020093, 0x00020093, 0x00020093, 0x00020094, 0x00020094, 0x00020094, 0x00020094, 0x00020095, 0x00020095, 0x00020095, 0x00020095, }, +}; + +const uint32_t c_aauiCQMFHuffEnc63[181][2] = +{ + {0x0004, 0x0008}, {0x0003, 0x0005}, {0x0002, 0x0003}, {0x0004, 0x0009}, {0x0005, 0x000c}, {0x0005, 0x000d}, {0x0005, 0x000e}, {0x0005, 0x000f}, + {0x0006, 0x000c}, {0x0006, 0x000d}, {0x0006, 0x000e}, {0x0006, 0x000f}, {0x0006, 0x0010}, {0x0006, 0x0011}, {0x0006, 0x0012}, {0x0006, 0x0013}, + {0x0006, 0x0014}, {0x0006, 0x0015}, {0x0006, 0x0016}, {0x0006, 0x0017}, {0x0007, 0x000b}, {0x0007, 0x000c}, {0x0007, 0x000d}, {0x0007, 0x000e}, + {0x0007, 0x000f}, {0x0007, 0x0010}, {0x0007, 0x0011}, {0x0007, 0x0012}, {0x0007, 0x0013}, {0x0007, 0x0014}, {0x0007, 0x0015}, {0x0007, 0x0016}, + {0x0007, 0x0017}, {0x0008, 0x000c}, {0x0008, 0x000d}, {0x0008, 0x000e}, {0x0008, 0x000f}, {0x0008, 0x0010}, {0x0008, 0x0011}, {0x0008, 0x0012}, + {0x0008, 0x0013}, {0x0008, 0x0014}, {0x0008, 0x0015}, {0x0009, 0x0008}, {0x0009, 0x0009}, {0x0009, 0x000a}, {0x0009, 0x000b}, {0x0009, 0x000c}, + {0x0009, 0x000d}, {0x0009, 0x000e}, {0x0009, 0x000f}, {0x0009, 0x0010}, {0x0009, 0x0011}, {0x0009, 0x0012}, {0x0009, 0x0013}, {0x0009, 0x0014}, + {0x0009, 0x0015}, {0x000a, 0x0007}, {0x0009, 0x0016}, {0x0009, 0x0017}, {0x000a, 0x0008}, {0x000a, 0x0009}, {0x000a, 0x000a}, {0x000a, 0x000b}, + {0x000a, 0x000c}, {0x000a, 0x000d}, {0x000a, 0x000e}, {0x000b, 0x0008}, {0x000b, 0x0009}, {0x000b, 0x000a}, {0x000a, 0x000f}, {0x000b, 0x000b}, + {0x000b, 0x000c}, {0x000b, 0x000d}, {0x000c, 0x0009}, {0x000c, 0x000a}, {0x000c, 0x000b}, {0x000c, 0x000c}, {0x000c, 0x000d}, {0x000c, 0x000e}, + {0x000c, 0x000f}, {0x000d, 0x0008}, {0x000d, 0x0009}, {0x000d, 0x000a}, {0x000d, 0x000b}, {0x000d, 0x000c}, {0x000d, 0x000d}, {0x000d, 0x000e}, + {0x000d, 0x000f}, {0x000d, 0x0010}, {0x000d, 0x0011}, {0x000e, 0x0007}, {0x000e, 0x0008}, {0x000e, 0x0009}, {0x000e, 0x000a}, {0x000e, 0x000b}, + {0x000e, 0x000c}, {0x000e, 0x000d}, {0x000e, 0x000e}, {0x000e, 0x000f}, {0x000f, 0x0008}, {0x000f, 0x0009}, {0x000f, 0x000a}, {0x000f, 0x000b}, + {0x000f, 0x000c}, {0x0010, 0x0009}, {0x0010, 0x000a}, {0x000f, 0x000d}, {0x0010, 0x000b}, {0x0010, 0x000c}, {0x0010, 0x000d}, {0x0011, 0x000e}, + {0x0011, 0x000f}, {0x0010, 0x000e}, {0x0011, 0x0010}, {0x0011, 0x0011}, {0x0012, 0x0014}, {0x0014, 0x0000}, {0x0010, 0x000f}, {0x0012, 0x0015}, + {0x0012, 0x0016}, {0x0014, 0x0001}, {0x0012, 0x0017}, {0x0012, 0x0018}, {0x0012, 0x0019}, {0x0013, 0x0010}, {0x0012, 0x001a}, {0x0014, 0x0002}, + {0x0012, 0x001b}, {0x0014, 0x0003}, {0x0014, 0x0004}, {0x0014, 0x0005}, {0x0013, 0x0011}, {0x0014, 0x0006}, {0x0013, 0x0012}, {0x0014, 0x0007}, + {0x0014, 0x0008}, {0x0014, 0x0009}, {0x0014, 0x000a}, {0x0014, 0x000b}, {0x0014, 0x000c}, {0x0014, 0x000d}, {0x0014, 0x000e}, {0x0013, 0x0013}, + {0x0014, 0x000f}, {0x0014, 0x0010}, {0x0014, 0x0011}, {0x0014, 0x0012}, {0x0014, 0x0013}, {0x0014, 0x0014}, {0x0014, 0x0015}, {0x0014, 0x0016}, + {0x0014, 0x0017}, {0x0014, 0x0018}, {0x0014, 0x0019}, {0x0014, 0x001a}, {0x0014, 0x001b}, {0x0014, 0x001c}, {0x0014, 0x001d}, {0x0014, 0x001e}, + {0x0014, 0x001f}, {0x0013, 0x0014}, {0x0013, 0x0015}, {0x0013, 0x0016}, {0x0013, 0x0017}, {0x0013, 0x0018}, {0x0013, 0x0019}, {0x0013, 0x001a}, + {0x0013, 0x001b}, {0x0013, 0x001c}, {0x0013, 0x001d}, {0x0013, 0x001e}, {0x0013, 0x001f}, {0x0013, 0x0020}, {0x0013, 0x0021}, {0x0013, 0x0022}, + {0x0013, 0x0023}, {0x0013, 0x0024}, {0x0013, 0x0025}, {0x0013, 0x0026}, {0x0013, 0x0027}, + +}; + +const uint32_t c_aauiCQMFHuffDec63[39][16] = +{ + {0x0008ffff, 0x0006ffff, 0x0007ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0001ffff, 0x0002ffff, 0x00000000, 0x00000003, 0x00010001, 0x00010001, 0x00020002, 0x00020002, 0x00020002, 0x00020002, }, + {0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, }, + {0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, }, + {0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x00020009, 0x00020009, 0x00020009, 0x00020009, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, }, + {0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, }, + {0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x00020011, 0x00020011, 0x00020011, 0x00020011, 0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00020013, 0x00020013, 0x00020013, 0x00020013, }, + {0x00000025, 0x00000026, 0x00000027, 0x00000028, 0x00000029, 0x0000002a, 0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, }, + {0x00010019, 0x00010019, 0x0001001a, 0x0001001a, 0x0001001b, 0x0001001b, 0x0001001c, 0x0001001c, 0x0001001d, 0x0001001d, 0x0001001e, 0x0001001e, 0x0001001f, 0x0001001f, 0x00010020, 0x00010020, }, + {0x0014ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x0010ffff, 0x00000021, 0x00000022, 0x00000023, 0x00000024, }, + {0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, }, + {0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, }, + {0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, }, + {0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, }, + {0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, }, + {0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, }, + {0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, }, + {0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, }, + {0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, 0x00010047, 0x00010047, 0x00010048, 0x00010048, 0x00010049, 0x00010049, 0x00020039, 0x00020039, 0x00020039, 0x00020039, }, + {0x0002003c, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002003f, 0x0002003f, 0x0002003f, 0x0002003f, }, + {0x00020040, 0x00020040, 0x00020040, 0x00020040, 0x00020041, 0x00020041, 0x00020041, 0x00020041, 0x00020042, 0x00020042, 0x00020042, 0x00020042, 0x00020046, 0x00020046, 0x00020046, 0x00020046, }, + {0x001dffff, 0x001affff, 0x001bffff, 0x001cffff, 0x0015ffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x0019ffff, 0x0000004a, 0x0000004b, 0x0000004c, 0x0000004d, 0x0000004e, 0x0000004f, 0x00000050, }, + {0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, }, + {0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, }, + {0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, }, + {0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, }, + {0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, }, + {0x00010064, 0x00010064, 0x00010065, 0x00010065, 0x00010066, 0x00010066, 0x00010067, 0x00010067, 0x00010068, 0x00010068, 0x0001006b, 0x0001006b, 0x0002005b, 0x0002005b, 0x0002005b, 0x0002005b, }, + {0x0002005c, 0x0002005c, 0x0002005c, 0x0002005c, 0x0002005d, 0x0002005d, 0x0002005d, 0x0002005d, 0x0002005e, 0x0002005e, 0x0002005e, 0x0002005e, 0x0002005f, 0x0002005f, 0x0002005f, 0x0002005f, }, + {0x00020060, 0x00020060, 0x00020060, 0x00020060, 0x00020061, 0x00020061, 0x00020061, 0x00020061, 0x00020062, 0x00020062, 0x00020062, 0x00020062, 0x00020063, 0x00020063, 0x00020063, 0x00020063, }, + {0x0026ffff, 0x0025ffff, 0x0022ffff, 0x0023ffff, 0x0024ffff, 0x0020ffff, 0x0021ffff, 0x001effff, 0x001fffff, 0x00000069, 0x0000006a, 0x0000006c, 0x0000006d, 0x0000006e, 0x00000071, 0x00000076, }, + {0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, }, + {0x00030072, 0x00030072, 0x00030072, 0x00030072, 0x00030072, 0x00030072, 0x00030072, 0x00030072, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, }, + {0x00020074, 0x00020074, 0x00020074, 0x00020074, 0x00020077, 0x00020077, 0x00020077, 0x00020077, 0x00020078, 0x00020078, 0x00020078, 0x00020078, 0x0002007a, 0x0002007a, 0x0002007a, 0x0002007a, }, + {0x0002007b, 0x0002007b, 0x0002007b, 0x0002007b, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007e, 0x0002007e, 0x0002007e, 0x0002007e, 0x00020080, 0x00020080, 0x00020080, 0x00020080, }, + {0x0001007d, 0x0001007d, 0x00010084, 0x00010084, 0x00010086, 0x00010086, 0x0001008f, 0x0001008f, 0x000100a1, 0x000100a1, 0x000100a2, 0x000100a2, 0x000100a3, 0x000100a3, 0x000100a4, 0x000100a4, }, + {0x000100a5, 0x000100a5, 0x000100a6, 0x000100a6, 0x000100a7, 0x000100a7, 0x000100a8, 0x000100a8, 0x000100a9, 0x000100a9, 0x000100aa, 0x000100aa, 0x000100ab, 0x000100ab, 0x000100ac, 0x000100ac, }, + {0x000100ad, 0x000100ad, 0x000100ae, 0x000100ae, 0x000100af, 0x000100af, 0x000100b0, 0x000100b0, 0x000100b1, 0x000100b1, 0x000100b2, 0x000100b2, 0x000100b3, 0x000100b3, 0x000100b4, 0x000100b4, }, + {0x00000091, 0x00000092, 0x00000093, 0x00000094, 0x00000095, 0x00000096, 0x00000097, 0x00000098, 0x00000099, 0x0000009a, 0x0000009b, 0x0000009c, 0x0000009d, 0x0000009e, 0x0000009f, 0x000000a0, }, + {0x00000075, 0x00000079, 0x0000007f, 0x00000081, 0x00000082, 0x00000083, 0x00000085, 0x00000087, 0x00000088, 0x00000089, 0x0000008a, 0x0000008b, 0x0000008c, 0x0000008d, 0x0000008e, 0x00000090, }, +}; + +const uint32_t (*c_apauiHuffEncTabels[2 * ALLOC_TABLE_SIZE])[2] = { + NULL, + c_aauiCQMFHuffEnc1, + c_aauiCQMFHuffEnc2, + c_aauiCQMFHuffEnc3, + c_aauiCQMFHuffEnc4, + c_aauiCQMFHuffEnc5, + c_aauiCQMFHuffEnc6, + c_aauiCQMFHuffEnc7, + c_aauiCQMFHuffEnc8, + c_aauiCQMFHuffEnc9, + c_aauiCQMFHuffEnc10, + c_aauiCQMFHuffEnc11, + c_aauiCQMFHuffEnc12, + c_aauiCQMFHuffEnc13, + c_aauiCQMFHuffEnc14, + c_aauiCQMFHuffEnc15, + c_aauiCQMFHuffEnc16, + c_aauiCQMFHuffEnc17, + c_aauiCQMFHuffEnc18, + c_aauiCQMFHuffEnc19, + c_aauiCQMFHuffEnc20, + c_aauiCQMFHuffEnc21, + c_aauiCQMFHuffEnc22, + c_aauiCQMFHuffEnc23, + c_aauiCQMFHuffEnc24, + c_aauiCQMFHuffEnc25, + c_aauiCQMFHuffEnc26, + c_aauiCQMFHuffEnc27, + c_aauiCQMFHuffEnc28, + c_aauiCQMFHuffEnc29, + c_aauiCQMFHuffEnc30, + c_aauiCQMFHuffEnc31, + NULL, + c_aauiCQMFHuffEnc33, + c_aauiCQMFHuffEnc34, + c_aauiCQMFHuffEnc35, + c_aauiCQMFHuffEnc36, + c_aauiCQMFHuffEnc37, + c_aauiCQMFHuffEnc38, + c_aauiCQMFHuffEnc39, + c_aauiCQMFHuffEnc40, + c_aauiCQMFHuffEnc41, + c_aauiCQMFHuffEnc42, + c_aauiCQMFHuffEnc43, + c_aauiCQMFHuffEnc44, + c_aauiCQMFHuffEnc45, + c_aauiCQMFHuffEnc46, + c_aauiCQMFHuffEnc47, + c_aauiCQMFHuffEnc48, + c_aauiCQMFHuffEnc49, + c_aauiCQMFHuffEnc50, + c_aauiCQMFHuffEnc51, + c_aauiCQMFHuffEnc52, + c_aauiCQMFHuffEnc53, + c_aauiCQMFHuffEnc54, + c_aauiCQMFHuffEnc55, + c_aauiCQMFHuffEnc56, + c_aauiCQMFHuffEnc57, + c_aauiCQMFHuffEnc58, + c_aauiCQMFHuffEnc59, + c_aauiCQMFHuffEnc60, + c_aauiCQMFHuffEnc61, + c_aauiCQMFHuffEnc62, + c_aauiCQMFHuffEnc63, +}; + +const uint32_t (*c_apauiHuffDecTables[2 * ALLOC_TABLE_SIZE])[HUFF_DEC_TABLE_SIZE] = { + NULL, + c_aauiCQMFHuffDec1, + c_aauiCQMFHuffDec2, + c_aauiCQMFHuffDec3, + c_aauiCQMFHuffDec4, + c_aauiCQMFHuffDec5, + c_aauiCQMFHuffDec6, + c_aauiCQMFHuffDec7, + c_aauiCQMFHuffDec8, + c_aauiCQMFHuffDec9, + c_aauiCQMFHuffDec10, + c_aauiCQMFHuffDec11, + c_aauiCQMFHuffDec12, + c_aauiCQMFHuffDec13, + c_aauiCQMFHuffDec14, + c_aauiCQMFHuffDec15, + c_aauiCQMFHuffDec16, + c_aauiCQMFHuffDec17, + c_aauiCQMFHuffDec18, + c_aauiCQMFHuffDec19, + c_aauiCQMFHuffDec20, + c_aauiCQMFHuffDec21, + c_aauiCQMFHuffDec22, + c_aauiCQMFHuffDec23, + c_aauiCQMFHuffDec24, + c_aauiCQMFHuffDec25, + c_aauiCQMFHuffDec26, + c_aauiCQMFHuffDec27, + c_aauiCQMFHuffDec28, + c_aauiCQMFHuffDec29, + c_aauiCQMFHuffDec30, + c_aauiCQMFHuffDec31, + NULL, + c_aauiCQMFHuffDec33, + c_aauiCQMFHuffDec34, + c_aauiCQMFHuffDec35, + c_aauiCQMFHuffDec36, + c_aauiCQMFHuffDec37, + c_aauiCQMFHuffDec38, + c_aauiCQMFHuffDec39, + c_aauiCQMFHuffDec40, + c_aauiCQMFHuffDec41, + c_aauiCQMFHuffDec42, + c_aauiCQMFHuffDec43, + c_aauiCQMFHuffDec44, + c_aauiCQMFHuffDec45, + c_aauiCQMFHuffDec46, + c_aauiCQMFHuffDec47, + c_aauiCQMFHuffDec48, + c_aauiCQMFHuffDec49, + c_aauiCQMFHuffDec50, + c_aauiCQMFHuffDec51, + c_aauiCQMFHuffDec52, + c_aauiCQMFHuffDec53, + c_aauiCQMFHuffDec54, + c_aauiCQMFHuffDec55, + c_aauiCQMFHuffDec56, + c_aauiCQMFHuffDec57, + c_aauiCQMFHuffDec58, + c_aauiCQMFHuffDec59, + c_aauiCQMFHuffDec60, + c_aauiCQMFHuffDec61, + c_aauiCQMFHuffDec62, + c_aauiCQMFHuffDec63, +}; + +#ifdef USE_DEMOD_TABLES +const int32_t c_aaiHuffDemod1[16][2] = { + 0,0,0,1,0,2,0,3,1,0,1,1,1,2,1,3,2,0,2,1,2,2,2,3,3,0,3,1,3,2,3,3, +}; + +const int32_t c_aaiHuffDemod2[16][2] = { + 0,0,0,1,0,2,0,3,1,0,1,1,1,2,1,3,2,0,2,1,2,2,2,3,3,0,3,1,3,2,3,3, +}; + +const int32_t c_aaiHuffDemod3[25][2] = { + 0,0,0,1,0,2,0,3,0,4,1,0,1,1,1,2,1,3,1,4,2,0,2,1,2,2,2,3,2,4,3,0, + 3,1,3,2,3,3,3,4,4,0,4,1,4,2,4,3,4,4, +}; + +const int32_t c_aaiHuffDemod4[36][2] = { + 0,0,0,1,0,2,0,3,0,4,0,5,1,0,1,1,1,2,1,3,1,4,1,5,2,0,2,1,2,2,2,3, + 2,4,2,5,3,0,3,1,3,2,3,3,3,4,3,5,4,0,4,1,4,2,4,3,4,4,4,5,5,0,5,1, + 5,2,5,3,5,4,5,5, +}; + +const int32_t c_aaiHuffDemod5[36][2] = { + 0,0,0,1,0,2,0,3,0,4,0,5,1,0,1,1,1,2,1,3,1,4,1,5,2,0,2,1,2,2,2,3, + 2,4,2,5,3,0,3,1,3,2,3,3,3,4,3,5,4,0,4,1,4,2,4,3,4,4,4,5,5,0,5,1, + 5,2,5,3,5,4,5,5, +}; + +const int32_t c_aaiHuffDemod6[49][2] = { + 0,0,0,1,0,2,0,3,0,4,0,5,0,6,1,0,1,1,1,2,1,3,1,4,1,5,1,6,2,0,2,1, + 2,2,2,3,2,4,2,5,2,6,3,0,3,1,3,2,3,3,3,4,3,5,3,6,4,0,4,1,4,2,4,3, + 4,4,4,5,4,6,5,0,5,1,5,2,5,3,5,4,5,5,5,6,6,0,6,1,6,2,6,3,6,4,6,5, + 6,6, +}; + +const int32_t c_aaiHuffDemod7[64][2] = { + 0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,1,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7, + 2,0,2,1,2,2,2,3,2,4,2,5,2,6,2,7,3,0,3,1,3,2,3,3,3,4,3,5,3,6,3,7, + 4,0,4,1,4,2,4,3,4,4,4,5,4,6,4,7,5,0,5,1,5,2,5,3,5,4,5,5,5,6,5,7, + 6,0,6,1,6,2,6,3,6,4,6,5,6,6,6,7,7,0,7,1,7,2,7,3,7,4,7,5,7,6,7,7, +}; + +const int32_t c_aaiHuffDemod8[81][2] = { + 0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,1,0,1,1,1,2,1,3,1,4,1,5,1,6, + 1,7,1,8,2,0,2,1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,3,0,3,1,3,2,3,3,3,4, + 3,5,3,6,3,7,3,8,4,0,4,1,4,2,4,3,4,4,4,5,4,6,4,7,4,8,5,0,5,1,5,2, + 5,3,5,4,5,5,5,6,5,7,5,8,6,0,6,1,6,2,6,3,6,4,6,5,6,6,6,7,6,8,7,0, + 7,1,7,2,7,3,7,4,7,5,7,6,7,7,7,8,8,0,8,1,8,2,8,3,8,4,8,5,8,6,8,7, + 8,8, +}; + +const int32_t c_aaiHuffDemod9[100][2] = { + 0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,1,0,1,1,1,2,1,3,1,4,1,5, + 1,6,1,7,1,8,1,9,2,0,2,1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,3,0,3,1, + 3,2,3,3,3,4,3,5,3,6,3,7,3,8,3,9,4,0,4,1,4,2,4,3,4,4,4,5,4,6,4,7, + 4,8,4,9,5,0,5,1,5,2,5,3,5,4,5,5,5,6,5,7,5,8,5,9,6,0,6,1,6,2,6,3, + 6,4,6,5,6,6,6,7,6,8,6,9,7,0,7,1,7,2,7,3,7,4,7,5,7,6,7,7,7,8,7,9, + 8,0,8,1,8,2,8,3,8,4,8,5,8,6,8,7,8,8,8,9,9,0,9,1,9,2,9,3,9,4,9,5, + 9,6,9,7,9,8,9,9, +}; + +const int32_t c_aaiHuffDemod10[169][2] = { + 0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,1,0,1,1,1,2, + 1,3,1,4,1,5,1,6,1,7,1,8,1,9,1,10,1,11,1,12,2,0,2,1,2,2,2,3,2,4,2,5, + 2,6,2,7,2,8,2,9,2,10,2,11,2,12,3,0,3,1,3,2,3,3,3,4,3,5,3,6,3,7,3,8, + 3,9,3,10,3,11,3,12,4,0,4,1,4,2,4,3,4,4,4,5,4,6,4,7,4,8,4,9,4,10,4,11, + 4,12,5,0,5,1,5,2,5,3,5,4,5,5,5,6,5,7,5,8,5,9,5,10,5,11,5,12,6,0,6,1, + 6,2,6,3,6,4,6,5,6,6,6,7,6,8,6,9,6,10,6,11,6,12,7,0,7,1,7,2,7,3,7,4, + 7,5,7,6,7,7,7,8,7,9,7,10,7,11,7,12,8,0,8,1,8,2,8,3,8,4,8,5,8,6,8,7, + 8,8,8,9,8,10,8,11,8,12,9,0,9,1,9,2,9,3,9,4,9,5,9,6,9,7,9,8,9,9,9,10, + 9,11,9,12,10,0,10,1,10,2,10,3,10,4,10,5,10,6,10,7,10,8,10,9,10,10,10,11,10,12,11,0, + 11,1,11,2,11,3,11,4,11,5,11,6,11,7,11,8,11,9,11,10,11,11,11,12,12,0,12,1,12,2,12,3, + 12,4,12,5,12,6,12,7,12,8,12,9,12,10,12,11,12,12, +}; + +const int32_t c_aaiHuffDemod11[196][2] = { + 0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,1,0,1,1, + 1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,1,10,1,11,1,12,1,13,2,0,2,1,2,2,2,3, + 2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,3,0,3,1,3,2,3,3,3,4,3,5, + 3,6,3,7,3,8,3,9,3,10,3,11,3,12,3,13,4,0,4,1,4,2,4,3,4,4,4,5,4,6,4,7, + 4,8,4,9,4,10,4,11,4,12,4,13,5,0,5,1,5,2,5,3,5,4,5,5,5,6,5,7,5,8,5,9, + 5,10,5,11,5,12,5,13,6,0,6,1,6,2,6,3,6,4,6,5,6,6,6,7,6,8,6,9,6,10,6,11, + 6,12,6,13,7,0,7,1,7,2,7,3,7,4,7,5,7,6,7,7,7,8,7,9,7,10,7,11,7,12,7,13, + 8,0,8,1,8,2,8,3,8,4,8,5,8,6,8,7,8,8,8,9,8,10,8,11,8,12,8,13,9,0,9,1, + 9,2,9,3,9,4,9,5,9,6,9,7,9,8,9,9,9,10,9,11,9,12,9,13,10,0,10,1,10,2,10,3, + 10,4,10,5,10,6,10,7,10,8,10,9,10,10,10,11,10,12,10,13,11,0,11,1,11,2,11,3,11,4,11,5, + 11,6,11,7,11,8,11,9,11,10,11,11,11,12,11,13,12,0,12,1,12,2,12,3,12,4,12,5,12,6,12,7, + 12,8,12,9,12,10,12,11,12,12,12,13,13,0,13,1,13,2,13,3,13,4,13,5,13,6,13,7,13,8,13,9, + 13,10,13,11,13,12,13,13, +}; + +const int32_t c_aaiHuffDemod12[289][2] = { + 0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15, + 0,16,1,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,1,10,1,11,1,12,1,13,1,14, + 1,15,1,16,2,0,2,1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13, + 2,14,2,15,2,16,3,0,3,1,3,2,3,3,3,4,3,5,3,6,3,7,3,8,3,9,3,10,3,11,3,12, + 3,13,3,14,3,15,3,16,4,0,4,1,4,2,4,3,4,4,4,5,4,6,4,7,4,8,4,9,4,10,4,11, + 4,12,4,13,4,14,4,15,4,16,5,0,5,1,5,2,5,3,5,4,5,5,5,6,5,7,5,8,5,9,5,10, + 5,11,5,12,5,13,5,14,5,15,5,16,6,0,6,1,6,2,6,3,6,4,6,5,6,6,6,7,6,8,6,9, + 6,10,6,11,6,12,6,13,6,14,6,15,6,16,7,0,7,1,7,2,7,3,7,4,7,5,7,6,7,7,7,8, + 7,9,7,10,7,11,7,12,7,13,7,14,7,15,7,16,8,0,8,1,8,2,8,3,8,4,8,5,8,6,8,7, + 8,8,8,9,8,10,8,11,8,12,8,13,8,14,8,15,8,16,9,0,9,1,9,2,9,3,9,4,9,5,9,6, + 9,7,9,8,9,9,9,10,9,11,9,12,9,13,9,14,9,15,9,16,10,0,10,1,10,2,10,3,10,4,10,5, + 10,6,10,7,10,8,10,9,10,10,10,11,10,12,10,13,10,14,10,15,10,16,11,0,11,1,11,2,11,3,11,4, + 11,5,11,6,11,7,11,8,11,9,11,10,11,11,11,12,11,13,11,14,11,15,11,16,12,0,12,1,12,2,12,3, + 12,4,12,5,12,6,12,7,12,8,12,9,12,10,12,11,12,12,12,13,12,14,12,15,12,16,13,0,13,1,13,2, + 13,3,13,4,13,5,13,6,13,7,13,8,13,9,13,10,13,11,13,12,13,13,13,14,13,15,13,16,14,0,14,1, + 14,2,14,3,14,4,14,5,14,6,14,7,14,8,14,9,14,10,14,11,14,12,14,13,14,14,14,15,14,16,15,0, + 15,1,15,2,15,3,15,4,15,5,15,6,15,7,15,8,15,9,15,10,15,11,15,12,15,13,15,14,15,15,15,16, + 16,0,16,1,16,2,16,3,16,4,16,5,16,6,16,7,16,8,16,9,16,10,16,11,16,12,16,13,16,14,16,15, + 16,16, +}; + +const int32_t c_aaiHuffDemod13[324][2] = { + 0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15, + 0,16,0,17,1,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,1,10,1,11,1,12,1,13, + 1,14,1,15,1,16,1,17,2,0,2,1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11, + 2,12,2,13,2,14,2,15,2,16,2,17,3,0,3,1,3,2,3,3,3,4,3,5,3,6,3,7,3,8,3,9, + 3,10,3,11,3,12,3,13,3,14,3,15,3,16,3,17,4,0,4,1,4,2,4,3,4,4,4,5,4,6,4,7, + 4,8,4,9,4,10,4,11,4,12,4,13,4,14,4,15,4,16,4,17,5,0,5,1,5,2,5,3,5,4,5,5, + 5,6,5,7,5,8,5,9,5,10,5,11,5,12,5,13,5,14,5,15,5,16,5,17,6,0,6,1,6,2,6,3, + 6,4,6,5,6,6,6,7,6,8,6,9,6,10,6,11,6,12,6,13,6,14,6,15,6,16,6,17,7,0,7,1, + 7,2,7,3,7,4,7,5,7,6,7,7,7,8,7,9,7,10,7,11,7,12,7,13,7,14,7,15,7,16,7,17, + 8,0,8,1,8,2,8,3,8,4,8,5,8,6,8,7,8,8,8,9,8,10,8,11,8,12,8,13,8,14,8,15, + 8,16,8,17,9,0,9,1,9,2,9,3,9,4,9,5,9,6,9,7,9,8,9,9,9,10,9,11,9,12,9,13, + 9,14,9,15,9,16,9,17,10,0,10,1,10,2,10,3,10,4,10,5,10,6,10,7,10,8,10,9,10,10,10,11, + 10,12,10,13,10,14,10,15,10,16,10,17,11,0,11,1,11,2,11,3,11,4,11,5,11,6,11,7,11,8,11,9, + 11,10,11,11,11,12,11,13,11,14,11,15,11,16,11,17,12,0,12,1,12,2,12,3,12,4,12,5,12,6,12,7, + 12,8,12,9,12,10,12,11,12,12,12,13,12,14,12,15,12,16,12,17,13,0,13,1,13,2,13,3,13,4,13,5, + 13,6,13,7,13,8,13,9,13,10,13,11,13,12,13,13,13,14,13,15,13,16,13,17,14,0,14,1,14,2,14,3, + 14,4,14,5,14,6,14,7,14,8,14,9,14,10,14,11,14,12,14,13,14,14,14,15,14,16,14,17,15,0,15,1, + 15,2,15,3,15,4,15,5,15,6,15,7,15,8,15,9,15,10,15,11,15,12,15,13,15,14,15,15,15,16,15,17, + 16,0,16,1,16,2,16,3,16,4,16,5,16,6,16,7,16,8,16,9,16,10,16,11,16,12,16,13,16,14,16,15, + 16,16,16,17,17,0,17,1,17,2,17,3,17,4,17,5,17,6,17,7,17,8,17,9,17,10,17,11,17,12,17,13, + 17,14,17,15,17,16,17,17, +}; + +const int32_t c_aaiHuffDemod14[400][2] = { + 0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15, + 0,16,0,17,0,18,0,19,1,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,1,10,1,11, + 1,12,1,13,1,14,1,15,1,16,1,17,1,18,1,19,2,0,2,1,2,2,2,3,2,4,2,5,2,6,2,7, + 2,8,2,9,2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17,2,18,2,19,3,0,3,1,3,2,3,3, + 3,4,3,5,3,6,3,7,3,8,3,9,3,10,3,11,3,12,3,13,3,14,3,15,3,16,3,17,3,18,3,19, + 4,0,4,1,4,2,4,3,4,4,4,5,4,6,4,7,4,8,4,9,4,10,4,11,4,12,4,13,4,14,4,15, + 4,16,4,17,4,18,4,19,5,0,5,1,5,2,5,3,5,4,5,5,5,6,5,7,5,8,5,9,5,10,5,11, + 5,12,5,13,5,14,5,15,5,16,5,17,5,18,5,19,6,0,6,1,6,2,6,3,6,4,6,5,6,6,6,7, + 6,8,6,9,6,10,6,11,6,12,6,13,6,14,6,15,6,16,6,17,6,18,6,19,7,0,7,1,7,2,7,3, + 7,4,7,5,7,6,7,7,7,8,7,9,7,10,7,11,7,12,7,13,7,14,7,15,7,16,7,17,7,18,7,19, + 8,0,8,1,8,2,8,3,8,4,8,5,8,6,8,7,8,8,8,9,8,10,8,11,8,12,8,13,8,14,8,15, + 8,16,8,17,8,18,8,19,9,0,9,1,9,2,9,3,9,4,9,5,9,6,9,7,9,8,9,9,9,10,9,11, + 9,12,9,13,9,14,9,15,9,16,9,17,9,18,9,19,10,0,10,1,10,2,10,3,10,4,10,5,10,6,10,7, + 10,8,10,9,10,10,10,11,10,12,10,13,10,14,10,15,10,16,10,17,10,18,10,19,11,0,11,1,11,2,11,3, + 11,4,11,5,11,6,11,7,11,8,11,9,11,10,11,11,11,12,11,13,11,14,11,15,11,16,11,17,11,18,11,19, + 12,0,12,1,12,2,12,3,12,4,12,5,12,6,12,7,12,8,12,9,12,10,12,11,12,12,12,13,12,14,12,15, + 12,16,12,17,12,18,12,19,13,0,13,1,13,2,13,3,13,4,13,5,13,6,13,7,13,8,13,9,13,10,13,11, + 13,12,13,13,13,14,13,15,13,16,13,17,13,18,13,19,14,0,14,1,14,2,14,3,14,4,14,5,14,6,14,7, + 14,8,14,9,14,10,14,11,14,12,14,13,14,14,14,15,14,16,14,17,14,18,14,19,15,0,15,1,15,2,15,3, + 15,4,15,5,15,6,15,7,15,8,15,9,15,10,15,11,15,12,15,13,15,14,15,15,15,16,15,17,15,18,15,19, + 16,0,16,1,16,2,16,3,16,4,16,5,16,6,16,7,16,8,16,9,16,10,16,11,16,12,16,13,16,14,16,15, + 16,16,16,17,16,18,16,19,17,0,17,1,17,2,17,3,17,4,17,5,17,6,17,7,17,8,17,9,17,10,17,11, + 17,12,17,13,17,14,17,15,17,16,17,17,17,18,17,19,18,0,18,1,18,2,18,3,18,4,18,5,18,6,18,7, + 18,8,18,9,18,10,18,11,18,12,18,13,18,14,18,15,18,16,18,17,18,18,18,19,19,0,19,1,19,2,19,3, + 19,4,19,5,19,6,19,7,19,8,19,9,19,10,19,11,19,12,19,13,19,14,19,15,19,16,19,17,19,18,19,19, +}; + +const int32_t c_aaiHuffDemod15[576][2] = { + 0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15, + 0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,1,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7, + 1,8,1,9,1,10,1,11,1,12,1,13,1,14,1,15,1,16,1,17,1,18,1,19,1,20,1,21,1,22,1,23, + 2,0,2,1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2,14,2,15, + 2,16,2,17,2,18,2,19,2,20,2,21,2,22,2,23,3,0,3,1,3,2,3,3,3,4,3,5,3,6,3,7, + 3,8,3,9,3,10,3,11,3,12,3,13,3,14,3,15,3,16,3,17,3,18,3,19,3,20,3,21,3,22,3,23, + 4,0,4,1,4,2,4,3,4,4,4,5,4,6,4,7,4,8,4,9,4,10,4,11,4,12,4,13,4,14,4,15, + 4,16,4,17,4,18,4,19,4,20,4,21,4,22,4,23,5,0,5,1,5,2,5,3,5,4,5,5,5,6,5,7, + 5,8,5,9,5,10,5,11,5,12,5,13,5,14,5,15,5,16,5,17,5,18,5,19,5,20,5,21,5,22,5,23, + 6,0,6,1,6,2,6,3,6,4,6,5,6,6,6,7,6,8,6,9,6,10,6,11,6,12,6,13,6,14,6,15, + 6,16,6,17,6,18,6,19,6,20,6,21,6,22,6,23,7,0,7,1,7,2,7,3,7,4,7,5,7,6,7,7, + 7,8,7,9,7,10,7,11,7,12,7,13,7,14,7,15,7,16,7,17,7,18,7,19,7,20,7,21,7,22,7,23, + 8,0,8,1,8,2,8,3,8,4,8,5,8,6,8,7,8,8,8,9,8,10,8,11,8,12,8,13,8,14,8,15, + 8,16,8,17,8,18,8,19,8,20,8,21,8,22,8,23,9,0,9,1,9,2,9,3,9,4,9,5,9,6,9,7, + 9,8,9,9,9,10,9,11,9,12,9,13,9,14,9,15,9,16,9,17,9,18,9,19,9,20,9,21,9,22,9,23, + 10,0,10,1,10,2,10,3,10,4,10,5,10,6,10,7,10,8,10,9,10,10,10,11,10,12,10,13,10,14,10,15, + 10,16,10,17,10,18,10,19,10,20,10,21,10,22,10,23,11,0,11,1,11,2,11,3,11,4,11,5,11,6,11,7, + 11,8,11,9,11,10,11,11,11,12,11,13,11,14,11,15,11,16,11,17,11,18,11,19,11,20,11,21,11,22,11,23, + 12,0,12,1,12,2,12,3,12,4,12,5,12,6,12,7,12,8,12,9,12,10,12,11,12,12,12,13,12,14,12,15, + 12,16,12,17,12,18,12,19,12,20,12,21,12,22,12,23,13,0,13,1,13,2,13,3,13,4,13,5,13,6,13,7, + 13,8,13,9,13,10,13,11,13,12,13,13,13,14,13,15,13,16,13,17,13,18,13,19,13,20,13,21,13,22,13,23, + 14,0,14,1,14,2,14,3,14,4,14,5,14,6,14,7,14,8,14,9,14,10,14,11,14,12,14,13,14,14,14,15, + 14,16,14,17,14,18,14,19,14,20,14,21,14,22,14,23,15,0,15,1,15,2,15,3,15,4,15,5,15,6,15,7, + 15,8,15,9,15,10,15,11,15,12,15,13,15,14,15,15,15,16,15,17,15,18,15,19,15,20,15,21,15,22,15,23, + 16,0,16,1,16,2,16,3,16,4,16,5,16,6,16,7,16,8,16,9,16,10,16,11,16,12,16,13,16,14,16,15, + 16,16,16,17,16,18,16,19,16,20,16,21,16,22,16,23,17,0,17,1,17,2,17,3,17,4,17,5,17,6,17,7, + 17,8,17,9,17,10,17,11,17,12,17,13,17,14,17,15,17,16,17,17,17,18,17,19,17,20,17,21,17,22,17,23, + 18,0,18,1,18,2,18,3,18,4,18,5,18,6,18,7,18,8,18,9,18,10,18,11,18,12,18,13,18,14,18,15, + 18,16,18,17,18,18,18,19,18,20,18,21,18,22,18,23,19,0,19,1,19,2,19,3,19,4,19,5,19,6,19,7, + 19,8,19,9,19,10,19,11,19,12,19,13,19,14,19,15,19,16,19,17,19,18,19,19,19,20,19,21,19,22,19,23, + 20,0,20,1,20,2,20,3,20,4,20,5,20,6,20,7,20,8,20,9,20,10,20,11,20,12,20,13,20,14,20,15, + 20,16,20,17,20,18,20,19,20,20,20,21,20,22,20,23,21,0,21,1,21,2,21,3,21,4,21,5,21,6,21,7, + 21,8,21,9,21,10,21,11,21,12,21,13,21,14,21,15,21,16,21,17,21,18,21,19,21,20,21,21,21,22,21,23, + 22,0,22,1,22,2,22,3,22,4,22,5,22,6,22,7,22,8,22,9,22,10,22,11,22,12,22,13,22,14,22,15, + 22,16,22,17,22,18,22,19,22,20,22,21,22,22,22,23,23,0,23,1,23,2,23,3,23,4,23,5,23,6,23,7, + 23,8,23,9,23,10,23,11,23,12,23,13,23,14,23,15,23,16,23,17,23,18,23,19,23,20,23,21,23,22,23,23, +}; + +const int32_t c_aaiHuffDemod16[729][2] = { + 0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15, + 0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,1,0,1,1,1,2,1,3,1,4, + 1,5,1,6,1,7,1,8,1,9,1,10,1,11,1,12,1,13,1,14,1,15,1,16,1,17,1,18,1,19,1,20, + 1,21,1,22,1,23,1,24,1,25,1,26,2,0,2,1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9, + 2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17,2,18,2,19,2,20,2,21,2,22,2,23,2,24,2,25, + 2,26,3,0,3,1,3,2,3,3,3,4,3,5,3,6,3,7,3,8,3,9,3,10,3,11,3,12,3,13,3,14, + 3,15,3,16,3,17,3,18,3,19,3,20,3,21,3,22,3,23,3,24,3,25,3,26,4,0,4,1,4,2,4,3, + 4,4,4,5,4,6,4,7,4,8,4,9,4,10,4,11,4,12,4,13,4,14,4,15,4,16,4,17,4,18,4,19, + 4,20,4,21,4,22,4,23,4,24,4,25,4,26,5,0,5,1,5,2,5,3,5,4,5,5,5,6,5,7,5,8, + 5,9,5,10,5,11,5,12,5,13,5,14,5,15,5,16,5,17,5,18,5,19,5,20,5,21,5,22,5,23,5,24, + 5,25,5,26,6,0,6,1,6,2,6,3,6,4,6,5,6,6,6,7,6,8,6,9,6,10,6,11,6,12,6,13, + 6,14,6,15,6,16,6,17,6,18,6,19,6,20,6,21,6,22,6,23,6,24,6,25,6,26,7,0,7,1,7,2, + 7,3,7,4,7,5,7,6,7,7,7,8,7,9,7,10,7,11,7,12,7,13,7,14,7,15,7,16,7,17,7,18, + 7,19,7,20,7,21,7,22,7,23,7,24,7,25,7,26,8,0,8,1,8,2,8,3,8,4,8,5,8,6,8,7, + 8,8,8,9,8,10,8,11,8,12,8,13,8,14,8,15,8,16,8,17,8,18,8,19,8,20,8,21,8,22,8,23, + 8,24,8,25,8,26,9,0,9,1,9,2,9,3,9,4,9,5,9,6,9,7,9,8,9,9,9,10,9,11,9,12, + 9,13,9,14,9,15,9,16,9,17,9,18,9,19,9,20,9,21,9,22,9,23,9,24,9,25,9,26,10,0,10,1, + 10,2,10,3,10,4,10,5,10,6,10,7,10,8,10,9,10,10,10,11,10,12,10,13,10,14,10,15,10,16,10,17, + 10,18,10,19,10,20,10,21,10,22,10,23,10,24,10,25,10,26,11,0,11,1,11,2,11,3,11,4,11,5,11,6, + 11,7,11,8,11,9,11,10,11,11,11,12,11,13,11,14,11,15,11,16,11,17,11,18,11,19,11,20,11,21,11,22, + 11,23,11,24,11,25,11,26,12,0,12,1,12,2,12,3,12,4,12,5,12,6,12,7,12,8,12,9,12,10,12,11, + 12,12,12,13,12,14,12,15,12,16,12,17,12,18,12,19,12,20,12,21,12,22,12,23,12,24,12,25,12,26,13,0, + 13,1,13,2,13,3,13,4,13,5,13,6,13,7,13,8,13,9,13,10,13,11,13,12,13,13,13,14,13,15,13,16, + 13,17,13,18,13,19,13,20,13,21,13,22,13,23,13,24,13,25,13,26,14,0,14,1,14,2,14,3,14,4,14,5, + 14,6,14,7,14,8,14,9,14,10,14,11,14,12,14,13,14,14,14,15,14,16,14,17,14,18,14,19,14,20,14,21, + 14,22,14,23,14,24,14,25,14,26,15,0,15,1,15,2,15,3,15,4,15,5,15,6,15,7,15,8,15,9,15,10, + 15,11,15,12,15,13,15,14,15,15,15,16,15,17,15,18,15,19,15,20,15,21,15,22,15,23,15,24,15,25,15,26, + 16,0,16,1,16,2,16,3,16,4,16,5,16,6,16,7,16,8,16,9,16,10,16,11,16,12,16,13,16,14,16,15, + 16,16,16,17,16,18,16,19,16,20,16,21,16,22,16,23,16,24,16,25,16,26,17,0,17,1,17,2,17,3,17,4, + 17,5,17,6,17,7,17,8,17,9,17,10,17,11,17,12,17,13,17,14,17,15,17,16,17,17,17,18,17,19,17,20, + 17,21,17,22,17,23,17,24,17,25,17,26,18,0,18,1,18,2,18,3,18,4,18,5,18,6,18,7,18,8,18,9, + 18,10,18,11,18,12,18,13,18,14,18,15,18,16,18,17,18,18,18,19,18,20,18,21,18,22,18,23,18,24,18,25, + 18,26,19,0,19,1,19,2,19,3,19,4,19,5,19,6,19,7,19,8,19,9,19,10,19,11,19,12,19,13,19,14, + 19,15,19,16,19,17,19,18,19,19,19,20,19,21,19,22,19,23,19,24,19,25,19,26,20,0,20,1,20,2,20,3, + 20,4,20,5,20,6,20,7,20,8,20,9,20,10,20,11,20,12,20,13,20,14,20,15,20,16,20,17,20,18,20,19, + 20,20,20,21,20,22,20,23,20,24,20,25,20,26,21,0,21,1,21,2,21,3,21,4,21,5,21,6,21,7,21,8, + 21,9,21,10,21,11,21,12,21,13,21,14,21,15,21,16,21,17,21,18,21,19,21,20,21,21,21,22,21,23,21,24, + 21,25,21,26,22,0,22,1,22,2,22,3,22,4,22,5,22,6,22,7,22,8,22,9,22,10,22,11,22,12,22,13, + 22,14,22,15,22,16,22,17,22,18,22,19,22,20,22,21,22,22,22,23,22,24,22,25,22,26,23,0,23,1,23,2, + 23,3,23,4,23,5,23,6,23,7,23,8,23,9,23,10,23,11,23,12,23,13,23,14,23,15,23,16,23,17,23,18, + 23,19,23,20,23,21,23,22,23,23,23,24,23,25,23,26,24,0,24,1,24,2,24,3,24,4,24,5,24,6,24,7, + 24,8,24,9,24,10,24,11,24,12,24,13,24,14,24,15,24,16,24,17,24,18,24,19,24,20,24,21,24,22,24,23, + 24,24,24,25,24,26,25,0,25,1,25,2,25,3,25,4,25,5,25,6,25,7,25,8,25,9,25,10,25,11,25,12, + 25,13,25,14,25,15,25,16,25,17,25,18,25,19,25,20,25,21,25,22,25,23,25,24,25,25,25,26,26,0,26,1, + 26,2,26,3,26,4,26,5,26,6,26,7,26,8,26,9,26,10,26,11,26,12,26,13,26,14,26,15,26,16,26,17, + 26,18,26,19,26,20,26,21,26,22,26,23,26,24,26,25,26,26, +}; + +const int32_t c_aaiHuffDemod17[729][2] = { + 0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15, + 0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,1,0,1,1,1,2,1,3,1,4, + 1,5,1,6,1,7,1,8,1,9,1,10,1,11,1,12,1,13,1,14,1,15,1,16,1,17,1,18,1,19,1,20, + 1,21,1,22,1,23,1,24,1,25,1,26,2,0,2,1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9, + 2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17,2,18,2,19,2,20,2,21,2,22,2,23,2,24,2,25, + 2,26,3,0,3,1,3,2,3,3,3,4,3,5,3,6,3,7,3,8,3,9,3,10,3,11,3,12,3,13,3,14, + 3,15,3,16,3,17,3,18,3,19,3,20,3,21,3,22,3,23,3,24,3,25,3,26,4,0,4,1,4,2,4,3, + 4,4,4,5,4,6,4,7,4,8,4,9,4,10,4,11,4,12,4,13,4,14,4,15,4,16,4,17,4,18,4,19, + 4,20,4,21,4,22,4,23,4,24,4,25,4,26,5,0,5,1,5,2,5,3,5,4,5,5,5,6,5,7,5,8, + 5,9,5,10,5,11,5,12,5,13,5,14,5,15,5,16,5,17,5,18,5,19,5,20,5,21,5,22,5,23,5,24, + 5,25,5,26,6,0,6,1,6,2,6,3,6,4,6,5,6,6,6,7,6,8,6,9,6,10,6,11,6,12,6,13, + 6,14,6,15,6,16,6,17,6,18,6,19,6,20,6,21,6,22,6,23,6,24,6,25,6,26,7,0,7,1,7,2, + 7,3,7,4,7,5,7,6,7,7,7,8,7,9,7,10,7,11,7,12,7,13,7,14,7,15,7,16,7,17,7,18, + 7,19,7,20,7,21,7,22,7,23,7,24,7,25,7,26,8,0,8,1,8,2,8,3,8,4,8,5,8,6,8,7, + 8,8,8,9,8,10,8,11,8,12,8,13,8,14,8,15,8,16,8,17,8,18,8,19,8,20,8,21,8,22,8,23, + 8,24,8,25,8,26,9,0,9,1,9,2,9,3,9,4,9,5,9,6,9,7,9,8,9,9,9,10,9,11,9,12, + 9,13,9,14,9,15,9,16,9,17,9,18,9,19,9,20,9,21,9,22,9,23,9,24,9,25,9,26,10,0,10,1, + 10,2,10,3,10,4,10,5,10,6,10,7,10,8,10,9,10,10,10,11,10,12,10,13,10,14,10,15,10,16,10,17, + 10,18,10,19,10,20,10,21,10,22,10,23,10,24,10,25,10,26,11,0,11,1,11,2,11,3,11,4,11,5,11,6, + 11,7,11,8,11,9,11,10,11,11,11,12,11,13,11,14,11,15,11,16,11,17,11,18,11,19,11,20,11,21,11,22, + 11,23,11,24,11,25,11,26,12,0,12,1,12,2,12,3,12,4,12,5,12,6,12,7,12,8,12,9,12,10,12,11, + 12,12,12,13,12,14,12,15,12,16,12,17,12,18,12,19,12,20,12,21,12,22,12,23,12,24,12,25,12,26,13,0, + 13,1,13,2,13,3,13,4,13,5,13,6,13,7,13,8,13,9,13,10,13,11,13,12,13,13,13,14,13,15,13,16, + 13,17,13,18,13,19,13,20,13,21,13,22,13,23,13,24,13,25,13,26,14,0,14,1,14,2,14,3,14,4,14,5, + 14,6,14,7,14,8,14,9,14,10,14,11,14,12,14,13,14,14,14,15,14,16,14,17,14,18,14,19,14,20,14,21, + 14,22,14,23,14,24,14,25,14,26,15,0,15,1,15,2,15,3,15,4,15,5,15,6,15,7,15,8,15,9,15,10, + 15,11,15,12,15,13,15,14,15,15,15,16,15,17,15,18,15,19,15,20,15,21,15,22,15,23,15,24,15,25,15,26, + 16,0,16,1,16,2,16,3,16,4,16,5,16,6,16,7,16,8,16,9,16,10,16,11,16,12,16,13,16,14,16,15, + 16,16,16,17,16,18,16,19,16,20,16,21,16,22,16,23,16,24,16,25,16,26,17,0,17,1,17,2,17,3,17,4, + 17,5,17,6,17,7,17,8,17,9,17,10,17,11,17,12,17,13,17,14,17,15,17,16,17,17,17,18,17,19,17,20, + 17,21,17,22,17,23,17,24,17,25,17,26,18,0,18,1,18,2,18,3,18,4,18,5,18,6,18,7,18,8,18,9, + 18,10,18,11,18,12,18,13,18,14,18,15,18,16,18,17,18,18,18,19,18,20,18,21,18,22,18,23,18,24,18,25, + 18,26,19,0,19,1,19,2,19,3,19,4,19,5,19,6,19,7,19,8,19,9,19,10,19,11,19,12,19,13,19,14, + 19,15,19,16,19,17,19,18,19,19,19,20,19,21,19,22,19,23,19,24,19,25,19,26,20,0,20,1,20,2,20,3, + 20,4,20,5,20,6,20,7,20,8,20,9,20,10,20,11,20,12,20,13,20,14,20,15,20,16,20,17,20,18,20,19, + 20,20,20,21,20,22,20,23,20,24,20,25,20,26,21,0,21,1,21,2,21,3,21,4,21,5,21,6,21,7,21,8, + 21,9,21,10,21,11,21,12,21,13,21,14,21,15,21,16,21,17,21,18,21,19,21,20,21,21,21,22,21,23,21,24, + 21,25,21,26,22,0,22,1,22,2,22,3,22,4,22,5,22,6,22,7,22,8,22,9,22,10,22,11,22,12,22,13, + 22,14,22,15,22,16,22,17,22,18,22,19,22,20,22,21,22,22,22,23,22,24,22,25,22,26,23,0,23,1,23,2, + 23,3,23,4,23,5,23,6,23,7,23,8,23,9,23,10,23,11,23,12,23,13,23,14,23,15,23,16,23,17,23,18, + 23,19,23,20,23,21,23,22,23,23,23,24,23,25,23,26,24,0,24,1,24,2,24,3,24,4,24,5,24,6,24,7, + 24,8,24,9,24,10,24,11,24,12,24,13,24,14,24,15,24,16,24,17,24,18,24,19,24,20,24,21,24,22,24,23, + 24,24,24,25,24,26,25,0,25,1,25,2,25,3,25,4,25,5,25,6,25,7,25,8,25,9,25,10,25,11,25,12, + 25,13,25,14,25,15,25,16,25,17,25,18,25,19,25,20,25,21,25,22,25,23,25,24,25,25,25,26,26,0,26,1, + 26,2,26,3,26,4,26,5,26,6,26,7,26,8,26,9,26,10,26,11,26,12,26,13,26,14,26,15,26,16,26,17, + 26,18,26,19,26,20,26,21,26,22,26,23,26,24,26,25,26,26, +}; +}; + +const int32_t (*c_apaiDemodTables[ALLOC_TABLE_SIZE])[2] = { + NULL, + c_aaiHuffDemod1, + c_aaiHuffDemod2, + c_aaiHuffDemod3, + c_aaiHuffDemod4, + c_aaiHuffDemod5, + c_aaiHuffDemod6, + c_aaiHuffDemod7, + c_aaiHuffDemod8, + c_aaiHuffDemod9, + c_aaiHuffDemod10, + c_aaiHuffDemod11, + c_aaiHuffDemod12, + c_aaiHuffDemod13, + c_aaiHuffDemod14, + c_aaiHuffDemod15, + c_aaiHuffDemod16, + c_aaiHuffDemod17, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, +}; + +#endif + + +/* clang-format on */ diff --git a/lib_rend/ivas_CQMFHuff.h b/lib_rend/ivas_CQMFHuff.h new file mode 100644 index 0000000000..3e6eebaba4 --- /dev/null +++ b/lib_rend/ivas_CQMFHuff.h @@ -0,0 +1,350 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef _IVAS_CQMF_HUFF_H_ +#define _IVAS_CQMF_HUFF_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "ivas_Tables.h" + +//#define USE_DEMOD_TABLES + +#ifndef HUFF_READ_SIZE +#define HUFF_READ_SIZE (4) +#endif + +#ifndef HUFF_DEC_TABLE_SIZE +#define HUFF_DEC_TABLE_SIZE (16) +#endif + +#include // For NULL +#include +extern const uint32_t c_aauiCQMFHuffEnc1[16][2]; + +extern const uint32_t c_aauiCQMFHuffDec1[3][16]; + +extern const uint32_t c_aauiCQMFHuffEnc2[16][2]; + +extern const uint32_t c_aauiCQMFHuffDec2[3][16]; + +extern const uint32_t c_aauiCQMFHuffEnc3[25][2]; + +extern const uint32_t c_aauiCQMFHuffDec3[10][16]; + +extern const uint32_t c_aauiCQMFHuffEnc4[36][2]; + +extern const uint32_t c_aauiCQMFHuffDec4[5][16]; + +extern const uint32_t c_aauiCQMFHuffEnc5[36][2]; + +extern const uint32_t c_aauiCQMFHuffDec5[10][16]; + +extern const uint32_t c_aauiCQMFHuffEnc6[49][2]; + +extern const uint32_t c_aauiCQMFHuffDec6[7][16]; + +extern const uint32_t c_aauiCQMFHuffEnc7[64][2]; + +extern const uint32_t c_aauiCQMFHuffDec7[25][16]; + +extern const uint32_t c_aauiCQMFHuffEnc8[81][2]; + +extern const uint32_t c_aauiCQMFHuffDec8[16][16]; + +extern const uint32_t c_aauiCQMFHuffEnc9[100][2]; + +extern const uint32_t c_aauiCQMFHuffDec9[22][16]; + +extern const uint32_t c_aauiCQMFHuffEnc10[169][2]; + +extern const uint32_t c_aauiCQMFHuffDec10[45][16]; + +extern const uint32_t c_aauiCQMFHuffEnc11[196][2]; + +extern const uint32_t c_aauiCQMFHuffDec11[50][16]; + +extern const uint32_t c_aauiCQMFHuffEnc12[289][2]; + +extern const uint32_t c_aauiCQMFHuffDec12[76][16]; + +extern const uint32_t c_aauiCQMFHuffEnc13[324][2]; + +extern const uint32_t c_aauiCQMFHuffDec13[89][16]; + +extern const uint32_t c_aauiCQMFHuffEnc14[400][2]; + +extern const uint32_t c_aauiCQMFHuffDec14[53][16]; + +extern const uint32_t c_aauiCQMFHuffEnc15[576][2]; + +extern const uint32_t c_aauiCQMFHuffDec15[73][16]; + +extern const uint32_t c_aauiCQMFHuffEnc16[729][2]; + +extern const uint32_t c_aauiCQMFHuffDec16[85][16]; + +extern const uint32_t c_aauiCQMFHuffEnc17[729][2]; + +extern const uint32_t c_aauiCQMFHuffDec17[93][16]; + +extern const uint32_t c_aauiCQMFHuffEnc18[28][2]; + +extern const uint32_t c_aauiCQMFHuffDec18[6][16]; + +extern const uint32_t c_aauiCQMFHuffEnc19[29][2]; + +extern const uint32_t c_aauiCQMFHuffDec19[6][16]; + +extern const uint32_t c_aauiCQMFHuffEnc20[32][2]; + +extern const uint32_t c_aauiCQMFHuffDec20[6][16]; + +extern const uint32_t c_aauiCQMFHuffEnc21[37][2]; + +extern const uint32_t c_aauiCQMFHuffDec21[7][16]; + +extern const uint32_t c_aauiCQMFHuffEnc22[39][2]; + +extern const uint32_t c_aauiCQMFHuffDec22[9][16]; + +extern const uint32_t c_aauiCQMFHuffEnc23[46][2]; + +extern const uint32_t c_aauiCQMFHuffDec23[12][16]; + +extern const uint32_t c_aauiCQMFHuffEnc24[55][2]; + +extern const uint32_t c_aauiCQMFHuffDec24[17][16]; + +extern const uint32_t c_aauiCQMFHuffEnc25[65][2]; + +extern const uint32_t c_aauiCQMFHuffDec25[19][16]; + +extern const uint32_t c_aauiCQMFHuffEnc26[77][2]; + +extern const uint32_t c_aauiCQMFHuffDec26[26][16]; + +extern const uint32_t c_aauiCQMFHuffEnc27[91][2]; + +extern const uint32_t c_aauiCQMFHuffDec27[28][16]; + +extern const uint32_t c_aauiCQMFHuffEnc28[109][2]; + +extern const uint32_t c_aauiCQMFHuffDec28[30][16]; + +extern const uint32_t c_aauiCQMFHuffEnc29[129][2]; + +extern const uint32_t c_aauiCQMFHuffDec29[34][16]; + +extern const uint32_t c_aauiCQMFHuffEnc30[153][2]; + +extern const uint32_t c_aauiCQMFHuffDec30[39][16]; + +extern const uint32_t c_aauiCQMFHuffEnc31[181][2]; + +extern const uint32_t c_aauiCQMFHuffDec31[43][16]; + +extern const uint32_t c_aauiCQMFHuffEnc33[16][2]; + +extern const uint32_t c_aauiCQMFHuffDec33[2][16]; + +extern const uint32_t c_aauiCQMFHuffEnc34[16][2]; + +extern const uint32_t c_aauiCQMFHuffDec34[2][16]; + +extern const uint32_t c_aauiCQMFHuffEnc35[25][2]; + +extern const uint32_t c_aauiCQMFHuffDec35[9][16]; + +extern const uint32_t c_aauiCQMFHuffEnc36[36][2]; + +extern const uint32_t c_aauiCQMFHuffDec36[7][16]; + +extern const uint32_t c_aauiCQMFHuffEnc37[36][2]; + +extern const uint32_t c_aauiCQMFHuffDec37[4][16]; + +extern const uint32_t c_aauiCQMFHuffEnc38[49][2]; + +extern const uint32_t c_aauiCQMFHuffDec38[22][16]; + +extern const uint32_t c_aauiCQMFHuffEnc39[64][2]; + +extern const uint32_t c_aauiCQMFHuffDec39[12][16]; + +extern const uint32_t c_aauiCQMFHuffEnc40[81][2]; + +extern const uint32_t c_aauiCQMFHuffDec40[36][16]; + +extern const uint32_t c_aauiCQMFHuffEnc41[100][2]; + +extern const uint32_t c_aauiCQMFHuffDec41[16][16]; + +extern const uint32_t c_aauiCQMFHuffEnc42[169][2]; + +extern const uint32_t c_aauiCQMFHuffDec42[28][16]; + +extern const uint32_t c_aauiCQMFHuffEnc43[196][2]; + +extern const uint32_t c_aauiCQMFHuffDec43[32][16]; + +extern const uint32_t c_aauiCQMFHuffEnc44[289][2]; + +extern const uint32_t c_aauiCQMFHuffDec44[27][16]; + +extern const uint32_t c_aauiCQMFHuffEnc45[324][2]; + +extern const uint32_t c_aauiCQMFHuffDec45[50][16]; + +extern const uint32_t c_aauiCQMFHuffEnc46[400][2]; + +extern const uint32_t c_aauiCQMFHuffDec46[61][16]; + +extern const uint32_t c_aauiCQMFHuffEnc47[576][2]; + +extern const uint32_t c_aauiCQMFHuffDec47[87][16]; + +extern const uint32_t c_aauiCQMFHuffEnc48[729][2]; + +extern const uint32_t c_aauiCQMFHuffDec48[110][16]; + +extern const uint32_t c_aauiCQMFHuffEnc49[729][2]; + +extern const uint32_t c_aauiCQMFHuffDec49[113][16]; + +extern const uint32_t c_aauiCQMFHuffEnc50[28][2]; + +extern const uint32_t c_aauiCQMFHuffDec50[6][16]; + +extern const uint32_t c_aauiCQMFHuffEnc51[29][2]; + +extern const uint32_t c_aauiCQMFHuffDec51[6][16]; + +extern const uint32_t c_aauiCQMFHuffEnc52[32][2]; + +extern const uint32_t c_aauiCQMFHuffDec52[7][16]; + +extern const uint32_t c_aauiCQMFHuffEnc53[37][2]; + +extern const uint32_t c_aauiCQMFHuffDec53[9][16]; + +extern const uint32_t c_aauiCQMFHuffEnc54[39][2]; + +extern const uint32_t c_aauiCQMFHuffDec54[9][16]; + +extern const uint32_t c_aauiCQMFHuffEnc55[46][2]; + +extern const uint32_t c_aauiCQMFHuffDec55[10][16]; + +extern const uint32_t c_aauiCQMFHuffEnc56[55][2]; + +extern const uint32_t c_aauiCQMFHuffDec56[12][16]; + +extern const uint32_t c_aauiCQMFHuffEnc57[65][2]; + +extern const uint32_t c_aauiCQMFHuffDec57[14][16]; + +extern const uint32_t c_aauiCQMFHuffEnc58[77][2]; + +extern const uint32_t c_aauiCQMFHuffDec58[17][16]; + +extern const uint32_t c_aauiCQMFHuffEnc59[91][2]; + +extern const uint32_t c_aauiCQMFHuffDec59[20][16]; + +extern const uint32_t c_aauiCQMFHuffEnc60[109][2]; + +extern const uint32_t c_aauiCQMFHuffDec60[24][16]; + +extern const uint32_t c_aauiCQMFHuffEnc61[129][2]; + +extern const uint32_t c_aauiCQMFHuffDec61[33][16]; + +extern const uint32_t c_aauiCQMFHuffEnc62[153][2]; + +extern const uint32_t c_aauiCQMFHuffDec62[41][16]; + +extern const uint32_t c_aauiCQMFHuffEnc63[181][2]; + +extern const uint32_t c_aauiCQMFHuffDec63[39][16]; + + +extern const uint32_t (*c_apauiHuffEncTabels[2 * ALLOC_TABLE_SIZE])[2]; + +extern const uint32_t (*c_apauiHuffDecTables[2 * ALLOC_TABLE_SIZE])[HUFF_DEC_TABLE_SIZE]; + +#ifdef USE_DEMOD_TABLES +extern const int32_t c_aaiHuffDemod1[16][2]; + +extern const int32_t c_aaiHuffDemod2[16][2]; + +extern const int32_t c_aaiHuffDemod3[25][2]; + +extern const int32_t c_aaiHuffDemod4[36][2]; + +extern const int32_t c_aaiHuffDemod5[36][2]; + +extern const int32_t c_aaiHuffDemod6[49][2]; + +extern const int32_t c_aaiHuffDemod7[64][2]; + +extern const int32_t c_aaiHuffDemod8[81][2]; + +extern const int32_t c_aaiHuffDemod9[100][2]; + +extern const int32_t c_aaiHuffDemod10[169][2]; + +extern const int32_t c_aaiHuffDemod11[196][2]; + +extern const int32_t c_aaiHuffDemod12[289][2]; + +extern const int32_t c_aaiHuffDemod13[324][2]; + +extern const int32_t c_aaiHuffDemod14[400][2]; + +extern const int32_t c_aaiHuffDemod15[576][2]; + +extern const int32_t c_aaiHuffDemod16[729][2]; + +extern const int32_t c_aaiHuffDemod17[729][2]; + +extern const int32_t (*c_apaiDemodTables[ALLOC_TABLE_SIZE])[2]; +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _CQMF_HUFF_H_ */ diff --git a/lib_rend/ivas_MSPred.c b/lib_rend/ivas_MSPred.c new file mode 100644 index 0000000000..97157de348 --- /dev/null +++ b/lib_rend/ivas_MSPred.c @@ -0,0 +1,357 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "ivas_MSPred.h" +#include "ivas_Tables.h" +#include "ivas_RMSEnvDeltaHuff.h" +#include +#include +#include "options.h" +#include "prot.h" +#include "wmops.h" + +int32_t _round( float val ) +{ + return ( val > 0.0f ? (int32_t) ( val + 0.5f ) : (int32_t) ( val - 0.5f ) ); +} + +int32_t quantPhase( float phase ) +{ +#ifdef SIMPLE_PHASE + int32_t phaseQ; + if ( phase < 0.0f ) + { + phase += 2.0f * _PI_; + } + phaseQ = _round( phase * SIMPLE_PHASE_QUANT_FACTOR ); + phaseQ = ( phaseQ > SIMPLE_PHASE_MAX_VAL ? SIMPLE_PHASE_MIN_VAL : phaseQ ); +#else + int32_t phaseQ; + + phaseQ = _round( phase * PHASE_QUANT_FACTOR ); + if ( phaseQ == PHASE_MAX_VAL ) + { + phaseQ = PHASE_MIN_VAL; + } +#endif + return phaseQ; +} + +void rot_pm_pi( float *pr, float *pi ) +{ + /* (-1 + j0) */ + *pr = -( *pr ); + *pi = -( *pi ); +} + +void rot_p_pi_2( float *pr, float *pi ) +{ + /* (0 + j) */ + float r = *pr; + *pr = -( *pi ); + *pi = r; +} + +void rot_m_pi_2( float *pr, float *pi ) +{ + /* (0 - j) */ + float r = *pr; + *pr = *pi; + *pi = -r; +} + +void cplxmult( float *pr1, float *pi1, float r2, float i2 ) +{ + float r1 = *pr1, i1 = *pi1; + *pr1 = r1 * r2 - i1 * i2; + *pi1 = r1 * i2 + i1 * r2; +} + +int32_t requantPhase( int32_t phaseQ ) +{ + + if ( phaseQ >= PHASE_MAX_VAL ) + { + phaseQ += PHASE_MAX_VAL; + phaseQ %= ( 2 * PHASE_MAX_VAL ); + phaseQ -= PHASE_MAX_VAL; + } + else if ( phaseQ < PHASE_MIN_VAL ) + { + phaseQ -= PHASE_MAX_VAL; + phaseQ %= ( 2 * PHASE_MAX_VAL ); + phaseQ += PHASE_MAX_VAL; + if ( phaseQ == PHASE_MAX_VAL ) + { + phaseQ = PHASE_MIN_VAL; + } + } + + return phaseQ; +} + +int32_t quantPred( float pred ) +{ + int32_t predQ = _round( pred * PRED_QUANT_FACTOR ); + predQ = predQ > PRED_MAX_VAL ? PRED_MAX_VAL : predQ; + predQ = predQ < PRED_MIN_VAL ? PRED_MIN_VAL : predQ; + + return predQ; +} + +float dequantPhase( int32_t phaseQ ) +{ +#ifdef SIMPLE_PHASE + return (float) phaseQ / SIMPLE_PHASE_QUANT_FACTOR; +#else + return (float) phaseQ / PHASE_QUANT_FACTOR; +#endif +} + +float dequantPred( int32_t predQ ) +{ + return (float) predQ / PRED_QUANT_FACTOR; +} + +int32_t PrepEncode( int32_t *piQuant, const int32_t *piMSFlags, const int32_t numBands ) +{ + int32_t b, numMSBands = 0; + for ( b = 0; b < numBands; b++ ) + { + if ( piMSFlags[b] ) + { + piQuant[numMSBands++] = piQuant[b]; + } + } + for ( b = numMSBands; b < numBands; b++ ) + { + piQuant[b] = 0; + } + return numMSBands; +} + +void EncodePhase( int32_t *phaseQuant, int32_t numMSBands, int32_t diffDim ) +{ + int32_t b; + if ( diffDim > 0 ) + { + int32_t tmp1, tmp2; + tmp1 = phaseQuant[0]; + for ( b = 1; b < numMSBands; b++ ) + { + tmp2 = phaseQuant[b]; + phaseQuant[b] -= tmp1; + tmp1 = tmp2; + } + } + if ( diffDim > 1 ) + { + int32_t tmp1, tmp2; + tmp1 = phaseQuant[1]; + for ( b = 2; b < numMSBands; b++ ) + { + tmp2 = phaseQuant[b]; + phaseQuant[b] -= tmp1; + tmp1 = tmp2; + } + } + for ( b = 1; b < numMSBands; b++ ) + { + phaseQuant[b] = requantPhase( phaseQuant[b] ); + } +} + +void DecodePhase( int32_t *phaseQuant, int32_t numMSBands, int32_t diffDim ) +{ + int32_t b; + if ( diffDim > 1 ) + { + for ( b = 2; b < numMSBands; b++ ) + { + phaseQuant[b] += phaseQuant[b - 1]; + } + } + if ( diffDim > 0 ) + { + for ( b = 1; b < numMSBands; b++ ) + { + phaseQuant[b] += phaseQuant[b - 1]; + } + } + for ( b = 1; b < numMSBands; b++ ) + { + phaseQuant[b] = requantPhase( phaseQuant[b] ); + } +} + +int32_t EncodePredCoef( int32_t *predQuant, int32_t numMSBands ) +{ + int32_t b, tmp1, tmp2; + tmp1 = predQuant[0]; + for ( b = 1; b < numMSBands; b++ ) + { + tmp2 = predQuant[b]; + predQuant[b] -= tmp1; + tmp1 = tmp2; + } + return numMSBands; +} + +void DecodePredCoef( int32_t *phaseQuant, int32_t numMSBands ) +{ + int32_t b; + for ( b = 1; b < numMSBands; b++ ) + { + phaseQuant[b] += phaseQuant[b - 1]; + } +} + +int32_t CountMSBits( int32_t iNumBands, const int32_t iMSMode, const int32_t *piMSFlags, const int32_t *piLRPhaseDiff, const int32_t *piMSPredCoef ) +{ + int32_t iBitsWritten = 0; + int32_t b; + int32_t anyNonZero; + int32_t iNumMSBands = 0; + int32_t piPhaseCopy[MAX_BANDS_48] = { 0 }; + int32_t piPredCopy[MAX_BANDS_48] = { 0 }; + + iBitsWritten += 2; /* iMSMode */ + for ( b = 0; b < iNumBands; b++ ) + { + iNumMSBands += ( piMSFlags[b] != 0 ); + } + + if ( iNumMSBands == 0 ) + { + return iBitsWritten; + } + + if ( iNumMSBands < iNumBands ) + { + iBitsWritten += iNumBands; /* piMSFlags */ + } + + if ( iMSMode < 3 ) + { + return iBitsWritten; + } + + /* prepare arrays for coding evaluation */ + for ( b = 0; b < iNumBands; b++ ) + { + piPhaseCopy[b] = piLRPhaseDiff[b]; + piPredCopy[b] = piMSPredCoef[b]; + } + + /* Differential Coding of Phase Data*/ + PrepEncode( piPhaseCopy, piMSFlags, iNumBands ); + PrepEncode( piPredCopy, piMSFlags, iNumBands ); +#ifndef SIMPLE_PHASE + EncodePhase( piPhaseCopy, iNumMSBands, PHASE_DIFF_DIM ); +#endif + EncodePredCoef( piPredCopy, iNumMSBands ); + + iBitsWritten += 1; /* iMSPredAll */ + anyNonZero = 0; /* phase */ + for ( b = 0; b < iNumMSBands; b++ ) + { + if ( piPhaseCopy[b] != 0 ) + { + anyNonZero = 1; + break; + } + } + iBitsWritten++; /*anyNonZero Phase*/ + if ( anyNonZero ) + { +#ifdef SIMPLE_PHASE + iBitsWritten += iNumMSBands * SIMPLE_PHASE_BITS; +#else + iBitsWritten += PHASE_BAND0_BITS; + for ( b = 1; b < iNumMSBands; b++ ) + { + int32_t tabIdx = piPhaseCopy[b] - ENV_DELTA_MIN; + iBitsWritten += c_aaiRMSEnvHuffEnc[tabIdx][0]; + } +#endif + } + anyNonZero = 0; /* prediction */ + for ( b = 0; b < iNumMSBands; b++ ) + { + if ( piPredCopy[b] != 0 ) + { + anyNonZero = 1; + break; + } + } + + iBitsWritten++; /* any nonZero Pred */ + if ( anyNonZero ) + { + iBitsWritten += PRED_BAND0_BITS; + for ( b = 1; b < iNumMSBands; b++ ) + { + int32_t tabIdx = piPredCopy[b] - ENV_DELTA_MIN; + iBitsWritten += c_aaiRMSEnvHuffEnc[tabIdx][0]; + } + } + + return iBitsWritten; +} + +void writeMSPred( int32_t *phaseQuant, int32_t *predQuant, int32_t MSMode, int32_t numMSBands, int32_t numBands, void *fid, int32_t *piMsFlags ) +{ + int32_t b; + fid = (FILE *) fid; + fprintf( fid, "%d %d", MSMode, numMSBands ); + for ( b = 0; b < numMSBands; b++ ) + { + fprintf( fid, " %d", phaseQuant[b] ); + } + for ( b = numMSBands; b < numBands; b++ ) + { + fprintf( fid, " %d", 0 ); + } + for ( b = 0; b < numMSBands; b++ ) + { + fprintf( fid, " %d", predQuant[b] ); + } + for ( b = numMSBands; b < numBands; b++ ) + { + fprintf( fid, " %d", 0 ); + } + for ( b = 0; b < numBands; b++ ) + { + fprintf( fid, " %d", piMsFlags[b] ); + } + fprintf( fid, "\n" ); +} diff --git a/lib_rend/ivas_MSPred.h b/lib_rend/ivas_MSPred.h new file mode 100644 index 0000000000..a2e94b7ba7 --- /dev/null +++ b/lib_rend/ivas_MSPred.h @@ -0,0 +1,62 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef _IVAS_MS_PRED_H_ +#define _IVAS_MS_PRED_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif +#include + int32_t _round( float val ); + int32_t quantPhase( float phase ); + void cplxmult( float *pr1, float *pi1, float r2, float i2 ); + void rot_pm_pi( float *pr, float *pi ); + void rot_p_pi_2( float *pr, float *pi ); + void rot_m_pi_2( float *pr, float *pi ); + int32_t requantPhase( int32_t phaseQ ); + int32_t quantPred( float pred ); + float dequantPhase( int32_t phaseQ ); + float dequantPred( int32_t predQ ); + int32_t PrepEncode( int32_t *piQuant, const int32_t *piMSFlags, const int32_t numBands ); + void EncodePhase( int32_t *phaseQuant, int32_t numMSBands, int32_t diffDim ); + void DecodePhase( int32_t *phaseQuant, int32_t numMSBands, int32_t diffDim ); + int32_t EncodePredCoef( int32_t *predQuant, int32_t numMSBands ); + void DecodePredCoef( int32_t *phaseQuant, int32_t numMSBands ); + void writeMSPred( int32_t *phaseQuant, int32_t *predQuant, int32_t MSMode, int32_t numMSBands, int32_t numBands, void *fid, int32_t *piMsFlags ); + int32_t CountMSBits( int32_t iNumBands, const int32_t iMSMode, const int32_t *piMSFlags, const int32_t *piLRPhaseDiff, const int32_t *piMSPredCoef ); +#ifdef __cplusplus +} +#endif + +#endif /* _MS_PRED_H_ */ diff --git a/lib_rend/ivas_NoiseGen.c b/lib_rend/ivas_NoiseGen.c new file mode 100644 index 0000000000..c0d6bbd5d3 --- /dev/null +++ b/lib_rend/ivas_NoiseGen.c @@ -0,0 +1,82 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "ivas_NoiseGen.h" +#include +#include +#include +#include "options.h" +#include "prot.h" +#include "wmops.h" + +NoiseGen *CreateNoiseGen( void ) +{ + int32_t n; + + NoiseGen *psNoiseGen = NULL; + + psNoiseGen = (NoiseGen *) count_malloc( sizeof( NoiseGen ) ); + psNoiseGen->iNoiseBufferLength = 2048; + psNoiseGen->iNoiseBufferMask = 2047; + psNoiseGen->iNoiseBufferIndex = 0; + + psNoiseGen->pfNoiseBuffer = (float *) count_malloc( psNoiseGen->iNoiseBufferLength * sizeof( float ) ); + + /* Generate Laplacian distributed noise */ + for ( n = 0; n < psNoiseGen->iNoiseBufferLength; n++ ) + { + float fNoise = 0.0f; + float fScale = 0.707f; + fNoise = (float) ( ( rand() & ( RAND_MAX - 1 ) ) - ( RAND_MAX >> 1 ) ) / (float) RAND_MAX; + + if ( fNoise < 0.0 ) + { + fNoise = fScale * (float) logf( 1.0f + 1.9999999f * fNoise ); + } + else + { + fNoise = -fScale * (float) logf( 1.0f - 1.9999999f * fNoise ); + } + + psNoiseGen->pfNoiseBuffer[n] = fNoise; + } + + return psNoiseGen; +} + +void DeleteNoiseGen( NoiseGen *psNoiseGen ) +{ + count_free( psNoiseGen->pfNoiseBuffer ); + count_free( psNoiseGen ); +} + +extern float GetNoise( NoiseGen *psNoiseGen ); diff --git a/lib_rend/ivas_NoiseGen.h b/lib_rend/ivas_NoiseGen.h new file mode 100644 index 0000000000..b56b1f9f84 --- /dev/null +++ b/lib_rend/ivas_NoiseGen.h @@ -0,0 +1,68 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef _IVAS_NOISE_GEN_H_ +#define _IVAS_NOISE_GEN_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif +#include + typedef struct NOISE_GEN + { + int32_t iNoiseBufferLength; + int32_t iNoiseBufferMask; + int32_t iNoiseBufferIndex; + float *pfNoiseBuffer; + } NoiseGen; + + NoiseGen *CreateNoiseGen( void ); + + void DeleteNoiseGen( NoiseGen *psNoiseGen ); + + inline float GetNoise( NoiseGen *psNoiseGen ) + { + float fNoiseSample; + + fNoiseSample = psNoiseGen->pfNoiseBuffer[psNoiseGen->iNoiseBufferIndex]; + psNoiseGen->iNoiseBufferIndex++; + psNoiseGen->iNoiseBufferIndex &= psNoiseGen->iNoiseBufferMask; + + return fNoiseSample; + } + +#ifdef __cplusplus +} +#endif + +#endif /* _NOISE_GEN_H_ */ diff --git a/lib_rend/ivas_cldfb_trans_codec/PerceptualModel.c b/lib_rend/ivas_PerceptualModel.c similarity index 51% rename from lib_rend/ivas_cldfb_trans_codec/PerceptualModel.c rename to lib_rend/ivas_PerceptualModel.c index 2e7e8568e7..ab136f5e08 100644 --- a/lib_rend/ivas_cldfb_trans_codec/PerceptualModel.c +++ b/lib_rend/ivas_PerceptualModel.c @@ -1,10 +1,48 @@ -#include "PerceptualModel.h" -#include "Tables.h" +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "ivas_PerceptualModel.h" +#include "ivas_Tables.h" +#include "options.h" +#include "prot.h" #include "wmops.h" +#include + +/* clang-format off */ #define LOG_ADD_TABLE_LENGTH (512) -const int c_aiLogAddTable[LOG_ADD_TABLE_LENGTH] = { +/*TODO : rtyag : move this to tables.c*/ +const int32_t c_aiLogAddTable[LOG_ADD_TABLE_LENGTH] = { 0x40, 0x40, 0x3F, 0x3F, 0x3E, 0x3E, 0x3D, 0x3D, 0x3C, 0x3C, 0x3B, 0x3B, 0x3A, 0x3A, 0x39, 0x39, 0x38, 0x38, 0x37, 0x37, 0x37, 0x36, 0x36, 0x35, 0x35, 0x34, 0x34, 0x33, 0x33, 0x33, 0x32, 0x32, 0x31, 0x31, 0x31, 0x30, 0x30, 0x2F, 0x2F, 0x2F, 0x2E, 0x2E, 0x2D, 0x2D, 0x2D, 0x2C, 0x2C, 0x2B, @@ -39,10 +77,9 @@ const int c_aiLogAddTable[LOG_ADD_TABLE_LENGTH] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; - -static inline int LogAdd(int iVal1,int iVal2) +static inline int32_t LogAdd(int32_t iVal1,int32_t iVal2) { - int iRetVal; + int32_t iRetVal; if(iVal1 > iVal2){ iRetVal = iVal1 - iVal2; @@ -58,20 +95,40 @@ static inline int LogAdd(int iVal1,int iVal2) return iRetVal; } -const int c_aiBandwidthAdjust48[MAX_BANDS_48] = { +#define PERCEPTUAL_MODEL_SCALE (64) + +#define PERCEPTUAL_MODEL_SCALE_SHIFT (6) + +#define PERCEPTUAL_MODEL_ALPHA_SCALE (614) + +#define PERCEPTUAL_MODEL_ALPHA_INV_SCALE (6827) + +#define PERCEPTUAL_MODEL_ALPHA_SHIFT (11) + +#define PERCEPTUAL_MODEL_SLGAIN_SHIFT (8)//(4) + +const int32_t c_aiBandwidthAdjust48[MAX_BANDS_48] = { 0,0,0,0,0,0,0,0,0,0,0,64,64,64,64,64, 101,101,128,165,165,180,213,}; -const int c_aiAbsoluteThresh48[MAX_BANDS_48] = { +const int32_t c_aiAbsoluteThresh48[MAX_BANDS_48] = { -1787,-1787,-1787,-1787,-1787,-1787,-1787,-1787,-1782,-1761,-1737,-1679,-1638,-1613,-1590,-1568, -1516,-1459,-1395,-1289,-671,-409,-401,}; -const int c_aiDefaultTheta48[MAX_BANDS_48] = { + +#if PERCEPTUAL_MODEL_SLGAIN_SHIFT == 4 +const int32_t c_aiDefaultTheta48[MAX_BANDS_48] = { 7,7,6,5,5,4,4,4,4,4,4,4,4,4,4,4, 4,4,4,4,4,4,4, }; - -const int c_aaiSpreadFunction48[MAX_BANDS_48][MAX_BANDS_48] = { +#elif PERCEPTUAL_MODEL_SLGAIN_SHIFT == 8 +const int32_t c_aiDefaultTheta48[MAX_BANDS_48] = { + 112,112,96,80,80,64,64,64,64,64,64,64,64,64,64,64, + 64,64,64,64,64,64,64, +}; +#endif + +const int32_t c_aaiSpreadFunction48[MAX_BANDS_48*MAX_BANDS_48] = { 0,-1561,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552, -2552,-2552,-2552,-2552,-2552,-2552,-2552,-289,-4,-1234,-2295,-2552,-2552,-2552,-2552,-2552, -2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-569,-229, @@ -107,54 +164,152 @@ const int c_aaiSpreadFunction48[MAX_BANDS_48][MAX_BANDS_48] = { -1003,-921,-852,-792,-737,-665,-580,-505,-441,-385,-326,-271,-222,-224,-176,-121,-114, }; -#define PERCEPTUAL_MODEL_SCALE (64) - -#define PERCEPTUAL_MODEL_SCALE_SHIFT (6) -#define PERCEPTUAL_MODEL_ALPHA_SCALE (614) +/* clang-format on */ -#define PERCEPTUAL_MODEL_ALPHA_INV_SCALE (6827) -#define PERCEPTUAL_MODEL_ALPHA_SHIFT (11) +void PerceptualModel( const int32_t iMaxQuantBands, + const int32_t *piRMSEnvelope, + int32_t *piExcitation, + int32_t *piSMR ) +{ + int32_t n; -#define PERCEPTUAL_MODEL_SLGAIN_SHIFT (4) + for ( n = 0; n < iMaxQuantBands; n++ ) + { + int32_t iSLOffset; -void PerceptualModel(const int iMaxQuantBands, - const int *piRMSEnvelope, - int *piExcitation, - int *piSMR) -{ - int n; - - for(n = 0; n < iMaxQuantBands; n ++){ - int iSLOffset; - piExcitation[n] = PERCEPTUAL_MODEL_SCALE * piRMSEnvelope[n] + c_aiBandwidthAdjust48[n]; // Calculate sensation level offset - iSLOffset = c_aiDefaultTheta48[n] * (piExcitation[n] - c_aiAbsoluteThresh48[n]) >> PERCEPTUAL_MODEL_SLGAIN_SHIFT; - //iSLOffset = (iSLOffset > 0) ? iSLOffset : 0; - // Offset envelope by sensation level offset + iSLOffset = c_aiDefaultTheta48[n] * ( piExcitation[n] - c_aiAbsoluteThresh48[n] ) >> PERCEPTUAL_MODEL_SLGAIN_SHIFT; + // iSLOffset = (iSLOffset > 0) ? iSLOffset : 0; + // Offset envelope by sensation level offset piExcitation[n] -= iSLOffset; // Convert to loudness domain (x^0.3) piExcitation[n] = PERCEPTUAL_MODEL_ALPHA_SCALE * piExcitation[n] >> PERCEPTUAL_MODEL_ALPHA_SHIFT; } - + // Spread excitation function - for(n = 0; n < iMaxQuantBands; n ++){ - int k; - const int *piSpread; - - piSpread = c_aaiSpreadFunction48[n]; + for ( n = 0; n < iMaxQuantBands; n++ ) + { + int32_t k; + const int32_t *piSpread; + + piSpread = &c_aaiSpreadFunction48[n * MAX_BANDS_48]; piSMR[n] = piExcitation[n] + piSpread[n]; - for(k = 0; k < iMaxQuantBands; k ++){ - if(k != n){ - piSMR[n] = LogAdd(piSMR[n],piExcitation[k] + piSpread[k]); + for ( k = 0; k < iMaxQuantBands; k++ ) + { + if ( k != n ) + { + piSMR[n] = LogAdd( piSMR[n], piExcitation[k] + piSpread[k] ); } } } - - for(n = 0; n < iMaxQuantBands; n ++){ + + for ( n = 0; n < iMaxQuantBands; n++ ) + { piSMR[n] = PERCEPTUAL_MODEL_ALPHA_INV_SCALE * piSMR[n] >> PERCEPTUAL_MODEL_ALPHA_SHIFT; piSMR[n] = PERCEPTUAL_MODEL_SCALE * piRMSEnvelope[n] + c_aiBandwidthAdjust48[n] - piSMR[n]; } } + +void PerceptualModelStereo( const int32_t iMaxQuantBands, + const int32_t *piMSFlags, + const int32_t *piRMSEnvelope0, + const int32_t *piRMSEnvelope1, + int32_t *piExcitation0, + int32_t *piExcitation1, + int32_t *piSMR0, + int32_t *piSMR1 ) +{ + int32_t n; + + for ( n = 0; n < iMaxQuantBands; n++ ) + { + int32_t iMaxRMSEnv; + int32_t iSLOffset; + + iMaxRMSEnv = piRMSEnvelope0[n]; + + piExcitation0[n] = PERCEPTUAL_MODEL_SCALE * iMaxRMSEnv + c_aiBandwidthAdjust48[n]; // piRMSEnvelope0[n] + // Calculate sensation level offset + iSLOffset = c_aiDefaultTheta48[n] * ( piExcitation0[n] - c_aiAbsoluteThresh48[n] ) >> PERCEPTUAL_MODEL_SLGAIN_SHIFT; + // iSLOffset = (iSLOffset > 0) ? iSLOffset : 0; + // Offset envelope by sensation level offset + piExcitation0[n] -= iSLOffset; + // Convert to loudness domain (x^0.3) + piExcitation0[n] = PERCEPTUAL_MODEL_ALPHA_SCALE * piExcitation0[n] >> PERCEPTUAL_MODEL_ALPHA_SHIFT; + } + + // Spread excitation function + for ( n = 0; n < iMaxQuantBands; n++ ) + { + int32_t k; + const int32_t *piSpread; + + piSpread = &c_aaiSpreadFunction48[n * MAX_BANDS_48]; + piSMR0[n] = piExcitation0[n] + piSpread[n]; + for ( k = 0; k < iMaxQuantBands; k++ ) + { + if ( k != n ) + { + piSMR0[n] = LogAdd( piSMR0[n], piExcitation0[k] + piSpread[k] ); + } + } + } + + for ( n = 0; n < iMaxQuantBands; n++ ) + { + int32_t iMaxRMSEnv; + int32_t iSLOffset; + + iMaxRMSEnv = piRMSEnvelope1[n]; + + piExcitation1[n] = PERCEPTUAL_MODEL_SCALE * iMaxRMSEnv + c_aiBandwidthAdjust48[n]; // piRMSEnvelope1[n] + // Calculate sensation level offset + iSLOffset = c_aiDefaultTheta48[n] * ( piExcitation1[n] - c_aiAbsoluteThresh48[n] ) >> PERCEPTUAL_MODEL_SLGAIN_SHIFT; + // iSLOffset = (iSLOffset > 0) ? iSLOffset : 0; + // Offset envelope by sensation level offset + piExcitation1[n] -= iSLOffset; + // Convert to loudness domain (x^0.3) + piExcitation1[n] = PERCEPTUAL_MODEL_ALPHA_SCALE * piExcitation1[n] >> PERCEPTUAL_MODEL_ALPHA_SHIFT; + } + + // Spread excitation function + for ( n = 0; n < iMaxQuantBands; n++ ) + { + int32_t k; + const int32_t *piSpread; + + piSpread = &c_aaiSpreadFunction48[n * MAX_BANDS_48]; + piSMR1[n] = piExcitation1[n] + piSpread[n]; + for ( k = 0; k < iMaxQuantBands; k++ ) + { + if ( k != n ) + { + piSMR1[n] = LogAdd( piSMR1[n], piExcitation1[k] + piSpread[k] ); + } + } + } + + for ( n = 0; n < iMaxQuantBands; n++ ) + { + if ( piMSFlags[n] == 1 ) + { + piSMR0[n] = ( piSMR0[n] > piSMR1[n] ) ? piSMR0[n] : piSMR1[n]; + piSMR1[n] = piSMR0[n]; + } + } + + for ( n = 0; n < iMaxQuantBands; n++ ) + { + piSMR0[n] = PERCEPTUAL_MODEL_ALPHA_INV_SCALE * piSMR0[n] >> PERCEPTUAL_MODEL_ALPHA_SHIFT; + piSMR0[n] = PERCEPTUAL_MODEL_SCALE * piRMSEnvelope0[n] + c_aiBandwidthAdjust48[n] - piSMR0[n]; + } + + for ( n = 0; n < iMaxQuantBands; n++ ) + { + piSMR1[n] = PERCEPTUAL_MODEL_ALPHA_INV_SCALE * piSMR1[n] >> PERCEPTUAL_MODEL_ALPHA_SHIFT; + piSMR1[n] = PERCEPTUAL_MODEL_SCALE * piRMSEnvelope1[n] + c_aiBandwidthAdjust48[n] - piSMR1[n]; + } +} diff --git a/lib_rend/ivas_PerceptualModel.h b/lib_rend/ivas_PerceptualModel.h new file mode 100644 index 0000000000..2d3346183f --- /dev/null +++ b/lib_rend/ivas_PerceptualModel.h @@ -0,0 +1,59 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef _IVAS_PERCEPTUAL_MODEL_H_ +#define _IVAS_PERCEPTUAL_MODEL_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif +#include +void PerceptualModel(const int32_t iMaxQuantBands, + const int32_t *piRMSEnvelope, + int32_t *piExcitation, + int32_t *piSMR); + +void PerceptualModelStereo(const int32_t iMaxQuantBands, + const int32_t *piMSFlags, + const int32_t *piRMSEnvelope0, + const int32_t *piRMSEnvelope1, + int32_t *piExcitation0, + int32_t *piExcitation1, + int32_t *piSMR0, + int32_t *piSMR1); + +#ifdef __cplusplus +} +#endif + +#endif /* _PERCEPTUAL_MODEL_H_ */ diff --git a/lib_rend/ivas_PredDecoder.c b/lib_rend/ivas_PredDecoder.c new file mode 100644 index 0000000000..4cfb776154 --- /dev/null +++ b/lib_rend/ivas_PredDecoder.c @@ -0,0 +1,259 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "ivas_PredDecoder.h" +#include +#include +#include +#include "options.h" +#include "prot.h" +#include "wmops.h" +#include "ivas_Tables.h" +#include "ivas_PredTables.h" +#include "ivas_cldfb_codec_bitstream.h" + + +PredictionDecoder *CreatePredictionDecoder( const int32_t iChannels, + const int32_t iNumBlocks ) +{ + int32_t n; + + PredictionDecoder *psPredictionDecoder = NULL; + + psPredictionDecoder = (PredictionDecoder *) count_malloc( sizeof( PredictionDecoder ) ); + + psPredictionDecoder->iChannels = iChannels; + psPredictionDecoder->iNumBlocks = iNumBlocks; + + psPredictionDecoder->piPredChanEnable = (int32_t *) count_malloc( sizeof( int32_t ) * iChannels ); + psPredictionDecoder->piNumPredBands = (int32_t *) count_malloc( sizeof( int32_t ) * iChannels ); + + psPredictionDecoder->ppfEstPredGain = (float **) count_malloc( sizeof( float * ) * iChannels ); + psPredictionDecoder->ppiPredBandEnable = (int32_t **) count_malloc( sizeof( int32_t * ) * iChannels ); + psPredictionDecoder->ppfA1Real = (float **) count_malloc( sizeof( float * ) * iChannels ); + psPredictionDecoder->ppfA1Imag = (float **) count_malloc( sizeof( float * ) * iChannels ); + psPredictionDecoder->ppiA1Mag = (int32_t **) count_malloc( sizeof( int32_t * ) * iChannels ); + psPredictionDecoder->ppiA1Phase = (int32_t **) count_malloc( sizeof( int32_t * ) * iChannels ); + for ( n = 0; n < psPredictionDecoder->iChannels; n++ ) + { + psPredictionDecoder->ppfEstPredGain[n] = (float *) count_malloc( sizeof( float ) * CQMF_BANDS ); + psPredictionDecoder->ppiPredBandEnable[n] = (int32_t *) count_malloc( sizeof( int32_t ) * CQMF_BANDS ); + psPredictionDecoder->ppfA1Real[n] = (float *) count_malloc( sizeof( float ) * CQMF_BANDS ); + psPredictionDecoder->ppfA1Imag[n] = (float *) count_malloc( sizeof( float ) * CQMF_BANDS ); + psPredictionDecoder->ppiA1Mag[n] = (int32_t *) count_malloc( sizeof( int32_t ) * CQMF_BANDS ); + psPredictionDecoder->ppiA1Phase[n] = (int32_t *) count_malloc( sizeof( int32_t ) * CQMF_BANDS ); + } + + /* pre-define these tables? */ + psPredictionDecoder->pfMagLUT = (float *) count_malloc( sizeof( float ) * ( 1 << PRED_QUNAT_FILTER_MAG_BITS ) ); + psPredictionDecoder->pfP2RRealLUT = (float *) count_malloc( sizeof( float ) * ( 1 << PRED_QUANT_FILTER_PHASE_BITS ) ); + psPredictionDecoder->pfP2RImagLUT = (float *) count_malloc( sizeof( float ) * ( 1 << PRED_QUANT_FILTER_PHASE_BITS ) ); + + for ( n = 0; n < ( 1 << PRED_QUNAT_FILTER_MAG_BITS ); n++ ) + { + const float fInvMagScale = M_PI / ( 2.0f * (float) ( 1 << ( PRED_QUNAT_FILTER_MAG_BITS ) ) + 1.0f ); + psPredictionDecoder->pfMagLUT[n] = sinf( fInvMagScale * (float) n ); + } + + for ( n = 0; n < ( 1 << PRED_QUANT_FILTER_PHASE_BITS ); n++ ) + { + const float fInvPhaseScale = M_PI / (float) ( 1 << ( PRED_QUANT_FILTER_PHASE_BITS - 1 ) ); + int32_t iVal; + + iVal = n + PRED_QUANT_FILTER_PHASE_MIN; + psPredictionDecoder->pfP2RRealLUT[n] = cosf( fInvPhaseScale * (float) iVal ); + psPredictionDecoder->pfP2RImagLUT[n] = sinf( fInvPhaseScale * (float) iVal ); + } + + + return psPredictionDecoder; +} + +void DeletePredictionDecoder( PredictionDecoder *psPredictionDecoder ) +{ + int32_t n; + + for ( n = 0; n < psPredictionDecoder->iChannels; n++ ) + { + count_free( psPredictionDecoder->ppfEstPredGain[n] ); + count_free( psPredictionDecoder->ppiPredBandEnable[n] ); + count_free( psPredictionDecoder->ppfA1Real[n] ); + count_free( psPredictionDecoder->ppfA1Imag[n] ); + count_free( psPredictionDecoder->ppiA1Mag[n] ); + count_free( psPredictionDecoder->ppiA1Phase[n] ); + } + count_free( psPredictionDecoder->piPredChanEnable ); + count_free( psPredictionDecoder->piNumPredBands ); + count_free( psPredictionDecoder->ppfEstPredGain ); + count_free( psPredictionDecoder->ppiPredBandEnable ); + count_free( psPredictionDecoder->ppfA1Real ); + count_free( psPredictionDecoder->ppfA1Imag ); + count_free( psPredictionDecoder->ppiA1Mag ); + count_free( psPredictionDecoder->ppiA1Phase ); + + count_free( psPredictionDecoder->pfMagLUT ); + count_free( psPredictionDecoder->pfP2RRealLUT ); + count_free( psPredictionDecoder->pfP2RImagLUT ); + + count_free( psPredictionDecoder ); +} +#define USE_TABLE_LOOKUP +int32_t ReadPredictors( PredictionDecoder *psPredictionDecoder, + ivas_split_rend_bits_t *pBits ) +{ + int32_t iBitsRead = 0; + int32_t c; + + for ( c = 0; c < psPredictionDecoder->iChannels; c++ ) + { + psPredictionDecoder->piPredChanEnable[c] = ivas_split_rend_bitstream_read_int32( pBits, 1 ); + iBitsRead += 1; + + if ( psPredictionDecoder->piPredChanEnable[c] ) + { + int32_t b; + + for ( b = 0; b < CQMF_BANDS; b++ ) + { + psPredictionDecoder->ppiPredBandEnable[c][b] = 0; + } + psPredictionDecoder->piNumPredBands[c] = ivas_split_rend_bitstream_read_int32( pBits, 6 ); + iBitsRead += 6; + + for ( b = 0; b < psPredictionDecoder->piNumPredBands[c]; b++ ) + { + psPredictionDecoder->ppiPredBandEnable[c][b] = ivas_split_rend_bitstream_read_int32( pBits, 1 ); + iBitsRead += 1; + + if ( psPredictionDecoder->ppiPredBandEnable[c][b] == 1 ) + { +#ifdef USE_TABLE_LOOKUP + int32_t iA1Mag; + int32_t iA1Phase; + float fA1Real; + float fA1Imag; + iA1Mag = ivas_split_rend_bitstream_read_int32( pBits, PRED_QUNAT_FILTER_MAG_BITS ); + iBitsRead += PRED_QUNAT_FILTER_MAG_BITS; + iA1Phase = ivas_split_rend_bitstream_read_int32( pBits, PRED_QUANT_FILTER_PHASE_BITS ); + iBitsRead += PRED_QUANT_FILTER_PHASE_BITS; + + psPredictionDecoder->ppiA1Mag[c][b] = iA1Mag; + psPredictionDecoder->ppiA1Phase[c][b] = iA1Phase + PRED_QUANT_FILTER_PHASE_MIN; + + fA1Real = psPredictionDecoder->pfMagLUT[iA1Mag] * psPredictionDecoder->pfP2RRealLUT[iA1Phase]; + fA1Imag = psPredictionDecoder->pfMagLUT[iA1Mag] * psPredictionDecoder->pfP2RImagLUT[iA1Phase]; + + psPredictionDecoder->ppfA1Real[c][b] = fA1Real; + psPredictionDecoder->ppfA1Imag[c][b] = fA1Imag; +#else + const float fInvMagScale = M_PI / ( 2.0 * (float) ( 1 << ( PRED_QUNAT_FILTER_MAG_BITS ) ) + 1.0 ); + const float fInvPhaseScale = M_PI / (float) ( 1 << ( PRED_QUANT_FILTER_PHASE_BITS - 1 ) ); + int32_t iA1Mag; + int32_t iA1Phase; + float fA1Mag; + float fA1Phase; + float fA1Real; + float fA1Imag; + + iA1Mag = BSGetBits( psBSRead, PRED_QUNAT_FILTER_MAG_BITS ); + iBitsRead += PRED_QUNAT_FILTER_MAG_BITS; + + iA1Phase = BSGetBits( psBSRead, PRED_QUANT_FILTER_PHASE_BITS ); + iBitsRead += PRED_QUANT_FILTER_PHASE_BITS; + iA1Phase += PRED_QUANT_FILTER_PHASE_MIN; + + psPredictionDecoder->ppiA1Mag[c][b] = iA1Mag; + psPredictionDecoder->ppiA1Phase[c][b] = iA1Phase; + + fA1Mag = sinf( fInvMagScale * (float) iA1Mag ); + fA1Phase = fInvPhaseScale * (float) iA1Phase; + + fA1Real = fA1Mag * cosf( fA1Phase ); + fA1Imag = fA1Mag * sinf( fA1Phase ); + + psPredictionDecoder->ppfA1Real[c][b] = fA1Real; + psPredictionDecoder->ppfA1Imag[c][b] = fA1Imag; + + // printf("Dec %f\t%f\t%f\n",fA1Real,fA1Imag,fA1Real * fA1Real + fA1Imag * fA1Imag); +#endif + } + } + } + else + { + int32_t b; + for ( b = 0; b < CQMF_BANDS; b++ ) + { + psPredictionDecoder->ppiPredBandEnable[c][b] = 0; + } + } + } + + return iBitsRead; +} + +void ApplyInversePredictros( PredictionDecoder *psPredictionDecoder, + float ***pppfReal, + float ***pppfImag ) +{ + int32_t c; + for ( c = 0; c < psPredictionDecoder->iChannels; c++ ) + { + if ( psPredictionDecoder->piPredChanEnable[c] == 1 ) + { + int32_t b; + for ( b = 0; b < psPredictionDecoder->piNumPredBands[c]; b++ ) + { + if ( psPredictionDecoder->ppiPredBandEnable[c][b] == 1 ) + { + int32_t n; + float fA1Real; + float fA1Imag; + + fA1Real = psPredictionDecoder->ppfA1Real[c][b]; + fA1Imag = psPredictionDecoder->ppfA1Imag[c][b]; + for ( n = 1; n < psPredictionDecoder->iNumBlocks; n++ ) + { + float fReal; + float fImag; + + fReal = pppfReal[c][n][b] - fA1Real * pppfReal[c][n - 1][b] + fA1Imag * pppfImag[c][n - 1][b]; + fImag = pppfImag[c][n][b] - fA1Real * pppfImag[c][n - 1][b] - fA1Imag * pppfReal[c][n - 1][b]; + + pppfReal[c][n][b] = fReal; + pppfImag[c][n][b] = fImag; + } + } + } + } + } +} diff --git a/lib_rend/ivas_PredDecoder.h b/lib_rend/ivas_PredDecoder.h new file mode 100644 index 0000000000..435c4f2238 --- /dev/null +++ b/lib_rend/ivas_PredDecoder.h @@ -0,0 +1,84 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef _IVAS_PRED_DECODER_H_ +#define _IVAS_PRED_DECODER_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "ivas_cldfb_codec_bitstream.h" + + // typedef struct PREDICTION_DECODER PredictionDecoder; + + typedef struct PREDICTION_DECODER + { + int32_t iChannels; + int32_t iNumBlocks; + + int32_t *piPredChanEnable; + int32_t *piNumPredBands; + + float **ppfEstPredGain; + int32_t **ppiPredBandEnable; + + float **ppfA1Real; + float **ppfA1Imag; + + int32_t **ppiA1Mag; + int32_t **ppiA1Phase; + + float *pfMagLUT; + float *pfP2RRealLUT; + float *pfP2RImagLUT; + } PredictionDecoder; + + PredictionDecoder *CreatePredictionDecoder( const int32_t iChannels, + const int32_t iNumBlocks ); + + void DeletePredictionDecoder( PredictionDecoder *psPredictionDecoder ); + + int32_t ReadPredictors( PredictionDecoder *psPredictionDecoder, + ivas_split_rend_bits_t *pBits ); + + void ApplyInversePredictros( PredictionDecoder *psPredictionDecoder, + float ***pppfReal, + float ***pppfImag ); + + +#ifdef __cplusplus +} +#endif + +#endif /* _PRED_DECODER_H_ */ diff --git a/lib_rend/ivas_PredEncoder.c b/lib_rend/ivas_PredEncoder.c new file mode 100644 index 0000000000..fc8bd14502 --- /dev/null +++ b/lib_rend/ivas_PredEncoder.c @@ -0,0 +1,476 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "ivas_PredEncoder.h" +#include +#include +#include +#include "ivas_Tables.h" +#include "ivas_PredTables.h" +#include "options.h" +#include "prot.h" +#include "wmops.h" +#include "ivas_cldfb_codec_bitstream.h" + + +PredictionEncoder *CreatePredictionEncoder( const int32_t iChannels, + const int32_t iNumBlocks ) +{ + int32_t n; + + PredictionEncoder *psPredictionEncoder = NULL; + + psPredictionEncoder = (PredictionEncoder *) count_malloc( sizeof( PredictionEncoder ) ); + + psPredictionEncoder->iChannels = iChannels; + psPredictionEncoder->iNumBlocks = iNumBlocks; + + psPredictionEncoder->pfWindow = (float *) count_malloc( sizeof( float ) * iNumBlocks ); + for ( n = 0; n < iNumBlocks; n++ ) + { + psPredictionEncoder->pfWindow[n] = 0.54f - 0.46f * cosf( 2.0f * M_PI * ( (float) n + 0.5f ) / (float) iNumBlocks ); + } + + + psPredictionEncoder->pfRxxReal = (float *) count_malloc( sizeof( float ) * 2 ); + psPredictionEncoder->pfRxxImag = (float *) count_malloc( sizeof( float ) * 2 ); + + psPredictionEncoder->piPredChanEnable = (int32_t *) count_malloc( sizeof( int32_t ) * iChannels ); + psPredictionEncoder->piNumPredBands = (int32_t *) count_malloc( sizeof( int32_t ) * iChannels ); + for ( n = 0; n < psPredictionEncoder->iChannels; n++ ) + { + psPredictionEncoder->piPredChanEnable[n] = 0; + psPredictionEncoder->piNumPredBands[n] = 40; // Will need to be set correctly + } + + psPredictionEncoder->ppfEstPredGain = (float **) count_malloc( sizeof( float * ) * iChannels ); + psPredictionEncoder->ppfEstPredBitGain = (float **) count_malloc( sizeof( float * ) * iChannels ); + psPredictionEncoder->ppiPredBandEnable = (int32_t **) count_malloc( sizeof( int32_t * ) * iChannels ); + psPredictionEncoder->ppfA1Real = (float **) count_malloc( sizeof( float * ) * iChannels ); + psPredictionEncoder->ppfA1Imag = (float **) count_malloc( sizeof( float * ) * iChannels ); + psPredictionEncoder->ppiA1Mag = (int32_t **) count_malloc( sizeof( int32_t * ) * iChannels ); + psPredictionEncoder->ppiA1Phase = (int32_t **) count_malloc( sizeof( int32_t * ) * iChannels ); + for ( n = 0; n < psPredictionEncoder->iChannels; n++ ) + { + int32_t k; + + psPredictionEncoder->ppfEstPredGain[n] = (float *) count_malloc( sizeof( float ) * CQMF_BANDS ); + psPredictionEncoder->ppfEstPredBitGain[n] = (float *) count_malloc( sizeof( float ) * CQMF_BANDS ); + psPredictionEncoder->ppiPredBandEnable[n] = (int32_t *) count_malloc( sizeof( int32_t ) * CQMF_BANDS ); + psPredictionEncoder->ppfA1Real[n] = (float *) count_malloc( sizeof( float ) * CQMF_BANDS ); + psPredictionEncoder->ppfA1Imag[n] = (float *) count_malloc( sizeof( float ) * CQMF_BANDS ); + psPredictionEncoder->ppiA1Mag[n] = (int32_t *) count_malloc( sizeof( int32_t ) * CQMF_BANDS ); + psPredictionEncoder->ppiA1Phase[n] = (int32_t *) count_malloc( sizeof( int32_t ) * CQMF_BANDS ); + for ( k = 0; k < CQMF_BANDS; k++ ) + { + psPredictionEncoder->ppiPredBandEnable[n][k] = 0; + psPredictionEncoder->ppfA1Real[n][k] = 0.0; + psPredictionEncoder->ppfA1Imag[n][k] = 0.0; + } + } + + return psPredictionEncoder; +} + +void DeletePredictionEncoder( PredictionEncoder *psPredictionEncoder ) +{ + int32_t n; + + count_free( psPredictionEncoder->pfWindow ); + count_free( psPredictionEncoder->pfRxxReal ); + count_free( psPredictionEncoder->pfRxxImag ); + + for ( n = 0; n < psPredictionEncoder->iChannels; n++ ) + { + count_free( psPredictionEncoder->ppfEstPredGain[n] ); + count_free( psPredictionEncoder->ppfEstPredBitGain[n] ); + count_free( psPredictionEncoder->ppiPredBandEnable[n] ); + count_free( psPredictionEncoder->ppfA1Real[n] ); + count_free( psPredictionEncoder->ppfA1Imag[n] ); + count_free( psPredictionEncoder->ppiA1Mag[n] ); + count_free( psPredictionEncoder->ppiA1Phase[n] ); + } + count_free( psPredictionEncoder->piPredChanEnable ); + count_free( psPredictionEncoder->piNumPredBands ); + count_free( psPredictionEncoder->ppfEstPredGain ); + count_free( psPredictionEncoder->ppfEstPredBitGain ); + count_free( psPredictionEncoder->ppiPredBandEnable ); + count_free( psPredictionEncoder->ppfA1Real ); + count_free( psPredictionEncoder->ppfA1Imag ); + count_free( psPredictionEncoder->ppiA1Mag ); + count_free( psPredictionEncoder->ppiA1Phase ); + + count_free( psPredictionEncoder ); +} +//#define USE_RXX_WINDOW +int32_t ComputePredictors( PredictionEncoder *psPredictionEncoder, + float ***pppfReal, + float ***pppfImag ) +{ + int32_t c; + int32_t iPredictionBits = 0; + + for ( c = 0; c < psPredictionEncoder->iChannels; c++ ) + { + int32_t b; + float fChanPredictionGainBits; + psPredictionEncoder->piNumPredBands[c] = 50; + fChanPredictionGainBits = 0.0; + for ( b = 0; b < psPredictionEncoder->piNumPredBands[c]; b++ ) + { + int32_t n; + int32_t iNumBlocks; + float fGain = 0.0; + float fBitGain = 0.0; + float *pfRxxReal; + float *pfRxxImag; + float fA1Real; + float fA1Imag; + // int32_t iA1Real; + // int32_t iA1Imag; + int32_t iA1Mag; + int32_t iA1Phase; + + iNumBlocks = psPredictionEncoder->iNumBlocks; + + pfRxxReal = psPredictionEncoder->pfRxxReal; + pfRxxImag = psPredictionEncoder->pfRxxImag; + + pfRxxReal[0] = 0.0; + pfRxxImag[0] = 0.0; + for ( n = 0; n < iNumBlocks; n++ ) + { +#ifdef USE_RXX_WINDOW + float fReal; + float fImag; + fReal = psPredictionEncoder->pfWindow[n] * pppfReal[c][n][b]; + fImag = psPredictionEncoder->pfWindow[n] * pppfImag[c][n][b]; + pfRxxReal[0] += ( fReal * fReal + fImag * fImag ); +#else + pfRxxReal[0] += ( pppfReal[c][n][b] * pppfReal[c][n][b] + pppfImag[c][n][b] * pppfImag[c][n][b] ); +#endif + } + + pfRxxReal[1] = 0.0; + pfRxxImag[1] = 0.0; + for ( n = 1; n < iNumBlocks; n++ ) + { +#ifdef USE_RXX_WINDOW + float fReal1; + float fImag1; + float fReal2; + float fImag2; + fReal1 = psPredictionEncoder->pfWindow[n] * pppfReal[c][n][b]; + fImag1 = psPredictionEncoder->pfWindow[n] * pppfImag[c][n][b]; + fReal2 = psPredictionEncoder->pfWindow[n - 1] * pppfReal[c][n - 1][b]; + fImag2 = psPredictionEncoder->pfWindow[n - 1] * pppfImag[c][n - 1][b]; + pfRxxReal[1] += ( fReal1 * fReal2 + fImag1 * fImag2 ); + pfRxxImag[1] += ( fImag1 * fReal2 - fReal1 * fImag2 ); +#else + pfRxxReal[1] += ( pppfReal[c][n][b] * pppfReal[c][n - 1][b] + pppfImag[c][n][b] * pppfImag[c][n - 1][b] ); + pfRxxImag[1] += ( pppfImag[c][n][b] * pppfReal[c][n - 1][b] - pppfReal[c][n][b] * pppfImag[c][n - 1][b] ); +#endif + } + + if ( pfRxxReal[0] > 1e-12f ) + { + float fA1Mag; + float fA1Phase; + float fGain2; + float fBitGain2; + + const float fMagScale = ( 2.0f * (float) ( 1 << ( PRED_QUNAT_FILTER_MAG_BITS ) ) + 1.0f ) / M_PI; + const float fInvMagScale = M_PI / ( 2.0f * (float) ( 1 << ( PRED_QUNAT_FILTER_MAG_BITS ) ) + 1.0f ); + const float fPhaseScale = (float) ( 1 << ( PRED_QUANT_FILTER_PHASE_BITS - 1 ) ) / M_PI; + const float fInvPhaseScale = M_PI / (float) ( 1 << ( PRED_QUANT_FILTER_PHASE_BITS - 1 ) ); + + // Compute filter coefficeints + fA1Real = -pfRxxReal[1] / pfRxxReal[0]; + fA1Imag = -pfRxxImag[1] / pfRxxReal[0]; + + // compute these before quant + // Compute est coding gain based on quantized filter coefficients + fGain = 1.0f / ( 1.0f - fA1Real * fA1Real - fA1Imag * fA1Imag ); + fBitGain = 0.6f * log2f( fGain ) * (float) ( iNumBlocks ) - (float) ( PRED_QUNAT_FILTER_MAG_BITS + PRED_QUANT_FILTER_PHASE_BITS ); // Wrong fix (iNumBlocks-1) + + fA1Mag = sqrtf( fA1Real * fA1Real + fA1Imag * fA1Imag ); + fA1Mag = fMagScale * asinf( fA1Mag ); + iA1Mag = (int32_t) ( fA1Mag + 0.5f ); + iA1Mag = ( iA1Mag > PRED_QUANT_FILTER_MAG_MIN ) ? iA1Mag : PRED_QUANT_FILTER_MAG_MIN; + iA1Mag = ( iA1Mag < PRED_QUANT_FILTER_MAG_MAX ) ? iA1Mag : PRED_QUANT_FILTER_MAG_MAX; + fA1Mag = sinf( fInvMagScale * (float) iA1Mag ); + + fA1Phase = atan2f( fA1Imag, fA1Real ); + fA1Phase = fPhaseScale * fA1Phase; + iA1Phase = ( fA1Phase > 0.0f ) ? (int32_t) ( fA1Phase + 0.5f ) : (int32_t) ( fA1Phase - 0.5f ); + iA1Phase = ( iA1Phase > PRED_QUANT_FILTER_PHASE_MIN ) ? iA1Phase : PRED_QUANT_FILTER_PHASE_MIN; + iA1Phase = ( iA1Phase < PRED_QUANT_FILTER_PHASE_MAX ) ? iA1Phase : PRED_QUANT_FILTER_PHASE_MAX; // Is this the correct way to deal with this? should wrap? + fA1Phase = fInvPhaseScale * (float) iA1Phase; + + fA1Real = fA1Mag * cosf( fA1Phase ); + fA1Imag = fA1Mag * sinf( fA1Phase ); + + fGain2 = 1.0f / ( 1.0f - fA1Real * fA1Real - fA1Imag * fA1Imag ); + fBitGain2 = 0.6f * log2f( fGain ) * (float) ( iNumBlocks ) - (float) ( PRED_QUNAT_FILTER_MAG_BITS + PRED_QUANT_FILTER_PHASE_BITS ); // Wrong fix (iNumBlocks-1) + + fGain = ( fGain < fGain2 ) ? fGain : fGain2; + fBitGain = ( fBitGain < fBitGain2 ) ? fBitGain : fBitGain2; + } + else + { + psPredictionEncoder->ppfEstPredGain[c][b] = 0.0f; + fA1Real = 0.0f; + fA1Imag = 0.0f; + // iA1Real = 0; + // iA1Imag = 0; + iA1Mag = 0; + iA1Phase = 0; + fGain = -10.0f; // Fix this + } + + psPredictionEncoder->ppfEstPredGain[c][b] = fGain; + psPredictionEncoder->ppfEstPredBitGain[c][b] = fBitGain; + psPredictionEncoder->ppiPredBandEnable[c][b] = ( fBitGain > 0 ) ? 1 : 0; // Initial prediction enable + psPredictionEncoder->ppfA1Real[c][b] = fA1Real; + psPredictionEncoder->ppfA1Imag[c][b] = fA1Imag; + psPredictionEncoder->ppiA1Mag[c][b] = iA1Mag; + psPredictionEncoder->ppiA1Phase[c][b] = iA1Phase; + + if ( psPredictionEncoder->ppiPredBandEnable[c][b] == 1 ) + { + fChanPredictionGainBits += fBitGain; // change this calculation + } + } +#if 0 + // Estimate if the savings outway the signaling cost + if(fChanPredictionGainBits > 1e20){//}(float)(psPredictionEncoder->piNumPredBands[c] + 6)){ + psPredictionEncoder->piPredChanEnable[c] = 1; + //printf("Prediction Enabled\n"); + iPredictionBits += 1; + iPredictionBits += 6; + for(b = 0; b < psPredictionEncoder->piNumPredBands[c]; b ++){ + iPredictionBits += 1; + if(psPredictionEncoder->ppiPredBandEnable[c][b] == 1){ + iPredictionBits += (PRED_QUANT_FILTER_BITS * 2); + printf("%f, ",(psPredictionEncoder->ppfEstPredGain[c][b])); + } + } + printf("\n"); + } + else{ + psPredictionEncoder->piPredChanEnable[c] = 0; + for(b = 0; b < psPredictionEncoder->piNumPredBands[c]; b ++){ + psPredictionEncoder->ppiPredBandEnable[c][b] = 0; + } + //printf("Prediction Disabled\n"); + iPredictionBits += 1; + } +#else + { + /*int32_t iDone; + int32_t iPredBands; + + iDone = 0; + iPredBands = 30; + while(iPredBands > 0 && iDone == 0){ + int32_t b; + float fBitGain; + + fBitGain = -7.0; + for(b = 0; b < iPredBands; b ++){ + fBitGain -= 1.0; + if(psPredictionEncoder->ppiPredBandEnable[c][b] == 1){ + fBitGain += psPredictionEncoder->ppfEstPredBitGain[c][b]; + } + } + if(fBitGain > 0.0){ //thresh + iDone ++; + } + else{ + iPredBands --; + } + }*/ + // int32_t b; + float fBestCost; + int32_t iPredBands; + float fBitGain; + + fBestCost = 0.0; + iPredBands = 0; + fBitGain = -7.0; + for ( b = 0; b < 30; b++ ) + { // still getting this decision wrong! + fBitGain -= 1.0; + if ( psPredictionEncoder->ppiPredBandEnable[c][b] == 1 ) + { + fBitGain += psPredictionEncoder->ppfEstPredBitGain[c][b]; + } + if ( fBitGain > fBestCost ) + { + fBestCost = fBitGain; + iPredBands = b; + } + } + + // printf("%d\t%f\n",iPredBands,fBestCost); + /*if(fBestCost < 300.0){ + iPredBands = 0; + }*/ + + if ( iPredBands > 0 ) + { + // int32_t b; + iPredictionBits += 1; + iPredictionBits += 6; + for ( b = 0; b < iPredBands; b++ ) + { + iPredictionBits += 1; + if ( psPredictionEncoder->ppiPredBandEnable[c][b] == 1 ) + { + iPredictionBits += ( PRED_QUNAT_FILTER_MAG_BITS + PRED_QUANT_FILTER_PHASE_BITS ); + } + } + for ( b = iPredBands; b < CQMF_BANDS; b++ ) + { + psPredictionEncoder->ppiPredBandEnable[c][b] = 0; + } + psPredictionEncoder->piPredChanEnable[c] = 1; + psPredictionEncoder->piNumPredBands[c] = iPredBands; + } + else + { + // int32_t b; + iPredictionBits += 1; + for ( b = 0; b < CQMF_BANDS; b++ ) + { + psPredictionEncoder->ppiPredBandEnable[c][b] = 0; + } + psPredictionEncoder->piPredChanEnable[c] = 0; + psPredictionEncoder->piNumPredBands[c] = 0; + } + } +#endif + } + + return iPredictionBits; +} + +void ApplyForwardPredictors( PredictionEncoder *psPredictionEncoder, + float ***pppfReal, + float ***pppfImag ) +{ + int32_t c; + for ( c = 0; c < psPredictionEncoder->iChannels; c++ ) + { + int32_t b; + if ( psPredictionEncoder->piPredChanEnable[c] == 1 ) + { + for ( b = 0; b < psPredictionEncoder->piNumPredBands[c]; b++ ) + { + if ( psPredictionEncoder->ppiPredBandEnable[c][b] == 1 ) + { + int32_t n; + float fOldReal; + float fOldImag; + float fA1Real; + float fA1Imag; + + fOldReal = pppfReal[c][0][b]; + fOldImag = pppfImag[c][0][b]; + fA1Real = psPredictionEncoder->ppfA1Real[c][b]; + fA1Imag = psPredictionEncoder->ppfA1Imag[c][b]; + for ( n = 1; n < psPredictionEncoder->iNumBlocks; n++ ) + { + float fReal; + float fImag; + + fReal = pppfReal[c][n][b] + fA1Real * fOldReal - fA1Imag * fOldImag; + fImag = pppfImag[c][n][b] + fA1Real * fOldImag + fA1Imag * fOldReal; + + fOldReal = pppfReal[c][n][b]; + fOldImag = pppfImag[c][n][b]; + + pppfReal[c][n][b] = fReal; + pppfImag[c][n][b] = fImag; + } + } + } + } + } +} + +int32_t WritePredictors( PredictionEncoder *psPredictionEncoder, + ivas_split_rend_bits_t *pBits ) +{ + int32_t iBitsWritten = 0; + int32_t c; + + for ( c = 0; c < psPredictionEncoder->iChannels; c++ ) + { + int32_t b; + ivas_split_rend_bitstream_write_int32( + pBits, psPredictionEncoder->piPredChanEnable[c], + 1 ); + iBitsWritten += 1; + + if ( psPredictionEncoder->piPredChanEnable[c] == 1 ) + { + ivas_split_rend_bitstream_write_int32( + pBits, psPredictionEncoder->piNumPredBands[c], 6 ); + iBitsWritten += 6; + + for ( b = 0; b < psPredictionEncoder->piNumPredBands[c]; b++ ) + { + ivas_split_rend_bitstream_write_int32( + pBits, psPredictionEncoder->ppiPredBandEnable[c][b], 1 ); + iBitsWritten += 1; + + if ( psPredictionEncoder->ppiPredBandEnable[c][b] == 1 ) + { + int32_t iA1Mag; + int32_t iA1Phase; + + iA1Mag = psPredictionEncoder->ppiA1Mag[c][b]; + iA1Phase = psPredictionEncoder->ppiA1Phase[c][b] - PRED_QUANT_FILTER_PHASE_MIN; + ivas_split_rend_bitstream_write_int32( + pBits, iA1Mag, PRED_QUNAT_FILTER_MAG_BITS ); + iBitsWritten += PRED_QUNAT_FILTER_MAG_BITS; + ivas_split_rend_bitstream_write_int32( + pBits, iA1Phase, PRED_QUANT_FILTER_PHASE_BITS ); + iBitsWritten += PRED_QUANT_FILTER_PHASE_BITS; + } + } + } + } + + return iBitsWritten; +} diff --git a/lib_rend/ivas_PredEncoder.h b/lib_rend/ivas_PredEncoder.h new file mode 100644 index 0000000000..5ebbe7b48d --- /dev/null +++ b/lib_rend/ivas_PredEncoder.h @@ -0,0 +1,88 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef _IVAS_PRED_ENCODER_H_ +#define _IVAS_PRED_ENCODER_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "ivas_cldfb_codec_bitstream.h" + + typedef struct PREDICTION_ENCODER + { + int32_t iChannels; + int32_t iNumBlocks; + + float *pfWindow; + float *pfRxxReal; + float *pfRxxImag; + + int32_t *piPredChanEnable; + int32_t *piNumPredBands; + + float **ppfEstPredGain; + float **ppfEstPredBitGain; + int32_t **ppiPredBandEnable; + + float **ppfA1Real; + float **ppfA1Imag; + + int32_t **ppiA1Mag; + int32_t **ppiA1Phase; + } PredictionEncoder; + + PredictionEncoder *CreatePredictionEncoder( const int32_t iChannels, + const int32_t iNumBlocks ); + + void DeletePredictionEncoder( PredictionEncoder *psPredictionEncoder ); + + int32_t ComputePredictors( PredictionEncoder *psPredictionEncoder, + float ***pppfReal, + float ***pppfImag ); + + void ApplyForwardPredictors( PredictionEncoder *psPredictionEncoder, + float ***pppfReal, + float ***pppfImag ); + + + int32_t WritePredictors( PredictionEncoder *psPredictionEncoder, + ivas_split_rend_bits_t *pBits ); + + +#ifdef __cplusplus +} +#endif + +#endif /* _PRED_ENCODER_H_ */ diff --git a/lib_rend/ivas_PredTables.h b/lib_rend/ivas_PredTables.h new file mode 100644 index 0000000000..ee9caf425a --- /dev/null +++ b/lib_rend/ivas_PredTables.h @@ -0,0 +1,53 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef _IVAS_PRED_TABLE_H_ +#define _IVAS_PRED_TABLE_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#define PRED_QUNAT_FILTER_MAG_BITS (3) +#define PRED_QUANT_FILTER_PHASE_BITS (5) +#define PRED_QUANT_FILTER_MAG_MIN (0) +#define PRED_QUANT_FILTER_MAG_MAX (7) +#define PRED_QUANT_FILTER_PHASE_MIN (-16) +#define PRED_QUANT_FILTER_PHASE_MAX (15) + +#ifdef __cplusplus +} +#endif + +#endif /* _PRED_TABLE_H_ */ diff --git a/lib_rend/ivas_cldfb_trans_codec/RMSEnvDeltaHuff.c b/lib_rend/ivas_RMSEnvDeltaHuff.c similarity index 61% rename from lib_rend/ivas_cldfb_trans_codec/RMSEnvDeltaHuff.c rename to lib_rend/ivas_RMSEnvDeltaHuff.c index 9e314fcd08..16e2ee0f49 100644 --- a/lib_rend/ivas_cldfb_trans_codec/RMSEnvDeltaHuff.c +++ b/lib_rend/ivas_RMSEnvDeltaHuff.c @@ -1,7 +1,40 @@ -#include "RMSEnvDeltaHuff.h" +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "ivas_RMSEnvDeltaHuff.h" #include "wmops.h" -const unsigned int c_aaiRMSEnvHuffEnc[64][2] = +/* clang-format off */ +const uint32_t c_aaiRMSEnvHuffEnc[64][2] = { {0x0014, 0x0000}, {0x0014, 0x0001}, {0x0014, 0x0002}, {0x0014, 0x0003}, {0x0014, 0x0004}, {0x0014, 0x0005}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0012, 0x000b}, {0x000d, 0x0002}, {0x000e, 0x0001}, {0x000e, 0x0002}, {0x000d, 0x0003}, @@ -13,7 +46,7 @@ const unsigned int c_aaiRMSEnvHuffEnc[64][2] = {0x0013, 0x000e}, {0x0013, 0x000f}, {0x0013, 0x0010}, {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0013, 0x0014}, {0x0013, 0x0015}, }; -const unsigned int c_aaiRMSEnvHuffDec[13][HUFF_DEC_TABLE_SIZE] = +const uint32_t c_aaiRMSEnvHuffDec[13][HUFF_DEC_TABLE_SIZE] = { {0x0002ffff, 0x0001ffff, 0x0000001d, 0x00000022, 0x0001001e, 0x0001001e, 0x00010021, 0x00010021, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x00020020, 0x00020020, 0x00020020, 0x00020020, }, {0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x00020023, 0x00020023, 0x00020023, 0x00020023, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, }, @@ -29,3 +62,4 @@ const unsigned int c_aaiRMSEnvHuffDec[13][HUFF_DEC_TABLE_SIZE] = {0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00010006, 0x00010006, 0x00010007, 0x00010007, 0x00010008, 0x00010008, 0x00010009, 0x00010009, 0x0001000a, 0x0001000a, }, {0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x00010036, 0x00010036, 0x00010037, 0x00010037, 0x00010038, 0x00010038, 0x00010039, 0x00010039, }, }; +/* clang-format on */ \ No newline at end of file diff --git a/lib_rend/ivas_RMSEnvDeltaHuff.h b/lib_rend/ivas_RMSEnvDeltaHuff.h new file mode 100644 index 0000000000..13120d100e --- /dev/null +++ b/lib_rend/ivas_RMSEnvDeltaHuff.h @@ -0,0 +1,57 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef _IVAS_RMS_ENV_DELTA_HUFF_H_ +#define _IVAS_RMS_ENV_DELTA_HUFF_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#ifndef HUFF_READ_SIZE +#define HUFF_READ_SIZE (4) +#endif + +#ifndef HUFF_DEC_TABLE_SIZE +#define HUFF_DEC_TABLE_SIZE (16) +#endif +#include +extern const uint32_t c_aaiRMSEnvHuffEnc[64][2]; + +extern const uint32_t c_aaiRMSEnvHuffDec[13][HUFF_DEC_TABLE_SIZE]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RMS_ENV_DELTA_HUFF_H_ */ diff --git a/lib_rend/ivas_RMSEnvGrouping.c b/lib_rend/ivas_RMSEnvGrouping.c new file mode 100644 index 0000000000..061678770b --- /dev/null +++ b/lib_rend/ivas_RMSEnvGrouping.c @@ -0,0 +1,922 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "ivas_RMSEnvGrouping.h" + +/* Double check cost function calculation */ + +#include +#include +#include +#include +#include "options.h" +#include "prot.h" +#include "wmops.h" +#include "ivas_Tables.h" +#include "ivas_RMSEnvDeltaHuff.h" // To compute RMS transmission cost + + +typedef struct GMNODE +{ + int32_t iGroupStart; + int32_t iGroupLength; + float *pfMergedEnergydB; + int32_t *piQRMSEnvelope; + + int32_t iGroupRMSEnvelopeCost; + float fGroupSNRPenalty; + + struct GMNODE *psNext; +} GMNode; + +struct RMS_ENVELOPE_GROUPING +{ + int32_t iNumBlocks; + int32_t iMaxGroups; + float **ppfBandEnergy; + float **ppfBandEnergydB; + float **ppfWeight; + GMNode *psGMNodes; +}; + +RMSEnvelopeGrouping *CreateRMSEnvelopeGrouping( int32_t iNumBlocks ) +{ + int32_t n; + // assert( ( iNumBlocks & 0x1 ) == 0 ); // remove this + + RMSEnvelopeGrouping *psRMSEnvelopeGrouping; + + psRMSEnvelopeGrouping = (RMSEnvelopeGrouping *) count_malloc( sizeof( RMSEnvelopeGrouping ) ); + psRMSEnvelopeGrouping->iNumBlocks = iNumBlocks; +#ifdef FORCE_GROUPS_OF_2 + psRMSEnvelopeGrouping->iMaxGroups = iNumBlocks >> 1; +#else + psRMSEnvelopeGrouping->iMaxGroups = iNumBlocks; +#endif + + psRMSEnvelopeGrouping->ppfBandEnergy = (float **) count_malloc( psRMSEnvelopeGrouping->iNumBlocks * sizeof( float * ) ); + psRMSEnvelopeGrouping->ppfBandEnergydB = (float **) count_malloc( psRMSEnvelopeGrouping->iNumBlocks * sizeof( float * ) ); + psRMSEnvelopeGrouping->ppfWeight = (float **) count_malloc( psRMSEnvelopeGrouping->iNumBlocks * sizeof( float * ) ); + for ( n = 0; n < psRMSEnvelopeGrouping->iNumBlocks; n++ ) + { + psRMSEnvelopeGrouping->ppfBandEnergy[n] = (float *) count_malloc( MAX_BANDS * 2 * sizeof( float ) ); /* 2 for stereo joint group calc */ + psRMSEnvelopeGrouping->ppfBandEnergydB[n] = (float *) count_malloc( MAX_BANDS * 2 * sizeof( float ) ); + psRMSEnvelopeGrouping->ppfWeight[n] = (float *) count_malloc( MAX_BANDS * 2 * sizeof( float ) ); + } + + psRMSEnvelopeGrouping->psGMNodes = (GMNode *) count_malloc( psRMSEnvelopeGrouping->iNumBlocks * sizeof( GMNode ) ); + for ( n = 0; n < psRMSEnvelopeGrouping->iNumBlocks; n++ ) + { + psRMSEnvelopeGrouping->psGMNodes[n].pfMergedEnergydB = (float *) count_malloc( MAX_BANDS * 2 * sizeof( float ) ); + psRMSEnvelopeGrouping->psGMNodes[n].piQRMSEnvelope = (int32_t *) count_malloc( MAX_BANDS * 2 * sizeof( int32_t ) ); + psRMSEnvelopeGrouping->psGMNodes[n].iGroupRMSEnvelopeCost = -1; + psRMSEnvelopeGrouping->psGMNodes[n].fGroupSNRPenalty = -1.0; + } + + return psRMSEnvelopeGrouping; +} + +void DeleteRMSEnvelopeGrouping( RMSEnvelopeGrouping *psRMSEnvelopeGrouping ) +{ + int32_t n; + + for ( n = 0; n < psRMSEnvelopeGrouping->iNumBlocks; n++ ) + { + count_free( psRMSEnvelopeGrouping->ppfBandEnergy[n] ); + count_free( psRMSEnvelopeGrouping->ppfBandEnergydB[n] ); + count_free( psRMSEnvelopeGrouping->ppfWeight[n] ); + } + count_free( psRMSEnvelopeGrouping->ppfBandEnergy ); + count_free( psRMSEnvelopeGrouping->ppfBandEnergydB ); + count_free( psRMSEnvelopeGrouping->ppfWeight ); + + for ( n = 0; n < psRMSEnvelopeGrouping->iNumBlocks; n++ ) + { + count_free( psRMSEnvelopeGrouping->psGMNodes[n].pfMergedEnergydB ); + count_free( psRMSEnvelopeGrouping->psGMNodes[n].piQRMSEnvelope ); + } + count_free( psRMSEnvelopeGrouping->psGMNodes ); + + count_free( psRMSEnvelopeGrouping ); +} + +const float c_afThreshQuiet48[23] = { + -8.40653699e+01f, + -8.40653699e+01f, + -8.40653699e+01f, + -8.40653699e+01f, + -8.40653699e+01f, + -8.40653699e+01f, + -8.40653699e+01f, + -8.40653699e+01f, + -8.38067304e+01f, + -8.28409495e+01f, + -8.17031225e+01f, + -7.89799501e+01f, + -7.70607916e+01f, + -7.58484320e+01f, + -7.47976303e+01f, + -7.37491303e+01f, + -7.13163746e+01f, + -6.86144293e+01f, + -6.56295695e+01f, + -6.06521800e+01f, + -3.15408065e+01f, + -1.92542188e+01f, + -1.88401753e+01f, +}; + +static void ComputeBandEnergy( const int32_t iChannels, + const int32_t iNumBlocks, + const int32_t iNumBands, + const int32_t *piBandwidths, + float ***pppfReal, + float ***pppfImag, + float **ppfBandEnergy, + float **ppfBandEnergydB, + float **ppfWeight ) +{ + int32_t n; + + for ( n = 0; n < iChannels; n++ ) + { + int32_t k; + int32_t iChanOffset; + + iChanOffset = n * iNumBands; + for ( k = 0; k < iNumBlocks; k++ ) + { + int32_t b; + int32_t iFBOffset; + float fMaxWeight; + + + iFBOffset = 0; + fMaxWeight = 0.0f; + for ( b = 0; b < iNumBands; b++ ) + { + int32_t m; + float fEnergy = 1e-12f; + float fWeight; + + for ( m = 0; m < piBandwidths[b]; m++ ) + { + fEnergy += ( pppfReal[n][k][iFBOffset] * pppfReal[n][k][iFBOffset] + pppfImag[n][k][iFBOffset] * pppfImag[n][k][iFBOffset] ); + iFBOffset++; + } + fEnergy /= (float) ( piBandwidths[b] ); // Correction removed normalization by 2 + ppfBandEnergy[k][iChanOffset + b] = fEnergy; + + fWeight = 0.33f * powf( 10.0f, 0.0068f * ( 10.0f * log10f( fEnergy ) - c_afThreshQuiet48[b] ) ); + fWeight = ( fWeight > 0.33f ) ? fWeight : 0.33f; + fWeight = ( fWeight < 1.0f ) ? fWeight : 1.0f; + fMaxWeight = ( fMaxWeight > fWeight ) ? fMaxWeight : fWeight; + ppfWeight[k][iChanOffset + b] = fWeight; + +#ifdef APPLY_TEMPORAL_SMOOTHING + if ( k > 0 ) + { + float fSmoothEnergy; + fSmoothEnergy = 0.7f * ppfBandEnergy[k - 1][iChanOffset + b] + 0.3f * fEnergy; + + fEnergy = ( fEnergy > fSmoothEnergy ) ? fEnergy : fSmoothEnergy; + } +#endif + fEnergy = 10.0f * log10f( fEnergy ); + ppfBandEnergydB[k][iChanOffset + b] = fEnergy; + } + for ( b = 0; b < iNumBands; b++ ) + { + ppfWeight[k][iChanOffset + b] /= fMaxWeight; + } + } + } +} + +/* THis is temporary cost function */ +static float TryMerge( const int32_t iNumBands, + const int32_t iStartBlock, + const int32_t iGroupLength, + const float fMaxAllowedDiffdB, + float **ppfBandEnergy, + float **ppfBandEnergydB, +#ifdef APPLY_WEIGHT + float **ppfWeight, +#endif + float *pfMegredEnergydB ) +{ + int32_t b; + int32_t n; + float fMeanCost; + float fMaxCost; + float fMinDiffCost; + float fMaxDiffCost; + float fInvGroupSize = 1.0f / (float) iGroupLength; + float fInvNumBands = 1.0f / (float) iNumBands; + + for ( b = 0; b < iNumBands; b++ ) + { + float fGroupEnergy; + + + fGroupEnergy = 0.0; + for ( n = iStartBlock; n < ( iStartBlock + iGroupLength ); n++ ) + { + fGroupEnergy += ppfBandEnergy[n][b]; + } + fGroupEnergy *= fInvGroupSize; + fGroupEnergy = 10.0f * log10f( fGroupEnergy ); // Note epsolon was added when computing BandEnergy; + + pfMegredEnergydB[b] = fGroupEnergy; + } + + fMeanCost = 0.0; + fMaxCost = 0.0; + fMinDiffCost = 0.0; + fMaxDiffCost = 0.0; + for ( n = iStartBlock; n < ( iStartBlock + iGroupLength ); n++ ) + { + float fMeanAbsDiff; + float fMaxAbsDiff; + float fMaxDiff; + float fMinDiff; + + fMeanAbsDiff = 0.0; + fMaxAbsDiff = 0.0; + fMaxDiff = 0.0; + fMinDiff = 0.0; + for ( b = 0; b < iNumBands; b++ ) + { + float fDiff; + float fAbsDiff; + + fDiff = pfMegredEnergydB[b] - ppfBandEnergydB[n][b]; // Changed the order of this + fAbsDiff = fabsf( fDiff ); +#ifdef APPLY_WEIGHT + fAbsDiff *= ppfWeight[n][b]; +#endif + + fMeanAbsDiff += fAbsDiff; + fMaxAbsDiff = ( fMaxAbsDiff > fAbsDiff ) ? fMaxAbsDiff : fAbsDiff; + + + fMaxDiff = ( fMaxDiff > fDiff ) ? fMaxDiff : fDiff; + fMinDiff = ( fMinDiff < fDiff ) ? fMinDiff : fDiff; + } + fMeanAbsDiff *= fInvNumBands; + + fMeanCost = ( fMeanCost > fMeanAbsDiff ) ? fMeanCost : fMeanAbsDiff; + fMaxCost = ( fMaxCost > fMaxAbsDiff ) ? fMaxCost : fMaxAbsDiff; + + fMaxDiffCost = ( fMaxDiffCost > fMaxDiff ) ? fMaxDiffCost : fMaxDiff; + fMinDiffCost = ( fMinDiffCost < fMinDiff ) ? fMinDiffCost : fMinDiff; + } + + // printf("%f\t%f\t%f\t%f\n",fMeanCost,fMaxCost,fMaxDiffCost,fMinDiffCost); + + /*if(fMinDiffCost < -9.0){ // This prevents cliping + fMeanCost = 1e12; //Some large value + }*/ + + if ( fMaxCost > fMaxAllowedDiffdB ) + { + fMeanCost = 1e12f; // Some large value + } + + return fMeanCost; +} + +static void ComputeMergeRMS( const int32_t iNumBands, + const int32_t iStartBlock, + const int32_t iGroupLength, + float **ppfBandEnergy, + float *pfMergedEnergydB, + int32_t *piQRMSEnvelope ) +{ + int32_t b; + float fInvGroupSize = 1.0f / (float) iGroupLength; + + for ( b = 0; b < iNumBands; b++ ) + { + int32_t n; + float fGroupEnergy; + float fRMSEnvelope; + int32_t iQRMSEnvelope; + + fGroupEnergy = 0.0; + for ( n = iStartBlock; n < ( iStartBlock + iGroupLength ); n++ ) + { + fGroupEnergy += ppfBandEnergy[n][b]; + } + fGroupEnergy *= fInvGroupSize; + + fRMSEnvelope = log2f( fGroupEnergy ); + iQRMSEnvelope = ( fRMSEnvelope > 0.0 ) ? (int32_t) ( fRMSEnvelope + 0.5 ) : (int32_t) ( fRMSEnvelope - 0.5 ); + + fGroupEnergy = 10.0f * log10f( fGroupEnergy ); // Note epsolon was added when computing BandEnergy; + + pfMergedEnergydB[b] = fGroupEnergy; + piQRMSEnvelope[b] = iQRMSEnvelope; + } +} + + +static int32_t ComputeRMSEnvelopeBits( const int32_t iChannels, + const int32_t iNumBands, + const int32_t *piQRMSEnevelope ) +{ + int32_t n; + int32_t iRMSEnvelopeBits = 0; + int32_t iChanOffset = 0; + + for ( n = 0; n < iChannels; n++ ) + { + int32_t b; + int32_t iLastRMSVal; + + iRMSEnvelopeBits += ENV0_BITS; + iLastRMSVal = piQRMSEnevelope[iChanOffset]; + for ( b = 1; b < iNumBands; b++ ) + { + int32_t iDelta; + + iDelta = piQRMSEnevelope[iChanOffset + b] - iLastRMSVal; + iDelta = ( iDelta > ENV_DELTA_MIN ) ? iDelta : ENV_DELTA_MIN; + iDelta = ( iDelta < ENV_DELTA_MAX ) ? iDelta : ENV_DELTA_MAX; + iDelta -= ENV_DELTA_MIN; + iRMSEnvelopeBits += c_aaiRMSEnvHuffEnc[iDelta][0]; + + iLastRMSVal = piQRMSEnevelope[iChanOffset + b]; + } + iChanOffset += iNumBands; + } + + return iRMSEnvelopeBits; +} + +static const float c_fiDefaultTheta48[MAX_BANDS_48] = { + 0.4375, + 0.4375, + 0.375, + 0.3125, + 0.3125, + 0.25, + 0.25, + 0.25, + 0.25, + 0.25, + 0.25, + 0.25, + 0.25, + 0.25, + 0.25, + 0.25, + 0.25, + 0.25, + 0.25, + 0.25, + 0.25, + 0.25, + 0.25, +}; + +static float ComputeSNRPenalty( const int32_t iChannels, + const int32_t iNumBands, + const int32_t *piBandwidths, + const int32_t iStartBlock, + const int32_t iGroupLength, + float **ppfBandEnergydB, + const int32_t *piRMSEnvelope ) +{ + int32_t n; + int32_t iChanOffset; + float fSNRPenalty = 0.0; + + iChanOffset = 0; + for ( n = 0; n < iChannels; n++ ) + { + int32_t b; + for ( b = 0; b < iNumBands; b++ ) + { + int32_t k; + float fRMSVal; + + fRMSVal = 3.0103f * (float) piRMSEnvelope[iChanOffset + b]; + + for ( k = iStartBlock; k < ( iStartBlock + iGroupLength ); k++ ) + { + float fDeltadB; + + fDeltadB = fRMSVal - ppfBandEnergydB[k][iChanOffset + b]; + if ( fDeltadB < -9.0309f ) + { + fSNRPenalty += 1e10f; // Some large number to prevent clipping + } + else /*if(fDeltadB < 0.0)*/ + { + fSNRPenalty += fabsf( c_fiDefaultTheta48[b] * fDeltadB - fDeltadB ) * 2.0f * (float) piBandwidths[b] / 6.0f; + } + } + } + iChanOffset += iNumBands; + } + + + return fSNRPenalty; +} + +static float TryMegre2( const int32_t iChannels, + const int32_t iNumBands, + const int32_t *piBandwidths, + float **ppfBandEnergy, + float **ppfBandEnergydB, + GMNode *psGMNode1, + GMNode *psGMNode2 ) +{ + int32_t iRMSEnvBits1; + int32_t iRMSEnvBits2; + int32_t iRMSEnvBitsMerged; + float fSNRPenalty1; + float fSNRPenalty2; + float fSNRPenaltyMerged; + float fMergedCost = 0.0; + + /* First compute current RMS Envelope for each group */ + if ( psGMNode1->iGroupRMSEnvelopeCost == -1 || psGMNode1->fGroupSNRPenalty == -1.0 ) + { + ComputeMergeRMS( iNumBands * iChannels, + psGMNode1->iGroupStart, + psGMNode1->iGroupLength, + ppfBandEnergy, + psGMNode1->pfMergedEnergydB, + psGMNode1->piQRMSEnvelope ); + + iRMSEnvBits1 = ComputeRMSEnvelopeBits( iChannels, + iNumBands, + psGMNode1->piQRMSEnvelope ); + + fSNRPenalty1 = ComputeSNRPenalty( iChannels, + iNumBands, + piBandwidths, + psGMNode1->iGroupStart, + psGMNode1->iGroupLength, + ppfBandEnergydB, + psGMNode1->piQRMSEnvelope ); + + psGMNode1->iGroupRMSEnvelopeCost = iRMSEnvBits1; + psGMNode1->fGroupSNRPenalty = fSNRPenalty1; + } + else + { + iRMSEnvBits1 = psGMNode1->iGroupRMSEnvelopeCost; + fSNRPenalty1 = psGMNode1->fGroupSNRPenalty; + } + + if ( psGMNode2->iGroupRMSEnvelopeCost == -1 || psGMNode2->fGroupSNRPenalty == -1.0 ) + { + ComputeMergeRMS( iNumBands * iChannels, + psGMNode2->iGroupStart, + psGMNode2->iGroupLength, + ppfBandEnergy, + psGMNode2->pfMergedEnergydB, + psGMNode2->piQRMSEnvelope ); + + iRMSEnvBits2 = ComputeRMSEnvelopeBits( iChannels, + iNumBands, + psGMNode2->piQRMSEnvelope ); + + fSNRPenalty2 = ComputeSNRPenalty( iChannels, + iNumBands, + piBandwidths, + psGMNode2->iGroupStart, + psGMNode2->iGroupLength, + ppfBandEnergydB, + psGMNode2->piQRMSEnvelope ); + + psGMNode2->iGroupRMSEnvelopeCost = iRMSEnvBits2; + psGMNode2->fGroupSNRPenalty = fSNRPenalty2; + } + else + { + iRMSEnvBits2 = psGMNode2->iGroupRMSEnvelopeCost; + fSNRPenalty2 = psGMNode2->fGroupSNRPenalty; + } + + /* Compute the merged group */ + ComputeMergeRMS( iNumBands * iChannels, + psGMNode1->iGroupStart, + psGMNode1->iGroupLength + psGMNode2->iGroupLength, + ppfBandEnergy, + psGMNode1->pfMergedEnergydB, + psGMNode1->piQRMSEnvelope ); + + /* Compute the RMS Envelope cost for merged group */ + iRMSEnvBitsMerged = ComputeRMSEnvelopeBits( iChannels, + iNumBands, + psGMNode1->piQRMSEnvelope ); + + /* Compute an approximation of the bit cost based on SNR increase/decrease due to merging */ + fSNRPenaltyMerged = ComputeSNRPenalty( iChannels, + iNumBands, + piBandwidths, + psGMNode1->iGroupStart, + psGMNode1->iGroupLength + psGMNode2->iGroupLength, + ppfBandEnergydB, + psGMNode1->piQRMSEnvelope ); + + + fMergedCost = fSNRPenaltyMerged - fSNRPenalty1 - fSNRPenalty2 + (float) iRMSEnvBitsMerged - (float) iRMSEnvBits1 - (float) iRMSEnvBits2; + + return fMergedCost; +} + +static void ComputeGreedyGroups( RMSEnvelopeGrouping *psRMSEnvelopeGrouping, + const int32_t iChannels, + const int32_t iNumBands, + const float fMeanAllowedDiffdB, + const float fMaxAllowedDiffdB ) +{ + float fBestMeanCost; + + fBestMeanCost = 0.0; + while ( fBestMeanCost < fMeanAllowedDiffdB ) + { + GMNode *psGMNode; + GMNode *psBestGMNode; + + fBestMeanCost = fMeanAllowedDiffdB; + psGMNode = &psRMSEnvelopeGrouping->psGMNodes[0]; + psBestGMNode = NULL; + while ( psGMNode->psNext != NULL ) + { + float fMeanCost; + int32_t iGroupLength; + + iGroupLength = psGMNode->iGroupLength + psGMNode->psNext->iGroupLength; + + fMeanCost = TryMerge( iNumBands * iChannels, + psGMNode->iGroupStart, + iGroupLength, // psGMNode->iGroupLength, //Fix this bug + fMaxAllowedDiffdB, + psRMSEnvelopeGrouping->ppfBandEnergy, + psRMSEnvelopeGrouping->ppfBandEnergydB, +#ifdef APPLY_WEIGHT + psRMSEnvelopeGrouping->ppfWeight, +#endif + psGMNode->pfMergedEnergydB ); + + + if ( fMeanCost < fBestMeanCost ) + { + fBestMeanCost = fMeanCost; + psBestGMNode = psGMNode; + } + + psGMNode = psGMNode->psNext; + } + + if ( fBestMeanCost < fMeanAllowedDiffdB && psBestGMNode != NULL && psBestGMNode->psNext != NULL ) + { + psBestGMNode->iGroupLength += psBestGMNode->psNext->iGroupLength; + psBestGMNode->psNext = psBestGMNode->psNext->psNext; + } + } +} + +static void ComputeGreedyGroups2( RMSEnvelopeGrouping *psRMSEnvelopeGrouping, + const int32_t iChannels, + const int32_t iNumBands, + const int32_t *piBandwidths ) +{ + float fBestMergeCost; + // int32_t iDone = 0; + fBestMergeCost = -1.0; + + while ( fBestMergeCost < 0.0 ) + { + GMNode *psGMNode; + GMNode *psBestGMNode; + + fBestMergeCost = 0.0; + psGMNode = &psRMSEnvelopeGrouping->psGMNodes[0]; + psBestGMNode = NULL; + while ( psGMNode->psNext != NULL ) + { + float fMergeCost; + + fMergeCost = TryMegre2( iChannels, + iNumBands, + piBandwidths, + psRMSEnvelopeGrouping->ppfBandEnergy, + psRMSEnvelopeGrouping->ppfBandEnergydB, + psGMNode, + psGMNode->psNext ); + + if ( fMergeCost < fBestMergeCost ) + { + fBestMergeCost = fMergeCost; + psBestGMNode = psGMNode; + } + + psGMNode = psGMNode->psNext; + } + if ( fBestMergeCost < 0.0 && psBestGMNode != NULL && psBestGMNode->psNext != NULL ) + { + psBestGMNode->iGroupLength += psBestGMNode->psNext->iGroupLength; + psBestGMNode->iGroupRMSEnvelopeCost = -1; + psBestGMNode->fGroupSNRPenalty = -1.0; + psBestGMNode->psNext = psBestGMNode->psNext->psNext; + } + } +} + +static void ComputeGreedyGroups3( RMSEnvelopeGrouping *psRMSEnvelopeGrouping, + const int32_t iChannels, + const int32_t iNumBands, + const int32_t *piBandwidths, + const int32_t iMaxGroups ) +{ + + int32_t iDone = 0; + int32_t iNumGroups = psRMSEnvelopeGrouping->iMaxGroups; + while ( iDone == 0 ) + { + GMNode *psGMNode; + GMNode *psBestGMNode; + float fBestMergeCost; + + fBestMergeCost = 1e20f; + psGMNode = &psRMSEnvelopeGrouping->psGMNodes[0]; + psBestGMNode = NULL; + while ( psGMNode->psNext != NULL ) + { + float fMergeCost; + + fMergeCost = TryMegre2( iChannels, + iNumBands, + piBandwidths, + psRMSEnvelopeGrouping->ppfBandEnergy, + psRMSEnvelopeGrouping->ppfBandEnergydB, + psGMNode, + psGMNode->psNext ); + + if ( fMergeCost < fBestMergeCost ) + { + fBestMergeCost = fMergeCost; + psBestGMNode = psGMNode; + } + + psGMNode = psGMNode->psNext; + } + if ( fBestMergeCost > 0.0 && iNumGroups <= iMaxGroups ) + { + iDone++; + } + else if ( psBestGMNode != NULL && psBestGMNode->psNext != NULL ) + { + psBestGMNode->iGroupLength += psBestGMNode->psNext->iGroupLength; + psBestGMNode->iGroupRMSEnvelopeCost = -1; + psBestGMNode->fGroupSNRPenalty = -1.0; + psBestGMNode->psNext = psBestGMNode->psNext->psNext; + iNumGroups--; + } + else + { + iDone++; // This only catches a problem + } + } +} + +static void ComputeRMSEnvelope( const int32_t iChannels, + const int32_t iNumBands, + const int32_t iNumGroups, + const int32_t *piGroupLengths, + float **ppfBandEnergy, + int32_t ***pppiRMSEnvelope ) +{ + int32_t n; + + for ( n = 0; n < iChannels; n++ ) + { + int32_t b; + int32_t iChanOffset; + + iChanOffset = n * iNumBands; + for ( b = 0; b < iNumBands; b++ ) + { + int32_t k; + int32_t iBlockOffset; + + iBlockOffset = 0; + for ( k = 0; k < iNumGroups; k++ ) + { + int32_t m; + float fGroupEnergy; + fGroupEnergy = 0.0; + for ( m = 0; m < piGroupLengths[k]; m++ ) + { + fGroupEnergy += ppfBandEnergy[iBlockOffset][b + iChanOffset]; + iBlockOffset++; + } + fGroupEnergy /= (float) piGroupLengths[k]; + + fGroupEnergy = log2f( fGroupEnergy ); + pppiRMSEnvelope[n][k][b] = ( fGroupEnergy > 0.0 ) ? (int32_t) ( fGroupEnergy + 0.5 ) : (int32_t) ( fGroupEnergy - 0.5 ); // Bug fix + pppiRMSEnvelope[n][k][b] = ( pppiRMSEnvelope[n][k][b] > ENV_MIN ) ? pppiRMSEnvelope[n][k][b] : ENV_MIN; + pppiRMSEnvelope[n][k][b] = ( pppiRMSEnvelope[n][k][b] < ENV_MAX ) ? pppiRMSEnvelope[n][k][b] : ENV_MAX; + } + } + } +} + +static void LimitRMSEnvelope( const int32_t iBandCount, + const int32_t iRMSDeltaMax, + const int32_t iRMSDeltaMin, + int32_t *piRMSEnvelope ) +{ + int32_t iBand; + int32_t iLastSCF; + + /* Increase low envelope values to ensure that the scale factors traces the large values correctly (checking for max deltas) */ + iLastSCF = piRMSEnvelope[iBandCount - 1]; + for ( iBand = iBandCount - 2; iBand > -1; iBand-- ) + { + int32_t iDelta; + + iDelta = iLastSCF - piRMSEnvelope[iBand]; + + if ( iDelta > iRMSDeltaMax ) + { +#ifdef DEBUG_VERBOSE + printf( "WARNING RMS envelope delta limited\n" ); +#endif + piRMSEnvelope[iBand] += ( iDelta - iRMSDeltaMax ); + } + + iLastSCF = piRMSEnvelope[iBand]; + } + + /* Increase low envelope values to ensure that the envelope traces the large values correctly (checking for min deltas)*/ + iLastSCF = piRMSEnvelope[0]; + for ( iBand = 1; iBand < iBandCount; iBand++ ) + { + int32_t iDelta; + + iDelta = piRMSEnvelope[iBand] - iLastSCF; + + if ( iDelta < iRMSDeltaMin ) + { +#ifdef DEBUG_VERBOSE + printf( "WARNING RMS envelope delta limited\n" ); +#endif + piRMSEnvelope[iBand] += ( iRMSDeltaMin - iDelta ); + } + + iLastSCF = piRMSEnvelope[iBand]; + } +} + +void ComputeEnvelopeGrouping( RMSEnvelopeGrouping *psRMSEnvelopeGrouping, + const int32_t iChannels, + const int32_t iNumBands, + const int32_t *piBandwidths, // pass in absolute thresh + float ***pppfReal, + float ***pppfImag, +#ifndef USE_BIT_COUNT_MERGE_COST + const float fMeanAllowedDiffdB, + const float fMaxAllowedDiffdB, +#endif + int32_t *piNumGroups, + int32_t *piGroupLengths, + int32_t ***pppiRMSEnvelope ) +{ + int32_t n; + GMNode *psGMNode; + + /* Compute Band Energies */ + ComputeBandEnergy( iChannels, + psRMSEnvelopeGrouping->iNumBlocks, + iNumBands, + piBandwidths, + pppfReal, + pppfImag, + psRMSEnvelopeGrouping->ppfBandEnergy, + psRMSEnvelopeGrouping->ppfBandEnergydB, + psRMSEnvelopeGrouping->ppfWeight ); + + /* Init GMNodes */ +#ifdef FORCE_GROUPS_OF_2 + psRMSEnvelopeGrouping->psGMNodes[0].iGroupStart = 0; + psRMSEnvelopeGrouping->psGMNodes[0].iGroupLength = 2; + psRMSEnvelopeGrouping->psGMNodes[0].psNext = NULL; +#ifdef BUG_FIX_03_15_23_INIT_GROUPING + psRMSEnvelopeGrouping->psGMNodes[0].iGroupRMSEnvelopeCost = -1; + psRMSEnvelopeGrouping->psGMNodes[0].fGroupSNRPenalty = -1.0f; +#endif + for ( n = 1; n < psRMSEnvelopeGrouping->iMaxGroups; n++ ) + { + psRMSEnvelopeGrouping->psGMNodes[n - 1].psNext = &psRMSEnvelopeGrouping->psGMNodes[n]; + psRMSEnvelopeGrouping->psGMNodes[n].iGroupStart = n * 2; + psRMSEnvelopeGrouping->psGMNodes[n].iGroupLength = 2; + psRMSEnvelopeGrouping->psGMNodes[n].iGroupRMSEnvelopeCost = -1; + psRMSEnvelopeGrouping->psGMNodes[n].fGroupSNRPenalty = -1.0; + psRMSEnvelopeGrouping->psGMNodes[n].psNext = NULL; + } +#else + psRMSEnvelopeGrouping->psGMNodes[0].iGroupStart = 0; + psRMSEnvelopeGrouping->psGMNodes[0].iGroupLength = 1; + psRMSEnvelopeGrouping->psGMNodes[0].psNext = NULL; +#ifdef BUG_FIX_03_15_23_INIT_GROUPING + psRMSEnvelopeGrouping->psGMNodes[0].iGroupRMSEnvelopeCost = -1; + psRMSEnvelopeGrouping->psGMNodes[0].fGroupSNRPenalty = -1.0f; +#endif + for ( n = 1; n < psRMSEnvelopeGrouping->iMaxGroups; n++ ) + { + psRMSEnvelopeGrouping->psGMNodes[n - 1].psNext = &psRMSEnvelopeGrouping->psGMNodes[n]; + psRMSEnvelopeGrouping->psGMNodes[n].iGroupStart = n; + psRMSEnvelopeGrouping->psGMNodes[n].iGroupLength = 1; + psRMSEnvelopeGrouping->psGMNodes[n].iGroupRMSEnvelopeCost = -1; + psRMSEnvelopeGrouping->psGMNodes[n].fGroupSNRPenalty = -1.0; + psRMSEnvelopeGrouping->psGMNodes[n].psNext = NULL; + } +#endif + /* Perform grouping via Greedy Merge */ +#ifndef USE_BIT_COUNT_MERGE_COST + ComputeGreedyGroups( psRMSEnvelopeGrouping, + iChannels, + iNumBands, + fMeanAllowedDiffdB, + fMaxAllowedDiffdB ); +#else + /*ComputeGreedyGroups2(psRMSEnvelopeGrouping, + iChannels, + iNumBands, + piBandwidths);*/ + // Allows control over max groups can call using 16 if want same as previous call + ComputeGreedyGroups3( psRMSEnvelopeGrouping, + iChannels, + iNumBands, + piBandwidths, + CQMF_BLOCKS_PER_FRAME ); +#endif + + /* Calc Groups from Merge Results */ + *piNumGroups = 0; + psGMNode = &psRMSEnvelopeGrouping->psGMNodes[0]; + while ( psGMNode != NULL ) + { + piGroupLengths[*piNumGroups] = psGMNode->iGroupLength; + *piNumGroups += 1; + psGMNode = psGMNode->psNext; + } + + /* Compute RMS Envelope given group lengths */ + ComputeRMSEnvelope( iChannels, + iNumBands, + *piNumGroups, + piGroupLengths, + psRMSEnvelopeGrouping->ppfBandEnergy, + pppiRMSEnvelope ); + + /* Envelope Tenting */ + for ( n = 0; n < iChannels; n++ ) + { + int32_t k; + for ( k = 0; k < *piNumGroups; k++ ) + { + LimitRMSEnvelope( iNumBands, + ENV_DELTA_MAX, + ENV_DELTA_MIN, + pppiRMSEnvelope[n][k] ); + } + } +} diff --git a/lib_rend/ivas_RMSEnvGrouping.h b/lib_rend/ivas_RMSEnvGrouping.h new file mode 100644 index 0000000000..fff7e99965 --- /dev/null +++ b/lib_rend/ivas_RMSEnvGrouping.h @@ -0,0 +1,66 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef _IVAS_RMS_ENV_GROUPING_H_ +#define _IVAS_RMS_ENV_GROUPING_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif +#include +#include "options.h" + typedef struct RMS_ENVELOPE_GROUPING RMSEnvelopeGrouping; + + RMSEnvelopeGrouping *CreateRMSEnvelopeGrouping( int32_t iNumBlocks ); + + void DeleteRMSEnvelopeGrouping( RMSEnvelopeGrouping *psRMSEnvelopeGrouping ); + + void ComputeEnvelopeGrouping( RMSEnvelopeGrouping *psRMSEnvelopeGrouping, + const int32_t iChannels, + const int32_t iNumBands, + const int32_t *piBandwidths, + float ***pppfReal, + float ***pppfImag, +#ifndef USE_BIT_COUNT_MERGE_COST + const float fMeanAllowedDiffdB, + const float fMaxAllowedDiffdB, +#endif + int32_t *piNumGroups, + int32_t *piGroupLengths, + int32_t ***pppiRMSEnvelope ); + +#ifdef __cplusplus +} +#endif + +#endif /* _RMS_ENV_GROUPING_H_ */ diff --git a/lib_rend/ivas_Tables.c b/lib_rend/ivas_Tables.c new file mode 100644 index 0000000000..c28ff6d26f --- /dev/null +++ b/lib_rend/ivas_Tables.c @@ -0,0 +1,196 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "ivas_Tables.h" +#include "wmops.h" + +/* clang-format off */ +const float c_afRotRealImagSimple[SIMPLE_PHASE_MAX_VAL+1][2] = { + {1.0f, 0.0f}, /* zero */ + {0.0f, 1.0f}, /* pi/2 */ + {-1.0f, 0.0f}, /* pi */ + {0.0f, -1.0f}, /* 3*pi/2 */ +}; + +/* phi = (-12:12)'/12 *pi; tmp = [cos(phi),sin(phi)]; tmp = tmp';sprintf('{%.8ff, %.8ff},\n',tmp(:)) */ +const float c_afRotRealImag[PHASE_MAX_VAL - PHASE_MIN_VAL + 1][2] = { + {-1.00000000f, -0.00000000f}, + {-0.96592583f, -0.25881905f}, + {-0.86602540f, -0.50000000f}, + {-0.70710678f, -0.70710678f}, + {-0.50000000f, -0.86602540f}, + {-0.25881905f, -0.96592583f}, + {0.00000000f, -1.00000000f}, + {0.25881905f, -0.96592583f}, + {0.50000000f, -0.86602540f}, + {0.70710678f, -0.70710678f}, + {0.86602540f, -0.50000000f}, + {0.96592583f, -0.25881905f}, + {1.00000000f, 0.00000000f}, + {0.96592583f, 0.25881905f}, + {0.86602540f, 0.50000000f}, + {0.70710678f, 0.70710678f}, + {0.50000000f, 0.86602540f}, + {0.25881905f, 0.96592583f}, + {0.00000000f, 1.00000000f}, + {-0.25881905f, 0.96592583f}, + {-0.50000000f, 0.86602540f}, + {-0.70710678f, 0.70710678f}, + {-0.86602540f, 0.50000000f}, + {-0.96592583f, 0.25881905f}, + {-1.00000000f, 0.00000000f} +}; + +/* Move this to perceptual model ? */ +const int32_t c_aiBandwidths48[MAX_BANDS_48] = { + 1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,4,6,6,7,10, +}; + + +const float c_afScaleFactor[ALLOC_TABLE_SIZE] = { + 0.0f, + 0.353553390593f, + 0.420448207627f, + 0.500000000000f, + 0.594603557501f, + 0.707106781187f, + 0.840896415254f, + 1.000000000000f, + 1.189207115003f, + 1.414213562373f, + 1.681792830507f, + 2.000000000000f, + 2.378414230005f, + 2.828427124746f, + 3.363585661015f, + 4.0f, + 4.756828460011f, + 5.656854249492f, + 6.727171322030f, + 8.0f, + 9.513656920022f, + 11.31370849898f, + 13.45434264406f, + 16.00000000000f, + 19.02731384004f, + 22.62741699797f, + 26.90868528812f, + 32.000000000000000f, + 38.054627680087073f, + 45.254833995939038f, + 53.817370576237735f, + 64.000000000000000f, +}; + +const float c_afInvScaleFactor[ALLOC_TABLE_SIZE] = { + 0.0f, + 2.367513562373095f, + 2.046407115002721f, + 1.775900000000000f, + 1.536446415253715f, + 1.323056781186548f, + 1.132903557501360f, + 0.965800000000000f, + 0.821348207626857f, + 0.695103390593274f, + 0.587801778750680f, + 0.495800000000000f, + 0.418124103813429f, + 0.352176695296637f, + 0.296200889375340f, + 0.249400000000000f, + 0.209812051906714f, + 0.176538347648318f, + 0.148525444687670f, + 0.124900000000000f, + 0.105056025953357f, + 0.088388347648318f, + 0.074325444687670f, + 0.062500000000000f, + 0.052556025953357f, + 0.044194173824159f, + 0.037162722343835f, + 0.031250000000000f, + 0.026278012976679f, + 0.022097086912080f, + 0.018581361171918f, + 0.015625000000000f, +}; + +const float c_afRMSEnvReconstructTable[ENV_RECONSTRUCT_TABLE_SIZE] = { + 2.32830644e-10f, 3.29272254e-10f, 4.65661287e-10f, 6.58544508e-10f, 9.31322575e-10f, 1.31708902e-09f, 1.86264515e-09f, 2.63417803e-09f, + 3.72529030e-09f, 5.26835606e-09f, 7.45058060e-09f, 1.05367121e-08f, 1.49011612e-08f, 2.10734243e-08f, 2.98023224e-08f, 4.21468485e-08f, + 5.96046448e-08f, 8.42936970e-08f, 1.19209290e-07f, 1.68587394e-07f, 2.38418579e-07f, 3.37174788e-07f, 4.76837158e-07f, 6.74349576e-07f, + 9.53674316e-07f, 1.34869915e-06f, 1.90734863e-06f, 2.69739830e-06f, 3.81469727e-06f, 5.39479661e-06f, 7.62939453e-06f, 1.07895932e-05f, + 1.52587891e-05f, 2.15791864e-05f, 3.05175781e-05f, 4.31583729e-05f, 6.10351562e-05f, 8.63167458e-05f, 1.22070312e-04f, 1.72633492e-04f, + 2.44140625e-04f, 3.45266983e-04f, 4.88281250e-04f, 6.90533966e-04f, 9.76562500e-04f, 1.38106793e-03f, 1.95312500e-03f, 2.76213586e-03f, + 3.90625000e-03f, 5.52427173e-03f, 7.81250000e-03f, 1.10485435e-02f, 1.56250000e-02f, 2.20970869e-02f, 3.12500000e-02f, 4.41941738e-02f, + 6.25000000e-02f, 8.83883476e-02f, 1.25000000e-01f, 1.76776695e-01f, 2.50000000e-01f, 3.53553391e-01f, 5.00000000e-01f, 7.07106781e-01f, + 1.00000000e+00f, 1.41421356e+00f, 2.00000000e+00f, 2.82842712e+00f, 4.00000000e+00f, 5.65685425e+00f, 8.00000000e+00f, 1.13137085e+01f, + 1.60000000e+01f, 2.26274170e+01f, 3.20000000e+01f, 4.52548340e+01f, 6.40000000e+01f, 9.05096680e+01f, 1.28000000e+02f, 1.81019336e+02f, + 2.56000000e+02f, 3.62038672e+02f, 5.12000000e+02f, 7.24077344e+02f, 1.02400000e+03f, 1.44815469e+03f, 2.04800000e+03f, 2.89630938e+03f, + 4.09600000e+03f, 5.79261875e+03f, 8.19200000e+03f, 1.15852375e+04f, 1.63840000e+04f, 2.31704750e+04f, 3.27680000e+04f, 4.63409500e+04f, + 6.55360000e+04f, 9.26819000e+04f, 1.31072000e+05f, 1.85363800e+05f, 2.62144000e+05f, 3.70727600e+05f, 5.24288000e+05f, 7.41455200e+05f, + 1.04857600e+06f, 1.48291040e+06f, 2.09715200e+06f, 2.96582080e+06f, 4.19430400e+06f, 5.93164160e+06f, 8.38860800e+06f, 1.18632832e+07f, + 1.67772160e+07f, 2.37265664e+07f, 3.35544320e+07f, 4.74531328e+07f, 6.71088640e+07f, 9.49062656e+07f, 1.34217728e+08f, 1.89812531e+08f, + 2.68435456e+08f, 3.79625062e+08f, 5.36870912e+08f, 7.59250125e+08f, 1.07374182e+09f, 1.51850025e+09f, 2.14748365e+09f, 3.03700050e+09f, + 4.29496730e+09f, +}; + +const int32_t c_aiQuantMaxValues[ALLOC_TABLE_SIZE] = { + 0, 3, 3, 4, 5, 5, 6, 7, + 8, 9, 12, 13, 16, 17, 19, 23, + 26, 26, 27, 28, 31, 36, 38, 45, + 54, 64, 76, 90, 108, 128, 152, 180, +}; + +const int32_t c_aiHuffmanDim[ALLOC_TABLE_SIZE] = { + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, +}; + +const int32_t c_aiHuffmanMod[ALLOC_TABLE_SIZE] = { + 0, 4, 4, 5, 6, 6, 7, 8, + 9, 10, 13, 14, 17, 18, 20, 24, + 27, 27, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, +}; + +const int32_t c_aiHuffmanSize[ALLOC_TABLE_SIZE] = { + 1, 16, 16, 25, 36, 36, 49, 64, + 81, 100, 169, 196, 289, 324, 400, 576, + 729, 729, 28, 29, 32, 37, 39, 46, + 55, 65, 77, 91, 109, 129, 153, 181, +}; +/* clang-format on */ diff --git a/lib_rend/ivas_Tables.h b/lib_rend/ivas_Tables.h new file mode 100644 index 0000000000..676ecd43d0 --- /dev/null +++ b/lib_rend/ivas_Tables.h @@ -0,0 +1,126 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef _IVAS_TABLES_H_ +#define _IVAS_TABLES_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif +#include +#ifndef M_PI + +#define M_PI 3.14159265358979323846264338327950288f + +#endif + +#define CQMF_BLOCKS_PER_FRAME ( 16 ) +#define CQMF_MAX_BLOCKS_PER_FRAME ( 16 ) +#define CQMF_BANDS ( 60 ) + +#define MAX_BANDS ( 23 ) +#define MAX_BANDS_48 ( 23 ) + + extern const int32_t c_aiBandwidths48[MAX_BANDS_48]; // move this + + +#define ENV_MIN ( -64 ) +#define ENV_MAX ( 64 ) + +#define ENV0_BITS ( 7 ) + +#define ENV_DELTA_MIN ( -32 ) +#define ENV_DELTA_MAX ( 31 ) + +#define ENV_RECONSTRUCT_TABLE_SIZE ( 129 ) + +#define ENV_RECONSTRUCT_TABLE_CENTER ( 64 ) + +#define MIN_ALLOC ( 0 ) +#define MAX_ALLOC ( 31 ) + +#define ALLOC_OFFSET_SCALE ( 8 ) + +#define ALLOC_OFFSET_BITS ( 8 ) + +#define MIN_ALLOC_OFFSET ( -128 ) +#define MAX_ALLOC_OFFSET ( 127 ) + + +#define ALLOC_TABLE_SIZE ( 32 ) + +#ifndef _PI_ +#define _PI_ ( 3.14159265358979f ) +#endif +#define PRED_MAX_VAL ( 12 ) +#define PRED_MIN_VAL ( -PRED_MAX_VAL ) +#define PRED_QUANT_FACTOR ( (float) PRED_MAX_VAL ) +#define PRED_BAND0_BITS ( 5 ) + +#define PHASE_MAX_VAL ( 12 ) +#define PHASE_MIN_VAL ( -PHASE_MAX_VAL ) +#define PHASE_QUANT_FACTOR ( (float) PHASE_MAX_VAL / _PI_ ) +#define PHASE_DIFF_DIM ( 2 ) +#define PHASE_BAND0_BITS ( 5 ) + +#define SIMPLE_PHASE_MAX_VAL ( 3 ) +#define SIMPLE_PHASE_MIN_VAL ( 0 ) +#define SIMPLE_PHASE_BITS ( 2 ) +#define SIMPLE_PHASE_QUANT_FACTOR ( 2.0f / _PI_ ) + +#define TON_QUOTA_ABS_THRESHOLD ( 8.0f ) +#define TON_QUOTA_INC_THRESHOLD ( 4.0f ) + + extern const float c_afRotRealImag[PRED_MAX_VAL - PRED_MIN_VAL + 1][2]; + extern const float c_afRotRealImagSimple[SIMPLE_PHASE_MAX_VAL + 1][2]; + extern const int32_t c_aiDefaultTheta48[MAX_BANDS_48]; + + extern const float c_afScaleFactor[ALLOC_TABLE_SIZE]; + + extern const float c_afInvScaleFactor[ALLOC_TABLE_SIZE]; + + extern const float c_afRMSEnvReconstructTable[ENV_RECONSTRUCT_TABLE_SIZE]; + + extern const int32_t c_aiQuantMaxValues[ALLOC_TABLE_SIZE]; + + extern const int32_t c_aiHuffmanDim[ALLOC_TABLE_SIZE]; + + extern const int32_t c_aiHuffmanMod[ALLOC_TABLE_SIZE]; + + extern const int32_t c_aiHuffmanSize[ALLOC_TABLE_SIZE]; + +#ifdef __cplusplus +} +#endif + +#endif /* _TABLES_H_ */ diff --git a/lib_rend/ivas_binauralRenderer.c b/lib_rend/ivas_binauralRenderer.c index ff85e0c73b..ba7b293153 100644 --- a/lib_rend/ivas_binauralRenderer.c +++ b/lib_rend/ivas_binauralRenderer.c @@ -137,7 +137,12 @@ static ivas_error ivas_binRenderer_convModuleOpen( const int16_t renderer_type, const int16_t isLoudspeaker, const AUDIO_CONFIG input_config, - const RENDER_CONFIG_DATA *hRenderConfig ) + const RENDER_CONFIG_DATA *hRenderConfig +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + const int16_t num_poses +#endif +) { int16_t bandIdx, chIdx; BINRENDERER_CONV_MODULE_HANDLE hBinRenConvModule; @@ -145,6 +150,7 @@ static ivas_error ivas_binRenderer_convModuleOpen( int16_t pos_idx; #endif + /*-----------------------------------------------------------------* * prepare library opening *-----------------------------------------------------------------*/ @@ -246,30 +252,17 @@ static ivas_error ivas_binRenderer_convModuleOpen( } } #ifdef SPLIT_REND_WITH_HEAD_ROT - if ( hBinRenderer->splitRendMode == SPLIT_REND_PRE || hBinRenderer->splitRendMode == SPLIT_REND_COMB ) - { -#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG - hBinRenConvModule->numPoses = MAX_HEAD_ROT_POSES + 1; -#else - hBinRenConvModule->numPoses = MAX_HEAD_ROT_POSES; -#endif - } - else - { - hBinRenConvModule->numPoses = 1; - } - - if ( ( hBinRenConvModule->filterStatesLeftReal = (float ****) count_malloc( hBinRenConvModule->numPoses * sizeof( float *** ) ) ) == NULL ) + if ( ( hBinRenConvModule->filterStatesLeftReal = (float ****) count_malloc( num_poses * sizeof( float *** ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); } - if ( ( hBinRenConvModule->filterStatesLeftImag = (float ****) count_malloc( hBinRenConvModule->numPoses * sizeof( float *** ) ) ) == NULL ) + if ( ( hBinRenConvModule->filterStatesLeftImag = (float ****) count_malloc( num_poses * sizeof( float *** ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); } - for ( pos_idx = 0; pos_idx < hBinRenConvModule->numPoses; pos_idx++ ) + for ( pos_idx = 0; pos_idx < num_poses; pos_idx++ ) { if ( ( hBinRenConvModule->filterStatesLeftReal[pos_idx] = (float ***) count_malloc( hBinRenderer->conv_band * sizeof( float ** ) ) ) == NULL ) { @@ -422,7 +415,7 @@ static ivas_error ivas_binRenderer_convModuleOpen( } #ifdef SPLIT_REND_WITH_HEAD_ROT - for ( pos_idx = 0; pos_idx < hBinRenConvModule->numPoses; pos_idx++ ) + for ( pos_idx = 0; pos_idx < num_poses; pos_idx++ ) { for ( bandIdx = 0; bandIdx < hBinRenderer->conv_band; bandIdx++ ) { @@ -581,14 +574,15 @@ static void ivas_binaural_obtain_DMX( ivas_error ivas_rend_openCldfbRend( CLDFB_REND_WRAPPER *pCldfbRend, const IVAS_REND_AudioConfig inConfig, - const IVAS_SPLIT_REND_MODE splitRendMode, + const IVAS_REND_AudioConfig outConfig, RENDER_CONFIG_DATA *hRendCfg, + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, const int32_t output_Fs ) { BINAURAL_RENDERER_HANDLE hBinRenderer; int16_t convBand; ivas_error error; - AUDIO_CONFIG in_config; + AUDIO_CONFIG in_config, out_config; error = IVAS_ERR_OK; @@ -607,8 +601,6 @@ ivas_error ivas_rend_openCldfbRend( } hBinRenderer->rotInCldfb = 1; - hBinRenderer->splitRendMode = splitRendMode; - hBinRenderer->ivas_format = SBA_FORMAT; hBinRenderer->max_band = (int16_t) ( ( BINAURAL_MAXBANDS * output_Fs ) / 48000 ); @@ -616,6 +608,7 @@ ivas_error ivas_rend_openCldfbRend( hBinRenderer->timeSlots = MAX_PARAM_SPATIAL_SUBFRAMES; /* Corresponds to 5 msec sound to motion latency */ in_config = getIvasAudioConfigFromRendAudioConfig( inConfig ); + out_config = getIvasAudioConfigFromRendAudioConfig( outConfig ); if ( convBand > BINAURAL_CONVBANDS ) { @@ -628,8 +621,22 @@ ivas_error ivas_rend_openCldfbRend( hBinRenderer->hInputSetup->is_loudspeaker_setup = 0; getAudioConfigNumChannels( inConfig, &hBinRenderer->hInputSetup->nchan_out_woLFE ); + if ( out_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) + { +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + hBinRenderer->numPoses = pMultiBinPoseData->num_poses + 1; +#else + hBinRenderer->numPoses = pMultiBinPoseData->num_poses; +#endif + } + else + { + hBinRenderer->numPoses = 1; + } + /* Allocate memories and buffers needed for convolutional module */ - if ( ( error = ivas_binRenderer_convModuleOpen( hBinRenderer, RENDERER_BINAURAL_FASTCONV, hBinRenderer->hInputSetup->is_loudspeaker_setup, in_config, hRendCfg ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_binRenderer_convModuleOpen( hBinRenderer, RENDERER_BINAURAL_FASTCONV, hBinRenderer->hInputSetup->is_loudspeaker_setup, in_config, hRendCfg, + hBinRenderer->numPoses ) ) != IVAS_ERR_OK ) { return error; } @@ -678,7 +685,18 @@ ivas_error ivas_binRenderer_open( } #ifdef SPLIT_REND_WITH_HEAD_ROT - hBinRenderer->splitRendMode = st_ivas->hDecoderConfig->Opt_splitRendMode; + if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) + { +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + hBinRenderer->numPoses = st_ivas->splitBinRend.splitrend.multiBinPoseData.num_poses + 1; +#else + hBinRenderer->numPoses = st_ivas->splitBinRend.splitrend.multiBinPoseData.num_poses; +#endif + } + else + { + hBinRenderer->numPoses = 1; + } #endif /* Declare some common variables needed for renderer */ @@ -718,7 +736,12 @@ ivas_error ivas_binRenderer_open( IVAS_OUTPUT_SETUP out_setup; /* Allocate memories and buffers needed for convolutional module in CICP19 */ - if ( ( error = ivas_binRenderer_convModuleOpen( hBinRenderer, st_ivas->renderer_type, 1, AUDIO_CONFIG_7_1_4, st_ivas->hRenderConfig ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_binRenderer_convModuleOpen( hBinRenderer, st_ivas->renderer_type, 1, AUDIO_CONFIG_7_1_4, st_ivas->hRenderConfig +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + hBinRenderer->numPoses +#endif + ) ) != IVAS_ERR_OK ) { return error; } @@ -741,7 +764,12 @@ ivas_error ivas_binRenderer_open( else { /* Allocate memories and buffers needed for convolutional module */ - if ( ( error = ivas_binRenderer_convModuleOpen( hBinRenderer, st_ivas->renderer_type, st_ivas->hIntSetup.is_loudspeaker_setup, st_ivas->hIntSetup.output_config, st_ivas->hRenderConfig ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_binRenderer_convModuleOpen( hBinRenderer, st_ivas->renderer_type, st_ivas->hIntSetup.is_loudspeaker_setup, st_ivas->hIntSetup.output_config, st_ivas->hRenderConfig +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + hBinRenderer->numPoses +#endif + ) ) != IVAS_ERR_OK ) { return error; } @@ -816,6 +844,10 @@ ivas_error ivas_binRenderer_open( static void ivas_binRenderer_convModuleClose( BINAURAL_RENDERER_HANDLE *hBinRenderer /* i/o: fastconv binaural renderer handle */ +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + int16_t num_poses +#endif ) { int16_t bandIdx, chIdx; @@ -859,7 +891,7 @@ static void ivas_binRenderer_convModuleClose( hBinRenConvModule->filterTapsRightImag = NULL; #ifdef SPLIT_REND_WITH_HEAD_ROT - for ( posIdx = 0; posIdx < hBinRenConvModule->numPoses; posIdx++ ) + for ( posIdx = 0; posIdx < num_poses; posIdx++ ) { for ( bandIdx = 0; bandIdx < ( *hBinRenderer )->conv_band; bandIdx++ ) { @@ -957,7 +989,12 @@ void ivas_binRenderer_close( if ( ( *hBinRenderer )->hBinRenConvModule != NULL ) { - ivas_binRenderer_convModuleClose( hBinRenderer ); + ivas_binRenderer_convModuleClose( hBinRenderer +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + ( *hBinRenderer )->numPoses +#endif + ); } if ( ( *hBinRenderer )->hReverb != NULL ) @@ -1069,6 +1106,9 @@ void ivas_binaural_cldfb( /* Implement binaural rendering */ ivas_binRenderer( st_ivas->hBinRenderer, st_ivas->hHeadTrackData, +#ifdef SPLIT_REND_WITH_HEAD_ROT + &st_ivas->splitBinRend.splitrend.multiBinPoseData, +#endif #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG NULL, #endif @@ -1111,6 +1151,9 @@ void ivas_binaural_cldfb( void ivas_binRenderer( BINAURAL_RENDERER_HANDLE hBinRenderer, /* i/o: binaural renderer handle */ HEAD_TRACK_DATA_HANDLE hHeadTrackData, /* i/o: head track handle */ +#ifdef SPLIT_REND_WITH_HEAD_ROT + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, +#endif #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG HEAD_TRACK_DATA_HANDLE hPostRendHeadTrackData, #endif @@ -1133,18 +1176,7 @@ void ivas_binRenderer( wmops_sub_start( "fastconv_binaural_rendering" ); #ifdef SPLIT_REND_WITH_HEAD_ROT - if ( hBinRenderer->splitRendMode == SPLIT_REND_PRE || hBinRenderer->splitRendMode == SPLIT_REND_COMB ) - { -#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG - num_poses = MAX_HEAD_ROT_POSES + 1; -#else - num_poses = MAX_HEAD_ROT_POSES; -#endif - } - else - { - num_poses = 1; - } + num_poses = hBinRenderer->numPoses; #endif /* Compute Convolution */ @@ -1215,50 +1247,36 @@ void ivas_binRenderer( #ifdef SPLIT_REND_WITH_HEAD_ROT /*TODO : move this to a separate function*/ - if ( hBinRenderer->splitRendMode == SPLIT_REND_PRE || hBinRenderer->splitRendMode == SPLIT_REND_COMB ) + if ( pMultiBinPoseData->num_poses > 1 ) { - int16_t yaw_idx, pitch_idx, roll_idx; IVAS_QUATERNION Quaternions_rel, Quaternions_abs, *Quaternions_ref; float Rmat_local[3][3]; + if ( hHeadTrackData && hHeadTrackData->num_quaternions >= 0 && hBinRenderer->rotInCldfb ) { Quaternions_ref = &hHeadTrackData->Quaternions[hHeadTrackData->num_quaternions - 1]; - Quaternions_rel.w = -3.0f; /*euler*/ - Quaternions_abs.w = -3.0f; /*euler*/ - Quat2Euler( *Quaternions_ref, &Quaternions_abs.z, &Quaternions_abs.y, &Quaternions_abs.x ); /*order in Quat2Euler seems to be reversed ?*/ - // Quaternions_abs.x = Quaternions_ref->x; - // Quaternions_abs.y = Quaternions_ref->y; - // Quaternions_abs.z = Quaternions_ref->z; - for ( yaw_idx = 0; yaw_idx < MAX_YAW_ANGLES; yaw_idx++ ) + Quaternions_rel.w = -3.0f; /*euler*/ + Quaternions_abs.w = -3.0f; /*euler*/ + Quat2EulerDegree( *Quaternions_ref, &Quaternions_abs.z, &Quaternions_abs.y, &Quaternions_abs.x ); /*order in Quat2Euler seems to be reversed ?*/ + + for ( pos_idx = 1; pos_idx < pMultiBinPoseData->num_poses; pos_idx++ ) { - for ( pitch_idx = 0; pitch_idx < MAX_PITCH_ANGLES; pitch_idx++ ) - { - for ( roll_idx = 0; roll_idx < MAX_ROLL_ANGLES; roll_idx++ ) - { - pos_idx = yaw_idx * MAX_PITCH_ANGLES * MAX_ROLL_ANGLES + pitch_idx * MAX_ROLL_ANGLES + roll_idx; - if ( pos_idx == 0 ) - { - continue; - } - - Quaternions_rel.x = split_rend_relative_yaw_angles[yaw_idx]; - Quaternions_rel.y = split_rend_relative_pitch_angles[pitch_idx]; - Quaternions_rel.z = split_rend_relative_roll_angles[roll_idx]; - Quaternions_abs.x = Quaternions_abs.x + Quaternions_rel.x; - Quaternions_abs.y = Quaternions_abs.y + Quaternions_rel.y; - Quaternions_abs.z = Quaternions_abs.z + Quaternions_rel.z; - - - QuatToRotMat( Quaternions_rel, Rmat_local ); - rotateFrame_shd_cldfb( RealBuffer, ImagBuffer, Rmat_local, hBinRenderer->hInputSetup->nchan_out_woLFE, 3 ); - ivas_binRenderer_filterModule( Cldfb_RealBuffer_Binaural[pos_idx], Cldfb_ImagBuffer_Binaural[pos_idx], RealBuffer, ImagBuffer, hBinRenderer + Quaternions_rel.x = pMultiBinPoseData->relative_head_poses[pos_idx][0] - pMultiBinPoseData->relative_head_poses[pos_idx - 1][0]; + Quaternions_rel.y = pMultiBinPoseData->relative_head_poses[pos_idx][1] - pMultiBinPoseData->relative_head_poses[pos_idx - 1][1]; + Quaternions_rel.z = pMultiBinPoseData->relative_head_poses[pos_idx][2] - pMultiBinPoseData->relative_head_poses[pos_idx - 1][2]; + Quaternions_abs.x = Quaternions_abs.x + Quaternions_rel.x; + Quaternions_abs.y = Quaternions_abs.y + Quaternions_rel.y; + Quaternions_abs.z = Quaternions_abs.z + Quaternions_rel.z; + + + QuatToRotMat( Quaternions_rel, Rmat_local ); + rotateFrame_shd_cldfb( RealBuffer, ImagBuffer, Rmat_local, hBinRenderer->hInputSetup->nchan_out_woLFE, 3 ); + ivas_binRenderer_filterModule( Cldfb_RealBuffer_Binaural[pos_idx], Cldfb_ImagBuffer_Binaural[pos_idx], RealBuffer, ImagBuffer, hBinRenderer #ifdef SPLIT_REND_WITH_HEAD_ROT - , - pos_idx + , + pos_idx #endif - ); - } - } + ); } #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG @@ -1267,8 +1285,8 @@ void ivas_binRenderer( IVAS_QUATERNION *Quaternions_new1; IVAS_QUATERNION Quaternions_new; Quaternions_new1 = &hPostRendHeadTrackData->Quaternions[hPostRendHeadTrackData->num_quaternions++]; - Quaternions_new.w = -3.0f; /*euler*/ - Quat2Euler( *Quaternions_new1, &Quaternions_new.z, &Quaternions_new.y, &Quaternions_new.x ); /*order in Quat2Euler seems to be reversed ?*/ + Quaternions_new.w = -3.0f; /*euler*/ + Quat2EulerDegree( *Quaternions_new1, &Quaternions_new.z, &Quaternions_new.y, &Quaternions_new.x ); /*order in Quat2Euler seems to be reversed ?*/ Quaternions_rel.x = Quaternions_new.x - Quaternions_abs.x; Quaternions_rel.y = Quaternions_new.y - Quaternions_abs.y; Quaternions_rel.z = Quaternions_new.z - Quaternions_abs.z; @@ -1278,10 +1296,10 @@ void ivas_binRenderer( QuatToRotMat( Quaternions_rel, Rmat_local ); rotateFrame_shd_cldfb( RealBuffer, ImagBuffer, Rmat_local, hBinRenderer->hInputSetup->nchan_out_woLFE, 3 ); - ivas_binRenderer_filterModule( Cldfb_RealBuffer_Binaural[MAX_HEAD_ROT_POSES], Cldfb_ImagBuffer_Binaural[MAX_HEAD_ROT_POSES], RealBuffer, ImagBuffer, hBinRenderer + ivas_binRenderer_filterModule( Cldfb_RealBuffer_Binaural[num_poses], Cldfb_ImagBuffer_Binaural[num_poses], RealBuffer, ImagBuffer, hBinRenderer #ifdef SPLIT_REND_WITH_HEAD_ROT , - MAX_HEAD_ROT_POSES + num_poses #endif ); } @@ -1342,10 +1360,12 @@ void ivas_binRenderer( void ivas_rend_CldfbMultiBinRendProcess( const BINAURAL_RENDERER_HANDLE hCldfbRend, const IVAS_REND_HeadRotData *pHeadRotData, + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, float Cldfb_In_Real[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float Cldfb_In_Imag[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float Cldfb_Out_Real[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* o : Binaural signals */ - float Cldfb_Out_Imag[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX] ) + float Cldfb_Out_Imag[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + const int16_t low_res_pre_rend_rot ) { int16_t sf_idx, slot_idx, ch_idx, idx, pose_idx; HEAD_TRACK_DATA head_track; @@ -1374,7 +1394,14 @@ void ivas_rend_CldfbMultiBinRendProcess( } head_track.num_quaternions = 0; head_track.shd_rot_max_order = -1; - head_track.Quaternions[0] = ivas_split_rend_get_sf_rot_data( pHeadRotData->headPositions, sf_idx ); + if ( low_res_pre_rend_rot ) + { + head_track.Quaternions[0] = ivas_split_rend_get_sf_rot_data( pHeadRotData->headPositions, 0 ); + } + else + { + head_track.Quaternions[0] = ivas_split_rend_get_sf_rot_data( pHeadRotData->headPositions, sf_idx ); + } #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG head_track_post.num_quaternions = 0; head_track_post.shd_rot_max_order = -1; @@ -1382,16 +1409,15 @@ void ivas_rend_CldfbMultiBinRendProcess( #endif ivas_binRenderer( hCldfbRend, &head_track, + pMultiBinPoseData, #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG &head_track_post, #endif Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer_sfIn, Cldfb_ImagBuffer_sfIn ); -#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG - for ( pose_idx = 0; pose_idx < MAX_HEAD_ROT_POSES + 1; pose_idx++ ) -#else - for ( pose_idx = 0; pose_idx < MAX_HEAD_ROT_POSES; pose_idx++ ) -#endif + + for ( pose_idx = 0; pose_idx < hCldfbRend->numPoses; pose_idx++ ) + for ( slot_idx = 0; slot_idx < MAX_PARAM_SPATIAL_SUBFRAMES; slot_idx++ ) { idx = sf_idx * MAX_PARAM_SPATIAL_SUBFRAMES + slot_idx; diff --git a/lib_rend/ivas_cldfb_codec_bitstream.c b/lib_rend/ivas_cldfb_codec_bitstream.c new file mode 100644 index 0000000000..fae5403b9b --- /dev/null +++ b/lib_rend/ivas_cldfb_codec_bitstream.c @@ -0,0 +1,307 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "ivas_cldfb_codec_bitstream.h" + +#include +#include +#include "options.h" +#include "prot.h" +#include "wmops.h" + +#define MAX_BUFFER 1024 + +static const uint32_t MASKS[] = { + 0x00000000, + 0x00000001, + 0x00000003, + 0x00000007, + 0x0000000f, + 0x0000001f, + 0x0000003f, + 0x0000007f, + 0x000000ff, + 0x000001ff, + 0x000003ff, + 0x000007ff, + 0x00000fff, + 0x00001fff, + 0x00003fff, + 0x00007fff, + 0x0000ffff, + 0x0001ffff, + 0x0003ffff, + 0x0007ffff, + 0x000fffff, + 0x001fffff, + 0x003fffff, + 0x007fffff, + 0x00ffffff, + 0x01ffffff, + 0x03ffffff, + 0x07ffffff, + 0x0fffffff, + 0x1fffffff, + 0x3fffffff, + 0x7fffffff, +}; + +Bitstream *CreateBitstream( const int32_t iDirection, + const int32_t iMaxBuffer ) + +{ + + int32_t n; + Bitstream *psBitstream; + + psBitstream = (Bitstream *) count_malloc( sizeof( Bitstream ) ); + + psBitstream->iDirection = iDirection; + psBitstream->iMaxBuffer = iMaxBuffer; + psBitstream->iIndex = 0; + psBitstream->iBufferEnd = 0; + psBitstream->iBufferStart = 0; + psBitstream->iError = BS_ERROR_NONE; + + if ( psBitstream->iMaxBuffer == -1 ) + { + psBitstream->iMaxBuffer = 4096; + } + + psBitstream->puchBuffer = (uint8_t *) count_malloc( sizeof( uint8_t ) * psBitstream->iMaxBuffer ); + + for ( n = 0; n < psBitstream->iMaxBuffer; n++ ) + { + psBitstream->puchBuffer[n] = 0; + } + + return psBitstream; +} + +void DeleteBitstream( Bitstream *psBitstream ) +{ + count_free( psBitstream->puchBuffer ); + count_free( psBitstream ); +} + +void BSFlushBuffer( Bitstream *psBitstream ) +{ + memset( psBitstream->puchBuffer, 0, psBitstream->iMaxBuffer ); + psBitstream->iIndex = 0; + psBitstream->iBufferEnd = 0; + psBitstream->iBufferStart = 0; + psBitstream->iError = BS_ERROR_NONE; +} + +int32_t BSPutBytes( Bitstream *psBitstream, + const uint8_t *puchBytes, + const int32_t iByteCount ) +{ + int32_t n; + for ( n = 0; n < iByteCount; n++ ) + { + psBitstream->puchBuffer[psBitstream->iBufferEnd] = puchBytes[n]; + psBitstream->iBufferEnd++; + } + if ( psBitstream->iDirection != BS_READ ) + { + psBitstream->iError = BS_ERROR_FAIL; + } + + return psBitstream->iError; +} + +int32_t BSGetBytes( Bitstream *psBitstream, + uint8_t *puchBytes, + int32_t iByteCount ) +{ + int32_t n; + for ( n = 0; n < iByteCount; n++ ) + { + puchBytes[n] = psBitstream->puchBuffer[psBitstream->iBufferStart]; + psBitstream->puchBuffer[psBitstream->iBufferStart] = 0; + psBitstream->iBufferStart++; + } + if ( psBitstream->iDirection != BS_WRITE ) + { + psBitstream->iError = BS_ERROR_FAIL; + } + + return psBitstream->iError; +} + +int32_t BSByteAlign( Bitstream *psBitstream ) +{ + if ( psBitstream->iDirection == BS_WRITE ) + { + if ( psBitstream->iIndex & 0x7 ) + { + int32_t iByte; + int32_t iRem; + + iByte = psBitstream->iIndex >> 3; + iRem = 8 - ( psBitstream->iIndex - ( iByte << 3 ) ); + psBitstream->puchBuffer[iByte] &= ( 0xff ^ MASKS[iRem] ); + psBitstream->iIndex += iRem; + } + } + else + { + if ( psBitstream->iIndex & 0x7 ) + { + int32_t iByte; + int32_t iRem; + + iByte = psBitstream->iIndex >> 3; + iRem = 8 - ( psBitstream->iIndex - ( iByte << 3 ) ); + psBitstream->iIndex += iRem; + } + } + + return psBitstream->iError; +} + +int32_t BSPutBits( Bitstream *psBitstream, + int32_t iValue, + int32_t iBitCount ) +{ + iValue &= MASKS[iBitCount]; + while ( iBitCount ) + { + int32_t iByte; + int32_t iRem; + int32_t iShift; + + iByte = psBitstream->iIndex >> 3; + iRem = 8 - ( psBitstream->iIndex - ( iByte << 3 ) ); // 8 - psBitstream->iIndex & 0x7; + + iShift = iBitCount - iRem; + if ( iShift <= 0 ) + { + iShift *= -1; + psBitstream->puchBuffer[iByte] += (uint8_t) ( iValue << iShift ); + psBitstream->iIndex += iBitCount; + iBitCount = 0; + } + else + { + psBitstream->puchBuffer[iByte] += (uint8_t) ( iValue >> iShift ); + iValue &= MASKS[iShift]; + psBitstream->iIndex += iRem; + iBitCount -= iRem; + } + } + + if ( psBitstream->iDirection != BS_WRITE ) + { + psBitstream->iError = BS_ERROR_FAIL; + } + + return psBitstream->iError; +} + +int32_t BSGetBits( Bitstream *psBitstream, + int32_t iBitCount ) +{ + int32_t iValue = 0; + + while ( iBitCount ) + { + uint8_t uchByte; + int32_t iByte; + int32_t iRem; + int32_t iShift; + + iByte = psBitstream->iIndex >> 3; + iRem = 8 - ( psBitstream->iIndex - ( iByte << 3 ) ); // 8 - psBitstream->iIndex & 0x7; + uchByte = psBitstream->puchBuffer[iByte]; + iShift = iBitCount - iRem; + + if ( iShift <= 0 ) + { + iShift *= -1; + iValue += (int32_t) ( ( uchByte >> iShift ) & MASKS[iBitCount] ); + psBitstream->iIndex += iBitCount; + iBitCount = 0; + } + else + { + uchByte &= MASKS[iRem]; + iValue += ( ( (int32_t) uchByte ) << iShift ); + psBitstream->iIndex += iRem; + iBitCount -= iRem; + } + } + + if ( psBitstream->iDirection != BS_READ ) + { + psBitstream->iError = BS_ERROR_FAIL; + } + + return iValue; +} + +int32_t BSForceBack( + ivas_split_rend_bits_t *pBits, + int32_t iValue, + int32_t iBitCount ) +{ + pBits->bits_read -= iBitCount; + return ( iValue >> iBitCount ); +} + +int32_t BSGetByteCount( Bitstream *psBitstream ) +{ + int32_t iBytes; + iBytes = psBitstream->iIndex >> 3; + if ( ( iBytes << 3 ) != psBitstream->iIndex ) + { + iBytes++; + } + + return iBytes; +} + +uint8_t *BSGetBuffer( Bitstream *psBitstream ) +{ + return psBitstream->puchBuffer; +} + +int32_t BSGetAvailableBytes( Bitstream *psBitstream ) +{ + return psBitstream->iBufferEnd; +} + +int32_t BSGetError( Bitstream *psBitstream ) +{ + return psBitstream->iError; +} diff --git a/lib_rend/ivas_cldfb_codec_bitstream.h b/lib_rend/ivas_cldfb_codec_bitstream.h new file mode 100644 index 0000000000..44e351cec5 --- /dev/null +++ b/lib_rend/ivas_cldfb_codec_bitstream.h @@ -0,0 +1,101 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby +International AB, Ericsson AB, Fraunhofer-Gesellschaft zur Foerderung der +angewandten Forschung e.V., Huawei Technologies Co. LTD., Koninklijke Philips +N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge +Corporation, and other contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, +Ericsson AB, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung +e.V., Huawei Technologies Co. LTD., Koninklijke Philips N.V., Nippon Telegraph +and Telephone Corporation, Nokia Technologies Oy, Orange, Panasonic Holdings +Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their +respective contributions in the software. This notice grants no license of any +kind, including but not limited to patent license, nor is any license granted by +implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration +agreement before making contributions. + + This software is provided "AS IS", without any express or implied warranties. +The software is in the development stage. It is intended exclusively for experts +who have experience with such software and solely for the purpose of inspection. +All implied warranties of non-infringement, merchantability and fitness for a +particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing +this software shall be submitted to and settled by the final, binding +jurisdiction of the courts of Munich, Germany in accordance with the laws of the +Federal Republic of Germany excluding its conflict of law rules and the United +Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef _IVAS_CLDFB_CODEC_BITSTREAM_H_ +#define _IVAS_CLDFB_CODEC_BITSTREAM_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif +#include "lib_rend.h" +#include "ivas_lib_rend_internal.h" + enum + { + BS_READ, + BS_WRITE + }; + enum + { + BS_ERROR_NONE, + BS_ERROR_FAIL + }; + + typedef struct BITSTREAM + { + int32_t iMaxBuffer; + int32_t iDirection; + int32_t iBufferEnd; + int32_t iBufferStart; + int32_t iIndex; + int32_t iError; + uint8_t *puchBuffer; + } Bitstream; + + Bitstream *CreateBitstream( const int32_t iDirection, const int32_t iMaxBuffer ); + + void DeleteBitstream( Bitstream *psBitstream ); + + void BSFlushBuffer( Bitstream *psBitstream ); + + int32_t BSPutBytes( Bitstream *psBitstream, const uint8_t *puchBytes, const int32_t iByteCount ); + + int32_t BSGetBytes( Bitstream *psBitstream, uint8_t *puchBytes, int32_t iByteCount ); + + int32_t BSByteAlign( Bitstream *psBitstream ); + + int32_t BSPutBits( Bitstream *psBitstream, int32_t iValue, int32_t iBitCount ); + + int32_t BSGetBits( Bitstream *psBitstream, int32_t iBitCount ); + + int32_t BSForceBack( + ivas_split_rend_bits_t *pBits, + int32_t iValue, + int32_t iBitCount ); + + uint8_t *BSGetBuffer( Bitstream *psBitstream ); + + int32_t BSGetByteCount( Bitstream *psBitstream ); + + int32_t BSGetAvailableBytes( Bitstream *psBitstream ); + int32_t BSGetError( Bitstream *psBitstream ); + +#ifdef __cplusplus +} +#endif + +#endif /* _BITSTREAM_H_ */ diff --git a/lib_rend/ivas_cldfb_trans_codec/CQMFDecoder.c b/lib_rend/ivas_cldfb_trans_codec/CQMFDecoder.c deleted file mode 100644 index 370aa0dbd1..0000000000 --- a/lib_rend/ivas_cldfb_trans_codec/CQMFDecoder.c +++ /dev/null @@ -1,912 +0,0 @@ -#include "CQMFDecoder.h" - -#include -#include -#include -#include -#include "Tables.h" -#include "wmops.h" -#include "PerceptualModel.h" -#include "RMSEnvDeltaHuff.h" -#include "CQMFHuff.h" -#include "NoiseGen.h" -#include "cldfb_codec_bitstream.h" - -typedef struct CQMF_DECODER{ - int iSampleRate; - int iChannels; - int iNumBlocks; - - int iNumBands; - const int *piBandwidths; - - int iMSMode; - int *piMSFlags; - - int iCommonGrouping; - int *piNumGroups; - int **ppiGroupLengths; - - int ***pppiRMSEnvelope; - int ***pppiSMR; - int ***pppiExcitation; - int ***pppiAlloc; - - int iAllocOffset; - - int ***pppiCQMFSignReal; - int ***pppiCQMFSignImag; - int ***pppiQCQMFReal; - int ***pppiQCQMFImag; - - Bitstream *psBSRead; - - NoiseGen *psNoiseGen; - - int iLastError; -}CQMFDecoder; - -CQMFDecoder* CreateCQMFDecoder(const int iSampleRate, - const int iChannels) -{ - int n; - CQMFDecoder *psCQMFDecoder = NULL; - - assert(iSampleRate == 48000); //Fix - - psCQMFDecoder = (CQMFDecoder*)malloc(sizeof(CQMFDecoder)); - psCQMFDecoder->iSampleRate = iSampleRate; - psCQMFDecoder->iChannels = iChannels; - psCQMFDecoder->iNumBlocks = CQMF_BLOCKS_PER_FRAME; - psCQMFDecoder->iAllocOffset = 0; - - psCQMFDecoder->iNumBands = MAX_BANDS_48; //Fix - psCQMFDecoder->piBandwidths = c_aiBandwidths48; //Fix - - psCQMFDecoder->iMSMode = 0; - psCQMFDecoder->piMSFlags = (int*)malloc(MAX_BANDS * sizeof(int)); - - psCQMFDecoder->iCommonGrouping = 1; // Common grouping always on only impacts stereo - psCQMFDecoder->piNumGroups = (int*)malloc(psCQMFDecoder->iChannels * sizeof(int)); - psCQMFDecoder->ppiGroupLengths = (int**)malloc(psCQMFDecoder->iChannels * sizeof(int*)); - psCQMFDecoder->pppiRMSEnvelope = (int***)malloc(psCQMFDecoder->iChannels * sizeof(int**)); - psCQMFDecoder->pppiSMR = (int***)malloc(psCQMFDecoder->iChannels * sizeof(int**)); - psCQMFDecoder->pppiExcitation = (int***)malloc(psCQMFDecoder->iChannels * sizeof(int**)); - psCQMFDecoder->pppiAlloc = (int***)malloc(psCQMFDecoder->iChannels * sizeof(int**)); - - psCQMFDecoder->pppiCQMFSignReal = (int***)malloc(psCQMFDecoder->iChannels * sizeof(int**)); - psCQMFDecoder->pppiCQMFSignImag = (int***)malloc(psCQMFDecoder->iChannels * sizeof(int**)); - psCQMFDecoder->pppiQCQMFReal = (int***)malloc(psCQMFDecoder->iChannels * sizeof(int**)); - psCQMFDecoder->pppiQCQMFImag = (int***)malloc(psCQMFDecoder->iChannels * sizeof(int**)); - for(n = 0; n < iChannels ; n ++){ - int k; - psCQMFDecoder->ppiGroupLengths[n] = (int*)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int)); - psCQMFDecoder->pppiRMSEnvelope[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); - psCQMFDecoder->pppiSMR[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); - psCQMFDecoder->pppiExcitation[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); - psCQMFDecoder->pppiAlloc[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); - - psCQMFDecoder->pppiCQMFSignReal[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); - psCQMFDecoder->pppiCQMFSignImag[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); - psCQMFDecoder->pppiQCQMFReal[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); - psCQMFDecoder->pppiQCQMFImag[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); - for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - psCQMFDecoder->pppiRMSEnvelope[n][k] = (int*)malloc(MAX_BANDS * sizeof(int)); - psCQMFDecoder->pppiSMR[n][k] = (int*)malloc(MAX_BANDS * sizeof(int)); - psCQMFDecoder->pppiExcitation[n][k] = (int*)malloc(MAX_BANDS * sizeof(int)); - psCQMFDecoder->pppiAlloc[n][k] = (int*)malloc(MAX_BANDS * sizeof(int)); - - psCQMFDecoder->pppiCQMFSignReal[n][k] = (int*)malloc(CQMF_BANDS * sizeof(int)); - psCQMFDecoder->pppiCQMFSignImag[n][k] = (int*)malloc(CQMF_BANDS * sizeof(int)); - psCQMFDecoder->pppiQCQMFReal[n][k] = (int*)malloc(CQMF_BANDS * sizeof(int)); - psCQMFDecoder->pppiQCQMFImag[n][k] = (int*)malloc(CQMF_BANDS * sizeof(int)); - } - } - - psCQMFDecoder->psBSRead = CreateBitstream(BS_READ,4096); - - psCQMFDecoder->psNoiseGen = NULL;//CreateNoiseGen(); // No noise fill for now - - psCQMFDecoder->iLastError = DECODER_ERROR_NONE; - - return psCQMFDecoder; -} - -void DeleteCQMFDecoder(CQMFDecoder *psCQMFDecoder) -{ - if(psCQMFDecoder != NULL){ - - if(psCQMFDecoder->piMSFlags != NULL){ - free(psCQMFDecoder->piMSFlags); - } - - if(psCQMFDecoder->piNumGroups != NULL){ - free(psCQMFDecoder->piNumGroups); - } - - if(psCQMFDecoder->ppiGroupLengths != NULL){ - int n; - for(n = 0; n < psCQMFDecoder->iChannels; n ++){ - free(psCQMFDecoder->ppiGroupLengths[n]); - } - free(psCQMFDecoder->ppiGroupLengths); - } - - if(psCQMFDecoder->pppiRMSEnvelope != NULL){ - int n; - for(n = 0; n < psCQMFDecoder->iChannels; n ++){ - int k; - for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFDecoder->pppiRMSEnvelope[n][k]); - } - free(psCQMFDecoder->pppiRMSEnvelope[n]); - } - free(psCQMFDecoder->pppiRMSEnvelope); - } - - if(psCQMFDecoder->pppiSMR != NULL){ - int n; - for(n = 0; n < psCQMFDecoder->iChannels; n ++){ - int k; - for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFDecoder->pppiSMR[n][k]); - } - free(psCQMFDecoder->pppiSMR[n]); - } - free(psCQMFDecoder->pppiSMR); - } - - if(psCQMFDecoder->pppiExcitation != NULL){ - int n; - for(n = 0; n < psCQMFDecoder->iChannels; n ++){ - int k; - for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFDecoder->pppiExcitation[n][k]); - } - free(psCQMFDecoder->pppiExcitation[n]); - } - free(psCQMFDecoder->pppiExcitation); - } - - if(psCQMFDecoder->pppiAlloc != NULL){ - int n; - for(n = 0; n < psCQMFDecoder->iChannels; n ++){ - int k; - for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFDecoder->pppiAlloc[n][k]); - } - free(psCQMFDecoder->pppiAlloc[n]); - } - free(psCQMFDecoder->pppiAlloc); - } - - if(psCQMFDecoder->pppiCQMFSignReal != NULL){ - int n; - for(n = 0; n < psCQMFDecoder->iChannels; n ++){ - int k; - for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFDecoder->pppiCQMFSignReal[n][k]); - } - free(psCQMFDecoder->pppiCQMFSignReal[n]); - } - free(psCQMFDecoder->pppiCQMFSignReal); - } - - if(psCQMFDecoder->pppiCQMFSignImag != NULL){ - int n; - for(n = 0; n < psCQMFDecoder->iChannels; n ++){ - int k; - for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFDecoder->pppiCQMFSignImag[n][k]); - } - free(psCQMFDecoder->pppiCQMFSignImag[n]); - } - free(psCQMFDecoder->pppiCQMFSignImag); - } - - if(psCQMFDecoder->pppiQCQMFReal != NULL){ - int n; - for(n = 0; n < psCQMFDecoder->iChannels; n ++){ - int k; - for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFDecoder->pppiQCQMFReal[n][k]); - } - free(psCQMFDecoder->pppiQCQMFReal[n]); - } - free(psCQMFDecoder->pppiQCQMFReal); - } - - if(psCQMFDecoder->pppiQCQMFImag != NULL){ - int n; - for(n = 0; n < psCQMFDecoder->iChannels; n ++){ - int k; - for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFDecoder->pppiQCQMFImag[n][k]); - } - free(psCQMFDecoder->pppiQCQMFImag[n]); - } - free(psCQMFDecoder->pppiQCQMFImag); - } - - if(psCQMFDecoder->psBSRead != NULL){ - DeleteBitstream(psCQMFDecoder->psBSRead); - } - - if(psCQMFDecoder->psNoiseGen != NULL){ - DeleteNoiseGen(psCQMFDecoder->psNoiseGen); - } - - free(psCQMFDecoder); - } -} - -int CQMFDecoderGetError(CQMFDecoder *psCQMFDecoder) -{ - return psCQMFDecoder->iLastError; -} - -static void ApplyRMSEnvelope(const int iNumBands, - const int *piBandwidths, - const int iNumGroups, - const int *piGroupLengths, - const int **ppiRMSEnvelope, - float **ppfReal, - float **ppfImag); - -static void ReplaceSign(const int iNumBlocks, - const int iNumCQMFBands, - const int **ppiSignReal, - const int **ppiSignImag, - float **ppfReal, - float **ppfImag); - -static void InvQuantizeSpectrum(const int iNumGroups, - const int *piGroupLengths, - const int iNumBands, - const int *piBandwidths, - const int **ppiAlloc, - const int **ppiQReal, - const int **ppiQImag, - float **ppfReal, - float **ppfImag, - NoiseGen *psNoiseGen); //Nullable - -static void InvMSCoding(const int iNumBlocks, - const int iNumBands, - const int *piBandwidths, - const int iMSMode, - const int *piMSFlags, - float ***pppfReal, - float ***pppfImag); - -/* Currently only the number of bands in frame */ -static int ReadHeaderInformation(int *piNumBands, - Bitstream *psBSRead); - -static int ReadMSInformation(const int iNumBands, - int *piMSMode, - int *piMSFlags, - Bitstream *psBSRead); - -static int ReadGroupInformation(const int iChannels, - int *piCommonGrouping, - int *piNumGroups, - int **ppiGroupLengths, - Bitstream *psBSRead); - -static int ReadHuff(const unsigned int (*pauiHuffDecTable)[HUFF_DEC_TABLE_SIZE], - int *piSymbol, - Bitstream *psBSRead); - -static int ReadRMSEnvelope(const int iChannels, - const int *piNumGroups, - const int iNumBands, - int ***pppiRMSEnvelope, - Bitstream *psBSRead); - -static int ReadAllocInformation(int *piAllocOffset, - Bitstream *psBSRead); - -static int ReadCQMFData( const int iNumGroups, - const int *piGroupLengths, - const int iNumBands, - const int *piBandwidths, - const int **ppiAlloc, - int **ppiSignReal, - int **ppiSignImag, - int **ppiQReal, - int **ppiQImag, - Bitstream *psBSRead); - -static void ComputeAllocation(const int iChannels, - const int *piNumGroups, - const int iNumBands, - const int ***pppiSMR, - const int iAllocOffset, - int ***pppiAlloc); - -int DecodeFrame(CQMFDecoder *psCQMFDecoder, - const int iNumBytes, - const unsigned char *puchData, - float ***pppfCQMFReal, - float ***pppfCQMFImag) -{ - int n; - int iBitsRead; - - iBitsRead = 0; - - BSFlushBuffer(psCQMFDecoder->psBSRead); - BSPutBytes(psCQMFDecoder->psBSRead,puchData,iNumBytes); - - iBitsRead += ReadHeaderInformation(&psCQMFDecoder->iNumBands, - psCQMFDecoder->psBSRead); - - if(psCQMFDecoder->iChannels == 2){ - iBitsRead += ReadMSInformation(psCQMFDecoder->iNumBands, - &psCQMFDecoder->iMSMode, - psCQMFDecoder->piMSFlags, - psCQMFDecoder->psBSRead); - } - - iBitsRead += ReadGroupInformation(psCQMFDecoder->iChannels, - &psCQMFDecoder->iCommonGrouping, - psCQMFDecoder->piNumGroups, - psCQMFDecoder->ppiGroupLengths, - psCQMFDecoder->psBSRead); - - iBitsRead += ReadRMSEnvelope(psCQMFDecoder->iChannels, - (const int*)psCQMFDecoder->piNumGroups, - psCQMFDecoder->iNumBands, - psCQMFDecoder->pppiRMSEnvelope, - psCQMFDecoder->psBSRead); - - iBitsRead += ReadAllocInformation(&psCQMFDecoder->iAllocOffset, - psCQMFDecoder->psBSRead); - - for(n = 0; n < psCQMFDecoder->iChannels; n ++){ // This will be updated to support multiple sample rates - int k; - for(k = 0; k < psCQMFDecoder->piNumGroups[n]; k ++){ - PerceptualModel(psCQMFDecoder->iNumBands, - psCQMFDecoder->pppiRMSEnvelope[n][k], - psCQMFDecoder->pppiExcitation[n][k], - psCQMFDecoder->pppiSMR[n][k]); - - } - } - - ComputeAllocation(psCQMFDecoder->iChannels, - (const int*)psCQMFDecoder->piNumGroups, - psCQMFDecoder->iNumBands, - (const int***)psCQMFDecoder->pppiSMR, - psCQMFDecoder->iAllocOffset, - psCQMFDecoder->pppiAlloc); - - for(n = 0; n < psCQMFDecoder->iChannels; n ++){ - iBitsRead += ReadCQMFData(psCQMFDecoder->piNumGroups[n], - (const int*)psCQMFDecoder->ppiGroupLengths[n], - psCQMFDecoder->iNumBands, - psCQMFDecoder->piBandwidths, - (const int**)psCQMFDecoder->pppiAlloc[n], - psCQMFDecoder->pppiCQMFSignReal[n], - psCQMFDecoder->pppiCQMFSignImag[n], - psCQMFDecoder->pppiQCQMFReal[n], - psCQMFDecoder->pppiQCQMFImag[n], - psCQMFDecoder->psBSRead); - } - - for(n = 0; n < psCQMFDecoder->iChannels; n ++){ - InvQuantizeSpectrum(psCQMFDecoder->piNumGroups[n], - (const int*)psCQMFDecoder->ppiGroupLengths[n], - psCQMFDecoder->iNumBands, - psCQMFDecoder->piBandwidths, - (const int**)psCQMFDecoder->pppiAlloc[n], - (const int**)psCQMFDecoder->pppiQCQMFReal[n], - (const int**)psCQMFDecoder->pppiQCQMFImag[n], - pppfCQMFReal[n], - pppfCQMFImag[n], - psCQMFDecoder->psNoiseGen); - - ReplaceSign(psCQMFDecoder->iNumBlocks, - CQMF_BANDS, - (const int**)psCQMFDecoder->pppiCQMFSignReal[n], - (const int**)psCQMFDecoder->pppiCQMFSignImag[n], - pppfCQMFReal[n], - pppfCQMFImag[n]); - - - ApplyRMSEnvelope(psCQMFDecoder->iNumBands, - psCQMFDecoder->piBandwidths, - psCQMFDecoder->piNumGroups[n], - (const int*)psCQMFDecoder->ppiGroupLengths[n], - (const int **)psCQMFDecoder->pppiRMSEnvelope[n], - pppfCQMFReal[n], - pppfCQMFImag[n]); - } - - if(psCQMFDecoder->iChannels == 2 && psCQMFDecoder->iMSMode > 0){ - InvMSCoding(psCQMFDecoder->iNumBlocks, - psCQMFDecoder->iNumBands, - psCQMFDecoder->piBandwidths, - psCQMFDecoder->iMSMode, - (const int*)psCQMFDecoder->piMSFlags, - pppfCQMFReal, - pppfCQMFImag); - } - - //printf("Bits Read %d\n",iBitsRead); - - return psCQMFDecoder->iLastError; -} - -static void ApplyRMSEnvelope(const int iNumBands, - const int *piBandwidths, - const int iNumGroups, - const int *piGroupLengths, - const int **ppiRMSEnvelope, - float **ppfReal, - float **ppfImag) -{ - int n; - int iBlockOffset; - - iBlockOffset = 0; - for(n = 0; n < iNumGroups; n ++){ - int k; - - for(k = 0; k < piGroupLengths[n]; k ++){ - int b; - int iFBOffset; - iFBOffset = 0; - for(b = 0; b < iNumBands; b ++){ - int m; - int iRMSEnv; - float fGain; - - iRMSEnv = ppiRMSEnvelope[n][b]; - fGain = c_afRMSEnvReconstructTable[ENV_RECONSTRUCT_TABLE_CENTER + iRMSEnv]; - for(m = 0; m < piBandwidths[b]; m ++){ - ppfReal[iBlockOffset][iFBOffset] *= fGain; - ppfImag[iBlockOffset][iFBOffset] *= fGain; - iFBOffset ++; - } - } - iBlockOffset ++; - } - } -} - -static void ReplaceSign(const int iNumBlocks, - const int iNumCQMFBands, - const int **ppiSignReal, - const int **ppiSignImag, - float **ppfReal, - float **ppfImag) -{ - int n; - for(n = 0; n < iNumBlocks; n ++){ - int b; - for(b = 0; b < iNumCQMFBands; b ++){ - if(ppiSignReal[n][b] == 1){ - ppfReal[n][b] = -ppfReal[n][b]; - } - if(ppiSignImag[n][b] == 1){ - ppfImag[n][b] = -ppfImag[n][b]; - } - } - } -} - -static void InvQuantizeSpectrum(const int iNumGroups, - const int *piGroupLengths, - const int iNumBands, - const int *piBandwidths, - const int **ppiAlloc, - const int **ppiQReal, - const int **ppiQImag, - float **ppfReal, - float **ppfImag, - NoiseGen *psNoiseGen) // Pass in NULL to swicth off noise gen -{ - int n; - int iBlockOffest; - - iBlockOffest = 0; - for(n = 0; n < iNumGroups; n ++){ - int k; - for(k = 0; k < piGroupLengths[n]; k ++){ - int b; - int iFBOffset; - - iFBOffset = 0; - for(b = 0; b < iNumBands; b ++){ - int m; - int iAlloc; - float fInvSCFGain; - - iAlloc = ppiAlloc[n][b]; - fInvSCFGain = c_afInvScaleFactor[iAlloc]; - - if(iAlloc > 0){ - for(m = 0; m < piBandwidths[b]; m ++){ - int iQuantValue; - - iQuantValue = ppiQReal[iBlockOffest][iFBOffset]; - ppfReal[iBlockOffest][iFBOffset] = (float)iQuantValue * fInvSCFGain; - - iQuantValue = ppiQImag[iBlockOffest][iFBOffset]; - ppfImag[iBlockOffest][iFBOffset] = (float)iQuantValue * fInvSCFGain; - - iFBOffset ++; - } - } - else if(psNoiseGen != NULL){ - for(m = 0; m < piBandwidths[b]; m ++){ - ppfReal[iBlockOffest][iFBOffset] = 0.7f * GetNoise(psNoiseGen); - ppfImag[iBlockOffest][iFBOffset] = 0.7f * GetNoise(psNoiseGen); - - iFBOffset ++; - } - } - else{ - iFBOffset += piBandwidths[b]; - } - - } - - iBlockOffest ++; - } - } -} - -static void InvMSCoding(const int iNumBlocks, - const int iNumBands, - const int *piBandwidths, - const int iMSMode, - const int *piMSFlags, - float ***pppfReal, - float ***pppfImag) -{ - if(iMSMode > 0){ - int b; - int iFBOffset; - - iFBOffset = 0; - for(b = 0; b < iNumBands; b ++){ - if(piMSFlags[b] == 1){ - int n; - for(n = 0; n < piBandwidths[b]; n ++){ - int k; - for(k = 0; k < iNumBlocks; k ++){ - float fLeftReal; - float fLeftImag; - float fRightReal; - float fRightImag; - - fLeftReal = (pppfReal[0][k][iFBOffset] + pppfReal[1][k][iFBOffset]); - fLeftImag = (pppfImag[0][k][iFBOffset] + pppfImag[1][k][iFBOffset]); - fRightReal = (pppfReal[0][k][iFBOffset] - pppfReal[1][k][iFBOffset]); - fRightImag = (pppfImag[0][k][iFBOffset] - pppfImag[1][k][iFBOffset]); - - pppfReal[0][k][iFBOffset] = fLeftReal; - pppfReal[1][k][iFBOffset] = fRightReal; - pppfImag[0][k][iFBOffset] = fLeftImag; - pppfImag[1][k][iFBOffset] = fRightImag; - } - iFBOffset ++; - } - } - else{ - iFBOffset += piBandwidths[b]; - } - } - } -} - -/* Currently only the number of bands in frame */ -static int ReadHeaderInformation(int *piNumBands, - Bitstream *psBSRead) -{ - int iBitsRead; - - iBitsRead = 0; - *piNumBands = BSGetBits(psBSRead, 5); - iBitsRead += 5; - - return iBitsRead; -} - -static int ReadMSInformation(const int iNumBands, - int *piMSMode, - int *piMSFlags, - Bitstream *psBSRead) -{ - int iBitsRead; - - iBitsRead = 0; - *piMSMode = BSGetBits(psBSRead,2); - iBitsRead += 2; - - if(*piMSMode == 0){ - int n; - for(n = 0; n > 16); - } - - if(iVal){ - BSForceBack(psBSRead,iIndex,iVal); - iBitsRead -= iVal; - } - - *piSymbol = iSymbol; - - return iBitsRead; -} - -static int ReadRMSEnvelope(const int iChannels, - const int *piNumGroups, - const int iNumBands, - int ***pppiRMSEnvelope, - Bitstream *psBSRead) -{ - int n; - int iBitsRead; - - iBitsRead = 0; - for(n = 0; n < iChannels; n ++){ - int k; - for(k = 0; k < piNumGroups[n]; k ++){ - int b; - int iLastRMSVal; - - iLastRMSVal = BSGetBits(psBSRead,ENV0_BITS); - iBitsRead += ENV0_BITS; - - iLastRMSVal += ENV_MIN; - pppiRMSEnvelope[n][k][0] = iLastRMSVal; - for(b = 1; b < iNumBands; b ++){ - int iDelta; - - iBitsRead += ReadHuff(c_aaiRMSEnvHuffDec,&iDelta,psBSRead); - - iDelta += ENV_DELTA_MIN; - iLastRMSVal += iDelta; - pppiRMSEnvelope[n][k][b] = iLastRMSVal; - } - } - } - - return iBitsRead; -} - -static int ReadAllocInformation(int *piAllocOffset, - Bitstream *psBSRead) -{ - int iBitsRead; - - iBitsRead = 0; - - *piAllocOffset = BSGetBits(psBSRead,ALLOC_OFFSET_BITS); - *piAllocOffset += MIN_ALLOC_OFFSET; - iBitsRead += ALLOC_OFFSET_BITS; - - return iBitsRead; -} - -static int ReadCQMFData(const int iNumGroups, - const int *piGroupLengths, - const int iNumBands, - const int *piBandwidths, - const int **ppiAlloc, - int **ppiSignReal, - int **ppiSignImag, - int **ppiQReal, - int **ppiQImag, - Bitstream *psBSRead) -{ - int n; - int iBitsRead; - int iBlockOffest; - - iBitsRead = 0; - iBlockOffest = 0; - for(n = 0; n < iNumGroups; n ++){ - int k; - for(k = 0; k < piGroupLengths[n]; k ++){ - int b; - int iFBOffset; - - iFBOffset = 0; - for(b = 0; b < iNumBands; b ++){ - int m; - int iAlloc; - int iHuffDim; - int iHuffMod; - - iAlloc = ppiAlloc[n][b]; - - iHuffDim = c_aiHuffmanDim[iAlloc]; - iHuffMod = c_aiHuffmanMod[iAlloc]; - - - if(iAlloc > 0){ - const unsigned int (*pauiHuffmanTable)[HUFF_DEC_TABLE_SIZE] = NULL; //const? - - pauiHuffmanTable = GetHuffDecTable(iAlloc); - for(m = 0; m < piBandwidths[b]; m ++){ - int iQuantValue1 = 0; - int iQuantValue2 = 0; - - if(iHuffDim == 2){ - int iSymbol; - - iBitsRead += ReadHuff(pauiHuffmanTable,&iSymbol,psBSRead); - iQuantValue1 = iSymbol / iHuffMod; - iQuantValue2 = iSymbol % iHuffMod; - } - else{ - iBitsRead += ReadHuff(pauiHuffmanTable,&iQuantValue1,psBSRead); - iBitsRead += ReadHuff(pauiHuffmanTable,&iQuantValue2,psBSRead); - } - - ppiQReal[iBlockOffest][iFBOffset] = iQuantValue1; - ppiQImag[iBlockOffest][iFBOffset] = iQuantValue2; - - if(iQuantValue1 > 0){ - ppiSignReal[iBlockOffest][iFBOffset] = BSGetBits(psBSRead,1); - iBitsRead += 1; - } - if(iQuantValue2 > 0){ - ppiSignImag[iBlockOffest][iFBOffset] = BSGetBits(psBSRead,1); - iBitsRead += 1; - } - - iFBOffset ++; - } - } - else{ - iFBOffset += piBandwidths[b]; - } - - } - - iBlockOffest ++; - } - } - - return iBitsRead; -} - -static void ComputeAllocation(const int iChannels, - const int *piNumGroups, - const int iNumBands, - const int ***pppiSMR, - const int iAllocOffset, - int ***pppiAlloc) -{ - int n; - - for(n = 0; n < iChannels; n ++){ - int k; - for(k = 0; k < piNumGroups[n]; k ++){ - int b; - for(b = 0; b < iNumBands; b ++){ - int iAlloc; - iAlloc = ((pppiSMR[n][k][b] + iAllocOffset * ALLOC_OFFSET_SCALE) >> 5); - iAlloc = (iAlloc > MIN_ALLOC) ? iAlloc : MIN_ALLOC; - iAlloc = (iAlloc < MAX_ALLOC) ? iAlloc : MAX_ALLOC; - pppiAlloc[n][k][b] = iAlloc; - } - } - } -} diff --git a/lib_rend/ivas_cldfb_trans_codec/CQMFDecoder.h b/lib_rend/ivas_cldfb_trans_codec/CQMFDecoder.h deleted file mode 100644 index e865343cd9..0000000000 --- a/lib_rend/ivas_cldfb_trans_codec/CQMFDecoder.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef _CQMF_DECODER_H_ -#define _CQMF_DECODER_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#define DECODER_ERROR_NONE (0) -#define DECODER_ERROR_FS_NOT_SUPPORTED (-1) -#define DECODER_ERROR_CHAN_NOT_SUPPORTED (-2) -#define DECODER_ERROR_UNKNOWN (-100) - -typedef struct CQMF_DECODER CQMFDecoder; - -CQMFDecoder* CreateCQMFDecoder(const int iSampleRate, - const int iChannels); - -void DeleteCQMFDecoder(CQMFDecoder *psCQMFDecoder); - -int CQMFDecoderGetError(CQMFDecoder *psCQMFDecoder); - -int DecodeFrame(CQMFDecoder *psCQMFDecoder, - const int iNumBytes, - const unsigned char *puchData, - float ***pppfCQMFReal, - float ***pppfCQMFImag); - -#ifdef __cplusplus -} -#endif - -#endif /* _CQMF_DECODER_H_ */ diff --git a/lib_rend/ivas_cldfb_trans_codec/CQMFEncoder.c b/lib_rend/ivas_cldfb_trans_codec/CQMFEncoder.c deleted file mode 100644 index 6795f9327c..0000000000 --- a/lib_rend/ivas_cldfb_trans_codec/CQMFEncoder.c +++ /dev/null @@ -1,1226 +0,0 @@ -#include "CQMFEncoder.h" - -#include -#include -#include -#include -#include "Tables.h" -#include "wmops.h" -#include "RMSEnvGrouping.h" -#include "PerceptualModel.h" -#include "RMSEnvDeltaHuff.h" -#include "CQMFHuff.h" -#include "cldfb_codec_bitstream.h" - -typedef struct CQMF_ENCODER{ - int iSampleRate; - int iChannels; - int iNumBlocks; - - int iTargetBitRate; - int iTargetBitsPerFrame; - - int iNumBands; - const int *piBandwidths; - - int iMSMode; - int *piMSFlags; - - RMSEnvelopeGrouping *psRMSEnvelopeGrouping; - - int iCommonGrouping; - int *piNumGroups; - int **ppiGroupLengths; - - int ***pppiRMSEnvelope; - int ***pppiSMR; - int ***pppiExcitation; - int ***pppiAlloc; - - int iAllocOffset; - - int ***pppiCQMFSignReal; - int ***pppiCQMFSignImag; - int ***pppiQCQMFReal; - int ***pppiQCQMFImag; - - Bitstream *psBSWrite; - - int iLastError; -}CQMFEncoder; - -CQMFEncoder* CreateCQMFEncoder(const int iSampleRate, - const int iChannels, - const int iTargetBitRate) -{ - int n; - CQMFEncoder *psCQMFEncoder = NULL; - - assert(iSampleRate == 48000); //Fix - - psCQMFEncoder = (CQMFEncoder*)malloc(sizeof(CQMFEncoder)); - psCQMFEncoder->iSampleRate = iSampleRate; - psCQMFEncoder->iChannels = iChannels; - psCQMFEncoder->iNumBlocks = CQMF_BLOCKS_PER_FRAME; - psCQMFEncoder->iAllocOffset = 0; - - psCQMFEncoder->iTargetBitRate = iTargetBitRate; - psCQMFEncoder->iTargetBitsPerFrame = iTargetBitRate * CQMF_BLOCKS_PER_FRAME * CQMF_BANDS / iSampleRate; - - psCQMFEncoder->iNumBands = MAX_BANDS_48 - 1; //Fix - psCQMFEncoder->piBandwidths = c_aiBandwidths48; //Fix - - psCQMFEncoder->iMSMode = 0; - psCQMFEncoder->piMSFlags = (int*)malloc(MAX_BANDS * sizeof(int)); - - psCQMFEncoder->psRMSEnvelopeGrouping = CreateRMSEnvelopeGrouping(psCQMFEncoder->iNumBlocks); - - psCQMFEncoder->iCommonGrouping = 1; // Common grouping always on only impacts stereo - psCQMFEncoder->piNumGroups = (int*)malloc(psCQMFEncoder->iChannels * sizeof(int)); - psCQMFEncoder->ppiGroupLengths = (int**)malloc(psCQMFEncoder->iChannels * sizeof(int*)); - psCQMFEncoder->pppiRMSEnvelope = (int***)malloc(psCQMFEncoder->iChannels * sizeof(int**)); - psCQMFEncoder->pppiSMR = (int***)malloc(psCQMFEncoder->iChannels * sizeof(int**)); - psCQMFEncoder->pppiExcitation = (int***)malloc(psCQMFEncoder->iChannels * sizeof(int**)); - psCQMFEncoder->pppiAlloc = (int***)malloc(psCQMFEncoder->iChannels * sizeof(int**)); - - psCQMFEncoder->pppiCQMFSignReal = (int***)malloc(psCQMFEncoder->iChannels * sizeof(int**)); - psCQMFEncoder->pppiCQMFSignImag = (int***)malloc(psCQMFEncoder->iChannels * sizeof(int**)); - psCQMFEncoder->pppiQCQMFReal = (int***)malloc(psCQMFEncoder->iChannels * sizeof(int**)); - psCQMFEncoder->pppiQCQMFImag = (int***)malloc(psCQMFEncoder->iChannels * sizeof(int**)); - for(n = 0; n < iChannels ; n ++){ - int k; - psCQMFEncoder->ppiGroupLengths[n] = (int*)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int)); - psCQMFEncoder->pppiRMSEnvelope[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); - psCQMFEncoder->pppiSMR[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); - psCQMFEncoder->pppiExcitation[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); - psCQMFEncoder->pppiAlloc[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); - - psCQMFEncoder->pppiCQMFSignReal[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); - psCQMFEncoder->pppiCQMFSignImag[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); - psCQMFEncoder->pppiQCQMFReal[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); - psCQMFEncoder->pppiQCQMFImag[n] = (int**)malloc(CQMF_BLOCKS_PER_FRAME * sizeof(int*)); - for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - psCQMFEncoder->pppiRMSEnvelope[n][k] = (int*)malloc(MAX_BANDS * sizeof(int)); - psCQMFEncoder->pppiSMR[n][k] = (int*)malloc(MAX_BANDS * sizeof(int)); - psCQMFEncoder->pppiExcitation[n][k] = (int*)malloc(MAX_BANDS * sizeof(int)); - psCQMFEncoder->pppiAlloc[n][k] = (int*)malloc(MAX_BANDS * sizeof(int)); - - psCQMFEncoder->pppiCQMFSignReal[n][k] = (int*)malloc(CQMF_BANDS * sizeof(int)); - psCQMFEncoder->pppiCQMFSignImag[n][k] = (int*)malloc(CQMF_BANDS * sizeof(int)); - psCQMFEncoder->pppiQCQMFReal[n][k] = (int*)malloc(CQMF_BANDS * sizeof(int)); - psCQMFEncoder->pppiQCQMFImag[n][k] = (int*)malloc(CQMF_BANDS * sizeof(int)); - } - } - - psCQMFEncoder->psBSWrite = CreateBitstream(BS_WRITE,4096); - - psCQMFEncoder->iLastError = ENCODER_ERROR_NONE; - - return psCQMFEncoder; -} - -void DeleteCQMFEncoder(CQMFEncoder *psCQMFEncoder) -{ - if(psCQMFEncoder != NULL){ - - if(psCQMFEncoder->piMSFlags != NULL){ - free(psCQMFEncoder->piMSFlags); - } - - if(psCQMFEncoder->piNumGroups != NULL){ - free(psCQMFEncoder->piNumGroups); - } - - if(psCQMFEncoder->psRMSEnvelopeGrouping != NULL){ - DeleteRMSEnvelopeGrouping(psCQMFEncoder->psRMSEnvelopeGrouping); - } - - if(psCQMFEncoder->ppiGroupLengths != NULL){ - int n; - for(n = 0; n < psCQMFEncoder->iChannels; n ++){ - free(psCQMFEncoder->ppiGroupLengths[n]); - } - free(psCQMFEncoder->ppiGroupLengths); - } - - if(psCQMFEncoder->pppiRMSEnvelope != NULL){ - int n; - for(n = 0; n < psCQMFEncoder->iChannels; n ++){ - int k; - for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFEncoder->pppiRMSEnvelope[n][k]); - } - free(psCQMFEncoder->pppiRMSEnvelope[n]); - } - free(psCQMFEncoder->pppiRMSEnvelope); - } - - if(psCQMFEncoder->pppiSMR != NULL){ - int n; - for(n = 0; n < psCQMFEncoder->iChannels; n ++){ - int k; - for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFEncoder->pppiSMR[n][k]); - } - free(psCQMFEncoder->pppiSMR[n]); - } - free(psCQMFEncoder->pppiSMR); - } - - if(psCQMFEncoder->pppiExcitation != NULL){ - int n; - for(n = 0; n < psCQMFEncoder->iChannels; n ++){ - int k; - for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFEncoder->pppiExcitation[n][k]); - } - free(psCQMFEncoder->pppiExcitation[n]); - } - free(psCQMFEncoder->pppiExcitation); - } - - if(psCQMFEncoder->pppiAlloc != NULL){ - int n; - for(n = 0; n < psCQMFEncoder->iChannels; n ++){ - int k; - for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFEncoder->pppiAlloc[n][k]); - } - free(psCQMFEncoder->pppiAlloc[n]); - } - free(psCQMFEncoder->pppiAlloc); - } - - if(psCQMFEncoder->pppiCQMFSignReal != NULL){ - int n; - for(n = 0; n < psCQMFEncoder->iChannels; n ++){ - int k; - for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFEncoder->pppiCQMFSignReal[n][k]); - } - free(psCQMFEncoder->pppiCQMFSignReal[n]); - } - free(psCQMFEncoder->pppiCQMFSignReal); - } - - if(psCQMFEncoder->pppiCQMFSignImag != NULL){ - int n; - for(n = 0; n < psCQMFEncoder->iChannels; n ++){ - int k; - for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFEncoder->pppiCQMFSignImag[n][k]); - } - free(psCQMFEncoder->pppiCQMFSignImag[n]); - } - free(psCQMFEncoder->pppiCQMFSignImag); - } - - if(psCQMFEncoder->pppiQCQMFReal != NULL){ - int n; - for(n = 0; n < psCQMFEncoder->iChannels; n ++){ - int k; - for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFEncoder->pppiQCQMFReal[n][k]); - } - free(psCQMFEncoder->pppiQCQMFReal[n]); - } - free(psCQMFEncoder->pppiQCQMFReal); - } - - if(psCQMFEncoder->pppiQCQMFImag != NULL){ - int n; - for(n = 0; n < psCQMFEncoder->iChannels; n ++){ - int k; - for(k = 0; k < CQMF_BLOCKS_PER_FRAME; k ++){ - free(psCQMFEncoder->pppiQCQMFImag[n][k]); - } - free(psCQMFEncoder->pppiQCQMFImag[n]); - } - free(psCQMFEncoder->pppiQCQMFImag); - } - - DeleteBitstream(psCQMFEncoder->psBSWrite); - - free(psCQMFEncoder); - } -} - -int CQMFEncoderGetError(CQMFEncoder *psCQMFEncoder) -{ - return psCQMFEncoder->iLastError; -} - -static void MSModeCalculation(const int iNumBlocks, - const int iNumBands, - const int *piBandwidths, - float ***pppfReal, - float ***pppfImag, - int *piMSMode, - int *piMSFlags); - -static void RemoveRMSEnvelope(const int iNumBands, - const int *piBandwidths, - const int iNumGroups, - const int *piGroupLengths, - const int **ppiRMSEnvelope, - float **ppfReal, - float **ppfImag); - -static void RemoveSign(const int iNumBlocks, - const int iNumCQMFBands, - float **ppfReal, - float **ppfImag, - int **ppiSignReal, - int **ppiSignImag); - -static int CountCQMFBits(const int iNumGroups, - const int *piGroupLengths, - const int iNumBands, - const int *piBandwidths, - const int **ppiAlloc, - const int **ppiQReal, - const int **ppiQImag); - -/* Currently only the number of bands in frame */ -static int WriteHeaderInformation(const int iNumBands, - Bitstream *psBSWrite); - -static int WriteMSInformation(const int iNumBands, - const int iMSMode, - const int *piMSFlags, - Bitstream *psBSWrite); - -static int WriteGroupInformation(const int iChannels, - const int iCommonGrouping, - const int *piNumGroups, - const int **ppiGroupLengths, - Bitstream *psBSWrite); - -static int WriteRMSEnvelope(const int iChannels, - const int *piNumGroups, - const int iNumBands, - const int ***pppiRMSEnvelope, - Bitstream *psBSWrite); - -static int WriteAllocInformation(const int iAllocOffset, - Bitstream *psBSWrite); - -static int WriteCQMFData(const int iNumGroups, - const int *piGroupLengths, - const int iNumBands, - const int *piBandwidths, - const int **ppiAlloc, - const int **ppiSignReal, - const int **ppiSignImag, - const int **ppiQReal, - const int **ppiQImag, - Bitstream *psBSWrite); - -static int ComputeAllocation(const int iChannels, - const int *piNumGroups, - const int **ppiGroupLengths, - const int iNumBands, - const int *piBandwidths, - const float ***pppfReal, - const float ***pppfImag, - const int ***pppiSMR, - const int iAvailableBits, - int *piAllocOffset, - int ***pppiAlloc, - int ***pppiQReal, - int ***pppiQImag); - -static int ComputeAllocationByPass(const int iChannels, - const int *piNumGroups, - const int **ppiGroupLengths, - const int iNumBands, - const int *piBandwidths, - const float ***pppfReal, - const float ***pppfImag, - const int ***pppiSMR, - const int iAllocOffset, - int ***pppiAlloc, - int ***pppiQReal, - int ***pppiQImag); - - - -int EncodeFrame(CQMFEncoder *psCQMFEncoder, - float ***pppfCQMFReal, - float ***pppfCQMFImag, - int *piNumiBytes, - unsigned char *puchData) -{ - int n; - int iAvailableBits; - int iBitsWritten; - int iCQMFBits; - - iAvailableBits = psCQMFEncoder->iTargetBitsPerFrame; // HCBR for now - iBitsWritten = 0; - - - /* Do MS calc here */ - if(psCQMFEncoder->iChannels == 2){ - MSModeCalculation(psCQMFEncoder->iNumBlocks, - psCQMFEncoder->iNumBands, - psCQMFEncoder->piBandwidths, - pppfCQMFReal, - pppfCQMFImag, - &psCQMFEncoder->iMSMode, - psCQMFEncoder->piMSFlags); - - if(psCQMFEncoder->iMSMode > 0){ - psCQMFEncoder->iCommonGrouping = 1; // Make sure common grouping is enabled when MS is in use - } - } - - - /* Compute Grouping and RMS Envelopes */ - if(psCQMFEncoder->iChannels == 2 && psCQMFEncoder->iCommonGrouping == 1){ - ComputeEnvelopeGrouping(psCQMFEncoder->psRMSEnvelopeGrouping, - psCQMFEncoder->iChannels, - psCQMFEncoder->iNumBands, - psCQMFEncoder->piBandwidths, - (const float***)pppfCQMFReal, - (const float***)pppfCQMFImag, - 8.0, - 20.0, // Use these to trade off RMS Env bits and quantizer loading - &psCQMFEncoder->piNumGroups[0], - psCQMFEncoder->ppiGroupLengths[0], - psCQMFEncoder->pppiRMSEnvelope); - - psCQMFEncoder->piNumGroups[1] = psCQMFEncoder->piNumGroups[0]; - for(n = 0; n < psCQMFEncoder->piNumGroups[0]; n ++){ - psCQMFEncoder->ppiGroupLengths[1][n] = psCQMFEncoder->ppiGroupLengths[0][n]; - } - } - else{ - for(n = 0; n < psCQMFEncoder->iChannels; n ++){ - ComputeEnvelopeGrouping(psCQMFEncoder->psRMSEnvelopeGrouping, - psCQMFEncoder->iChannels, - psCQMFEncoder->iNumBands, - psCQMFEncoder->piBandwidths, - (const float***)&pppfCQMFReal[n], - (const float***)&pppfCQMFImag[n], - 8.0, - 20.0, // Use these to trade off RMS Env bits and quantizer loading - &psCQMFEncoder->piNumGroups[n], - psCQMFEncoder->ppiGroupLengths[n], - &psCQMFEncoder->pppiRMSEnvelope[n]); - } - } - - for(n = 0; n < psCQMFEncoder->iChannels; n ++){ - RemoveSign(psCQMFEncoder->iNumBlocks, - CQMF_BANDS, - pppfCQMFReal[n], - pppfCQMFImag[n], - psCQMFEncoder->pppiCQMFSignReal[n], - psCQMFEncoder->pppiCQMFSignImag[n]); - - RemoveRMSEnvelope(psCQMFEncoder->iNumBands, - psCQMFEncoder->piBandwidths, - psCQMFEncoder->piNumGroups[n], - (const int*)psCQMFEncoder->ppiGroupLengths[n], - (const int **)psCQMFEncoder->pppiRMSEnvelope[n], - pppfCQMFReal[n], - pppfCQMFImag[n]); - } - - BSFlushBuffer(psCQMFEncoder->psBSWrite); - iBitsWritten += WriteHeaderInformation(psCQMFEncoder->iNumBands, - psCQMFEncoder->psBSWrite); - - if(psCQMFEncoder->iChannels == 2){ - iBitsWritten += WriteMSInformation(psCQMFEncoder->iNumBands, - psCQMFEncoder->iMSMode, - (const int*)psCQMFEncoder->piMSFlags, - psCQMFEncoder->psBSWrite); - } - - iBitsWritten += WriteGroupInformation(psCQMFEncoder->iChannels, - psCQMFEncoder->iCommonGrouping, - (const int*)psCQMFEncoder->piNumGroups, - (const int**)psCQMFEncoder->ppiGroupLengths, - psCQMFEncoder->psBSWrite); - - iBitsWritten += WriteRMSEnvelope(psCQMFEncoder->iChannels, - (const int*)psCQMFEncoder->piNumGroups, - psCQMFEncoder->iNumBands, - (const int***)psCQMFEncoder->pppiRMSEnvelope, - psCQMFEncoder->psBSWrite); - - for(n = 0; n < psCQMFEncoder->iChannels; n ++){ // This will be updated to support multiple sample rates - int k; - for(k = 0; k < psCQMFEncoder->piNumGroups[n]; k ++){ - PerceptualModel(psCQMFEncoder->iNumBands, - psCQMFEncoder->pppiRMSEnvelope[n][k], - psCQMFEncoder->pppiExcitation[n][k], - psCQMFEncoder->pppiSMR[n][k]); - - } - } - - iAvailableBits -= iBitsWritten; - iCQMFBits = ComputeAllocation(psCQMFEncoder->iChannels, - (const int*)psCQMFEncoder->piNumGroups, - (const int**)psCQMFEncoder->ppiGroupLengths, - psCQMFEncoder->iNumBands, - psCQMFEncoder->piBandwidths, - (const float***)pppfCQMFReal, - (const float***)pppfCQMFImag, - (const int***)psCQMFEncoder->pppiSMR, - iAvailableBits, - &psCQMFEncoder->iAllocOffset, - psCQMFEncoder->pppiAlloc, - psCQMFEncoder->pppiQCQMFReal, - psCQMFEncoder->pppiQCQMFImag); - - iBitsWritten += WriteAllocInformation(psCQMFEncoder->iAllocOffset,psCQMFEncoder->psBSWrite); - - for(n = 0; n < psCQMFEncoder->iChannels; n ++){ - iBitsWritten += WriteCQMFData(psCQMFEncoder->piNumGroups[n], - (const int*)psCQMFEncoder->ppiGroupLengths[n], - psCQMFEncoder->iNumBands, - psCQMFEncoder->piBandwidths, - (const int**)psCQMFEncoder->pppiAlloc[n], - (const int**)psCQMFEncoder->pppiCQMFSignReal[n], - (const int**)psCQMFEncoder->pppiCQMFSignImag[n], - (const int**)psCQMFEncoder->pppiQCQMFReal[n], - (const int**)psCQMFEncoder->pppiQCQMFImag[n], - psCQMFEncoder->psBSWrite); - } - - BSByteAlign(psCQMFEncoder->psBSWrite); - *piNumiBytes = BSGetByteCount(psCQMFEncoder->psBSWrite); - BSGetBytes(psCQMFEncoder->psBSWrite,puchData,*piNumiBytes); - - //printf("Bits Written %d\n",iBitsWritten); - - return psCQMFEncoder->iLastError; -} - -static void MSModeCalculation(const int iNumBlocks, - const int iNumBands, - const int *piBandwidths, - float ***pppfReal, - float ***pppfImag, - int *piMSMode, - int *piMSFlags) -{ - int b; - int iFBOffset; - int iNumMSBands; - - *piMSMode = 0; - iFBOffset = 0; - iNumMSBands = 0; - for(b = 0; b < iNumBands; b ++){ - int n; - float fLeftEnergy; - float fRightEnergy; - float fMidEnergy; - float fSideEnergy; - float fLRRatio; - float fMSRatio; - - fLeftEnergy = 0.0; - fRightEnergy = 0.0; - fMidEnergy = 0.0; - fSideEnergy = 0.0; - - for(n = 0; n < piBandwidths[b]; n ++){ - int k; - for(k = 0; k < iNumBlocks; k ++){ - float fMidReal; - float fMidImag; - float fSideReal; - float fSideImag; - - fMidReal = 0.5f * (pppfReal[0][k][iFBOffset] + pppfReal[1][k][iFBOffset]); - fMidImag = 0.5f * (pppfImag[0][k][iFBOffset] + pppfImag[1][k][iFBOffset]); - fSideReal = 0.5f * (pppfReal[0][k][iFBOffset] - pppfReal[1][k][iFBOffset]); - fSideImag = 0.5f * (pppfImag[0][k][iFBOffset] - pppfImag[1][k][iFBOffset]); - - fLeftEnergy += (pppfReal[0][k][iFBOffset] * pppfReal[0][k][iFBOffset] + pppfImag[0][k][iFBOffset] * pppfImag[0][k][iFBOffset]); - fRightEnergy += (pppfReal[1][k][iFBOffset] * pppfReal[1][k][iFBOffset] + pppfImag[1][k][iFBOffset] * pppfImag[1][k][iFBOffset]); - fMidEnergy += (fMidReal * fMidReal + fMidImag * fMidImag); - fSideEnergy += (fSideReal * fSideReal + fSideImag * fSideImag); - } - - iFBOffset ++; - } - - fLeftEnergy = log10f(fLeftEnergy + 1e-12f); - fRightEnergy = log10f(fRightEnergy + 1e-12f); - fMidEnergy = log10f(fMidEnergy + 1e-12f); - fSideEnergy = log10f(fSideEnergy + 1e-12f); - - if(fLeftEnergy > fRightEnergy){ - fLRRatio = fLeftEnergy - fRightEnergy; - } - else{ - fLRRatio = fRightEnergy - fLeftEnergy; - } - - if(fMidEnergy > fSideEnergy){ - fMSRatio = fMidEnergy - fSideEnergy; - } - else{ - fMSRatio = fSideEnergy - fMidEnergy; - } - - if(fMSRatio > fLRRatio){ - iNumMSBands ++; - piMSFlags[b] = 1; - } - else{ - piMSFlags[b] = 0; - } - } - - if(iNumMSBands == iNumBands){ - *piMSMode = 1; - } - else if(iNumMSBands > 0){ - *piMSMode = 2; - } - else{ - *piMSMode = 0; - } - - if(*piMSMode > 0){ - iFBOffset = 0; - for(b = 0; b < iNumBands; b ++){ - if(piMSFlags[b] == 1){ - int n; - for(n = 0; n < piBandwidths[b]; n ++){ - int k; - for(k = 0; k < iNumBlocks; k ++){ - float fMidReal; - float fMidImag; - float fSideReal; - float fSideImag; - - fMidReal = 0.5f * (pppfReal[0][k][iFBOffset] + pppfReal[1][k][iFBOffset]); - fMidImag = 0.5f * (pppfImag[0][k][iFBOffset] + pppfImag[1][k][iFBOffset]); - fSideReal = 0.5f * (pppfReal[0][k][iFBOffset] - pppfReal[1][k][iFBOffset]); - fSideImag = 0.5f * (pppfImag[0][k][iFBOffset] - pppfImag[1][k][iFBOffset]); - - pppfReal[0][k][iFBOffset] = fMidReal; - pppfReal[1][k][iFBOffset] = fSideReal; - pppfImag[0][k][iFBOffset] = fMidImag; - pppfImag[1][k][iFBOffset] = fSideImag; - } - iFBOffset ++; - } - } - else{ - iFBOffset += piBandwidths[b]; - } - } - } -} - -static void RemoveRMSEnvelope(const int iNumBands, - const int *piBandwidths, - const int iNumGroups, - const int *piGroupLengths, - const int **ppiRMSEnvelope, - float **ppfReal, - float **ppfImag) -{ - int n; - int iBlockOffset; - - iBlockOffset = 0; - for(n = 0; n < iNumGroups; n ++){ - int k; - for(k = 0; k < piGroupLengths[n]; k ++){ - int b; - int iFBOffset; - iFBOffset = 0; - for(b = 0; b < iNumBands; b ++){ - int m; - int iRMSEnv; - float fGain; - - iRMSEnv = ppiRMSEnvelope[n][b]; - fGain = c_afRMSEnvReconstructTable[ENV_RECONSTRUCT_TABLE_CENTER - iRMSEnv]; - for(m = 0; m < piBandwidths[b]; m ++){ - ppfReal[iBlockOffset][iFBOffset] *= fGain; - ppfImag[iBlockOffset][iFBOffset] *= fGain; - iFBOffset ++; - } - } - iBlockOffset ++; - } - } -} - -static void RemoveSign(const int iNumBlocks, - const int iNumCQMFBands, - float **ppfReal, - float **ppfImag, - int **ppiSignReal, - int **ppiSignImag) -{ - int n; - for(n = 0; n < iNumBlocks; n ++){ - int b; - for(b = 0; b < iNumCQMFBands; b ++){ - if(ppfReal[n][b] > 0.0){ - ppiSignReal[n][b] = 0; - } - else{ - ppfReal[n][b] = -ppfReal[n][b]; - ppiSignReal[n][b] = 1; - } - if(ppfImag[n][b] > 0.0){ - ppiSignImag[n][b] = 0; - } - else{ - ppfImag[n][b] = -ppfImag[n][b]; - ppiSignImag[n][b] = 1; - } - } - } -} - -/* Rename */ -static void QuantizeSpectrum(const int iNumGroups, - const int *piGroupLengths, - const int iNumBands, - const int *piBandwidths, - const int **ppiAlloc, - const float **ppfReal, - const float **ppfImag, - int **ppiQReal, - int **ppiQImag) -{ - int n; - int iBlockOffest; - - iBlockOffest = 0; - for(n = 0; n < iNumGroups; n ++){ - int k; - for(k = 0; k < piGroupLengths[n]; k ++){ - int b; - int iFBOffset; - - iFBOffset = 0; - for(b = 0; b < iNumBands; b ++){ - int m; - int iAlloc; - int iMaxQuantVal; - float fSCFGain; - - iAlloc = ppiAlloc[n][b]; - fSCFGain = c_afScaleFactor[iAlloc]; - iMaxQuantVal = c_aiQuantMaxValues[iAlloc]; - for(m = 0; m < piBandwidths[b]; m ++){ - int iQuantValue; - - iQuantValue = (int)(fSCFGain * ppfReal[iBlockOffest][iFBOffset] + 0.5); -#ifdef _DEBUG_VERBOSE - if(iQuantValue > iMaxQuantVal){ - printf("Value out of range %d\t%d\t%d\n",iAlloc,iQuantValue,iMaxQuantVal); - iQuantValue = iMaxQuantVal; - } -#else - iQuantValue = (iQuantValue < iMaxQuantVal) ? iQuantValue : iMaxQuantVal; -#endif - ppiQReal[iBlockOffest][iFBOffset] = iQuantValue; - - iQuantValue = (int)(fSCFGain * ppfImag[iBlockOffest][iFBOffset] + 0.5); -#ifdef _DEBUG_VERBOSE - if(iQuantValue > iMaxQuantVal){ - printf("Value out of range %d\t%d\t%d\n",iAlloc,iQuantValue,iMaxQuantVal); - iQuantValue = iMaxQuantVal; - } -#else - iQuantValue = (iQuantValue < iMaxQuantVal) ? iQuantValue : iMaxQuantVal; -#endif - ppiQImag[iBlockOffest][iFBOffset] = iQuantValue; - - iFBOffset ++; - } - - } - - iBlockOffest ++; - } - } -} - -static int CountCQMFBits(const int iNumGroups, - const int *piGroupLengths, - const int iNumBands, - const int *piBandwidths, - const int **ppiAlloc, - const int **ppiQReal, - const int **ppiQImag) -{ - int n; - int iBits; - int iBlockOffest; - - iBits = 0; - iBlockOffest = 0; - for(n = 0; n < iNumGroups; n ++){ - int k; - for(k = 0; k < piGroupLengths[n]; k ++){ - int b; - int iFBOffset; - - iFBOffset = 0; - for(b = 0; b < iNumBands; b ++){ - int m; - int iAlloc; - int iHuffDim; - int iHuffMod; - - iAlloc = ppiAlloc[n][b]; - - iHuffDim = c_aiHuffmanDim[iAlloc]; - iHuffMod = c_aiHuffmanMod[iAlloc]; - - - if(iAlloc > 0){ - const unsigned int (*pauiHuffmanTable)[2] = NULL; //const? - - pauiHuffmanTable = GetHuffEncTable(iAlloc); - for(m = 0; m < piBandwidths[b]; m ++){ - int iQuantValue1; - int iQuantValue2; - - iQuantValue1 = ppiQReal[iBlockOffest][iFBOffset]; - iQuantValue2 = ppiQImag[iBlockOffest][iFBOffset]; - - iBits += (iQuantValue1 > 0) ? 1 : 0; //Sign bit for vals > 0 - iBits += (iQuantValue2 > 0) ? 1 : 0; //Sign bit for vals > 0 - if(iHuffDim == 2){ - iQuantValue1 *= iHuffMod; - iQuantValue1 += iQuantValue2; - iBits += pauiHuffmanTable[iQuantValue1][0]; - } - else{ - iBits += pauiHuffmanTable[iQuantValue1][0]; - iBits += pauiHuffmanTable[iQuantValue2][0]; - } - - iFBOffset ++; - } - } - else{ - iFBOffset += piBandwidths[b]; - } - - } - - iBlockOffest ++; - } - } - - return iBits; -} - -/* Currently only the number of bands in frame */ -static int WriteHeaderInformation(const int iNumBands, - Bitstream *psBSWrite) -{ - int iBitsWritten; - - iBitsWritten = 0; - BSPutBits(psBSWrite,iNumBands,5); - iBitsWritten += 5; - - return iBitsWritten; -} - -static int WriteMSInformation(const int iNumBands, - const int iMSMode, - const int *piMSFlags, - Bitstream *psBSWrite) -{ - int iBitsWritten; - - iBitsWritten = 0; - - BSPutBits(psBSWrite,iMSMode,2); - iBitsWritten += 2; - if(iMSMode == 2){ - int n; - for(n = 0; n < iNumBands; n ++){ - BSPutBits(psBSWrite,piMSFlags[n],1); - iBitsWritten += 1; - } - } - - return iBitsWritten; -} - -static int WriteGroupInformation(const int iChannels, - const int iCommonGrouping, - const int *piNumGroups, - const int **ppiGroupLengths, - Bitstream *psBSWrite) -{ - int iBitsWritten; - - iBitsWritten = 0; - if(iChannels == 2 && iCommonGrouping == 1){ - int k; - - BSPutBits(psBSWrite,iCommonGrouping,1); - iBitsWritten += 1; - - BSPutBits(psBSWrite,(piNumGroups[0] - 1),4); - iBitsWritten += 4; - - for(k = 0; k < piNumGroups[0]; k ++){ - BSPutBits(psBSWrite,(ppiGroupLengths[0][k] - 1),4); - iBitsWritten += 4; - } - } - else if(iChannels == 2){ - int n; - - BSPutBits(psBSWrite,iCommonGrouping,1); - iBitsWritten += 1; - - for(n = 0; n < iChannels; n ++){ - int k; - - BSPutBits(psBSWrite,(piNumGroups[n] - 1),4); - iBitsWritten += 4; - - for(k = 0; k < piNumGroups[n]; k ++){ - BSPutBits(psBSWrite,(ppiGroupLengths[n][k] - 1),4); - iBitsWritten += 4; - } - } - } - else{ - int n; - - for(n = 0; n < iChannels; n ++){ - int k; - - BSPutBits(psBSWrite,(piNumGroups[n] - 1),4); - iBitsWritten += 4; - - for(k = 0; k < piNumGroups[n]; k ++){ - BSPutBits(psBSWrite,(ppiGroupLengths[n][k] - 1),4); - iBitsWritten += 4; - } - } - } - - return iBitsWritten; -} - -static int WriteRMSEnvelope(const int iChannels, - const int *piNumGroups, - const int iNumBands, - const int ***pppiRMSEnvelope, - Bitstream *psBSWrite) -{ - int n; - int iBitsWritten; - - iBitsWritten = 0; - for(n = 0; n < iChannels; n ++){ - int k; - for(k = 0; k < piNumGroups[n]; k ++){ - int b; - int iLastRMSVal; - - iLastRMSVal = pppiRMSEnvelope[n][k][0]; - iLastRMSVal = (iLastRMSVal > ENV_MIN) ? iLastRMSVal : ENV_MIN; - iLastRMSVal = (iLastRMSVal < ENV_MAX) ? iLastRMSVal : ENV_MAX; - BSPutBits(psBSWrite,(iLastRMSVal - ENV_MIN),ENV0_BITS); - iBitsWritten += ENV0_BITS; - - for(b = 1; b < iNumBands; b ++){ - int iDelta; - - iDelta = pppiRMSEnvelope[n][k][b] - iLastRMSVal; - iDelta = (iDelta > ENV_DELTA_MIN) ? iDelta : ENV_DELTA_MIN; - iDelta = (iDelta < ENV_DELTA_MAX) ? iDelta : ENV_DELTA_MAX; - iDelta -= ENV_DELTA_MIN; - - BSPutBits(psBSWrite,c_aaiRMSEnvHuffEnc[iDelta][1],c_aaiRMSEnvHuffEnc[iDelta][0]); - iBitsWritten += c_aaiRMSEnvHuffEnc[iDelta][0]; - - iLastRMSVal = pppiRMSEnvelope[n][k][b]; - } - } - } - - return iBitsWritten; -} - -static int WriteAllocInformation(const int iAllocOffset, - Bitstream *psBSWrite) -{ - int iBitsWritten; - - iBitsWritten = 0; - - if(iAllocOffset < MIN_ALLOC_OFFSET || iAllocOffset > MAX_ALLOC_OFFSET){ - printf("Serious error\n"); - } - - BSPutBits(psBSWrite,(iAllocOffset - MIN_ALLOC_OFFSET),ALLOC_OFFSET_BITS); - iBitsWritten += ALLOC_OFFSET_BITS; - - return iBitsWritten; -} - -static int WriteCQMFData(const int iNumGroups, - const int *piGroupLengths, - const int iNumBands, - const int *piBandwidths, - const int **ppiAlloc, - const int **ppiSignReal, - const int **ppiSignImag, - const int **ppiQReal, - const int **ppiQImag, - Bitstream *psBSWrite) -{ - int n; - int iBitsWritten; - int iBlockOffest; - - iBitsWritten = 0; - iBlockOffest = 0; - - - for(n = 0; n < iNumGroups; n ++){ - int k; - for(k = 0; k < piGroupLengths[n]; k ++){ - int b; - int iFBOffset; - - iFBOffset = 0; - for(b = 0; b < iNumBands; b ++){ - int m; - int iAlloc; - int iHuffDim; - int iHuffMod; - - iAlloc = ppiAlloc[n][b]; - - iHuffDim = c_aiHuffmanDim[iAlloc]; - iHuffMod = c_aiHuffmanMod[iAlloc]; - - - if(iAlloc > 0){ - const unsigned int (*pauiHuffmanTable)[2] = NULL; //const? - - pauiHuffmanTable = GetHuffEncTable(iAlloc); - for(m = 0; m < piBandwidths[b]; m ++){ - int iQuantValue1; - int iQuantValue2; - - iQuantValue1 = ppiQReal[iBlockOffest][iFBOffset]; - iQuantValue2 = ppiQImag[iBlockOffest][iFBOffset]; - - - if(iHuffDim == 2){ - int iSymbol; - iSymbol = iQuantValue1; - iSymbol *= iHuffMod; - iSymbol += iQuantValue2; - BSPutBits(psBSWrite, pauiHuffmanTable[iSymbol][1], pauiHuffmanTable[iSymbol][0]); - iBitsWritten += pauiHuffmanTable[iSymbol][0]; - } - else{ - BSPutBits(psBSWrite, pauiHuffmanTable[iQuantValue1][1], pauiHuffmanTable[iQuantValue1][0]); - iBitsWritten += pauiHuffmanTable[iQuantValue1][0]; - BSPutBits(psBSWrite, pauiHuffmanTable[iQuantValue2][1], pauiHuffmanTable[iQuantValue2][0]); - iBitsWritten += pauiHuffmanTable[iQuantValue2][0]; - } - - if(iQuantValue1 > 0){ - BSPutBits(psBSWrite,ppiSignReal[iBlockOffest][iFBOffset],1); - iBitsWritten += 1; - } - if(iQuantValue2 > 0){ - BSPutBits(psBSWrite,ppiSignImag[iBlockOffest][iFBOffset],1); - iBitsWritten += 1; - } - - iFBOffset ++; - } - } - else{ - iFBOffset += piBandwidths[b]; - } - - } - - iBlockOffest ++; - } - } - - return iBitsWritten; -} - -static int ComputeAllocation(const int iChannels, - const int *piNumGroups, - const int **ppiGroupLengths, - const int iNumBands, - const int *piBandwidths, - const float ***pppfReal, - const float ***pppfImag, - const int ***pppiSMR, - const int iAvailableBits, - int *piAllocOffset, - int ***pppiAlloc, - int ***pppiQReal, - int ***pppiQImag) -{ - int iBitsUsed; - int iDone; - int iDelta; - - iBitsUsed = ALLOC_OFFSET_BITS; // Bits used for Alloc Offset - - iDone = 0; - iDelta = -MIN_ALLOC_OFFSET; - *piAllocOffset = 0; - while(iDone == 0){ - int n; - int iLimitAllocOffset; - iBitsUsed = ALLOC_OFFSET_BITS; - - iLimitAllocOffset = *piAllocOffset; - iLimitAllocOffset = (iLimitAllocOffset > MIN_ALLOC_OFFSET) ? iLimitAllocOffset : MIN_ALLOC_OFFSET; - iLimitAllocOffset = (iLimitAllocOffset < MAX_ALLOC_OFFSET) ? iLimitAllocOffset : MAX_ALLOC_OFFSET; - - for(n = 0; n < iChannels; n ++){ - int k; - for(k = 0; k < piNumGroups[n]; k ++){ - int b; - for(b = 0; b < iNumBands; b ++){ - int iAlloc; - iAlloc = ((pppiSMR[n][k][b] + iLimitAllocOffset * ALLOC_OFFSET_SCALE) >> 5); - iAlloc = (iAlloc > MIN_ALLOC) ? iAlloc : MIN_ALLOC; - iAlloc = (iAlloc < MAX_ALLOC) ? iAlloc : MAX_ALLOC; - pppiAlloc[n][k][b] = iAlloc; - } - } - - QuantizeSpectrum(piNumGroups[n], - (const int*)ppiGroupLengths[n], - iNumBands, - piBandwidths, - (const int**)pppiAlloc[n], - (const float**)pppfReal[n], - (const float**)pppfImag[n], - pppiQReal[n], - pppiQImag[n]); - - iBitsUsed += CountCQMFBits(piNumGroups[n], - (const int*)ppiGroupLengths[n], - iNumBands, - piBandwidths, - (const int**)pppiAlloc[n], - (const int**)pppiQReal[n], - (const int**)pppiQImag[n]); - } - - if(*piAllocOffset <= MIN_ALLOC_OFFSET && iBitsUsed > iAvailableBits){ -#ifdef DEBUG_VERBOSE - printf("Frame can not be coded with the number of bits available\n"); -#endif - //iLastError = ENC_ERROR_STREAM_FAILURE; - return -1; - } - else if(*piAllocOffset >= MAX_ALLOC_OFFSET && iBitsUsed < iAvailableBits){ - *piAllocOffset = MAX_ALLOC_OFFSET; - iDone ++; - } - else{ - if(iDelta == 0 && iBitsUsed > iAvailableBits){ - iDelta = 1; - } - else if(iDelta == 0 && iBitsUsed < iAvailableBits){ - iDone ++; - } - else if(iBitsUsed == iAvailableBits){ - iDone ++; - } - - if(iBitsUsed > iAvailableBits){ - *piAllocOffset -= iDelta; - iDelta >>= 1; - } - else if(iBitsUsed < iAvailableBits){ - *piAllocOffset += iDelta; - iDelta >>= 1; - } - } - - } - - //printf("%d\t%d\t%d\t%d\n",*piAllocOffset,iAvailableBits,iBitsUsed,iAvailableBits - iBitsUsed); - - return iBitsUsed; -} - -static int ComputeAllocationByPass(const int iChannels, - const int *piNumGroups, - const int **ppiGroupLengths, - const int iNumBands, - const int *piBandwidths, - const float ***pppfReal, - const float ***pppfImag, - const int ***pppiSMR, - const int iAllocOffset, - int ***pppiAlloc, - int ***pppiQReal, - int ***pppiQImag) -{ - int n; - int iBitsUsed; - - iBitsUsed = ALLOC_OFFSET_BITS; - - for(n = 0; n < iChannels; n ++){ - int k; - for(k = 0; k < piNumGroups[n]; k ++){ - int b; - for(b = 0; b < iNumBands; b ++){ - int iAlloc; - iAlloc = ((pppiSMR[n][k][b] + iAllocOffset * ALLOC_OFFSET_SCALE) >> 5); - iAlloc = (iAlloc > MIN_ALLOC) ? iAlloc : MIN_ALLOC; - iAlloc = (iAlloc < MAX_ALLOC) ? iAlloc : MAX_ALLOC; - pppiAlloc[n][k][b] = iAlloc; - } - } - - QuantizeSpectrum(piNumGroups[n], - (const int*)ppiGroupLengths[n], - iNumBands, - piBandwidths, - (const int**)pppiAlloc[n], - (const float**)pppfReal[n], - (const float**)pppfImag[n], - pppiQReal[n], - pppiQImag[n]); - - iBitsUsed += CountCQMFBits(piNumGroups[n], - (const int*)ppiGroupLengths[n], - iNumBands, - piBandwidths, - (const int**)pppiAlloc[n], - (const int**)pppiQReal[n], - (const int**)pppiQImag[n]); - } - - return iBitsUsed; -} diff --git a/lib_rend/ivas_cldfb_trans_codec/CQMFEncoder.h b/lib_rend/ivas_cldfb_trans_codec/CQMFEncoder.h deleted file mode 100644 index d509827beb..0000000000 --- a/lib_rend/ivas_cldfb_trans_codec/CQMFEncoder.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef _CQMF_ENCODER_H_ -#define _CQMF_ENCODER_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#define ENCODER_ERROR_NONE (0) -#define ENCODER_ERROR_FS_NOT_SUPPORTED (-1) -#define ENCODER_ERROR_CHAN_NOT_SUPPORTED (-2) -#define ENCODER_ERROR_UNKNOWN (-100) - -typedef struct CQMF_ENCODER CQMFEncoder; - -CQMFEncoder* CreateCQMFEncoder(const int iSampleRate, - const int iChannels, - const int iTargetBitRate); - -void DeleteCQMFEncoder(CQMFEncoder *psCQMFEncoder); - -int CQMFEncoderGetError(CQMFEncoder *psCQMFEncoder); - -int EncodeFrame(CQMFEncoder *psCQMFEncoder, - float ***pppfCQMFReal, - float ***pppfCQMFImag, - int *piNumiBytes, - unsigned char *puchData); - -#ifdef __cplusplus -} -#endif - -#endif /* _CQMF_ENCODER_H_ */ diff --git a/lib_rend/ivas_cldfb_trans_codec/CQMFHuff.c b/lib_rend/ivas_cldfb_trans_codec/CQMFHuff.c deleted file mode 100644 index ad7e387c72..0000000000 --- a/lib_rend/ivas_cldfb_trans_codec/CQMFHuff.c +++ /dev/null @@ -1,1457 +0,0 @@ -#include "CQMFHuff.h" -#include "wmops.h" - -const unsigned int c_aaiCQMFHuffEnc1[16][2] = -{ - {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000b, 0x0000}, {0x0002, 0x0001}, {0x0004, 0x0001}, {0x0006, 0x0002}, {0x000b, 0x0001}, - {0x0006, 0x0003}, {0x0007, 0x0001}, {0x0009, 0x0003}, {0x000a, 0x0001}, {0x000a, 0x0002}, {0x000a, 0x0003}, {0x000a, 0x0004}, {0x000a, 0x0005}, -}; - -const unsigned int c_aaiCQMFHuffDec1[4][16] = -{ - {0x0001ffff, 0x00000005, 0x00010001, 0x00010001, 0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x0003ffff, 0x0002ffff, 0x00010009, 0x00010009, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x00020006, 0x00020006, 0x00020006, 0x00020006, 0x00020008, 0x00020008, 0x00020008, 0x00020008, }, - {0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, }, - {0x00010003, 0x00010003, 0x00010007, 0x00010007, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, }, -}; - -const unsigned int c_aaiCQMFHuffEnc2[25][2] = -{ - {0x0001, 0x0001}, {0x0002, 0x0001}, {0x0006, 0x0001}, {0x000c, 0x0000}, {0x000c, 0x0001}, {0x0003, 0x0001}, {0x0004, 0x0001}, {0x0006, 0x0002}, - {0x000c, 0x0002}, {0x000c, 0x0003}, {0x0006, 0x0003}, {0x0007, 0x0001}, {0x0009, 0x0003}, {0x000c, 0x0004}, {0x000c, 0x0005}, {0x000c, 0x0006}, - {0x000b, 0x0004}, {0x000c, 0x0007}, {0x000b, 0x0005}, {0x000b, 0x0006}, {0x000b, 0x0007}, {0x000b, 0x0008}, {0x000b, 0x0009}, {0x000b, 0x000a}, - {0x000b, 0x000b}, - -}; - -const unsigned int c_aaiCQMFHuffDec2[4][16] = -{ - {0x0001ffff, 0x00000006, 0x00010005, 0x00010005, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x0003ffff, 0x0002ffff, 0x0001000b, 0x0001000b, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x00020007, 0x00020007, 0x00020007, 0x00020007, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, }, - {0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, - {0x00000003, 0x00000004, 0x00000008, 0x00000009, 0x0000000d, 0x0000000e, 0x0000000f, 0x00000011, 0x00010010, 0x00010010, 0x00010012, 0x00010012, 0x00010013, 0x00010013, 0x00010014, 0x00010014, }, -}; - -const unsigned int c_aaiCQMFHuffEnc3[36][2] = -{ - {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000b, 0x0006}, {0x000d, 0x0000}, {0x000d, 0x0001}, {0x0002, 0x0001}, {0x0004, 0x0001}, - {0x0007, 0x0001}, {0x000b, 0x0007}, {0x000d, 0x0002}, {0x000d, 0x0003}, {0x0006, 0x0002}, {0x0006, 0x0003}, {0x0009, 0x0003}, {0x000b, 0x0008}, - {0x000d, 0x0004}, {0x000d, 0x0005}, {0x000a, 0x0005}, {0x000c, 0x000a}, {0x000b, 0x0009}, {0x000d, 0x0006}, {0x000d, 0x0007}, {0x000d, 0x0008}, - {0x000d, 0x0009}, {0x000d, 0x000a}, {0x000d, 0x000b}, {0x000d, 0x000c}, {0x000d, 0x000d}, {0x000d, 0x000e}, {0x000d, 0x000f}, {0x000d, 0x0010}, - {0x000d, 0x0011}, {0x000d, 0x0012}, {0x000d, 0x0013}, {0x000c, 0x000b}, - -}; - -const unsigned int c_aaiCQMFHuffDec3[14][16] = -{ - {0x0001ffff, 0x00000007, 0x00010001, 0x00010001, 0x00020006, 0x00020006, 0x00020006, 0x00020006, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x0003ffff, 0x0002ffff, 0x00010008, 0x00010008, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, }, - {0x0001000f, 0x0001000f, 0x00010014, 0x00010014, 0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, - {0x0005ffff, 0x0006ffff, 0x0004ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000dffff, 0x00000013, 0x00000023, 0x00010003, 0x00010003, 0x00010009, 0x00010009, }, - {0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, - {0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, }, - {0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, - {0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, }, - {0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, }, - {0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, }, - {0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, }, - {0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, }, - {0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, }, - {0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, }, -}; - -const unsigned int c_aaiCQMFHuffEnc4[49][2] = -{ - {0x0001, 0x0001}, {0x0002, 0x0001}, {0x0006, 0x0001}, {0x000b, 0x0004}, {0x000f, 0x0000}, {0x000f, 0x0001}, {0x000f, 0x0002}, {0x0003, 0x0001}, - {0x0004, 0x0001}, {0x0007, 0x0001}, {0x000b, 0x0005}, {0x000f, 0x0003}, {0x000f, 0x0004}, {0x000f, 0x0005}, {0x0006, 0x0002}, {0x0006, 0x0003}, - {0x0008, 0x0001}, {0x000d, 0x000a}, {0x000f, 0x0006}, {0x000f, 0x0007}, {0x000f, 0x0008}, {0x000b, 0x0006}, {0x000b, 0x0007}, {0x000c, 0x0006}, - {0x000c, 0x0007}, {0x000f, 0x0009}, {0x000f, 0x000a}, {0x000f, 0x000b}, {0x000e, 0x000c}, {0x000d, 0x000b}, {0x000f, 0x000c}, {0x000f, 0x000d}, - {0x000f, 0x000e}, {0x000f, 0x000f}, {0x000f, 0x0010}, {0x000f, 0x0011}, {0x000f, 0x0012}, {0x000f, 0x0013}, {0x000f, 0x0014}, {0x000f, 0x0015}, - {0x000f, 0x0016}, {0x000f, 0x0017}, {0x000e, 0x000d}, {0x000e, 0x000e}, {0x000e, 0x000f}, {0x000e, 0x0010}, {0x000e, 0x0011}, {0x000e, 0x0012}, - {0x000e, 0x0013}, - -}; - -const unsigned int c_aaiCQMFHuffDec4[9][16] = -{ - {0x0001ffff, 0x00000008, 0x00010007, 0x00010007, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x0002ffff, 0x00000010, 0x00010009, 0x00010009, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, }, - {0x0007ffff, 0x0006ffff, 0x0008ffff, 0x0004ffff, 0x0005ffff, 0x0003ffff, 0x00000017, 0x00000018, 0x00010003, 0x00010003, 0x0001000a, 0x0001000a, 0x00010015, 0x00010015, 0x00010016, 0x00010016, }, - {0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, }, - {0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, }, - {0x0002002d, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002f, 0x0002002f, 0x0002002f, 0x0002002f, 0x00020030, 0x00020030, 0x00020030, 0x00020030, }, - {0x00010014, 0x00010014, 0x00010019, 0x00010019, 0x0001001a, 0x0001001a, 0x0001001b, 0x0001001b, 0x0001001e, 0x0001001e, 0x0001001f, 0x0001001f, 0x00010020, 0x00010020, 0x00010021, 0x00010021, }, - {0x00010004, 0x00010004, 0x00010005, 0x00010005, 0x00010006, 0x00010006, 0x0001000b, 0x0001000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x00010012, 0x00010012, 0x00010013, 0x00010013, }, - {0x00010022, 0x00010022, 0x00010023, 0x00010023, 0x00010024, 0x00010024, 0x00010025, 0x00010025, 0x00010026, 0x00010026, 0x00010027, 0x00010027, 0x00010028, 0x00010028, 0x00010029, 0x00010029, }, -}; - -const unsigned int c_aaiCQMFHuffEnc5[64][2] = -{ - {0x0001, 0x0001}, {0x0002, 0x0001}, {0x0006, 0x0001}, {0x000b, 0x0002}, {0x000f, 0x000c}, {0x0011, 0x0000}, {0x0011, 0x0001}, {0x0011, 0x0002}, - {0x0003, 0x0001}, {0x0004, 0x0001}, {0x0006, 0x0002}, {0x000a, 0x0002}, {0x0011, 0x0003}, {0x0011, 0x0004}, {0x0011, 0x0005}, {0x0011, 0x0006}, - {0x0006, 0x0003}, {0x0007, 0x0001}, {0x0008, 0x0001}, {0x000c, 0x0003}, {0x000f, 0x000d}, {0x0011, 0x0007}, {0x0011, 0x0008}, {0x0011, 0x0009}, - {0x000b, 0x0003}, {0x000a, 0x0003}, {0x000d, 0x0004}, {0x0011, 0x000a}, {0x0011, 0x000b}, {0x0011, 0x000c}, {0x0011, 0x000d}, {0x0011, 0x000e}, - {0x000e, 0x0007}, {0x000d, 0x0005}, {0x0010, 0x0015}, {0x0011, 0x000f}, {0x0011, 0x0010}, {0x0011, 0x0011}, {0x0011, 0x0012}, {0x0011, 0x0013}, - {0x0011, 0x0014}, {0x0011, 0x0015}, {0x0011, 0x0016}, {0x0011, 0x0017}, {0x0011, 0x0018}, {0x0011, 0x0019}, {0x0011, 0x001a}, {0x0011, 0x001b}, - {0x0011, 0x001c}, {0x0011, 0x001d}, {0x0011, 0x001e}, {0x0011, 0x001f}, {0x0011, 0x0020}, {0x0011, 0x0021}, {0x0011, 0x0022}, {0x0011, 0x0023}, - {0x0011, 0x0024}, {0x0011, 0x0025}, {0x0011, 0x0026}, {0x0011, 0x0027}, {0x0011, 0x0028}, {0x0011, 0x0029}, {0x0010, 0x0016}, {0x0010, 0x0017}, -}; - -const unsigned int c_aaiCQMFHuffDec5[27][16] = -{ - {0x0001ffff, 0x00000009, 0x00010008, 0x00010008, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x0002ffff, 0x00000012, 0x00010011, 0x00010011, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x00020010, 0x00020010, 0x00020010, 0x00020010, }, - {0x0005ffff, 0x0004ffff, 0x0003ffff, 0x00000013, 0x00010003, 0x00010003, 0x00010018, 0x00010018, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, 0x00020019, 0x00020019, 0x00020019, 0x00020019, }, - {0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, }, - {0x0016ffff, 0x0017ffff, 0x0018ffff, 0x0019ffff, 0x001affff, 0x00000022, 0x0000003e, 0x0000003f, 0x00010004, 0x00010004, 0x00010014, 0x00010014, 0x00020020, 0x00020020, 0x00020020, 0x00020020, }, - {0x0008ffff, 0x0007ffff, 0x0009ffff, 0x000dffff, 0x0006ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000effff, 0x000fffff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, }, - {0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, }, - {0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, - {0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, - {0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, - {0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, }, - {0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, }, - {0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, }, - {0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, }, - {0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, }, - {0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, }, - {0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, }, - {0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, }, - {0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, }, - {0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, }, - {0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, }, - {0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, }, - {0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, }, - {0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, }, - {0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, }, - {0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, }, - {0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, }, -}; - -const unsigned int c_aaiCQMFHuffEnc6[81][2] = -{ - {0x0001, 0x0001}, {0x0002, 0x0001}, {0x0006, 0x0001}, {0x000b, 0x0002}, {0x000e, 0x0005}, {0x0012, 0x0000}, {0x0012, 0x0001}, {0x0012, 0x0002}, - {0x0012, 0x0003}, {0x0003, 0x0001}, {0x0004, 0x0001}, {0x0007, 0x0001}, {0x000a, 0x0002}, {0x000e, 0x0006}, {0x0012, 0x0004}, {0x0012, 0x0005}, - {0x0012, 0x0006}, {0x0012, 0x0007}, {0x0006, 0x0002}, {0x0006, 0x0003}, {0x0008, 0x0001}, {0x000c, 0x0003}, {0x000f, 0x0008}, {0x0012, 0x0008}, - {0x0012, 0x0009}, {0x0012, 0x000a}, {0x0012, 0x000b}, {0x000b, 0x0003}, {0x000a, 0x0003}, {0x000d, 0x0005}, {0x000e, 0x0007}, {0x0011, 0x001c}, - {0x0012, 0x000c}, {0x0012, 0x000d}, {0x0012, 0x000e}, {0x0012, 0x000f}, {0x000e, 0x0008}, {0x000e, 0x0009}, {0x000f, 0x0009}, {0x0010, 0x000f}, - {0x0012, 0x0010}, {0x0012, 0x0011}, {0x0012, 0x0012}, {0x0012, 0x0013}, {0x0012, 0x0014}, {0x0012, 0x0015}, {0x0011, 0x001d}, {0x0012, 0x0016}, - {0x0012, 0x0017}, {0x0012, 0x0018}, {0x0012, 0x0019}, {0x0012, 0x001a}, {0x0012, 0x001b}, {0x0012, 0x001c}, {0x0012, 0x001d}, {0x0012, 0x001e}, - {0x0012, 0x001f}, {0x0012, 0x0020}, {0x0012, 0x0021}, {0x0012, 0x0022}, {0x0012, 0x0023}, {0x0012, 0x0024}, {0x0012, 0x0025}, {0x0012, 0x0026}, - {0x0012, 0x0027}, {0x0012, 0x0028}, {0x0012, 0x0029}, {0x0012, 0x002a}, {0x0012, 0x002b}, {0x0012, 0x002c}, {0x0012, 0x002d}, {0x0012, 0x002e}, - {0x0012, 0x002f}, {0x0012, 0x0030}, {0x0012, 0x0031}, {0x0012, 0x0032}, {0x0012, 0x0033}, {0x0012, 0x0034}, {0x0012, 0x0035}, {0x0012, 0x0036}, - {0x0012, 0x0037}, - -}; - -const unsigned int c_aaiCQMFHuffDec6[21][16] = -{ - {0x0001ffff, 0x0000000a, 0x00010009, 0x00010009, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x0002ffff, 0x00000014, 0x0001000b, 0x0001000b, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00020013, 0x00020013, 0x00020013, 0x00020013, }, - {0x0005ffff, 0x0004ffff, 0x0003ffff, 0x00000015, 0x00010003, 0x00010003, 0x0001001b, 0x0001001b, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, }, - {0x00020024, 0x00020024, 0x00020024, 0x00020024, 0x00020025, 0x00020025, 0x00020025, 0x00020025, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, }, - {0x00010016, 0x00010016, 0x00010026, 0x00010026, 0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, }, - {0x0008ffff, 0x0009ffff, 0x0007ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, 0x0006ffff, 0x00000027, }, - {0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, }, - {0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, }, - {0x00020005, 0x00020005, 0x00020005, 0x00020005, 0x00020006, 0x00020006, 0x00020006, 0x00020006, 0x00020007, 0x00020007, 0x00020007, 0x00020007, 0x00020008, 0x00020008, 0x00020008, 0x00020008, }, - {0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x00020011, 0x00020011, 0x00020011, 0x00020011, }, - {0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x00020023, 0x00020023, 0x00020023, 0x00020023, }, - {0x00020028, 0x00020028, 0x00020028, 0x00020028, 0x00020029, 0x00020029, 0x00020029, 0x00020029, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002b, }, - {0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002f, 0x0002002f, 0x0002002f, 0x0002002f, 0x00020030, 0x00020030, 0x00020030, 0x00020030, }, - {0x00020031, 0x00020031, 0x00020031, 0x00020031, 0x00020032, 0x00020032, 0x00020032, 0x00020032, 0x00020033, 0x00020033, 0x00020033, 0x00020033, 0x00020034, 0x00020034, 0x00020034, 0x00020034, }, - {0x00020035, 0x00020035, 0x00020035, 0x00020035, 0x00020036, 0x00020036, 0x00020036, 0x00020036, 0x00020037, 0x00020037, 0x00020037, 0x00020037, 0x00020038, 0x00020038, 0x00020038, 0x00020038, }, - {0x00020039, 0x00020039, 0x00020039, 0x00020039, 0x0002003a, 0x0002003a, 0x0002003a, 0x0002003a, 0x0002003b, 0x0002003b, 0x0002003b, 0x0002003b, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003c, }, - {0x0002003d, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002003f, 0x0002003f, 0x0002003f, 0x0002003f, 0x00020040, 0x00020040, 0x00020040, 0x00020040, }, - {0x00020041, 0x00020041, 0x00020041, 0x00020041, 0x00020042, 0x00020042, 0x00020042, 0x00020042, 0x00020043, 0x00020043, 0x00020043, 0x00020043, 0x00020044, 0x00020044, 0x00020044, 0x00020044, }, - {0x00020045, 0x00020045, 0x00020045, 0x00020045, 0x00020046, 0x00020046, 0x00020046, 0x00020046, 0x00020047, 0x00020047, 0x00020047, 0x00020047, 0x00020048, 0x00020048, 0x00020048, 0x00020048, }, - {0x00020049, 0x00020049, 0x00020049, 0x00020049, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004b, 0x0002004b, 0x0002004b, 0x0002004b, 0x0002004c, 0x0002004c, 0x0002004c, 0x0002004c, }, - {0x0002004d, 0x0002004d, 0x0002004d, 0x0002004d, 0x0002004e, 0x0002004e, 0x0002004e, 0x0002004e, 0x0002004f, 0x0002004f, 0x0002004f, 0x0002004f, 0x00020050, 0x00020050, 0x00020050, 0x00020050, }, -}; - -const unsigned int c_aaiCQMFHuffEnc7[81][2] = -{ - {0x0002, 0x0001}, {0x0002, 0x0002}, {0x0005, 0x0001}, {0x000a, 0x0002}, {0x000d, 0x0005}, {0x0012, 0x0000}, {0x0012, 0x0001}, {0x0012, 0x0002}, - {0x0012, 0x0003}, {0x0002, 0x0003}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x0009, 0x0002}, {0x000d, 0x0006}, {0x000f, 0x0009}, {0x0012, 0x0004}, - {0x0012, 0x0005}, {0x0012, 0x0006}, {0x0005, 0x0002}, {0x0005, 0x0003}, {0x0007, 0x0001}, {0x000b, 0x0002}, {0x000e, 0x0006}, {0x0011, 0x0018}, - {0x0011, 0x0019}, {0x0012, 0x0007}, {0x0012, 0x0008}, {0x000a, 0x0003}, {0x0009, 0x0003}, {0x000b, 0x0003}, {0x000e, 0x0007}, {0x000f, 0x000a}, - {0x0012, 0x0009}, {0x0012, 0x000a}, {0x0012, 0x000b}, {0x0012, 0x000c}, {0x000d, 0x0007}, {0x000e, 0x0008}, {0x000e, 0x0009}, {0x000f, 0x000b}, - {0x0011, 0x001a}, {0x0012, 0x000d}, {0x0012, 0x000e}, {0x0012, 0x000f}, {0x0012, 0x0010}, {0x0010, 0x000e}, {0x0012, 0x0011}, {0x0010, 0x000f}, - {0x0010, 0x0010}, {0x0012, 0x0012}, {0x0012, 0x0013}, {0x0012, 0x0014}, {0x0012, 0x0015}, {0x0012, 0x0016}, {0x0010, 0x0011}, {0x0012, 0x0017}, - {0x0012, 0x0018}, {0x0012, 0x0019}, {0x0012, 0x001a}, {0x0012, 0x001b}, {0x0012, 0x001c}, {0x0012, 0x001d}, {0x0012, 0x001e}, {0x0012, 0x001f}, - {0x0012, 0x0020}, {0x0012, 0x0021}, {0x0012, 0x0022}, {0x0012, 0x0023}, {0x0012, 0x0024}, {0x0012, 0x0025}, {0x0012, 0x0026}, {0x0012, 0x0027}, - {0x0012, 0x0028}, {0x0012, 0x0029}, {0x0012, 0x002a}, {0x0012, 0x002b}, {0x0012, 0x002c}, {0x0012, 0x002d}, {0x0012, 0x002e}, {0x0012, 0x002f}, - {0x0011, 0x001b}, - -}; - -const unsigned int c_aaiCQMFHuffDec7[23][16] = -{ - {0x0001ffff, 0x0002ffff, 0x0001000a, 0x0001000a, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00020009, 0x00020009, 0x00020009, 0x00020009, }, - {0x0004ffff, 0x0003ffff, 0x00010014, 0x00010014, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, }, - {0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, }, - {0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, }, - {0x0008ffff, 0x0007ffff, 0x0006ffff, 0x0005ffff, 0x00010015, 0x00010015, 0x0001001d, 0x0001001d, 0x00020003, 0x00020003, 0x00020003, 0x00020003, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, }, - {0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, }, - {0x00020025, 0x00020025, 0x00020025, 0x00020025, 0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, }, - {0x00000030, 0x00000036, 0x0001000e, 0x0001000e, 0x0001001f, 0x0001001f, 0x00010027, 0x00010027, 0x00020016, 0x00020016, 0x00020016, 0x00020016, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, }, - {0x000effff, 0x000dffff, 0x000bffff, 0x000cffff, 0x000fffff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, 0x0016ffff, 0x0009ffff, 0x000affff, 0x0000002d, 0x0000002f, }, - {0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, }, - {0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, }, - {0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, 0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, }, - {0x00020023, 0x00020023, 0x00020023, 0x00020023, 0x00020029, 0x00020029, 0x00020029, 0x00020029, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002b, }, - {0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x00020011, 0x00020011, 0x00020011, 0x00020011, 0x00020019, 0x00020019, 0x00020019, 0x00020019, }, - {0x00020005, 0x00020005, 0x00020005, 0x00020005, 0x00020006, 0x00020006, 0x00020006, 0x00020006, 0x00020007, 0x00020007, 0x00020007, 0x00020007, 0x00020008, 0x00020008, 0x00020008, 0x00020008, }, - {0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, 0x00020031, 0x00020031, 0x00020031, 0x00020031, 0x00020032, 0x00020032, 0x00020032, 0x00020032, }, - {0x00020033, 0x00020033, 0x00020033, 0x00020033, 0x00020034, 0x00020034, 0x00020034, 0x00020034, 0x00020035, 0x00020035, 0x00020035, 0x00020035, 0x00020037, 0x00020037, 0x00020037, 0x00020037, }, - {0x00020038, 0x00020038, 0x00020038, 0x00020038, 0x00020039, 0x00020039, 0x00020039, 0x00020039, 0x0002003a, 0x0002003a, 0x0002003a, 0x0002003a, 0x0002003b, 0x0002003b, 0x0002003b, 0x0002003b, }, - {0x0002003c, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002003f, 0x0002003f, 0x0002003f, 0x0002003f, }, - {0x00020040, 0x00020040, 0x00020040, 0x00020040, 0x00020041, 0x00020041, 0x00020041, 0x00020041, 0x00020042, 0x00020042, 0x00020042, 0x00020042, 0x00020043, 0x00020043, 0x00020043, 0x00020043, }, - {0x00020044, 0x00020044, 0x00020044, 0x00020044, 0x00020045, 0x00020045, 0x00020045, 0x00020045, 0x00020046, 0x00020046, 0x00020046, 0x00020046, 0x00020047, 0x00020047, 0x00020047, 0x00020047, }, - {0x00020048, 0x00020048, 0x00020048, 0x00020048, 0x00020049, 0x00020049, 0x00020049, 0x00020049, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004b, 0x0002004b, 0x0002004b, 0x0002004b, }, - {0x0002004c, 0x0002004c, 0x0002004c, 0x0002004c, 0x0002004d, 0x0002004d, 0x0002004d, 0x0002004d, 0x0002004e, 0x0002004e, 0x0002004e, 0x0002004e, 0x0002004f, 0x0002004f, 0x0002004f, 0x0002004f, }, -}; - -const unsigned int c_aaiCQMFHuffEnc8[121][2] = -{ - {0x0002, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000a, 0x0002}, {0x000d, 0x0003}, {0x0010, 0x0008}, {0x0014, 0x0000}, {0x0014, 0x0001}, - {0x0014, 0x0002}, {0x0014, 0x0003}, {0x0014, 0x0004}, {0x0002, 0x0002}, {0x0002, 0x0003}, {0x0005, 0x0001}, {0x0009, 0x0002}, {0x000d, 0x0004}, - {0x0010, 0x0009}, {0x0012, 0x0016}, {0x0014, 0x0005}, {0x0014, 0x0006}, {0x0014, 0x0007}, {0x0014, 0x0008}, {0x0005, 0x0002}, {0x0005, 0x0003}, - {0x0007, 0x0001}, {0x000b, 0x0002}, {0x000e, 0x0004}, {0x0010, 0x000a}, {0x0014, 0x0009}, {0x0014, 0x000a}, {0x0014, 0x000b}, {0x0014, 0x000c}, - {0x0014, 0x000d}, {0x000a, 0x0003}, {0x0009, 0x0003}, {0x000b, 0x0003}, {0x000d, 0x0005}, {0x0010, 0x000b}, {0x0012, 0x0017}, {0x0014, 0x000e}, - {0x0014, 0x000f}, {0x0014, 0x0010}, {0x0014, 0x0011}, {0x0014, 0x0012}, {0x000d, 0x0006}, {0x000d, 0x0007}, {0x000e, 0x0005}, {0x000f, 0x0006}, - {0x0011, 0x000d}, {0x0014, 0x0013}, {0x0014, 0x0014}, {0x0014, 0x0015}, {0x0014, 0x0016}, {0x0014, 0x0017}, {0x0014, 0x0018}, {0x0011, 0x000e}, - {0x000f, 0x0007}, {0x0011, 0x000f}, {0x0012, 0x0018}, {0x0012, 0x0019}, {0x0014, 0x0019}, {0x0014, 0x001a}, {0x0014, 0x001b}, {0x0014, 0x001c}, - {0x0014, 0x001d}, {0x0014, 0x001e}, {0x0013, 0x002a}, {0x0014, 0x001f}, {0x0014, 0x0020}, {0x0013, 0x002b}, {0x0014, 0x0021}, {0x0014, 0x0022}, - {0x0014, 0x0023}, {0x0014, 0x0024}, {0x0014, 0x0025}, {0x0014, 0x0026}, {0x0014, 0x0027}, {0x0014, 0x0028}, {0x0014, 0x0029}, {0x0014, 0x002a}, - {0x0014, 0x002b}, {0x0014, 0x002c}, {0x0014, 0x002d}, {0x0014, 0x002e}, {0x0014, 0x002f}, {0x0014, 0x0030}, {0x0014, 0x0031}, {0x0014, 0x0032}, - {0x0014, 0x0033}, {0x0014, 0x0034}, {0x0014, 0x0035}, {0x0014, 0x0036}, {0x0014, 0x0037}, {0x0014, 0x0038}, {0x0014, 0x0039}, {0x0014, 0x003a}, - {0x0014, 0x003b}, {0x0014, 0x003c}, {0x0014, 0x003d}, {0x0014, 0x003e}, {0x0014, 0x003f}, {0x0014, 0x0040}, {0x0014, 0x0041}, {0x0014, 0x0042}, - {0x0014, 0x0043}, {0x0014, 0x0044}, {0x0014, 0x0045}, {0x0014, 0x0046}, {0x0014, 0x0047}, {0x0014, 0x0048}, {0x0014, 0x0049}, {0x0014, 0x004a}, - {0x0014, 0x004b}, {0x0014, 0x004c}, {0x0014, 0x004d}, {0x0014, 0x004e}, {0x0014, 0x004f}, {0x0014, 0x0050}, {0x0014, 0x0051}, {0x0014, 0x0052}, - {0x0014, 0x0053}, - -}; - -const unsigned int c_aaiCQMFHuffDec8[17][16] = -{ - {0x0001ffff, 0x0002ffff, 0x00010001, 0x00010001, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, }, - {0x0004ffff, 0x0003ffff, 0x00010018, 0x00010018, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, }, - {0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, }, - {0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, }, - {0x0008ffff, 0x0006ffff, 0x0005ffff, 0x0007ffff, 0x00010019, 0x00010019, 0x00010023, 0x00010023, 0x00020003, 0x00020003, 0x00020003, 0x00020003, 0x00020021, 0x00020021, 0x00020021, 0x00020021, }, - {0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, }, - {0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, }, - {0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, }, - {0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x0010ffff, 0x000bffff, 0x0009ffff, 0x000affff, 0x00000005, 0x00000010, 0x0000001b, 0x00000025, 0x0001002f, 0x0001002f, 0x00010038, 0x00010038, }, - {0x0002003a, 0x0002003a, 0x0002003a, 0x0002003a, 0x0002003b, 0x0002003b, 0x0002003b, 0x0002003b, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, }, - {0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, }, - {0x00000075, 0x00000076, 0x00000077, 0x00000078, 0x00010042, 0x00010042, 0x00010045, 0x00010045, 0x00020011, 0x00020011, 0x00020011, 0x00020011, 0x00020026, 0x00020026, 0x00020026, 0x00020026, }, - {0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x0000000a, 0x00000012, 0x00000013, 0x00000014, 0x00000015, 0x0000001c, 0x0000001d, 0x0000001e, 0x0000001f, 0x00000020, 0x00000027, 0x00000028, }, - {0x00000029, 0x0000002a, 0x0000002b, 0x00000031, 0x00000032, 0x00000033, 0x00000034, 0x00000035, 0x00000036, 0x0000003c, 0x0000003d, 0x0000003e, 0x0000003f, 0x00000040, 0x00000041, 0x00000043, }, - {0x00000044, 0x00000046, 0x00000047, 0x00000048, 0x00000049, 0x0000004a, 0x0000004b, 0x0000004c, 0x0000004d, 0x0000004e, 0x0000004f, 0x00000050, 0x00000051, 0x00000052, 0x00000053, 0x00000054, }, - {0x00000055, 0x00000056, 0x00000057, 0x00000058, 0x00000059, 0x0000005a, 0x0000005b, 0x0000005c, 0x0000005d, 0x0000005e, 0x0000005f, 0x00000060, 0x00000061, 0x00000062, 0x00000063, 0x00000064, }, - {0x00000065, 0x00000066, 0x00000067, 0x00000068, 0x00000069, 0x0000006a, 0x0000006b, 0x0000006c, 0x0000006d, 0x0000006e, 0x0000006f, 0x00000070, 0x00000071, 0x00000072, 0x00000073, 0x00000074, }, -}; - -const unsigned int c_aaiCQMFHuffEnc9[196][2] = -{ - {0x0003, 0x0002}, {0x0002, 0x0002}, {0x0004, 0x0001}, {0x0008, 0x0002}, {0x000b, 0x0003}, {0x000f, 0x000e}, {0x0010, 0x0016}, {0x0013, 0x0000}, - {0x0012, 0x004a}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, {0x0003, 0x0003}, {0x0002, 0x0003}, - {0x0004, 0x0002}, {0x0008, 0x0003}, {0x000b, 0x0004}, {0x000e, 0x0009}, {0x0011, 0x0028}, {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0013, 0x0008}, - {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0013, 0x000c}, {0x0005, 0x0001}, {0x0004, 0x0003}, {0x0007, 0x0003}, {0x0009, 0x0002}, - {0x000c, 0x0004}, {0x000e, 0x000a}, {0x0010, 0x0017}, {0x0012, 0x004b}, {0x0013, 0x000d}, {0x0013, 0x000e}, {0x0013, 0x000f}, {0x0013, 0x0010}, - {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0008, 0x0004}, {0x0008, 0x0005}, {0x0009, 0x0003}, {0x000b, 0x0005}, {0x000e, 0x000b}, {0x000f, 0x000f}, - {0x0011, 0x0029}, {0x0013, 0x0013}, {0x0013, 0x0014}, {0x0013, 0x0015}, {0x0013, 0x0016}, {0x0013, 0x0017}, {0x0013, 0x0018}, {0x0013, 0x0019}, - {0x000b, 0x0006}, {0x000b, 0x0007}, {0x000c, 0x0005}, {0x000e, 0x000c}, {0x000f, 0x0010}, {0x0011, 0x002a}, {0x0012, 0x004c}, {0x0013, 0x001a}, - {0x0013, 0x001b}, {0x0013, 0x001c}, {0x0013, 0x001d}, {0x0013, 0x001e}, {0x0013, 0x001f}, {0x0013, 0x0020}, {0x000e, 0x000d}, {0x000d, 0x0007}, - {0x000f, 0x0011}, {0x0010, 0x0018}, {0x0012, 0x004d}, {0x0013, 0x0021}, {0x0012, 0x004e}, {0x0013, 0x0022}, {0x0013, 0x0023}, {0x0013, 0x0024}, - {0x0013, 0x0025}, {0x0013, 0x0026}, {0x0013, 0x0027}, {0x0013, 0x0028}, {0x0010, 0x0019}, {0x0010, 0x001a}, {0x0010, 0x001b}, {0x0012, 0x004f}, - {0x0013, 0x0029}, {0x0013, 0x002a}, {0x0013, 0x002b}, {0x0013, 0x002c}, {0x0013, 0x002d}, {0x0013, 0x002e}, {0x0013, 0x002f}, {0x0013, 0x0030}, - {0x0013, 0x0031}, {0x0013, 0x0032}, {0x0013, 0x0033}, {0x0013, 0x0034}, {0x0011, 0x002b}, {0x0013, 0x0035}, {0x0013, 0x0036}, {0x0013, 0x0037}, - {0x0013, 0x0038}, {0x0013, 0x0039}, {0x0013, 0x003a}, {0x0013, 0x003b}, {0x0013, 0x003c}, {0x0013, 0x003d}, {0x0013, 0x003e}, {0x0013, 0x003f}, - {0x0013, 0x0040}, {0x0013, 0x0041}, {0x0013, 0x0042}, {0x0013, 0x0043}, {0x0013, 0x0044}, {0x0013, 0x0045}, {0x0013, 0x0046}, {0x0013, 0x0047}, - {0x0013, 0x0048}, {0x0013, 0x0049}, {0x0013, 0x004a}, {0x0013, 0x004b}, {0x0013, 0x004c}, {0x0013, 0x004d}, {0x0013, 0x004e}, {0x0013, 0x004f}, - {0x0013, 0x0050}, {0x0013, 0x0051}, {0x0013, 0x0052}, {0x0013, 0x0053}, {0x0013, 0x0054}, {0x0013, 0x0055}, {0x0013, 0x0056}, {0x0013, 0x0057}, - {0x0013, 0x0058}, {0x0013, 0x0059}, {0x0013, 0x005a}, {0x0013, 0x005b}, {0x0013, 0x005c}, {0x0013, 0x005d}, {0x0013, 0x005e}, {0x0013, 0x005f}, - {0x0013, 0x0060}, {0x0013, 0x0061}, {0x0013, 0x0062}, {0x0013, 0x0063}, {0x0013, 0x0064}, {0x0013, 0x0065}, {0x0013, 0x0066}, {0x0013, 0x0067}, - {0x0013, 0x0068}, {0x0013, 0x0069}, {0x0013, 0x006a}, {0x0013, 0x006b}, {0x0013, 0x006c}, {0x0013, 0x006d}, {0x0013, 0x006e}, {0x0013, 0x006f}, - {0x0013, 0x0070}, {0x0013, 0x0071}, {0x0013, 0x0072}, {0x0013, 0x0073}, {0x0013, 0x0074}, {0x0013, 0x0075}, {0x0013, 0x0076}, {0x0013, 0x0077}, - {0x0013, 0x0078}, {0x0013, 0x0079}, {0x0013, 0x007a}, {0x0013, 0x007b}, {0x0013, 0x007c}, {0x0013, 0x007d}, {0x0013, 0x007e}, {0x0013, 0x007f}, - {0x0013, 0x0080}, {0x0013, 0x0081}, {0x0013, 0x0082}, {0x0013, 0x0083}, {0x0013, 0x0084}, {0x0013, 0x0085}, {0x0013, 0x0086}, {0x0013, 0x0087}, - {0x0013, 0x0088}, {0x0013, 0x0089}, {0x0013, 0x008a}, {0x0013, 0x008b}, {0x0013, 0x008c}, {0x0013, 0x008d}, {0x0013, 0x008e}, {0x0013, 0x008f}, - {0x0013, 0x0090}, {0x0013, 0x0091}, {0x0013, 0x0092}, {0x0013, 0x0093}, - -}; - -const unsigned int c_aaiCQMFHuffDec9[30][16] = -{ - {0x0001ffff, 0x00000002, 0x00000010, 0x0000001d, 0x00010000, 0x00010000, 0x0001000e, 0x0001000e, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, }, - {0x0003ffff, 0x0002ffff, 0x00000003, 0x00000011, 0x0000002a, 0x0000002b, 0x0001001e, 0x0001001e, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, }, - {0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, }, - {0x000bffff, 0x0006ffff, 0x0005ffff, 0x0004ffff, 0x00000020, 0x0000003a, 0x00010004, 0x00010004, 0x00010012, 0x00010012, 0x0001002d, 0x0001002d, 0x00010038, 0x00010038, 0x00010039, 0x00010039, }, - {0x0002003b, 0x0002003b, 0x0002003b, 0x0002003b, 0x00020046, 0x00020046, 0x00020046, 0x00020046, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, }, - {0x0001003c, 0x0001003c, 0x00010048, 0x00010048, 0x00020013, 0x00020013, 0x00020013, 0x00020013, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, }, - {0x001cffff, 0x001dffff, 0x0009ffff, 0x000affff, 0x0007ffff, 0x0008ffff, 0x00000006, 0x00000022, 0x00000049, 0x00000054, 0x00000055, 0x00000056, 0x00010005, 0x00010005, 0x0001002f, 0x0001002f, }, - {0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, }, - {0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x00030064, 0x00030064, 0x00030064, 0x00030064, 0x00030064, 0x00030064, 0x00030064, 0x00030064, }, - {0x000100c0, 0x000100c0, 0x000100c1, 0x000100c1, 0x000100c2, 0x000100c2, 0x000100c3, 0x000100c3, 0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x00020023, 0x00020023, 0x00020023, 0x00020023, }, - {0x0002003e, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004c, 0x0002004c, 0x0002004c, 0x0002004c, 0x00020057, 0x00020057, 0x00020057, 0x00020057, }, - {0x000fffff, 0x000cffff, 0x000dffff, 0x000effff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x0019ffff, 0x001affff, 0x001bffff, }, - {0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x0001001a, 0x0001001a, 0x0001001b, 0x0001001b, 0x00010024, 0x00010024, 0x00010025, 0x00010025, 0x00010026, 0x00010026, }, - {0x00010027, 0x00010027, 0x00010028, 0x00010028, 0x00010029, 0x00010029, 0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, }, - {0x00010036, 0x00010036, 0x00010037, 0x00010037, 0x0001003f, 0x0001003f, 0x00010040, 0x00010040, 0x00010041, 0x00010041, 0x00010042, 0x00010042, 0x00010043, 0x00010043, 0x00010044, 0x00010044, }, - {0x00010007, 0x00010007, 0x00010009, 0x00010009, 0x0001000a, 0x0001000a, 0x0001000b, 0x0001000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x00010015, 0x00010015, 0x00010016, 0x00010016, }, - {0x00010045, 0x00010045, 0x0001004b, 0x0001004b, 0x0001004d, 0x0001004d, 0x0001004e, 0x0001004e, 0x0001004f, 0x0001004f, 0x00010050, 0x00010050, 0x00010051, 0x00010051, 0x00010052, 0x00010052, }, - {0x00010053, 0x00010053, 0x00010058, 0x00010058, 0x00010059, 0x00010059, 0x0001005a, 0x0001005a, 0x0001005b, 0x0001005b, 0x0001005c, 0x0001005c, 0x0001005d, 0x0001005d, 0x0001005e, 0x0001005e, }, - {0x0001005f, 0x0001005f, 0x00010060, 0x00010060, 0x00010061, 0x00010061, 0x00010062, 0x00010062, 0x00010063, 0x00010063, 0x00010065, 0x00010065, 0x00010066, 0x00010066, 0x00010067, 0x00010067, }, - {0x00010068, 0x00010068, 0x00010069, 0x00010069, 0x0001006a, 0x0001006a, 0x0001006b, 0x0001006b, 0x0001006c, 0x0001006c, 0x0001006d, 0x0001006d, 0x0001006e, 0x0001006e, 0x0001006f, 0x0001006f, }, - {0x00010070, 0x00010070, 0x00010071, 0x00010071, 0x00010072, 0x00010072, 0x00010073, 0x00010073, 0x00010074, 0x00010074, 0x00010075, 0x00010075, 0x00010076, 0x00010076, 0x00010077, 0x00010077, }, - {0x00010078, 0x00010078, 0x00010079, 0x00010079, 0x0001007a, 0x0001007a, 0x0001007b, 0x0001007b, 0x0001007c, 0x0001007c, 0x0001007d, 0x0001007d, 0x0001007e, 0x0001007e, 0x0001007f, 0x0001007f, }, - {0x00010080, 0x00010080, 0x00010081, 0x00010081, 0x00010082, 0x00010082, 0x00010083, 0x00010083, 0x00010084, 0x00010084, 0x00010085, 0x00010085, 0x00010086, 0x00010086, 0x00010087, 0x00010087, }, - {0x00010088, 0x00010088, 0x00010089, 0x00010089, 0x0001008a, 0x0001008a, 0x0001008b, 0x0001008b, 0x0001008c, 0x0001008c, 0x0001008d, 0x0001008d, 0x0001008e, 0x0001008e, 0x0001008f, 0x0001008f, }, - {0x00010090, 0x00010090, 0x00010091, 0x00010091, 0x00010092, 0x00010092, 0x00010093, 0x00010093, 0x00010094, 0x00010094, 0x00010095, 0x00010095, 0x00010096, 0x00010096, 0x00010097, 0x00010097, }, - {0x00010098, 0x00010098, 0x00010099, 0x00010099, 0x0001009a, 0x0001009a, 0x0001009b, 0x0001009b, 0x0001009c, 0x0001009c, 0x0001009d, 0x0001009d, 0x0001009e, 0x0001009e, 0x0001009f, 0x0001009f, }, - {0x000100a0, 0x000100a0, 0x000100a1, 0x000100a1, 0x000100a2, 0x000100a2, 0x000100a3, 0x000100a3, 0x000100a4, 0x000100a4, 0x000100a5, 0x000100a5, 0x000100a6, 0x000100a6, 0x000100a7, 0x000100a7, }, - {0x000100a8, 0x000100a8, 0x000100a9, 0x000100a9, 0x000100aa, 0x000100aa, 0x000100ab, 0x000100ab, 0x000100ac, 0x000100ac, 0x000100ad, 0x000100ad, 0x000100ae, 0x000100ae, 0x000100af, 0x000100af, }, - {0x000100b0, 0x000100b0, 0x000100b1, 0x000100b1, 0x000100b2, 0x000100b2, 0x000100b3, 0x000100b3, 0x000100b4, 0x000100b4, 0x000100b5, 0x000100b5, 0x000100b6, 0x000100b6, 0x000100b7, 0x000100b7, }, - {0x000100b8, 0x000100b8, 0x000100b9, 0x000100b9, 0x000100ba, 0x000100ba, 0x000100bb, 0x000100bb, 0x000100bc, 0x000100bc, 0x000100bd, 0x000100bd, 0x000100be, 0x000100be, 0x000100bf, 0x000100bf, }, -}; - -const unsigned int c_aaiCQMFHuffEnc10[196][2] = -{ - {0x0003, 0x0003}, {0x0003, 0x0004}, {0x0004, 0x0002}, {0x0006, 0x0002}, {0x0009, 0x0003}, {0x000c, 0x0005}, {0x000f, 0x000e}, {0x000f, 0x000f}, - {0x0012, 0x003f}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0003, 0x0005}, {0x0002, 0x0003}, - {0x0004, 0x0003}, {0x0006, 0x0003}, {0x0009, 0x0004}, {0x000c, 0x0006}, {0x000e, 0x000b}, {0x000f, 0x0010}, {0x0013, 0x0005}, {0x0013, 0x0006}, - {0x0013, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0005, 0x0003}, {0x0007, 0x0002}, - {0x000a, 0x0004}, {0x000c, 0x0007}, {0x000e, 0x000c}, {0x0011, 0x0026}, {0x0011, 0x0027}, {0x0013, 0x000b}, {0x0013, 0x000c}, {0x0013, 0x000d}, - {0x0013, 0x000e}, {0x0013, 0x000f}, {0x0006, 0x0004}, {0x0006, 0x0005}, {0x0007, 0x0003}, {0x0009, 0x0005}, {0x000b, 0x0005}, {0x000d, 0x0008}, - {0x000f, 0x0011}, {0x0011, 0x0028}, {0x0013, 0x0010}, {0x0012, 0x0040}, {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0013, 0x0014}, - {0x0009, 0x0006}, {0x0009, 0x0007}, {0x000a, 0x0005}, {0x000b, 0x0006}, {0x000d, 0x0009}, {0x000f, 0x0012}, {0x0010, 0x0016}, {0x0013, 0x0015}, - {0x0011, 0x0029}, {0x0013, 0x0016}, {0x0013, 0x0017}, {0x0013, 0x0018}, {0x0013, 0x0019}, {0x0013, 0x001a}, {0x000c, 0x0008}, {0x000b, 0x0007}, - {0x000c, 0x0009}, {0x000e, 0x000d}, {0x000f, 0x0013}, {0x0010, 0x0017}, {0x0011, 0x002a}, {0x0013, 0x001b}, {0x0013, 0x001c}, {0x0012, 0x0041}, - {0x0013, 0x001d}, {0x0013, 0x001e}, {0x0013, 0x001f}, {0x0013, 0x0020}, {0x000f, 0x0014}, {0x000e, 0x000e}, {0x000e, 0x000f}, {0x000f, 0x0015}, - {0x0012, 0x0042}, {0x0010, 0x0018}, {0x0013, 0x0021}, {0x0013, 0x0022}, {0x0013, 0x0023}, {0x0013, 0x0024}, {0x0013, 0x0025}, {0x0013, 0x0026}, - {0x0013, 0x0027}, {0x0013, 0x0028}, {0x0013, 0x0029}, {0x0010, 0x0019}, {0x0010, 0x001a}, {0x0011, 0x002b}, {0x0010, 0x001b}, {0x0012, 0x0043}, - {0x0013, 0x002a}, {0x0013, 0x002b}, {0x0013, 0x002c}, {0x0013, 0x002d}, {0x0013, 0x002e}, {0x0013, 0x002f}, {0x0013, 0x0030}, {0x0013, 0x0031}, - {0x0012, 0x0044}, {0x0012, 0x0045}, {0x0013, 0x0032}, {0x0013, 0x0033}, {0x0013, 0x0034}, {0x0012, 0x0046}, {0x0013, 0x0035}, {0x0013, 0x0036}, - {0x0013, 0x0037}, {0x0013, 0x0038}, {0x0013, 0x0039}, {0x0013, 0x003a}, {0x0013, 0x003b}, {0x0013, 0x003c}, {0x0013, 0x003d}, {0x0013, 0x003e}, - {0x0013, 0x003f}, {0x0013, 0x0040}, {0x0013, 0x0041}, {0x0013, 0x0042}, {0x0013, 0x0043}, {0x0013, 0x0044}, {0x0013, 0x0045}, {0x0013, 0x0046}, - {0x0013, 0x0047}, {0x0013, 0x0048}, {0x0013, 0x0049}, {0x0013, 0x004a}, {0x0013, 0x004b}, {0x0013, 0x004c}, {0x0013, 0x004d}, {0x0013, 0x004e}, - {0x0013, 0x004f}, {0x0013, 0x0050}, {0x0013, 0x0051}, {0x0013, 0x0052}, {0x0013, 0x0053}, {0x0013, 0x0054}, {0x0013, 0x0055}, {0x0013, 0x0056}, - {0x0013, 0x0057}, {0x0013, 0x0058}, {0x0013, 0x0059}, {0x0013, 0x005a}, {0x0013, 0x005b}, {0x0013, 0x005c}, {0x0013, 0x005d}, {0x0013, 0x005e}, - {0x0013, 0x005f}, {0x0013, 0x0060}, {0x0013, 0x0061}, {0x0013, 0x0062}, {0x0013, 0x0063}, {0x0013, 0x0064}, {0x0013, 0x0065}, {0x0013, 0x0066}, - {0x0013, 0x0067}, {0x0013, 0x0068}, {0x0013, 0x0069}, {0x0013, 0x006a}, {0x0013, 0x006b}, {0x0013, 0x006c}, {0x0013, 0x006d}, {0x0013, 0x006e}, - {0x0013, 0x006f}, {0x0013, 0x0070}, {0x0013, 0x0071}, {0x0013, 0x0072}, {0x0013, 0x0073}, {0x0013, 0x0074}, {0x0013, 0x0075}, {0x0013, 0x0076}, - {0x0013, 0x0077}, {0x0013, 0x0078}, {0x0013, 0x0079}, {0x0013, 0x007a}, {0x0013, 0x007b}, {0x0013, 0x007c}, {0x0013, 0x007d}, {0x0012, 0x0047}, - {0x0012, 0x0048}, {0x0012, 0x0049}, {0x0012, 0x004a}, {0x0012, 0x004b}, - -}; - -const unsigned int c_aaiCQMFHuffDec10[34][16] = -{ - {0x0002ffff, 0x0001ffff, 0x00000002, 0x00000010, 0x0000001c, 0x0000001d, 0x00010000, 0x00010000, 0x00010001, 0x00010001, 0x0001000e, 0x0001000e, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, }, - {0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002b, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, }, - {0x0006ffff, 0x0004ffff, 0x0003ffff, 0x0005ffff, 0x0001001f, 0x0001001f, 0x0001002c, 0x0001002c, 0x00020003, 0x00020003, 0x00020003, 0x00020003, 0x00020011, 0x00020011, 0x00020011, 0x00020011, }, - {0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, }, - {0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x0002003a, 0x0002003a, 0x0002003a, 0x0002003a, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, }, - {0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, }, - {0x000fffff, 0x000affff, 0x0008ffff, 0x0009ffff, 0x0007ffff, 0x00000005, 0x00000013, 0x00000021, 0x00000046, 0x00000048, 0x0001002e, 0x0001002e, 0x0001003b, 0x0001003b, 0x00010047, 0x00010047, }, - {0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, }, - {0x00010015, 0x00010015, 0x00010030, 0x00010030, 0x0001003d, 0x0001003d, 0x0001004a, 0x0001004a, 0x00010054, 0x00010054, 0x00010057, 0x00010057, 0x00020014, 0x00020014, 0x00020014, 0x00020014, }, - {0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x00020049, 0x00020049, 0x00020049, 0x00020049, 0x00020055, 0x00020055, 0x00020055, 0x00020055, 0x00020056, 0x00020056, 0x00020056, 0x00020056, }, - {0x000effff, 0x0011ffff, 0x0012ffff, 0x000dffff, 0x000bffff, 0x000cffff, 0x0000003e, 0x0000004b, 0x00000059, 0x00000063, 0x00000064, 0x00000066, 0x00010006, 0x00010006, 0x00010007, 0x00010007, }, - {0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, }, - {0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, }, - {0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, }, - {0x00020033, 0x00020033, 0x00020033, 0x00020033, 0x0002004f, 0x0002004f, 0x0002004f, 0x0002004f, 0x00020058, 0x00020058, 0x00020058, 0x00020058, 0x00020067, 0x00020067, 0x00020067, 0x00020067, }, - {0x0014ffff, 0x0013ffff, 0x0015ffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x0019ffff, 0x001affff, 0x001bffff, 0x001cffff, 0x001dffff, 0x001effff, 0x001fffff, 0x0020ffff, 0x0021ffff, 0x0010ffff, }, - {0x000100b9, 0x000100b9, 0x000100ba, 0x000100ba, 0x000100bb, 0x000100bb, 0x000100bc, 0x000100bc, 0x000100bd, 0x000100bd, 0x000100be, 0x000100be, 0x00020008, 0x00020008, 0x00020008, 0x00020008, }, - {0x00020070, 0x00020070, 0x00020070, 0x00020070, 0x00020071, 0x00020071, 0x00020071, 0x00020071, 0x00020075, 0x00020075, 0x00020075, 0x00020075, 0x000200bf, 0x000200bf, 0x000200bf, 0x000200bf, }, - {0x000200c0, 0x000200c0, 0x000200c0, 0x000200c0, 0x000200c1, 0x000200c1, 0x000200c1, 0x000200c1, 0x000200c2, 0x000200c2, 0x000200c2, 0x000200c2, 0x000200c3, 0x000200c3, 0x000200c3, 0x000200c3, }, - {0x00010019, 0x00010019, 0x0001001a, 0x0001001a, 0x0001001b, 0x0001001b, 0x00010025, 0x00010025, 0x00010026, 0x00010026, 0x00010027, 0x00010027, 0x00010028, 0x00010028, 0x00010029, 0x00010029, }, - {0x00010009, 0x00010009, 0x0001000a, 0x0001000a, 0x0001000b, 0x0001000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, }, - {0x00010032, 0x00010032, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x00010036, 0x00010036, 0x00010037, 0x00010037, 0x0001003f, 0x0001003f, 0x00010041, 0x00010041, 0x00010042, 0x00010042, }, - {0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, 0x0001004d, 0x0001004d, 0x0001004e, 0x0001004e, 0x00010050, 0x00010050, 0x00010051, 0x00010051, 0x00010052, 0x00010052, }, - {0x00010053, 0x00010053, 0x0001005a, 0x0001005a, 0x0001005b, 0x0001005b, 0x0001005c, 0x0001005c, 0x0001005d, 0x0001005d, 0x0001005e, 0x0001005e, 0x0001005f, 0x0001005f, 0x00010060, 0x00010060, }, - {0x00010061, 0x00010061, 0x00010062, 0x00010062, 0x00010068, 0x00010068, 0x00010069, 0x00010069, 0x0001006a, 0x0001006a, 0x0001006b, 0x0001006b, 0x0001006c, 0x0001006c, 0x0001006d, 0x0001006d, }, - {0x0001006e, 0x0001006e, 0x0001006f, 0x0001006f, 0x00010072, 0x00010072, 0x00010073, 0x00010073, 0x00010074, 0x00010074, 0x00010076, 0x00010076, 0x00010077, 0x00010077, 0x00010078, 0x00010078, }, - {0x00010079, 0x00010079, 0x0001007a, 0x0001007a, 0x0001007b, 0x0001007b, 0x0001007c, 0x0001007c, 0x0001007d, 0x0001007d, 0x0001007e, 0x0001007e, 0x0001007f, 0x0001007f, 0x00010080, 0x00010080, }, - {0x00010081, 0x00010081, 0x00010082, 0x00010082, 0x00010083, 0x00010083, 0x00010084, 0x00010084, 0x00010085, 0x00010085, 0x00010086, 0x00010086, 0x00010087, 0x00010087, 0x00010088, 0x00010088, }, - {0x00010089, 0x00010089, 0x0001008a, 0x0001008a, 0x0001008b, 0x0001008b, 0x0001008c, 0x0001008c, 0x0001008d, 0x0001008d, 0x0001008e, 0x0001008e, 0x0001008f, 0x0001008f, 0x00010090, 0x00010090, }, - {0x00010091, 0x00010091, 0x00010092, 0x00010092, 0x00010093, 0x00010093, 0x00010094, 0x00010094, 0x00010095, 0x00010095, 0x00010096, 0x00010096, 0x00010097, 0x00010097, 0x00010098, 0x00010098, }, - {0x00010099, 0x00010099, 0x0001009a, 0x0001009a, 0x0001009b, 0x0001009b, 0x0001009c, 0x0001009c, 0x0001009d, 0x0001009d, 0x0001009e, 0x0001009e, 0x0001009f, 0x0001009f, 0x000100a0, 0x000100a0, }, - {0x000100a1, 0x000100a1, 0x000100a2, 0x000100a2, 0x000100a3, 0x000100a3, 0x000100a4, 0x000100a4, 0x000100a5, 0x000100a5, 0x000100a6, 0x000100a6, 0x000100a7, 0x000100a7, 0x000100a8, 0x000100a8, }, - {0x000100a9, 0x000100a9, 0x000100aa, 0x000100aa, 0x000100ab, 0x000100ab, 0x000100ac, 0x000100ac, 0x000100ad, 0x000100ad, 0x000100ae, 0x000100ae, 0x000100af, 0x000100af, 0x000100b0, 0x000100b0, }, - {0x000100b1, 0x000100b1, 0x000100b2, 0x000100b2, 0x000100b3, 0x000100b3, 0x000100b4, 0x000100b4, 0x000100b5, 0x000100b5, 0x000100b6, 0x000100b6, 0x000100b7, 0x000100b7, 0x000100b8, 0x000100b8, }, -}; - -const unsigned int c_aaiCQMFHuffEnc11[256][2] = -{ - {0x0004, 0x0003}, {0x0003, 0x0003}, {0x0004, 0x0004}, {0x0006, 0x0002}, {0x0008, 0x0003}, {0x000b, 0x0004}, {0x000e, 0x000c}, {0x0010, 0x001e}, - {0x0013, 0x0000}, {0x0012, 0x005b}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, {0x0013, 0x0006}, - {0x0003, 0x0004}, {0x0003, 0x0005}, {0x0003, 0x0006}, {0x0005, 0x0003}, {0x0008, 0x0004}, {0x000a, 0x0004}, {0x000d, 0x0009}, {0x000f, 0x0011}, - {0x0013, 0x0007}, {0x0012, 0x005c}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0013, 0x000c}, {0x0013, 0x000d}, - {0x0004, 0x0005}, {0x0003, 0x0007}, {0x0005, 0x0004}, {0x0006, 0x0003}, {0x0009, 0x0004}, {0x000b, 0x0005}, {0x000e, 0x000d}, {0x000f, 0x0012}, - {0x0012, 0x005d}, {0x0013, 0x000e}, {0x0013, 0x000f}, {0x0013, 0x0010}, {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0013, 0x0014}, - {0x0006, 0x0004}, {0x0005, 0x0005}, {0x0006, 0x0005}, {0x0008, 0x0005}, {0x000a, 0x0005}, {0x000d, 0x000a}, {0x000f, 0x0013}, {0x0011, 0x0035}, - {0x0013, 0x0015}, {0x0013, 0x0016}, {0x0013, 0x0017}, {0x0013, 0x0018}, {0x0013, 0x0019}, {0x0013, 0x001a}, {0x0013, 0x001b}, {0x0013, 0x001c}, - {0x0008, 0x0006}, {0x0008, 0x0007}, {0x0009, 0x0005}, {0x000a, 0x0006}, {0x000c, 0x0006}, {0x000e, 0x000e}, {0x000f, 0x0014}, {0x0011, 0x0036}, - {0x0012, 0x005e}, {0x0013, 0x001d}, {0x0013, 0x001e}, {0x0013, 0x001f}, {0x0013, 0x0020}, {0x0013, 0x0021}, {0x0013, 0x0022}, {0x0013, 0x0023}, - {0x000b, 0x0006}, {0x000a, 0x0007}, {0x000b, 0x0007}, {0x000c, 0x0007}, {0x000e, 0x000f}, {0x000f, 0x0015}, {0x0011, 0x0037}, {0x0012, 0x005f}, - {0x0013, 0x0024}, {0x0013, 0x0025}, {0x0013, 0x0026}, {0x0013, 0x0027}, {0x0013, 0x0028}, {0x0013, 0x0029}, {0x0013, 0x002a}, {0x0013, 0x002b}, - {0x000e, 0x0010}, {0x000d, 0x000b}, {0x000e, 0x0011}, {0x000f, 0x0016}, {0x0010, 0x001f}, {0x0012, 0x0060}, {0x0011, 0x0038}, {0x0012, 0x0061}, - {0x0013, 0x002c}, {0x0013, 0x002d}, {0x0013, 0x002e}, {0x0013, 0x002f}, {0x0013, 0x0030}, {0x0013, 0x0031}, {0x0013, 0x0032}, {0x0013, 0x0033}, - {0x0010, 0x0020}, {0x000f, 0x0017}, {0x0010, 0x0021}, {0x0011, 0x0039}, {0x0011, 0x003a}, {0x0012, 0x0062}, {0x0013, 0x0034}, {0x0013, 0x0035}, - {0x0013, 0x0036}, {0x0013, 0x0037}, {0x0013, 0x0038}, {0x0013, 0x0039}, {0x0013, 0x003a}, {0x0013, 0x003b}, {0x0013, 0x003c}, {0x0013, 0x003d}, - {0x0012, 0x0063}, {0x0011, 0x003b}, {0x0012, 0x0064}, {0x0012, 0x0065}, {0x0013, 0x003e}, {0x0013, 0x003f}, {0x0013, 0x0040}, {0x0013, 0x0041}, - {0x0013, 0x0042}, {0x0013, 0x0043}, {0x0013, 0x0044}, {0x0013, 0x0045}, {0x0013, 0x0046}, {0x0013, 0x0047}, {0x0013, 0x0048}, {0x0013, 0x0049}, - {0x0013, 0x004a}, {0x0012, 0x0066}, {0x0013, 0x004b}, {0x0012, 0x0067}, {0x0012, 0x0068}, {0x0013, 0x004c}, {0x0013, 0x004d}, {0x0013, 0x004e}, - {0x0013, 0x004f}, {0x0013, 0x0050}, {0x0013, 0x0051}, {0x0013, 0x0052}, {0x0013, 0x0053}, {0x0013, 0x0054}, {0x0013, 0x0055}, {0x0013, 0x0056}, - {0x0013, 0x0057}, {0x0012, 0x0069}, {0x0013, 0x0058}, {0x0013, 0x0059}, {0x0013, 0x005a}, {0x0013, 0x005b}, {0x0013, 0x005c}, {0x0013, 0x005d}, - {0x0013, 0x005e}, {0x0013, 0x005f}, {0x0013, 0x0060}, {0x0013, 0x0061}, {0x0013, 0x0062}, {0x0013, 0x0063}, {0x0013, 0x0064}, {0x0013, 0x0065}, - {0x0013, 0x0066}, {0x0013, 0x0067}, {0x0013, 0x0068}, {0x0013, 0x0069}, {0x0013, 0x006a}, {0x0013, 0x006b}, {0x0013, 0x006c}, {0x0013, 0x006d}, - {0x0013, 0x006e}, {0x0013, 0x006f}, {0x0013, 0x0070}, {0x0013, 0x0071}, {0x0013, 0x0072}, {0x0013, 0x0073}, {0x0013, 0x0074}, {0x0013, 0x0075}, - {0x0013, 0x0076}, {0x0013, 0x0077}, {0x0013, 0x0078}, {0x0013, 0x0079}, {0x0013, 0x007a}, {0x0013, 0x007b}, {0x0013, 0x007c}, {0x0013, 0x007d}, - {0x0013, 0x007e}, {0x0013, 0x007f}, {0x0013, 0x0080}, {0x0013, 0x0081}, {0x0013, 0x0082}, {0x0013, 0x0083}, {0x0013, 0x0084}, {0x0013, 0x0085}, - {0x0013, 0x0086}, {0x0013, 0x0087}, {0x0013, 0x0088}, {0x0013, 0x0089}, {0x0013, 0x008a}, {0x0013, 0x008b}, {0x0013, 0x008c}, {0x0013, 0x008d}, - {0x0013, 0x008e}, {0x0013, 0x008f}, {0x0013, 0x0090}, {0x0013, 0x0091}, {0x0013, 0x0092}, {0x0013, 0x0093}, {0x0013, 0x0094}, {0x0013, 0x0095}, - {0x0013, 0x0096}, {0x0013, 0x0097}, {0x0013, 0x0098}, {0x0013, 0x0099}, {0x0013, 0x009a}, {0x0013, 0x009b}, {0x0013, 0x009c}, {0x0013, 0x009d}, - {0x0013, 0x009e}, {0x0013, 0x009f}, {0x0013, 0x00a0}, {0x0013, 0x00a1}, {0x0013, 0x00a2}, {0x0013, 0x00a3}, {0x0013, 0x00a4}, {0x0013, 0x00a5}, - {0x0013, 0x00a6}, {0x0013, 0x00a7}, {0x0013, 0x00a8}, {0x0013, 0x00a9}, {0x0013, 0x00aa}, {0x0013, 0x00ab}, {0x0013, 0x00ac}, {0x0013, 0x00ad}, - {0x0013, 0x00ae}, {0x0013, 0x00af}, {0x0013, 0x00b0}, {0x0013, 0x00b1}, {0x0013, 0x00b2}, {0x0013, 0x00b3}, {0x0013, 0x00b4}, {0x0013, 0x00b5}, -}; - -const unsigned int c_aaiCQMFHuffDec11[43][16] = -{ - {0x0003ffff, 0x0001ffff, 0x0002ffff, 0x00000000, 0x00000002, 0x00000020, 0x00010001, 0x00010001, 0x00010010, 0x00010010, 0x00010011, 0x00010011, 0x00010012, 0x00010012, 0x00010021, 0x00010021, }, - {0x00020030, 0x00020030, 0x00020030, 0x00020030, 0x00020032, 0x00020032, 0x00020032, 0x00020032, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, }, - {0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, }, - {0x0006ffff, 0x0005ffff, 0x0004ffff, 0x00000004, 0x00000014, 0x00000033, 0x00000040, 0x00000041, 0x00020003, 0x00020003, 0x00020003, 0x00020003, 0x00020023, 0x00020023, 0x00020023, 0x00020023, }, - {0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, }, - {0x00020015, 0x00020015, 0x00020015, 0x00020015, 0x00020034, 0x00020034, 0x00020034, 0x00020034, 0x00020043, 0x00020043, 0x00020043, 0x00020043, 0x00020051, 0x00020051, 0x00020051, 0x00020051, }, - {0x0014ffff, 0x000bffff, 0x000affff, 0x0009ffff, 0x0007ffff, 0x0008ffff, 0x00000044, 0x00000053, 0x00010005, 0x00010005, 0x00010025, 0x00010025, 0x00010050, 0x00010050, 0x00010052, 0x00010052, }, - {0x00020060, 0x00020060, 0x00020060, 0x00020060, 0x00020062, 0x00020062, 0x00020062, 0x00020062, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, }, - {0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, }, - {0x00020006, 0x00020006, 0x00020006, 0x00020006, 0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00020045, 0x00020045, 0x00020045, 0x00020045, 0x00020054, 0x00020054, 0x00020054, 0x00020054, }, - {0x00000070, 0x00000072, 0x00010017, 0x00010017, 0x00010027, 0x00010027, 0x00010036, 0x00010036, 0x00010046, 0x00010046, 0x00010055, 0x00010055, 0x00010063, 0x00010063, 0x00010071, 0x00010071, }, - {0x0025ffff, 0x0026ffff, 0x0027ffff, 0x0028ffff, 0x0029ffff, 0x002affff, 0x0011ffff, 0x0010ffff, 0x0012ffff, 0x0013ffff, 0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x00000007, 0x00000064, }, - {0x00020094, 0x00020094, 0x00020094, 0x00020094, 0x000200a1, 0x000200a1, 0x000200a1, 0x000200a1, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, }, - {0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, }, - {0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, }, - {0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, }, - {0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x00020028, 0x00020028, 0x00020028, 0x00020028, 0x00020048, 0x00020048, 0x00020048, 0x00020048, 0x00020057, 0x00020057, 0x00020057, 0x00020057, }, - {0x000100fa, 0x000100fa, 0x000100fb, 0x000100fb, 0x000100fc, 0x000100fc, 0x000100fd, 0x000100fd, 0x000100fe, 0x000100fe, 0x000100ff, 0x000100ff, 0x00020009, 0x00020009, 0x00020009, 0x00020009, }, - {0x00020065, 0x00020065, 0x00020065, 0x00020065, 0x00020067, 0x00020067, 0x00020067, 0x00020067, 0x00020075, 0x00020075, 0x00020075, 0x00020075, 0x00020080, 0x00020080, 0x00020080, 0x00020080, }, - {0x00020082, 0x00020082, 0x00020082, 0x00020082, 0x00020083, 0x00020083, 0x00020083, 0x00020083, 0x00020091, 0x00020091, 0x00020091, 0x00020091, 0x00020093, 0x00020093, 0x00020093, 0x00020093, }, - {0x0018ffff, 0x0017ffff, 0x0019ffff, 0x0015ffff, 0x0016ffff, 0x001affff, 0x001bffff, 0x001cffff, 0x001dffff, 0x001effff, 0x001fffff, 0x0020ffff, 0x0021ffff, 0x0022ffff, 0x0023ffff, 0x0024ffff, }, - {0x0001003b, 0x0001003b, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, 0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x00010049, 0x00010049, 0x0001004a, 0x0001004a, 0x0001004b, 0x0001004b, }, - {0x0001004c, 0x0001004c, 0x0001004d, 0x0001004d, 0x0001004e, 0x0001004e, 0x0001004f, 0x0001004f, 0x00010058, 0x00010058, 0x00010059, 0x00010059, 0x0001005a, 0x0001005a, 0x0001005b, 0x0001005b, }, - {0x0001001a, 0x0001001a, 0x0001001b, 0x0001001b, 0x0001001c, 0x0001001c, 0x0001001d, 0x0001001d, 0x0001001e, 0x0001001e, 0x0001001f, 0x0001001f, 0x00010029, 0x00010029, 0x0001002a, 0x0001002a, }, - {0x00010008, 0x00010008, 0x0001000a, 0x0001000a, 0x0001000b, 0x0001000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, 0x00010018, 0x00010018, }, - {0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, 0x0001002e, 0x0001002e, 0x0001002f, 0x0001002f, 0x00010038, 0x00010038, 0x00010039, 0x00010039, 0x0001003a, 0x0001003a, }, - {0x0001005c, 0x0001005c, 0x0001005d, 0x0001005d, 0x0001005e, 0x0001005e, 0x0001005f, 0x0001005f, 0x00010068, 0x00010068, 0x00010069, 0x00010069, 0x0001006a, 0x0001006a, 0x0001006b, 0x0001006b, }, - {0x0001006c, 0x0001006c, 0x0001006d, 0x0001006d, 0x0001006e, 0x0001006e, 0x0001006f, 0x0001006f, 0x00010076, 0x00010076, 0x00010077, 0x00010077, 0x00010078, 0x00010078, 0x00010079, 0x00010079, }, - {0x0001007a, 0x0001007a, 0x0001007b, 0x0001007b, 0x0001007c, 0x0001007c, 0x0001007d, 0x0001007d, 0x0001007e, 0x0001007e, 0x0001007f, 0x0001007f, 0x00010084, 0x00010084, 0x00010085, 0x00010085, }, - {0x00010086, 0x00010086, 0x00010087, 0x00010087, 0x00010088, 0x00010088, 0x00010089, 0x00010089, 0x0001008a, 0x0001008a, 0x0001008b, 0x0001008b, 0x0001008c, 0x0001008c, 0x0001008d, 0x0001008d, }, - {0x0001008e, 0x0001008e, 0x0001008f, 0x0001008f, 0x00010090, 0x00010090, 0x00010092, 0x00010092, 0x00010095, 0x00010095, 0x00010096, 0x00010096, 0x00010097, 0x00010097, 0x00010098, 0x00010098, }, - {0x00010099, 0x00010099, 0x0001009a, 0x0001009a, 0x0001009b, 0x0001009b, 0x0001009c, 0x0001009c, 0x0001009d, 0x0001009d, 0x0001009e, 0x0001009e, 0x0001009f, 0x0001009f, 0x000100a0, 0x000100a0, }, - {0x000100a2, 0x000100a2, 0x000100a3, 0x000100a3, 0x000100a4, 0x000100a4, 0x000100a5, 0x000100a5, 0x000100a6, 0x000100a6, 0x000100a7, 0x000100a7, 0x000100a8, 0x000100a8, 0x000100a9, 0x000100a9, }, - {0x000100aa, 0x000100aa, 0x000100ab, 0x000100ab, 0x000100ac, 0x000100ac, 0x000100ad, 0x000100ad, 0x000100ae, 0x000100ae, 0x000100af, 0x000100af, 0x000100b0, 0x000100b0, 0x000100b1, 0x000100b1, }, - {0x000100b2, 0x000100b2, 0x000100b3, 0x000100b3, 0x000100b4, 0x000100b4, 0x000100b5, 0x000100b5, 0x000100b6, 0x000100b6, 0x000100b7, 0x000100b7, 0x000100b8, 0x000100b8, 0x000100b9, 0x000100b9, }, - {0x000100ba, 0x000100ba, 0x000100bb, 0x000100bb, 0x000100bc, 0x000100bc, 0x000100bd, 0x000100bd, 0x000100be, 0x000100be, 0x000100bf, 0x000100bf, 0x000100c0, 0x000100c0, 0x000100c1, 0x000100c1, }, - {0x000100c2, 0x000100c2, 0x000100c3, 0x000100c3, 0x000100c4, 0x000100c4, 0x000100c5, 0x000100c5, 0x000100c6, 0x000100c6, 0x000100c7, 0x000100c7, 0x000100c8, 0x000100c8, 0x000100c9, 0x000100c9, }, - {0x000100ca, 0x000100ca, 0x000100cb, 0x000100cb, 0x000100cc, 0x000100cc, 0x000100cd, 0x000100cd, 0x000100ce, 0x000100ce, 0x000100cf, 0x000100cf, 0x000100d0, 0x000100d0, 0x000100d1, 0x000100d1, }, - {0x000100d2, 0x000100d2, 0x000100d3, 0x000100d3, 0x000100d4, 0x000100d4, 0x000100d5, 0x000100d5, 0x000100d6, 0x000100d6, 0x000100d7, 0x000100d7, 0x000100d8, 0x000100d8, 0x000100d9, 0x000100d9, }, - {0x000100da, 0x000100da, 0x000100db, 0x000100db, 0x000100dc, 0x000100dc, 0x000100dd, 0x000100dd, 0x000100de, 0x000100de, 0x000100df, 0x000100df, 0x000100e0, 0x000100e0, 0x000100e1, 0x000100e1, }, - {0x000100e2, 0x000100e2, 0x000100e3, 0x000100e3, 0x000100e4, 0x000100e4, 0x000100e5, 0x000100e5, 0x000100e6, 0x000100e6, 0x000100e7, 0x000100e7, 0x000100e8, 0x000100e8, 0x000100e9, 0x000100e9, }, - {0x000100ea, 0x000100ea, 0x000100eb, 0x000100eb, 0x000100ec, 0x000100ec, 0x000100ed, 0x000100ed, 0x000100ee, 0x000100ee, 0x000100ef, 0x000100ef, 0x000100f0, 0x000100f0, 0x000100f1, 0x000100f1, }, - {0x000100f2, 0x000100f2, 0x000100f3, 0x000100f3, 0x000100f4, 0x000100f4, 0x000100f5, 0x000100f5, 0x000100f6, 0x000100f6, 0x000100f7, 0x000100f7, 0x000100f8, 0x000100f8, 0x000100f9, 0x000100f9, }, -}; - -const unsigned int c_aaiCQMFHuffEnc12[400][2] = -{ - {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0004, 0x0006}, {0x0005, 0x0002}, {0x0007, 0x0003}, {0x000a, 0x0004}, {0x000d, 0x0009}, {0x000f, 0x0011}, - {0x0012, 0x0053}, {0x0013, 0x009b}, {0x0013, 0x009c}, {0x0014, 0x0000}, {0x0014, 0x0001}, {0x0014, 0x0002}, {0x0014, 0x0003}, {0x0014, 0x0004}, - {0x0014, 0x0005}, {0x0014, 0x0006}, {0x0014, 0x0007}, {0x0014, 0x0008}, {0x0004, 0x0007}, {0x0003, 0x0005}, {0x0003, 0x0006}, {0x0005, 0x0003}, - {0x0007, 0x0004}, {0x0009, 0x0004}, {0x000c, 0x0008}, {0x000e, 0x000c}, {0x0010, 0x001b}, {0x0011, 0x002e}, {0x0013, 0x009d}, {0x0014, 0x0009}, - {0x0014, 0x000a}, {0x0014, 0x000b}, {0x0014, 0x000c}, {0x0014, 0x000d}, {0x0014, 0x000e}, {0x0014, 0x000f}, {0x0014, 0x0010}, {0x0014, 0x0011}, - {0x0004, 0x0008}, {0x0003, 0x0007}, {0x0004, 0x0009}, {0x0005, 0x0004}, {0x0008, 0x0004}, {0x000a, 0x0005}, {0x000d, 0x000a}, {0x000f, 0x0012}, - {0x0011, 0x002f}, {0x0013, 0x009e}, {0x0014, 0x0012}, {0x0014, 0x0013}, {0x0014, 0x0014}, {0x0014, 0x0015}, {0x0014, 0x0016}, {0x0014, 0x0017}, - {0x0014, 0x0018}, {0x0014, 0x0019}, {0x0014, 0x001a}, {0x0014, 0x001b}, {0x0005, 0x0005}, {0x0005, 0x0006}, {0x0005, 0x0007}, {0x0007, 0x0005}, - {0x0009, 0x0005}, {0x000b, 0x0005}, {0x000e, 0x000d}, {0x000f, 0x0013}, {0x0011, 0x0030}, {0x0011, 0x0031}, {0x0014, 0x001c}, {0x0014, 0x001d}, - {0x0014, 0x001e}, {0x0014, 0x001f}, {0x0014, 0x0020}, {0x0014, 0x0021}, {0x0014, 0x0022}, {0x0014, 0x0023}, {0x0014, 0x0024}, {0x0014, 0x0025}, - {0x0007, 0x0006}, {0x0007, 0x0007}, {0x0008, 0x0005}, {0x0009, 0x0006}, {0x000b, 0x0006}, {0x000d, 0x000b}, {0x000e, 0x000e}, {0x0010, 0x001c}, - {0x0012, 0x0054}, {0x0013, 0x009f}, {0x0014, 0x0026}, {0x0014, 0x0027}, {0x0014, 0x0028}, {0x0014, 0x0029}, {0x0014, 0x002a}, {0x0014, 0x002b}, - {0x0014, 0x002c}, {0x0014, 0x002d}, {0x0014, 0x002e}, {0x0014, 0x002f}, {0x000a, 0x0006}, {0x0009, 0x0007}, {0x000a, 0x0007}, {0x000b, 0x0007}, - {0x000d, 0x000c}, {0x000e, 0x000f}, {0x000f, 0x0014}, {0x0011, 0x0032}, {0x0013, 0x00a0}, {0x0014, 0x0030}, {0x0014, 0x0031}, {0x0014, 0x0032}, - {0x0014, 0x0033}, {0x0014, 0x0034}, {0x0014, 0x0035}, {0x0014, 0x0036}, {0x0014, 0x0037}, {0x0014, 0x0038}, {0x0014, 0x0039}, {0x0014, 0x003a}, - {0x000d, 0x000d}, {0x000c, 0x0009}, {0x000d, 0x000e}, {0x000d, 0x000f}, {0x000e, 0x0010}, {0x0010, 0x001d}, {0x0010, 0x001e}, {0x0013, 0x00a1}, - {0x0013, 0x00a2}, {0x0014, 0x003b}, {0x0014, 0x003c}, {0x0014, 0x003d}, {0x0014, 0x003e}, {0x0014, 0x003f}, {0x0014, 0x0040}, {0x0014, 0x0041}, - {0x0014, 0x0042}, {0x0014, 0x0043}, {0x0014, 0x0044}, {0x0014, 0x0045}, {0x000f, 0x0015}, {0x000e, 0x0011}, {0x000f, 0x0016}, {0x000f, 0x0017}, - {0x0010, 0x001f}, {0x0011, 0x0033}, {0x0012, 0x0055}, {0x0014, 0x0046}, {0x0014, 0x0047}, {0x0014, 0x0048}, {0x0014, 0x0049}, {0x0014, 0x004a}, - {0x0014, 0x004b}, {0x0014, 0x004c}, {0x0014, 0x004d}, {0x0014, 0x004e}, {0x0014, 0x004f}, {0x0014, 0x0050}, {0x0014, 0x0051}, {0x0014, 0x0052}, - {0x0011, 0x0034}, {0x0010, 0x0020}, {0x0010, 0x0021}, {0x0011, 0x0035}, {0x0012, 0x0056}, {0x0013, 0x00a3}, {0x0014, 0x0053}, {0x0014, 0x0054}, - {0x0014, 0x0055}, {0x0014, 0x0056}, {0x0014, 0x0057}, {0x0014, 0x0058}, {0x0014, 0x0059}, {0x0014, 0x005a}, {0x0014, 0x005b}, {0x0014, 0x005c}, - {0x0014, 0x005d}, {0x0014, 0x005e}, {0x0014, 0x005f}, {0x0014, 0x0060}, {0x0012, 0x0057}, {0x0012, 0x0058}, {0x0014, 0x0061}, {0x0014, 0x0062}, - {0x0012, 0x0059}, {0x0014, 0x0063}, {0x0012, 0x005a}, {0x0014, 0x0064}, {0x0014, 0x0065}, {0x0014, 0x0066}, {0x0014, 0x0067}, {0x0014, 0x0068}, - {0x0014, 0x0069}, {0x0014, 0x006a}, {0x0014, 0x006b}, {0x0014, 0x006c}, {0x0014, 0x006d}, {0x0014, 0x006e}, {0x0014, 0x006f}, {0x0014, 0x0070}, - {0x0014, 0x0071}, {0x0012, 0x005b}, {0x0014, 0x0072}, {0x0013, 0x00a4}, {0x0014, 0x0073}, {0x0014, 0x0074}, {0x0014, 0x0075}, {0x0014, 0x0076}, - {0x0014, 0x0077}, {0x0014, 0x0078}, {0x0014, 0x0079}, {0x0014, 0x007a}, {0x0014, 0x007b}, {0x0014, 0x007c}, {0x0014, 0x007d}, {0x0014, 0x007e}, - {0x0014, 0x007f}, {0x0014, 0x0080}, {0x0014, 0x0081}, {0x0014, 0x0082}, {0x0014, 0x0083}, {0x0014, 0x0084}, {0x0014, 0x0085}, {0x0014, 0x0086}, - {0x0014, 0x0087}, {0x0013, 0x00a5}, {0x0014, 0x0088}, {0x0014, 0x0089}, {0x0014, 0x008a}, {0x0014, 0x008b}, {0x0014, 0x008c}, {0x0014, 0x008d}, - {0x0014, 0x008e}, {0x0014, 0x008f}, {0x0014, 0x0090}, {0x0014, 0x0091}, {0x0014, 0x0092}, {0x0014, 0x0093}, {0x0014, 0x0094}, {0x0014, 0x0095}, - {0x0014, 0x0096}, {0x0014, 0x0097}, {0x0014, 0x0098}, {0x0014, 0x0099}, {0x0014, 0x009a}, {0x0014, 0x009b}, {0x0014, 0x009c}, {0x0014, 0x009d}, - {0x0014, 0x009e}, {0x0014, 0x009f}, {0x0014, 0x00a0}, {0x0014, 0x00a1}, {0x0014, 0x00a2}, {0x0014, 0x00a3}, {0x0014, 0x00a4}, {0x0014, 0x00a5}, - {0x0014, 0x00a6}, {0x0014, 0x00a7}, {0x0014, 0x00a8}, {0x0014, 0x00a9}, {0x0014, 0x00aa}, {0x0014, 0x00ab}, {0x0014, 0x00ac}, {0x0014, 0x00ad}, - {0x0014, 0x00ae}, {0x0014, 0x00af}, {0x0014, 0x00b0}, {0x0014, 0x00b1}, {0x0014, 0x00b2}, {0x0014, 0x00b3}, {0x0014, 0x00b4}, {0x0014, 0x00b5}, - {0x0014, 0x00b6}, {0x0014, 0x00b7}, {0x0014, 0x00b8}, {0x0014, 0x00b9}, {0x0014, 0x00ba}, {0x0014, 0x00bb}, {0x0014, 0x00bc}, {0x0014, 0x00bd}, - {0x0014, 0x00be}, {0x0014, 0x00bf}, {0x0014, 0x00c0}, {0x0014, 0x00c1}, {0x0014, 0x00c2}, {0x0014, 0x00c3}, {0x0014, 0x00c4}, {0x0014, 0x00c5}, - {0x0014, 0x00c6}, {0x0014, 0x00c7}, {0x0014, 0x00c8}, {0x0014, 0x00c9}, {0x0014, 0x00ca}, {0x0014, 0x00cb}, {0x0014, 0x00cc}, {0x0014, 0x00cd}, - {0x0014, 0x00ce}, {0x0014, 0x00cf}, {0x0014, 0x00d0}, {0x0014, 0x00d1}, {0x0014, 0x00d2}, {0x0014, 0x00d3}, {0x0014, 0x00d4}, {0x0014, 0x00d5}, - {0x0014, 0x00d6}, {0x0014, 0x00d7}, {0x0014, 0x00d8}, {0x0014, 0x00d9}, {0x0014, 0x00da}, {0x0014, 0x00db}, {0x0014, 0x00dc}, {0x0014, 0x00dd}, - {0x0014, 0x00de}, {0x0014, 0x00df}, {0x0014, 0x00e0}, {0x0014, 0x00e1}, {0x0014, 0x00e2}, {0x0014, 0x00e3}, {0x0014, 0x00e4}, {0x0014, 0x00e5}, - {0x0014, 0x00e6}, {0x0014, 0x00e7}, {0x0014, 0x00e8}, {0x0014, 0x00e9}, {0x0014, 0x00ea}, {0x0014, 0x00eb}, {0x0014, 0x00ec}, {0x0014, 0x00ed}, - {0x0014, 0x00ee}, {0x0014, 0x00ef}, {0x0014, 0x00f0}, {0x0014, 0x00f1}, {0x0014, 0x00f2}, {0x0014, 0x00f3}, {0x0014, 0x00f4}, {0x0014, 0x00f5}, - {0x0014, 0x00f6}, {0x0014, 0x00f7}, {0x0014, 0x00f8}, {0x0014, 0x00f9}, {0x0014, 0x00fa}, {0x0014, 0x00fb}, {0x0014, 0x00fc}, {0x0014, 0x00fd}, - {0x0014, 0x00fe}, {0x0014, 0x00ff}, {0x0014, 0x0100}, {0x0014, 0x0101}, {0x0014, 0x0102}, {0x0014, 0x0103}, {0x0014, 0x0104}, {0x0014, 0x0105}, - {0x0014, 0x0106}, {0x0014, 0x0107}, {0x0014, 0x0108}, {0x0014, 0x0109}, {0x0014, 0x010a}, {0x0014, 0x010b}, {0x0014, 0x010c}, {0x0014, 0x010d}, - {0x0014, 0x010e}, {0x0014, 0x010f}, {0x0014, 0x0110}, {0x0014, 0x0111}, {0x0014, 0x0112}, {0x0014, 0x0113}, {0x0014, 0x0114}, {0x0014, 0x0115}, - {0x0014, 0x0116}, {0x0014, 0x0117}, {0x0014, 0x0118}, {0x0014, 0x0119}, {0x0014, 0x011a}, {0x0014, 0x011b}, {0x0014, 0x011c}, {0x0014, 0x011d}, - {0x0014, 0x011e}, {0x0014, 0x011f}, {0x0014, 0x0120}, {0x0014, 0x0121}, {0x0014, 0x0122}, {0x0014, 0x0123}, {0x0014, 0x0124}, {0x0014, 0x0125}, - {0x0014, 0x0126}, {0x0014, 0x0127}, {0x0014, 0x0128}, {0x0014, 0x0129}, {0x0014, 0x012a}, {0x0014, 0x012b}, {0x0014, 0x012c}, {0x0014, 0x012d}, - {0x0014, 0x012e}, {0x0014, 0x012f}, {0x0014, 0x0130}, {0x0014, 0x0131}, {0x0014, 0x0132}, {0x0014, 0x0133}, {0x0014, 0x0134}, {0x0014, 0x0135}, -}; - -const unsigned int c_aaiCQMFHuffDec12[44][16] = -{ - {0x0004ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x00000000, 0x00000001, 0x00000002, 0x00000014, 0x00000028, 0x0000002a, 0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010029, 0x00010029, }, - {0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, }, - {0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, }, - {0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, }, - {0x0008ffff, 0x0007ffff, 0x0005ffff, 0x0006ffff, 0x0000002c, 0x00000052, 0x00010004, 0x00010004, 0x00010018, 0x00010018, 0x0001003f, 0x0001003f, 0x00010050, 0x00010050, 0x00010051, 0x00010051, }, - {0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, }, - {0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, }, - {0x00020005, 0x00020005, 0x00020005, 0x00020005, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002d, 0x00020064, 0x00020064, 0x00020064, 0x00020064, 0x00020066, 0x00020066, 0x00020066, 0x00020066, }, - {0x0018ffff, 0x000fffff, 0x000effff, 0x000dffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x0000001a, 0x00000079, 0x00010041, 0x00010041, 0x00010054, 0x00010054, 0x00010067, 0x00010067, }, - {0x0002007c, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002008d, 0x0002008d, 0x0002008d, 0x0002008d, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, - {0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, }, - {0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, }, - {0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, }, - {0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x00020042, 0x00020042, 0x00020042, 0x00020042, 0x00020056, 0x00020056, 0x00020056, 0x00020056, 0x00020069, 0x00020069, 0x00020069, 0x00020069, }, - {0x000000a1, 0x000000a2, 0x00010007, 0x00010007, 0x0001002f, 0x0001002f, 0x00010043, 0x00010043, 0x0001006a, 0x0001006a, 0x0001008c, 0x0001008c, 0x0001008e, 0x0001008e, 0x0001008f, 0x0001008f, }, - {0x0029ffff, 0x002affff, 0x002bffff, 0x0017ffff, 0x0015ffff, 0x0014ffff, 0x0016ffff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0000001c, 0x00000057, 0x0000007d, 0x0000007e, 0x00000090, }, - {0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, }, - {0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, }, - {0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, }, - {0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, }, - {0x00020058, 0x00020058, 0x00020058, 0x00020058, 0x00020092, 0x00020092, 0x00020092, 0x00020092, 0x000200a4, 0x000200a4, 0x000200a4, 0x000200a4, 0x000200b4, 0x000200b4, 0x000200b4, 0x000200b4, }, - {0x0001006c, 0x0001006c, 0x0001007f, 0x0001007f, 0x00010080, 0x00010080, 0x000100a5, 0x000100a5, 0x000100cb, 0x000100cb, 0x000100e1, 0x000100e1, 0x00020008, 0x00020008, 0x00020008, 0x00020008, }, - {0x000200b5, 0x000200b5, 0x000200b5, 0x000200b5, 0x000200b8, 0x000200b8, 0x000200b8, 0x000200b8, 0x000200ba, 0x000200ba, 0x000200ba, 0x000200ba, 0x000200c9, 0x000200c9, 0x000200c9, 0x000200c9, }, - {0x0000018a, 0x0000018b, 0x0000018c, 0x0000018d, 0x0000018e, 0x0000018f, 0x00010009, 0x00010009, 0x0001000a, 0x0001000a, 0x0001001e, 0x0001001e, 0x00010031, 0x00010031, 0x00010059, 0x00010059, }, - {0x001affff, 0x001bffff, 0x0019ffff, 0x001cffff, 0x001dffff, 0x001effff, 0x001fffff, 0x0020ffff, 0x0021ffff, 0x0022ffff, 0x0023ffff, 0x0024ffff, 0x0025ffff, 0x0026ffff, 0x0027ffff, 0x0028ffff, }, - {0x0000004a, 0x0000004b, 0x0000004c, 0x0000004d, 0x0000004e, 0x0000004f, 0x0000005a, 0x0000005b, 0x0000005c, 0x0000005d, 0x0000005e, 0x0000005f, 0x00000060, 0x00000061, 0x00000062, 0x00000063, }, - {0x0000000b, 0x0000000c, 0x0000000d, 0x0000000e, 0x0000000f, 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x0000001f, 0x00000020, 0x00000021, 0x00000022, 0x00000023, 0x00000024, 0x00000025, }, - {0x00000026, 0x00000027, 0x00000032, 0x00000033, 0x00000034, 0x00000035, 0x00000036, 0x00000037, 0x00000038, 0x00000039, 0x0000003a, 0x0000003b, 0x00000046, 0x00000047, 0x00000048, 0x00000049, }, - {0x0000006d, 0x0000006e, 0x0000006f, 0x00000070, 0x00000071, 0x00000072, 0x00000073, 0x00000074, 0x00000075, 0x00000076, 0x00000077, 0x00000081, 0x00000082, 0x00000083, 0x00000084, 0x00000085, }, - {0x00000086, 0x00000087, 0x00000088, 0x00000089, 0x0000008a, 0x0000008b, 0x00000093, 0x00000094, 0x00000095, 0x00000096, 0x00000097, 0x00000098, 0x00000099, 0x0000009a, 0x0000009b, 0x0000009c, }, - {0x0000009d, 0x0000009e, 0x0000009f, 0x000000a6, 0x000000a7, 0x000000a8, 0x000000a9, 0x000000aa, 0x000000ab, 0x000000ac, 0x000000ad, 0x000000ae, 0x000000af, 0x000000b0, 0x000000b1, 0x000000b2, }, - {0x000000b3, 0x000000b6, 0x000000b7, 0x000000b9, 0x000000bb, 0x000000bc, 0x000000bd, 0x000000be, 0x000000bf, 0x000000c0, 0x000000c1, 0x000000c2, 0x000000c3, 0x000000c4, 0x000000c5, 0x000000c6, }, - {0x000000c7, 0x000000c8, 0x000000ca, 0x000000cc, 0x000000cd, 0x000000ce, 0x000000cf, 0x000000d0, 0x000000d1, 0x000000d2, 0x000000d3, 0x000000d4, 0x000000d5, 0x000000d6, 0x000000d7, 0x000000d8, }, - {0x000000d9, 0x000000da, 0x000000db, 0x000000dc, 0x000000dd, 0x000000de, 0x000000df, 0x000000e0, 0x000000e2, 0x000000e3, 0x000000e4, 0x000000e5, 0x000000e6, 0x000000e7, 0x000000e8, 0x000000e9, }, - {0x000000ea, 0x000000eb, 0x000000ec, 0x000000ed, 0x000000ee, 0x000000ef, 0x000000f0, 0x000000f1, 0x000000f2, 0x000000f3, 0x000000f4, 0x000000f5, 0x000000f6, 0x000000f7, 0x000000f8, 0x000000f9, }, - {0x000000fa, 0x000000fb, 0x000000fc, 0x000000fd, 0x000000fe, 0x000000ff, 0x00000100, 0x00000101, 0x00000102, 0x00000103, 0x00000104, 0x00000105, 0x00000106, 0x00000107, 0x00000108, 0x00000109, }, - {0x0000010a, 0x0000010b, 0x0000010c, 0x0000010d, 0x0000010e, 0x0000010f, 0x00000110, 0x00000111, 0x00000112, 0x00000113, 0x00000114, 0x00000115, 0x00000116, 0x00000117, 0x00000118, 0x00000119, }, - {0x0000011a, 0x0000011b, 0x0000011c, 0x0000011d, 0x0000011e, 0x0000011f, 0x00000120, 0x00000121, 0x00000122, 0x00000123, 0x00000124, 0x00000125, 0x00000126, 0x00000127, 0x00000128, 0x00000129, }, - {0x0000012a, 0x0000012b, 0x0000012c, 0x0000012d, 0x0000012e, 0x0000012f, 0x00000130, 0x00000131, 0x00000132, 0x00000133, 0x00000134, 0x00000135, 0x00000136, 0x00000137, 0x00000138, 0x00000139, }, - {0x0000013a, 0x0000013b, 0x0000013c, 0x0000013d, 0x0000013e, 0x0000013f, 0x00000140, 0x00000141, 0x00000142, 0x00000143, 0x00000144, 0x00000145, 0x00000146, 0x00000147, 0x00000148, 0x00000149, }, - {0x0000014a, 0x0000014b, 0x0000014c, 0x0000014d, 0x0000014e, 0x0000014f, 0x00000150, 0x00000151, 0x00000152, 0x00000153, 0x00000154, 0x00000155, 0x00000156, 0x00000157, 0x00000158, 0x00000159, }, - {0x0000015a, 0x0000015b, 0x0000015c, 0x0000015d, 0x0000015e, 0x0000015f, 0x00000160, 0x00000161, 0x00000162, 0x00000163, 0x00000164, 0x00000165, 0x00000166, 0x00000167, 0x00000168, 0x00000169, }, - {0x0000016a, 0x0000016b, 0x0000016c, 0x0000016d, 0x0000016e, 0x0000016f, 0x00000170, 0x00000171, 0x00000172, 0x00000173, 0x00000174, 0x00000175, 0x00000176, 0x00000177, 0x00000178, 0x00000179, }, - {0x0000017a, 0x0000017b, 0x0000017c, 0x0000017d, 0x0000017e, 0x0000017f, 0x00000180, 0x00000181, 0x00000182, 0x00000183, 0x00000184, 0x00000185, 0x00000186, 0x00000187, 0x00000188, 0x00000189, }, -}; - -const unsigned int c_aaiCQMFHuffEnc13[625][2] = -{ - {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0005, 0x0006}, {0x0005, 0x0007}, {0x0006, 0x0005}, {0x0008, 0x0006}, {0x000a, 0x0008}, {0x000c, 0x000c}, - {0x000e, 0x0019}, {0x0010, 0x0049}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, - {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0013, 0x000c}, {0x0013, 0x000d}, - {0x0013, 0x000e}, {0x0004, 0x0008}, {0x0003, 0x0007}, {0x0004, 0x0009}, {0x0004, 0x000a}, {0x0006, 0x0006}, {0x0007, 0x0006}, {0x0009, 0x0007}, - {0x000b, 0x0009}, {0x000d, 0x0011}, {0x000f, 0x002a}, {0x0010, 0x004a}, {0x0011, 0x0084}, {0x0012, 0x0100}, {0x0013, 0x000f}, {0x0013, 0x0010}, - {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0013, 0x0014}, {0x0013, 0x0015}, {0x0013, 0x0016}, {0x0013, 0x0017}, {0x0013, 0x0018}, - {0x0013, 0x0019}, {0x0013, 0x001a}, {0x0005, 0x0008}, {0x0004, 0x000b}, {0x0004, 0x000c}, {0x0005, 0x0009}, {0x0006, 0x0007}, {0x0008, 0x0007}, - {0x0009, 0x0008}, {0x000b, 0x000a}, {0x000d, 0x0012}, {0x000f, 0x002b}, {0x0012, 0x0101}, {0x0012, 0x0102}, {0x0013, 0x001b}, {0x0013, 0x001c}, - {0x0013, 0x001d}, {0x0013, 0x001e}, {0x0013, 0x001f}, {0x0013, 0x0020}, {0x0013, 0x0021}, {0x0013, 0x0022}, {0x0013, 0x0023}, {0x0013, 0x0024}, - {0x0013, 0x0025}, {0x0013, 0x0026}, {0x0013, 0x0027}, {0x0005, 0x000a}, {0x0004, 0x000d}, {0x0005, 0x000b}, {0x0006, 0x0008}, {0x0007, 0x0007}, - {0x0009, 0x0009}, {0x000a, 0x0009}, {0x000c, 0x000d}, {0x000d, 0x0013}, {0x0010, 0x004b}, {0x0010, 0x004c}, {0x0013, 0x0028}, {0x0013, 0x0029}, - {0x0013, 0x002a}, {0x0013, 0x002b}, {0x0013, 0x002c}, {0x0013, 0x002d}, {0x0013, 0x002e}, {0x0013, 0x002f}, {0x0013, 0x0030}, {0x0013, 0x0031}, - {0x0013, 0x0032}, {0x0013, 0x0033}, {0x0013, 0x0034}, {0x0013, 0x0035}, {0x0006, 0x0009}, {0x0006, 0x000a}, {0x0006, 0x000b}, {0x0007, 0x0008}, - {0x0008, 0x0008}, {0x000a, 0x000a}, {0x000b, 0x000b}, {0x000d, 0x0014}, {0x000e, 0x001a}, {0x0011, 0x0085}, {0x0010, 0x004d}, {0x0013, 0x0036}, - {0x0013, 0x0037}, {0x0013, 0x0038}, {0x0013, 0x0039}, {0x0013, 0x003a}, {0x0013, 0x003b}, {0x0013, 0x003c}, {0x0013, 0x003d}, {0x0013, 0x003e}, - {0x0013, 0x003f}, {0x0013, 0x0040}, {0x0013, 0x0041}, {0x0013, 0x0042}, {0x0013, 0x0043}, {0x0008, 0x0009}, {0x0007, 0x0009}, {0x0008, 0x000a}, - {0x0008, 0x000b}, {0x000a, 0x000b}, {0x000b, 0x000c}, {0x000c, 0x000e}, {0x000e, 0x001b}, {0x000f, 0x002c}, {0x0011, 0x0086}, {0x0013, 0x0044}, - {0x0013, 0x0045}, {0x0013, 0x0046}, {0x0013, 0x0047}, {0x0013, 0x0048}, {0x0013, 0x0049}, {0x0013, 0x004a}, {0x0013, 0x004b}, {0x0013, 0x004c}, - {0x0013, 0x004d}, {0x0013, 0x004e}, {0x0013, 0x004f}, {0x0013, 0x0050}, {0x0013, 0x0051}, {0x0013, 0x0052}, {0x000a, 0x000c}, {0x0009, 0x000a}, - {0x0009, 0x000b}, {0x000a, 0x000d}, {0x000b, 0x000d}, {0x000c, 0x000f}, {0x000e, 0x001c}, {0x000e, 0x001d}, {0x0011, 0x0087}, {0x0011, 0x0088}, - {0x0012, 0x0103}, {0x0012, 0x0104}, {0x0013, 0x0053}, {0x0013, 0x0054}, {0x0013, 0x0055}, {0x0013, 0x0056}, {0x0013, 0x0057}, {0x0013, 0x0058}, - {0x0013, 0x0059}, {0x0013, 0x005a}, {0x0013, 0x005b}, {0x0013, 0x005c}, {0x0013, 0x005d}, {0x0013, 0x005e}, {0x0013, 0x005f}, {0x000c, 0x0010}, - {0x000b, 0x000e}, {0x000b, 0x000f}, {0x000c, 0x0011}, {0x000d, 0x0015}, {0x000e, 0x001e}, {0x000f, 0x002d}, {0x0011, 0x0089}, {0x0011, 0x008a}, - {0x0013, 0x0060}, {0x0013, 0x0061}, {0x0013, 0x0062}, {0x0013, 0x0063}, {0x0013, 0x0064}, {0x0013, 0x0065}, {0x0013, 0x0066}, {0x0013, 0x0067}, - {0x0013, 0x0068}, {0x0013, 0x0069}, {0x0013, 0x006a}, {0x0013, 0x006b}, {0x0013, 0x006c}, {0x0013, 0x006d}, {0x0013, 0x006e}, {0x0013, 0x006f}, - {0x000e, 0x001f}, {0x000d, 0x0016}, {0x000d, 0x0017}, {0x000e, 0x0020}, {0x000e, 0x0021}, {0x000f, 0x002e}, {0x0010, 0x004e}, {0x0013, 0x0070}, - {0x0012, 0x0105}, {0x0012, 0x0106}, {0x0013, 0x0071}, {0x0013, 0x0072}, {0x0013, 0x0073}, {0x0013, 0x0074}, {0x0013, 0x0075}, {0x0013, 0x0076}, - {0x0013, 0x0077}, {0x0013, 0x0078}, {0x0013, 0x0079}, {0x0013, 0x007a}, {0x0013, 0x007b}, {0x0013, 0x007c}, {0x0013, 0x007d}, {0x0013, 0x007e}, - {0x0013, 0x007f}, {0x0010, 0x004f}, {0x000f, 0x002f}, {0x000f, 0x0030}, {0x000f, 0x0031}, {0x0010, 0x0050}, {0x0011, 0x008b}, {0x0011, 0x008c}, - {0x0013, 0x0080}, {0x0013, 0x0081}, {0x0013, 0x0082}, {0x0013, 0x0083}, {0x0013, 0x0084}, {0x0013, 0x0085}, {0x0013, 0x0086}, {0x0013, 0x0087}, - {0x0013, 0x0088}, {0x0013, 0x0089}, {0x0013, 0x008a}, {0x0013, 0x008b}, {0x0013, 0x008c}, {0x0013, 0x008d}, {0x0013, 0x008e}, {0x0013, 0x008f}, - {0x0013, 0x0090}, {0x0013, 0x0091}, {0x0012, 0x0107}, {0x0010, 0x0051}, {0x0010, 0x0052}, {0x0010, 0x0053}, {0x0011, 0x008d}, {0x0011, 0x008e}, - {0x0013, 0x0092}, {0x0013, 0x0093}, {0x0013, 0x0094}, {0x0013, 0x0095}, {0x0013, 0x0096}, {0x0013, 0x0097}, {0x0013, 0x0098}, {0x0013, 0x0099}, - {0x0013, 0x009a}, {0x0013, 0x009b}, {0x0013, 0x009c}, {0x0013, 0x009d}, {0x0013, 0x009e}, {0x0013, 0x009f}, {0x0013, 0x00a0}, {0x0013, 0x00a1}, - {0x0013, 0x00a2}, {0x0013, 0x00a3}, {0x0013, 0x00a4}, {0x0011, 0x008f}, {0x0011, 0x0090}, {0x0013, 0x00a5}, {0x0011, 0x0091}, {0x0013, 0x00a6}, - {0x0013, 0x00a7}, {0x0013, 0x00a8}, {0x0013, 0x00a9}, {0x0013, 0x00aa}, {0x0013, 0x00ab}, {0x0013, 0x00ac}, {0x0013, 0x00ad}, {0x0013, 0x00ae}, - {0x0013, 0x00af}, {0x0013, 0x00b0}, {0x0013, 0x00b1}, {0x0013, 0x00b2}, {0x0013, 0x00b3}, {0x0013, 0x00b4}, {0x0013, 0x00b5}, {0x0013, 0x00b6}, - {0x0013, 0x00b7}, {0x0013, 0x00b8}, {0x0013, 0x00b9}, {0x0013, 0x00ba}, {0x0013, 0x00bb}, {0x0013, 0x00bc}, {0x0013, 0x00bd}, {0x0013, 0x00be}, - {0x0013, 0x00bf}, {0x0013, 0x00c0}, {0x0013, 0x00c1}, {0x0013, 0x00c2}, {0x0013, 0x00c3}, {0x0013, 0x00c4}, {0x0013, 0x00c5}, {0x0013, 0x00c6}, - {0x0013, 0x00c7}, {0x0013, 0x00c8}, {0x0013, 0x00c9}, {0x0013, 0x00ca}, {0x0013, 0x00cb}, {0x0013, 0x00cc}, {0x0013, 0x00cd}, {0x0013, 0x00ce}, - {0x0013, 0x00cf}, {0x0013, 0x00d0}, {0x0013, 0x00d1}, {0x0013, 0x00d2}, {0x0013, 0x00d3}, {0x0013, 0x00d4}, {0x0013, 0x00d5}, {0x0013, 0x00d6}, - {0x0013, 0x00d7}, {0x0013, 0x00d8}, {0x0013, 0x00d9}, {0x0013, 0x00da}, {0x0013, 0x00db}, {0x0013, 0x00dc}, {0x0013, 0x00dd}, {0x0013, 0x00de}, - {0x0013, 0x00df}, {0x0013, 0x00e0}, {0x0013, 0x00e1}, {0x0013, 0x00e2}, {0x0013, 0x00e3}, {0x0013, 0x00e4}, {0x0013, 0x00e5}, {0x0013, 0x00e6}, - {0x0013, 0x00e7}, {0x0013, 0x00e8}, {0x0013, 0x00e9}, {0x0013, 0x00ea}, {0x0013, 0x00eb}, {0x0013, 0x00ec}, {0x0013, 0x00ed}, {0x0013, 0x00ee}, - {0x0013, 0x00ef}, {0x0013, 0x00f0}, {0x0013, 0x00f1}, {0x0013, 0x00f2}, {0x0013, 0x00f3}, {0x0013, 0x00f4}, {0x0013, 0x00f5}, {0x0013, 0x00f6}, - {0x0013, 0x00f7}, {0x0013, 0x00f8}, {0x0013, 0x00f9}, {0x0013, 0x00fa}, {0x0013, 0x00fb}, {0x0013, 0x00fc}, {0x0013, 0x00fd}, {0x0013, 0x00fe}, - {0x0013, 0x00ff}, {0x0013, 0x0100}, {0x0013, 0x0101}, {0x0013, 0x0102}, {0x0013, 0x0103}, {0x0013, 0x0104}, {0x0013, 0x0105}, {0x0013, 0x0106}, - {0x0013, 0x0107}, {0x0013, 0x0108}, {0x0013, 0x0109}, {0x0013, 0x010a}, {0x0013, 0x010b}, {0x0013, 0x010c}, {0x0013, 0x010d}, {0x0013, 0x010e}, - {0x0013, 0x010f}, {0x0013, 0x0110}, {0x0013, 0x0111}, {0x0013, 0x0112}, {0x0013, 0x0113}, {0x0013, 0x0114}, {0x0013, 0x0115}, {0x0013, 0x0116}, - {0x0013, 0x0117}, {0x0013, 0x0118}, {0x0013, 0x0119}, {0x0013, 0x011a}, {0x0013, 0x011b}, {0x0013, 0x011c}, {0x0013, 0x011d}, {0x0013, 0x011e}, - {0x0013, 0x011f}, {0x0013, 0x0120}, {0x0013, 0x0121}, {0x0013, 0x0122}, {0x0013, 0x0123}, {0x0013, 0x0124}, {0x0013, 0x0125}, {0x0013, 0x0126}, - {0x0013, 0x0127}, {0x0013, 0x0128}, {0x0013, 0x0129}, {0x0013, 0x012a}, {0x0013, 0x012b}, {0x0013, 0x012c}, {0x0013, 0x012d}, {0x0013, 0x012e}, - {0x0013, 0x012f}, {0x0013, 0x0130}, {0x0013, 0x0131}, {0x0013, 0x0132}, {0x0013, 0x0133}, {0x0013, 0x0134}, {0x0013, 0x0135}, {0x0013, 0x0136}, - {0x0013, 0x0137}, {0x0013, 0x0138}, {0x0013, 0x0139}, {0x0013, 0x013a}, {0x0013, 0x013b}, {0x0013, 0x013c}, {0x0013, 0x013d}, {0x0013, 0x013e}, - {0x0013, 0x013f}, {0x0013, 0x0140}, {0x0013, 0x0141}, {0x0013, 0x0142}, {0x0013, 0x0143}, {0x0013, 0x0144}, {0x0013, 0x0145}, {0x0013, 0x0146}, - {0x0013, 0x0147}, {0x0013, 0x0148}, {0x0013, 0x0149}, {0x0013, 0x014a}, {0x0013, 0x014b}, {0x0013, 0x014c}, {0x0013, 0x014d}, {0x0013, 0x014e}, - {0x0013, 0x014f}, {0x0013, 0x0150}, {0x0013, 0x0151}, {0x0013, 0x0152}, {0x0013, 0x0153}, {0x0013, 0x0154}, {0x0013, 0x0155}, {0x0013, 0x0156}, - {0x0013, 0x0157}, {0x0013, 0x0158}, {0x0013, 0x0159}, {0x0013, 0x015a}, {0x0013, 0x015b}, {0x0013, 0x015c}, {0x0013, 0x015d}, {0x0013, 0x015e}, - {0x0013, 0x015f}, {0x0013, 0x0160}, {0x0013, 0x0161}, {0x0013, 0x0162}, {0x0013, 0x0163}, {0x0013, 0x0164}, {0x0013, 0x0165}, {0x0013, 0x0166}, - {0x0013, 0x0167}, {0x0013, 0x0168}, {0x0013, 0x0169}, {0x0013, 0x016a}, {0x0013, 0x016b}, {0x0013, 0x016c}, {0x0013, 0x016d}, {0x0013, 0x016e}, - {0x0013, 0x016f}, {0x0013, 0x0170}, {0x0013, 0x0171}, {0x0013, 0x0172}, {0x0013, 0x0173}, {0x0013, 0x0174}, {0x0013, 0x0175}, {0x0013, 0x0176}, - {0x0013, 0x0177}, {0x0013, 0x0178}, {0x0013, 0x0179}, {0x0013, 0x017a}, {0x0013, 0x017b}, {0x0013, 0x017c}, {0x0013, 0x017d}, {0x0013, 0x017e}, - {0x0013, 0x017f}, {0x0013, 0x0180}, {0x0013, 0x0181}, {0x0013, 0x0182}, {0x0013, 0x0183}, {0x0013, 0x0184}, {0x0013, 0x0185}, {0x0013, 0x0186}, - {0x0013, 0x0187}, {0x0013, 0x0188}, {0x0013, 0x0189}, {0x0013, 0x018a}, {0x0013, 0x018b}, {0x0013, 0x018c}, {0x0013, 0x018d}, {0x0013, 0x018e}, - {0x0013, 0x018f}, {0x0013, 0x0190}, {0x0013, 0x0191}, {0x0013, 0x0192}, {0x0013, 0x0193}, {0x0013, 0x0194}, {0x0013, 0x0195}, {0x0013, 0x0196}, - {0x0013, 0x0197}, {0x0013, 0x0198}, {0x0013, 0x0199}, {0x0013, 0x019a}, {0x0013, 0x019b}, {0x0013, 0x019c}, {0x0013, 0x019d}, {0x0013, 0x019e}, - {0x0013, 0x019f}, {0x0013, 0x01a0}, {0x0013, 0x01a1}, {0x0013, 0x01a2}, {0x0013, 0x01a3}, {0x0013, 0x01a4}, {0x0013, 0x01a5}, {0x0013, 0x01a6}, - {0x0013, 0x01a7}, {0x0013, 0x01a8}, {0x0013, 0x01a9}, {0x0013, 0x01aa}, {0x0013, 0x01ab}, {0x0013, 0x01ac}, {0x0013, 0x01ad}, {0x0013, 0x01ae}, - {0x0013, 0x01af}, {0x0013, 0x01b0}, {0x0013, 0x01b1}, {0x0013, 0x01b2}, {0x0013, 0x01b3}, {0x0013, 0x01b4}, {0x0013, 0x01b5}, {0x0013, 0x01b6}, - {0x0013, 0x01b7}, {0x0013, 0x01b8}, {0x0013, 0x01b9}, {0x0013, 0x01ba}, {0x0013, 0x01bb}, {0x0013, 0x01bc}, {0x0013, 0x01bd}, {0x0013, 0x01be}, - {0x0013, 0x01bf}, {0x0013, 0x01c0}, {0x0013, 0x01c1}, {0x0013, 0x01c2}, {0x0013, 0x01c3}, {0x0013, 0x01c4}, {0x0013, 0x01c5}, {0x0013, 0x01c6}, - {0x0013, 0x01c7}, {0x0013, 0x01c8}, {0x0013, 0x01c9}, {0x0013, 0x01ca}, {0x0013, 0x01cb}, {0x0013, 0x01cc}, {0x0013, 0x01cd}, {0x0013, 0x01ce}, - {0x0013, 0x01cf}, {0x0013, 0x01d0}, {0x0013, 0x01d1}, {0x0013, 0x01d2}, {0x0013, 0x01d3}, {0x0013, 0x01d4}, {0x0013, 0x01d5}, {0x0013, 0x01d6}, - {0x0013, 0x01d7}, {0x0013, 0x01d8}, {0x0013, 0x01d9}, {0x0013, 0x01da}, {0x0013, 0x01db}, {0x0013, 0x01dc}, {0x0013, 0x01dd}, {0x0013, 0x01de}, - {0x0013, 0x01df}, {0x0013, 0x01e0}, {0x0013, 0x01e1}, {0x0013, 0x01e2}, {0x0013, 0x01e3}, {0x0013, 0x01e4}, {0x0013, 0x01e5}, {0x0013, 0x01e6}, - {0x0013, 0x01e7}, {0x0013, 0x01e8}, {0x0013, 0x01e9}, {0x0013, 0x01ea}, {0x0013, 0x01eb}, {0x0013, 0x01ec}, {0x0013, 0x01ed}, {0x0013, 0x01ee}, - {0x0013, 0x01ef}, {0x0013, 0x01f0}, {0x0013, 0x01f1}, {0x0013, 0x01f2}, {0x0013, 0x01f3}, {0x0013, 0x01f4}, {0x0013, 0x01f5}, {0x0013, 0x01f6}, - {0x0013, 0x01f7}, {0x0013, 0x01f8}, {0x0013, 0x01f9}, {0x0013, 0x01fa}, {0x0013, 0x01fb}, {0x0013, 0x01fc}, {0x0013, 0x01fd}, {0x0013, 0x01fe}, - {0x0013, 0x01ff}, - -}; - -const unsigned int c_aaiCQMFHuffDec13[98][16] = -{ - {0x0006ffff, 0x0004ffff, 0x0005ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x00000000, 0x00000001, 0x00000019, 0x0000001b, 0x0000001c, 0x00000033, 0x00000034, 0x0000004c, 0x0001001a, 0x0001001a, }, - {0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, }, - {0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, }, - {0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, }, - {0x00010067, 0x00010067, 0x0001007e, 0x0001007e, 0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, 0x00020036, 0x00020036, 0x00020036, 0x00020036, }, - {0x0002004e, 0x0002004e, 0x0002004e, 0x0002004e, 0x00020064, 0x00020064, 0x00020064, 0x00020064, 0x00020065, 0x00020065, 0x00020065, 0x00020065, 0x00020066, 0x00020066, 0x00020066, 0x00020066, }, - {0x000cffff, 0x000bffff, 0x000affff, 0x0008ffff, 0x0007ffff, 0x0009ffff, 0x00000005, 0x00000037, 0x00000068, 0x0000007d, 0x0000007f, 0x00000080, 0x0001001e, 0x0001001e, 0x0001004f, 0x0001004f, }, - {0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, }, - {0x00020096, 0x00020096, 0x00020096, 0x00020096, 0x00020099, 0x00020099, 0x00020099, 0x00020099, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, }, - {0x00030097, 0x00030097, 0x00030097, 0x00030097, 0x00030097, 0x00030097, 0x00030097, 0x00030097, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, }, - {0x00020006, 0x00020006, 0x00020006, 0x00020006, 0x00020051, 0x00020051, 0x00020051, 0x00020051, 0x00020069, 0x00020069, 0x00020069, 0x00020069, 0x00020081, 0x00020081, 0x00020081, 0x00020081, }, - {0x000000af, 0x000000b2, 0x00010020, 0x00010020, 0x00010039, 0x00010039, 0x0001006a, 0x0001006a, 0x00010082, 0x00010082, 0x0001009a, 0x0001009a, 0x000100b0, 0x000100b0, 0x000100b1, 0x000100b1, }, - {0x001effff, 0x002fffff, 0x0040ffff, 0x0051ffff, 0x0014ffff, 0x0013ffff, 0x0011ffff, 0x0012ffff, 0x000effff, 0x000dffff, 0x000fffff, 0x0010ffff, 0x00000007, 0x00000052, 0x00000083, 0x0000009b, }, - {0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, }, - {0x000200cb, 0x000200cb, 0x000200cb, 0x000200cb, 0x000200cc, 0x000200cc, 0x000200cc, 0x000200cc, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, }, - {0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x000300b3, 0x000300b3, 0x000300b3, 0x000300b3, 0x000300b3, 0x000300b3, 0x000300b3, 0x000300b3, }, - {0x000300c9, 0x000300c9, 0x000300c9, 0x000300c9, 0x000300c9, 0x000300c9, 0x000300c9, 0x000300c9, 0x000300ca, 0x000300ca, 0x000300ca, 0x000300ca, 0x000300ca, 0x000300ca, 0x000300ca, 0x000300ca, }, - {0x000100e3, 0x000100e3, 0x000100e4, 0x000100e4, 0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006c, 0x00020084, 0x00020084, 0x00020084, 0x00020084, }, - {0x0002009c, 0x0002009c, 0x0002009c, 0x0002009c, 0x0002009d, 0x0002009d, 0x0002009d, 0x0002009d, 0x000200b4, 0x000200b4, 0x000200b4, 0x000200b4, 0x000200c8, 0x000200c8, 0x000200c8, 0x000200c8, }, - {0x000000e5, 0x000000fb, 0x000000fc, 0x000000fd, 0x00010022, 0x00010022, 0x0001003b, 0x0001003b, 0x00010085, 0x00010085, 0x000100b5, 0x000100b5, 0x000100cd, 0x000100cd, 0x000100e2, 0x000100e2, }, - {0x001cffff, 0x001dffff, 0x0015ffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x0019ffff, 0x001affff, 0x001bffff, 0x00000009, 0x00000023, 0x00000054, 0x00000055, 0x0000006e, 0x000000ce, 0x000000e1, }, - {0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, }, - {0x00030086, 0x00030086, 0x00030086, 0x00030086, 0x00030086, 0x00030086, 0x00030086, 0x00030086, 0x0003009e, 0x0003009e, 0x0003009e, 0x0003009e, 0x0003009e, 0x0003009e, 0x0003009e, 0x0003009e, }, - {0x0003009f, 0x0003009f, 0x0003009f, 0x0003009f, 0x0003009f, 0x0003009f, 0x0003009f, 0x0003009f, 0x000300b6, 0x000300b6, 0x000300b6, 0x000300b6, 0x000300b6, 0x000300b6, 0x000300b6, 0x000300b6, }, - {0x000300b7, 0x000300b7, 0x000300b7, 0x000300b7, 0x000300b7, 0x000300b7, 0x000300b7, 0x000300b7, 0x000300e6, 0x000300e6, 0x000300e6, 0x000300e6, 0x000300e6, 0x000300e6, 0x000300e6, 0x000300e6, }, - {0x000300e7, 0x000300e7, 0x000300e7, 0x000300e7, 0x000300e7, 0x000300e7, 0x000300e7, 0x000300e7, 0x000300fe, 0x000300fe, 0x000300fe, 0x000300fe, 0x000300fe, 0x000300fe, 0x000300fe, 0x000300fe, }, - {0x000300ff, 0x000300ff, 0x000300ff, 0x000300ff, 0x000300ff, 0x000300ff, 0x000300ff, 0x000300ff, 0x00030113, 0x00030113, 0x00030113, 0x00030113, 0x00030113, 0x00030113, 0x00030113, 0x00030113, }, - {0x00030114, 0x00030114, 0x00030114, 0x00030114, 0x00030114, 0x00030114, 0x00030114, 0x00030114, 0x00030116, 0x00030116, 0x00030116, 0x00030116, 0x00030116, 0x00030116, 0x00030116, 0x00030116, }, - {0x00020025, 0x00020025, 0x00020025, 0x00020025, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003d, 0x000200a0, 0x000200a0, 0x000200a0, 0x000200a0, }, - {0x000200a1, 0x000200a1, 0x000200a1, 0x000200a1, 0x000200d0, 0x000200d0, 0x000200d0, 0x000200d0, 0x000200d1, 0x000200d1, 0x000200d1, 0x000200d1, 0x000200fa, 0x000200fa, 0x000200fa, 0x000200fa, }, - {0x0021ffff, 0x0023ffff, 0x0022ffff, 0x0025ffff, 0x0024ffff, 0x0026ffff, 0x0029ffff, 0x001fffff, 0x0020ffff, 0x0027ffff, 0x0028ffff, 0x002affff, 0x002bffff, 0x002cffff, 0x002dffff, 0x002effff, }, - {0x00010071, 0x00010071, 0x00010072, 0x00010072, 0x00010073, 0x00010073, 0x00010074, 0x00010074, 0x00010075, 0x00010075, 0x00010076, 0x00010076, 0x00010077, 0x00010077, 0x00010078, 0x00010078, }, - {0x00010079, 0x00010079, 0x0001007a, 0x0001007a, 0x0001007b, 0x0001007b, 0x0001007c, 0x0001007c, 0x00010087, 0x00010087, 0x00010088, 0x00010088, 0x00010089, 0x00010089, 0x0001008a, 0x0001008a, }, - {0x0001000a, 0x0001000a, 0x0001000b, 0x0001000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, 0x00010010, 0x00010010, 0x00010011, 0x00010011, }, - {0x00010027, 0x00010027, 0x00010028, 0x00010028, 0x00010029, 0x00010029, 0x0001002a, 0x0001002a, 0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, 0x0001002e, 0x0001002e, }, - {0x00010012, 0x00010012, 0x00010013, 0x00010013, 0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010026, 0x00010026, }, - {0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, 0x00010046, 0x00010046, 0x00010047, 0x00010047, 0x00010048, 0x00010048, 0x00010049, 0x00010049, 0x0001004a, 0x0001004a, }, - {0x0001002f, 0x0001002f, 0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x00010040, 0x00010040, 0x00010041, 0x00010041, 0x00010042, 0x00010042, }, - {0x00010056, 0x00010056, 0x00010057, 0x00010057, 0x00010058, 0x00010058, 0x00010059, 0x00010059, 0x0001005a, 0x0001005a, 0x0001005b, 0x0001005b, 0x0001005c, 0x0001005c, 0x0001005d, 0x0001005d, }, - {0x0001008b, 0x0001008b, 0x0001008c, 0x0001008c, 0x0001008d, 0x0001008d, 0x0001008e, 0x0001008e, 0x0001008f, 0x0001008f, 0x00010090, 0x00010090, 0x00010091, 0x00010091, 0x00010092, 0x00010092, }, - {0x00010093, 0x00010093, 0x00010094, 0x00010094, 0x00010095, 0x00010095, 0x000100a2, 0x000100a2, 0x000100a3, 0x000100a3, 0x000100a4, 0x000100a4, 0x000100a5, 0x000100a5, 0x000100a6, 0x000100a6, }, - {0x0001005e, 0x0001005e, 0x0001005f, 0x0001005f, 0x00010060, 0x00010060, 0x00010061, 0x00010061, 0x00010062, 0x00010062, 0x00010063, 0x00010063, 0x0001006f, 0x0001006f, 0x00010070, 0x00010070, }, - {0x000100a7, 0x000100a7, 0x000100a8, 0x000100a8, 0x000100a9, 0x000100a9, 0x000100aa, 0x000100aa, 0x000100ab, 0x000100ab, 0x000100ac, 0x000100ac, 0x000100ad, 0x000100ad, 0x000100ae, 0x000100ae, }, - {0x000100b8, 0x000100b8, 0x000100b9, 0x000100b9, 0x000100ba, 0x000100ba, 0x000100bb, 0x000100bb, 0x000100bc, 0x000100bc, 0x000100bd, 0x000100bd, 0x000100be, 0x000100be, 0x000100bf, 0x000100bf, }, - {0x000100c0, 0x000100c0, 0x000100c1, 0x000100c1, 0x000100c2, 0x000100c2, 0x000100c3, 0x000100c3, 0x000100c4, 0x000100c4, 0x000100c5, 0x000100c5, 0x000100c6, 0x000100c6, 0x000100c7, 0x000100c7, }, - {0x000100cf, 0x000100cf, 0x000100d2, 0x000100d2, 0x000100d3, 0x000100d3, 0x000100d4, 0x000100d4, 0x000100d5, 0x000100d5, 0x000100d6, 0x000100d6, 0x000100d7, 0x000100d7, 0x000100d8, 0x000100d8, }, - {0x000100d9, 0x000100d9, 0x000100da, 0x000100da, 0x000100db, 0x000100db, 0x000100dc, 0x000100dc, 0x000100dd, 0x000100dd, 0x000100de, 0x000100de, 0x000100df, 0x000100df, 0x000100e0, 0x000100e0, }, - {0x0030ffff, 0x0031ffff, 0x0032ffff, 0x0033ffff, 0x0034ffff, 0x0035ffff, 0x0036ffff, 0x0037ffff, 0x0038ffff, 0x0039ffff, 0x003affff, 0x003bffff, 0x003cffff, 0x003dffff, 0x003effff, 0x003fffff, }, - {0x000100e8, 0x000100e8, 0x000100e9, 0x000100e9, 0x000100ea, 0x000100ea, 0x000100eb, 0x000100eb, 0x000100ec, 0x000100ec, 0x000100ed, 0x000100ed, 0x000100ee, 0x000100ee, 0x000100ef, 0x000100ef, }, - {0x000100f0, 0x000100f0, 0x000100f1, 0x000100f1, 0x000100f2, 0x000100f2, 0x000100f3, 0x000100f3, 0x000100f4, 0x000100f4, 0x000100f5, 0x000100f5, 0x000100f6, 0x000100f6, 0x000100f7, 0x000100f7, }, - {0x000100f8, 0x000100f8, 0x000100f9, 0x000100f9, 0x00010100, 0x00010100, 0x00010101, 0x00010101, 0x00010102, 0x00010102, 0x00010103, 0x00010103, 0x00010104, 0x00010104, 0x00010105, 0x00010105, }, - {0x00010106, 0x00010106, 0x00010107, 0x00010107, 0x00010108, 0x00010108, 0x00010109, 0x00010109, 0x0001010a, 0x0001010a, 0x0001010b, 0x0001010b, 0x0001010c, 0x0001010c, 0x0001010d, 0x0001010d, }, - {0x0001010e, 0x0001010e, 0x0001010f, 0x0001010f, 0x00010110, 0x00010110, 0x00010111, 0x00010111, 0x00010112, 0x00010112, 0x00010115, 0x00010115, 0x00010117, 0x00010117, 0x00010118, 0x00010118, }, - {0x00010119, 0x00010119, 0x0001011a, 0x0001011a, 0x0001011b, 0x0001011b, 0x0001011c, 0x0001011c, 0x0001011d, 0x0001011d, 0x0001011e, 0x0001011e, 0x0001011f, 0x0001011f, 0x00010120, 0x00010120, }, - {0x00010121, 0x00010121, 0x00010122, 0x00010122, 0x00010123, 0x00010123, 0x00010124, 0x00010124, 0x00010125, 0x00010125, 0x00010126, 0x00010126, 0x00010127, 0x00010127, 0x00010128, 0x00010128, }, - {0x00010129, 0x00010129, 0x0001012a, 0x0001012a, 0x0001012b, 0x0001012b, 0x0001012c, 0x0001012c, 0x0001012d, 0x0001012d, 0x0001012e, 0x0001012e, 0x0001012f, 0x0001012f, 0x00010130, 0x00010130, }, - {0x00010131, 0x00010131, 0x00010132, 0x00010132, 0x00010133, 0x00010133, 0x00010134, 0x00010134, 0x00010135, 0x00010135, 0x00010136, 0x00010136, 0x00010137, 0x00010137, 0x00010138, 0x00010138, }, - {0x00010139, 0x00010139, 0x0001013a, 0x0001013a, 0x0001013b, 0x0001013b, 0x0001013c, 0x0001013c, 0x0001013d, 0x0001013d, 0x0001013e, 0x0001013e, 0x0001013f, 0x0001013f, 0x00010140, 0x00010140, }, - {0x00010141, 0x00010141, 0x00010142, 0x00010142, 0x00010143, 0x00010143, 0x00010144, 0x00010144, 0x00010145, 0x00010145, 0x00010146, 0x00010146, 0x00010147, 0x00010147, 0x00010148, 0x00010148, }, - {0x00010149, 0x00010149, 0x0001014a, 0x0001014a, 0x0001014b, 0x0001014b, 0x0001014c, 0x0001014c, 0x0001014d, 0x0001014d, 0x0001014e, 0x0001014e, 0x0001014f, 0x0001014f, 0x00010150, 0x00010150, }, - {0x00010151, 0x00010151, 0x00010152, 0x00010152, 0x00010153, 0x00010153, 0x00010154, 0x00010154, 0x00010155, 0x00010155, 0x00010156, 0x00010156, 0x00010157, 0x00010157, 0x00010158, 0x00010158, }, - {0x00010159, 0x00010159, 0x0001015a, 0x0001015a, 0x0001015b, 0x0001015b, 0x0001015c, 0x0001015c, 0x0001015d, 0x0001015d, 0x0001015e, 0x0001015e, 0x0001015f, 0x0001015f, 0x00010160, 0x00010160, }, - {0x00010161, 0x00010161, 0x00010162, 0x00010162, 0x00010163, 0x00010163, 0x00010164, 0x00010164, 0x00010165, 0x00010165, 0x00010166, 0x00010166, 0x00010167, 0x00010167, 0x00010168, 0x00010168, }, - {0x00010169, 0x00010169, 0x0001016a, 0x0001016a, 0x0001016b, 0x0001016b, 0x0001016c, 0x0001016c, 0x0001016d, 0x0001016d, 0x0001016e, 0x0001016e, 0x0001016f, 0x0001016f, 0x00010170, 0x00010170, }, - {0x0041ffff, 0x0042ffff, 0x0043ffff, 0x0044ffff, 0x0045ffff, 0x0046ffff, 0x0047ffff, 0x0048ffff, 0x0049ffff, 0x004affff, 0x004bffff, 0x004cffff, 0x004dffff, 0x004effff, 0x004fffff, 0x0050ffff, }, - {0x00010171, 0x00010171, 0x00010172, 0x00010172, 0x00010173, 0x00010173, 0x00010174, 0x00010174, 0x00010175, 0x00010175, 0x00010176, 0x00010176, 0x00010177, 0x00010177, 0x00010178, 0x00010178, }, - {0x00010179, 0x00010179, 0x0001017a, 0x0001017a, 0x0001017b, 0x0001017b, 0x0001017c, 0x0001017c, 0x0001017d, 0x0001017d, 0x0001017e, 0x0001017e, 0x0001017f, 0x0001017f, 0x00010180, 0x00010180, }, - {0x00010181, 0x00010181, 0x00010182, 0x00010182, 0x00010183, 0x00010183, 0x00010184, 0x00010184, 0x00010185, 0x00010185, 0x00010186, 0x00010186, 0x00010187, 0x00010187, 0x00010188, 0x00010188, }, - {0x00010189, 0x00010189, 0x0001018a, 0x0001018a, 0x0001018b, 0x0001018b, 0x0001018c, 0x0001018c, 0x0001018d, 0x0001018d, 0x0001018e, 0x0001018e, 0x0001018f, 0x0001018f, 0x00010190, 0x00010190, }, - {0x00010191, 0x00010191, 0x00010192, 0x00010192, 0x00010193, 0x00010193, 0x00010194, 0x00010194, 0x00010195, 0x00010195, 0x00010196, 0x00010196, 0x00010197, 0x00010197, 0x00010198, 0x00010198, }, - {0x00010199, 0x00010199, 0x0001019a, 0x0001019a, 0x0001019b, 0x0001019b, 0x0001019c, 0x0001019c, 0x0001019d, 0x0001019d, 0x0001019e, 0x0001019e, 0x0001019f, 0x0001019f, 0x000101a0, 0x000101a0, }, - {0x000101a1, 0x000101a1, 0x000101a2, 0x000101a2, 0x000101a3, 0x000101a3, 0x000101a4, 0x000101a4, 0x000101a5, 0x000101a5, 0x000101a6, 0x000101a6, 0x000101a7, 0x000101a7, 0x000101a8, 0x000101a8, }, - {0x000101a9, 0x000101a9, 0x000101aa, 0x000101aa, 0x000101ab, 0x000101ab, 0x000101ac, 0x000101ac, 0x000101ad, 0x000101ad, 0x000101ae, 0x000101ae, 0x000101af, 0x000101af, 0x000101b0, 0x000101b0, }, - {0x000101b1, 0x000101b1, 0x000101b2, 0x000101b2, 0x000101b3, 0x000101b3, 0x000101b4, 0x000101b4, 0x000101b5, 0x000101b5, 0x000101b6, 0x000101b6, 0x000101b7, 0x000101b7, 0x000101b8, 0x000101b8, }, - {0x000101b9, 0x000101b9, 0x000101ba, 0x000101ba, 0x000101bb, 0x000101bb, 0x000101bc, 0x000101bc, 0x000101bd, 0x000101bd, 0x000101be, 0x000101be, 0x000101bf, 0x000101bf, 0x000101c0, 0x000101c0, }, - {0x000101c1, 0x000101c1, 0x000101c2, 0x000101c2, 0x000101c3, 0x000101c3, 0x000101c4, 0x000101c4, 0x000101c5, 0x000101c5, 0x000101c6, 0x000101c6, 0x000101c7, 0x000101c7, 0x000101c8, 0x000101c8, }, - {0x000101c9, 0x000101c9, 0x000101ca, 0x000101ca, 0x000101cb, 0x000101cb, 0x000101cc, 0x000101cc, 0x000101cd, 0x000101cd, 0x000101ce, 0x000101ce, 0x000101cf, 0x000101cf, 0x000101d0, 0x000101d0, }, - {0x000101d1, 0x000101d1, 0x000101d2, 0x000101d2, 0x000101d3, 0x000101d3, 0x000101d4, 0x000101d4, 0x000101d5, 0x000101d5, 0x000101d6, 0x000101d6, 0x000101d7, 0x000101d7, 0x000101d8, 0x000101d8, }, - {0x000101d9, 0x000101d9, 0x000101da, 0x000101da, 0x000101db, 0x000101db, 0x000101dc, 0x000101dc, 0x000101dd, 0x000101dd, 0x000101de, 0x000101de, 0x000101df, 0x000101df, 0x000101e0, 0x000101e0, }, - {0x000101e1, 0x000101e1, 0x000101e2, 0x000101e2, 0x000101e3, 0x000101e3, 0x000101e4, 0x000101e4, 0x000101e5, 0x000101e5, 0x000101e6, 0x000101e6, 0x000101e7, 0x000101e7, 0x000101e8, 0x000101e8, }, - {0x000101e9, 0x000101e9, 0x000101ea, 0x000101ea, 0x000101eb, 0x000101eb, 0x000101ec, 0x000101ec, 0x000101ed, 0x000101ed, 0x000101ee, 0x000101ee, 0x000101ef, 0x000101ef, 0x000101f0, 0x000101f0, }, - {0x0052ffff, 0x0053ffff, 0x0054ffff, 0x0055ffff, 0x0056ffff, 0x0057ffff, 0x0058ffff, 0x0059ffff, 0x005affff, 0x005bffff, 0x005cffff, 0x005dffff, 0x005effff, 0x005fffff, 0x0060ffff, 0x0061ffff, }, - {0x000101f1, 0x000101f1, 0x000101f2, 0x000101f2, 0x000101f3, 0x000101f3, 0x000101f4, 0x000101f4, 0x000101f5, 0x000101f5, 0x000101f6, 0x000101f6, 0x000101f7, 0x000101f7, 0x000101f8, 0x000101f8, }, - {0x000101f9, 0x000101f9, 0x000101fa, 0x000101fa, 0x000101fb, 0x000101fb, 0x000101fc, 0x000101fc, 0x000101fd, 0x000101fd, 0x000101fe, 0x000101fe, 0x000101ff, 0x000101ff, 0x00010200, 0x00010200, }, - {0x00010201, 0x00010201, 0x00010202, 0x00010202, 0x00010203, 0x00010203, 0x00010204, 0x00010204, 0x00010205, 0x00010205, 0x00010206, 0x00010206, 0x00010207, 0x00010207, 0x00010208, 0x00010208, }, - {0x00010209, 0x00010209, 0x0001020a, 0x0001020a, 0x0001020b, 0x0001020b, 0x0001020c, 0x0001020c, 0x0001020d, 0x0001020d, 0x0001020e, 0x0001020e, 0x0001020f, 0x0001020f, 0x00010210, 0x00010210, }, - {0x00010211, 0x00010211, 0x00010212, 0x00010212, 0x00010213, 0x00010213, 0x00010214, 0x00010214, 0x00010215, 0x00010215, 0x00010216, 0x00010216, 0x00010217, 0x00010217, 0x00010218, 0x00010218, }, - {0x00010219, 0x00010219, 0x0001021a, 0x0001021a, 0x0001021b, 0x0001021b, 0x0001021c, 0x0001021c, 0x0001021d, 0x0001021d, 0x0001021e, 0x0001021e, 0x0001021f, 0x0001021f, 0x00010220, 0x00010220, }, - {0x00010221, 0x00010221, 0x00010222, 0x00010222, 0x00010223, 0x00010223, 0x00010224, 0x00010224, 0x00010225, 0x00010225, 0x00010226, 0x00010226, 0x00010227, 0x00010227, 0x00010228, 0x00010228, }, - {0x00010229, 0x00010229, 0x0001022a, 0x0001022a, 0x0001022b, 0x0001022b, 0x0001022c, 0x0001022c, 0x0001022d, 0x0001022d, 0x0001022e, 0x0001022e, 0x0001022f, 0x0001022f, 0x00010230, 0x00010230, }, - {0x00010231, 0x00010231, 0x00010232, 0x00010232, 0x00010233, 0x00010233, 0x00010234, 0x00010234, 0x00010235, 0x00010235, 0x00010236, 0x00010236, 0x00010237, 0x00010237, 0x00010238, 0x00010238, }, - {0x00010239, 0x00010239, 0x0001023a, 0x0001023a, 0x0001023b, 0x0001023b, 0x0001023c, 0x0001023c, 0x0001023d, 0x0001023d, 0x0001023e, 0x0001023e, 0x0001023f, 0x0001023f, 0x00010240, 0x00010240, }, - {0x00010241, 0x00010241, 0x00010242, 0x00010242, 0x00010243, 0x00010243, 0x00010244, 0x00010244, 0x00010245, 0x00010245, 0x00010246, 0x00010246, 0x00010247, 0x00010247, 0x00010248, 0x00010248, }, - {0x00010249, 0x00010249, 0x0001024a, 0x0001024a, 0x0001024b, 0x0001024b, 0x0001024c, 0x0001024c, 0x0001024d, 0x0001024d, 0x0001024e, 0x0001024e, 0x0001024f, 0x0001024f, 0x00010250, 0x00010250, }, - {0x00010251, 0x00010251, 0x00010252, 0x00010252, 0x00010253, 0x00010253, 0x00010254, 0x00010254, 0x00010255, 0x00010255, 0x00010256, 0x00010256, 0x00010257, 0x00010257, 0x00010258, 0x00010258, }, - {0x00010259, 0x00010259, 0x0001025a, 0x0001025a, 0x0001025b, 0x0001025b, 0x0001025c, 0x0001025c, 0x0001025d, 0x0001025d, 0x0001025e, 0x0001025e, 0x0001025f, 0x0001025f, 0x00010260, 0x00010260, }, - {0x00010261, 0x00010261, 0x00010262, 0x00010262, 0x00010263, 0x00010263, 0x00010264, 0x00010264, 0x00010265, 0x00010265, 0x00010266, 0x00010266, 0x00010267, 0x00010267, 0x00010268, 0x00010268, }, - {0x00010269, 0x00010269, 0x0001026a, 0x0001026a, 0x0001026b, 0x0001026b, 0x0001026c, 0x0001026c, 0x0001026d, 0x0001026d, 0x0001026e, 0x0001026e, 0x0001026f, 0x0001026f, 0x00010270, 0x00010270, }, -}; - -const unsigned int c_aaiCQMFHuffEnc14[625][2] = -{ - {0x0005, 0x0007}, {0x0005, 0x0008}, {0x0005, 0x0009}, {0x0005, 0x000a}, {0x0006, 0x0007}, {0x0007, 0x0007}, {0x0009, 0x0009}, {0x000a, 0x000a}, - {0x000c, 0x000e}, {0x000e, 0x0019}, {0x000f, 0x0029}, {0x0010, 0x0046}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, - {0x0013, 0x0004}, {0x0013, 0x0005}, {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0013, 0x000b}, - {0x0013, 0x000c}, {0x0005, 0x000b}, {0x0004, 0x000a}, {0x0004, 0x000b}, {0x0004, 0x000c}, {0x0005, 0x000c}, {0x0006, 0x0008}, {0x0008, 0x0008}, - {0x0009, 0x000a}, {0x000b, 0x000c}, {0x000c, 0x000f}, {0x000e, 0x001a}, {0x0010, 0x0047}, {0x0010, 0x0048}, {0x0012, 0x00f1}, {0x0013, 0x000d}, - {0x0013, 0x000e}, {0x0013, 0x000f}, {0x0013, 0x0010}, {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0013, 0x0014}, {0x0013, 0x0015}, - {0x0013, 0x0016}, {0x0013, 0x0017}, {0x0005, 0x000d}, {0x0004, 0x000d}, {0x0004, 0x000e}, {0x0005, 0x000e}, {0x0006, 0x0009}, {0x0007, 0x0008}, - {0x0008, 0x0009}, {0x000a, 0x000b}, {0x000b, 0x000d}, {0x000d, 0x0013}, {0x000e, 0x001b}, {0x0010, 0x0049}, {0x0013, 0x0018}, {0x0013, 0x0019}, - {0x0013, 0x001a}, {0x0013, 0x001b}, {0x0013, 0x001c}, {0x0013, 0x001d}, {0x0013, 0x001e}, {0x0013, 0x001f}, {0x0013, 0x0020}, {0x0013, 0x0021}, - {0x0013, 0x0022}, {0x0013, 0x0023}, {0x0013, 0x0024}, {0x0005, 0x000f}, {0x0004, 0x000f}, {0x0005, 0x0010}, {0x0005, 0x0011}, {0x0006, 0x000a}, - {0x0007, 0x0009}, {0x0009, 0x000b}, {0x000a, 0x000c}, {0x000c, 0x0010}, {0x000d, 0x0014}, {0x000f, 0x002a}, {0x0012, 0x00f2}, {0x0013, 0x0025}, - {0x0013, 0x0026}, {0x0013, 0x0027}, {0x0013, 0x0028}, {0x0013, 0x0029}, {0x0013, 0x002a}, {0x0013, 0x002b}, {0x0013, 0x002c}, {0x0013, 0x002d}, - {0x0013, 0x002e}, {0x0013, 0x002f}, {0x0013, 0x0030}, {0x0013, 0x0031}, {0x0006, 0x000b}, {0x0005, 0x0012}, {0x0005, 0x0013}, {0x0006, 0x000c}, - {0x0007, 0x000a}, {0x0008, 0x000a}, {0x000a, 0x000d}, {0x000b, 0x000e}, {0x000c, 0x0011}, {0x000e, 0x001c}, {0x000f, 0x002b}, {0x0011, 0x0081}, - {0x0013, 0x0032}, {0x0012, 0x00f3}, {0x0013, 0x0033}, {0x0013, 0x0034}, {0x0013, 0x0035}, {0x0013, 0x0036}, {0x0013, 0x0037}, {0x0013, 0x0038}, - {0x0013, 0x0039}, {0x0013, 0x003a}, {0x0013, 0x003b}, {0x0013, 0x003c}, {0x0013, 0x003d}, {0x0007, 0x000b}, {0x0006, 0x000d}, {0x0007, 0x000c}, - {0x0007, 0x000d}, {0x0008, 0x000b}, {0x0009, 0x000c}, {0x000b, 0x000f}, {0x000c, 0x0012}, {0x000d, 0x0015}, {0x000e, 0x001d}, {0x0010, 0x004a}, - {0x0011, 0x0082}, {0x0013, 0x003e}, {0x0013, 0x003f}, {0x0013, 0x0040}, {0x0013, 0x0041}, {0x0013, 0x0042}, {0x0013, 0x0043}, {0x0013, 0x0044}, - {0x0013, 0x0045}, {0x0013, 0x0046}, {0x0013, 0x0047}, {0x0013, 0x0048}, {0x0013, 0x0049}, {0x0013, 0x004a}, {0x0009, 0x000d}, {0x0008, 0x000c}, - {0x0008, 0x000d}, {0x0009, 0x000e}, {0x000a, 0x000e}, {0x000b, 0x0010}, {0x000c, 0x0013}, {0x000d, 0x0016}, {0x000e, 0x001e}, {0x000f, 0x002c}, - {0x0010, 0x004b}, {0x0012, 0x00f4}, {0x0012, 0x00f5}, {0x0013, 0x004b}, {0x0013, 0x004c}, {0x0013, 0x004d}, {0x0013, 0x004e}, {0x0013, 0x004f}, - {0x0013, 0x0050}, {0x0013, 0x0051}, {0x0013, 0x0052}, {0x0013, 0x0053}, {0x0013, 0x0054}, {0x0013, 0x0055}, {0x0013, 0x0056}, {0x000a, 0x000f}, - {0x0009, 0x000f}, {0x000a, 0x0010}, {0x000a, 0x0011}, {0x000b, 0x0011}, {0x000c, 0x0014}, {0x000d, 0x0017}, {0x000e, 0x001f}, {0x000f, 0x002d}, - {0x0010, 0x004c}, {0x0011, 0x0083}, {0x0011, 0x0084}, {0x0013, 0x0057}, {0x0013, 0x0058}, {0x0013, 0x0059}, {0x0013, 0x005a}, {0x0013, 0x005b}, - {0x0013, 0x005c}, {0x0013, 0x005d}, {0x0013, 0x005e}, {0x0013, 0x005f}, {0x0013, 0x0060}, {0x0013, 0x0061}, {0x0013, 0x0062}, {0x0013, 0x0063}, - {0x000c, 0x0015}, {0x000b, 0x0012}, {0x000b, 0x0013}, {0x000c, 0x0016}, {0x000c, 0x0017}, {0x000d, 0x0018}, {0x000e, 0x0020}, {0x000f, 0x002e}, - {0x0011, 0x0085}, {0x0010, 0x004d}, {0x0013, 0x0064}, {0x0013, 0x0065}, {0x0013, 0x0066}, {0x0013, 0x0067}, {0x0013, 0x0068}, {0x0013, 0x0069}, - {0x0013, 0x006a}, {0x0013, 0x006b}, {0x0013, 0x006c}, {0x0013, 0x006d}, {0x0013, 0x006e}, {0x0013, 0x006f}, {0x0013, 0x0070}, {0x0013, 0x0071}, - {0x0013, 0x0072}, {0x000e, 0x0021}, {0x000d, 0x0019}, {0x000d, 0x001a}, {0x000d, 0x001b}, {0x000e, 0x0022}, {0x000f, 0x002f}, {0x0010, 0x004e}, - {0x0011, 0x0086}, {0x0011, 0x0087}, {0x0013, 0x0073}, {0x0012, 0x00f6}, {0x0013, 0x0074}, {0x0013, 0x0075}, {0x0013, 0x0076}, {0x0013, 0x0077}, - {0x0013, 0x0078}, {0x0013, 0x0079}, {0x0013, 0x007a}, {0x0013, 0x007b}, {0x0013, 0x007c}, {0x0013, 0x007d}, {0x0013, 0x007e}, {0x0013, 0x007f}, - {0x0013, 0x0080}, {0x0013, 0x0081}, {0x000f, 0x0030}, {0x000e, 0x0023}, {0x000e, 0x0024}, {0x000e, 0x0025}, {0x0010, 0x004f}, {0x0012, 0x00f7}, - {0x0011, 0x0088}, {0x0012, 0x00f8}, {0x0012, 0x00f9}, {0x0012, 0x00fa}, {0x0013, 0x0082}, {0x0013, 0x0083}, {0x0013, 0x0084}, {0x0013, 0x0085}, - {0x0013, 0x0086}, {0x0013, 0x0087}, {0x0013, 0x0088}, {0x0013, 0x0089}, {0x0013, 0x008a}, {0x0013, 0x008b}, {0x0013, 0x008c}, {0x0013, 0x008d}, - {0x0013, 0x008e}, {0x0013, 0x008f}, {0x0013, 0x0090}, {0x0012, 0x00fb}, {0x0010, 0x0050}, {0x0010, 0x0051}, {0x000f, 0x0031}, {0x0012, 0x00fc}, - {0x0012, 0x00fd}, {0x0012, 0x00fe}, {0x0013, 0x0091}, {0x0013, 0x0092}, {0x0013, 0x0093}, {0x0013, 0x0094}, {0x0013, 0x0095}, {0x0013, 0x0096}, - {0x0013, 0x0097}, {0x0013, 0x0098}, {0x0013, 0x0099}, {0x0013, 0x009a}, {0x0013, 0x009b}, {0x0013, 0x009c}, {0x0013, 0x009d}, {0x0013, 0x009e}, - {0x0013, 0x009f}, {0x0013, 0x00a0}, {0x0013, 0x00a1}, {0x0013, 0x00a2}, {0x0013, 0x00a3}, {0x0013, 0x00a4}, {0x0011, 0x0089}, {0x0011, 0x008a}, - {0x0013, 0x00a5}, {0x0013, 0x00a6}, {0x0011, 0x008b}, {0x0013, 0x00a7}, {0x0013, 0x00a8}, {0x0013, 0x00a9}, {0x0013, 0x00aa}, {0x0013, 0x00ab}, - {0x0013, 0x00ac}, {0x0013, 0x00ad}, {0x0013, 0x00ae}, {0x0013, 0x00af}, {0x0013, 0x00b0}, {0x0013, 0x00b1}, {0x0013, 0x00b2}, {0x0013, 0x00b3}, - {0x0013, 0x00b4}, {0x0013, 0x00b5}, {0x0013, 0x00b6}, {0x0013, 0x00b7}, {0x0013, 0x00b8}, {0x0013, 0x00b9}, {0x0012, 0x00ff}, {0x0013, 0x00ba}, - {0x0012, 0x0100}, {0x0013, 0x00bb}, {0x0013, 0x00bc}, {0x0013, 0x00bd}, {0x0013, 0x00be}, {0x0013, 0x00bf}, {0x0013, 0x00c0}, {0x0013, 0x00c1}, - {0x0013, 0x00c2}, {0x0013, 0x00c3}, {0x0013, 0x00c4}, {0x0013, 0x00c5}, {0x0013, 0x00c6}, {0x0013, 0x00c7}, {0x0013, 0x00c8}, {0x0013, 0x00c9}, - {0x0013, 0x00ca}, {0x0013, 0x00cb}, {0x0013, 0x00cc}, {0x0013, 0x00cd}, {0x0013, 0x00ce}, {0x0013, 0x00cf}, {0x0013, 0x00d0}, {0x0013, 0x00d1}, - {0x0013, 0x00d2}, {0x0013, 0x00d3}, {0x0013, 0x00d4}, {0x0013, 0x00d5}, {0x0013, 0x00d6}, {0x0013, 0x00d7}, {0x0013, 0x00d8}, {0x0013, 0x00d9}, - {0x0013, 0x00da}, {0x0013, 0x00db}, {0x0013, 0x00dc}, {0x0013, 0x00dd}, {0x0013, 0x00de}, {0x0013, 0x00df}, {0x0013, 0x00e0}, {0x0013, 0x00e1}, - {0x0013, 0x00e2}, {0x0013, 0x00e3}, {0x0013, 0x00e4}, {0x0013, 0x00e5}, {0x0013, 0x00e6}, {0x0013, 0x00e7}, {0x0013, 0x00e8}, {0x0013, 0x00e9}, - {0x0013, 0x00ea}, {0x0013, 0x00eb}, {0x0013, 0x00ec}, {0x0013, 0x00ed}, {0x0013, 0x00ee}, {0x0013, 0x00ef}, {0x0013, 0x00f0}, {0x0013, 0x00f1}, - {0x0013, 0x00f2}, {0x0013, 0x00f3}, {0x0013, 0x00f4}, {0x0013, 0x00f5}, {0x0013, 0x00f6}, {0x0013, 0x00f7}, {0x0013, 0x00f8}, {0x0013, 0x00f9}, - {0x0013, 0x00fa}, {0x0013, 0x00fb}, {0x0013, 0x00fc}, {0x0013, 0x00fd}, {0x0013, 0x00fe}, {0x0013, 0x00ff}, {0x0013, 0x0100}, {0x0013, 0x0101}, - {0x0013, 0x0102}, {0x0013, 0x0103}, {0x0013, 0x0104}, {0x0013, 0x0105}, {0x0013, 0x0106}, {0x0013, 0x0107}, {0x0013, 0x0108}, {0x0013, 0x0109}, - {0x0013, 0x010a}, {0x0013, 0x010b}, {0x0013, 0x010c}, {0x0013, 0x010d}, {0x0013, 0x010e}, {0x0013, 0x010f}, {0x0013, 0x0110}, {0x0013, 0x0111}, - {0x0013, 0x0112}, {0x0013, 0x0113}, {0x0013, 0x0114}, {0x0013, 0x0115}, {0x0013, 0x0116}, {0x0013, 0x0117}, {0x0013, 0x0118}, {0x0013, 0x0119}, - {0x0013, 0x011a}, {0x0013, 0x011b}, {0x0013, 0x011c}, {0x0013, 0x011d}, {0x0013, 0x011e}, {0x0013, 0x011f}, {0x0013, 0x0120}, {0x0013, 0x0121}, - {0x0013, 0x0122}, {0x0013, 0x0123}, {0x0013, 0x0124}, {0x0013, 0x0125}, {0x0013, 0x0126}, {0x0013, 0x0127}, {0x0013, 0x0128}, {0x0013, 0x0129}, - {0x0013, 0x012a}, {0x0013, 0x012b}, {0x0013, 0x012c}, {0x0013, 0x012d}, {0x0013, 0x012e}, {0x0013, 0x012f}, {0x0013, 0x0130}, {0x0013, 0x0131}, - {0x0013, 0x0132}, {0x0013, 0x0133}, {0x0013, 0x0134}, {0x0013, 0x0135}, {0x0013, 0x0136}, {0x0013, 0x0137}, {0x0013, 0x0138}, {0x0013, 0x0139}, - {0x0013, 0x013a}, {0x0013, 0x013b}, {0x0013, 0x013c}, {0x0013, 0x013d}, {0x0013, 0x013e}, {0x0013, 0x013f}, {0x0013, 0x0140}, {0x0013, 0x0141}, - {0x0013, 0x0142}, {0x0013, 0x0143}, {0x0013, 0x0144}, {0x0013, 0x0145}, {0x0013, 0x0146}, {0x0013, 0x0147}, {0x0013, 0x0148}, {0x0013, 0x0149}, - {0x0013, 0x014a}, {0x0013, 0x014b}, {0x0013, 0x014c}, {0x0013, 0x014d}, {0x0013, 0x014e}, {0x0013, 0x014f}, {0x0013, 0x0150}, {0x0013, 0x0151}, - {0x0013, 0x0152}, {0x0013, 0x0153}, {0x0013, 0x0154}, {0x0013, 0x0155}, {0x0013, 0x0156}, {0x0013, 0x0157}, {0x0013, 0x0158}, {0x0013, 0x0159}, - {0x0013, 0x015a}, {0x0013, 0x015b}, {0x0013, 0x015c}, {0x0013, 0x015d}, {0x0013, 0x015e}, {0x0013, 0x015f}, {0x0013, 0x0160}, {0x0013, 0x0161}, - {0x0013, 0x0162}, {0x0013, 0x0163}, {0x0013, 0x0164}, {0x0013, 0x0165}, {0x0013, 0x0166}, {0x0013, 0x0167}, {0x0013, 0x0168}, {0x0013, 0x0169}, - {0x0013, 0x016a}, {0x0013, 0x016b}, {0x0013, 0x016c}, {0x0013, 0x016d}, {0x0013, 0x016e}, {0x0013, 0x016f}, {0x0013, 0x0170}, {0x0013, 0x0171}, - {0x0013, 0x0172}, {0x0013, 0x0173}, {0x0013, 0x0174}, {0x0013, 0x0175}, {0x0013, 0x0176}, {0x0013, 0x0177}, {0x0013, 0x0178}, {0x0013, 0x0179}, - {0x0013, 0x017a}, {0x0013, 0x017b}, {0x0013, 0x017c}, {0x0013, 0x017d}, {0x0013, 0x017e}, {0x0013, 0x017f}, {0x0013, 0x0180}, {0x0013, 0x0181}, - {0x0013, 0x0182}, {0x0013, 0x0183}, {0x0013, 0x0184}, {0x0013, 0x0185}, {0x0013, 0x0186}, {0x0013, 0x0187}, {0x0013, 0x0188}, {0x0013, 0x0189}, - {0x0013, 0x018a}, {0x0013, 0x018b}, {0x0013, 0x018c}, {0x0013, 0x018d}, {0x0013, 0x018e}, {0x0013, 0x018f}, {0x0013, 0x0190}, {0x0013, 0x0191}, - {0x0013, 0x0192}, {0x0013, 0x0193}, {0x0013, 0x0194}, {0x0013, 0x0195}, {0x0013, 0x0196}, {0x0013, 0x0197}, {0x0013, 0x0198}, {0x0013, 0x0199}, - {0x0013, 0x019a}, {0x0013, 0x019b}, {0x0013, 0x019c}, {0x0013, 0x019d}, {0x0013, 0x019e}, {0x0013, 0x019f}, {0x0013, 0x01a0}, {0x0013, 0x01a1}, - {0x0013, 0x01a2}, {0x0013, 0x01a3}, {0x0013, 0x01a4}, {0x0013, 0x01a5}, {0x0013, 0x01a6}, {0x0013, 0x01a7}, {0x0013, 0x01a8}, {0x0013, 0x01a9}, - {0x0013, 0x01aa}, {0x0013, 0x01ab}, {0x0013, 0x01ac}, {0x0013, 0x01ad}, {0x0013, 0x01ae}, {0x0013, 0x01af}, {0x0013, 0x01b0}, {0x0013, 0x01b1}, - {0x0013, 0x01b2}, {0x0013, 0x01b3}, {0x0013, 0x01b4}, {0x0013, 0x01b5}, {0x0013, 0x01b6}, {0x0013, 0x01b7}, {0x0013, 0x01b8}, {0x0013, 0x01b9}, - {0x0013, 0x01ba}, {0x0013, 0x01bb}, {0x0013, 0x01bc}, {0x0013, 0x01bd}, {0x0013, 0x01be}, {0x0013, 0x01bf}, {0x0013, 0x01c0}, {0x0013, 0x01c1}, - {0x0013, 0x01c2}, {0x0013, 0x01c3}, {0x0013, 0x01c4}, {0x0013, 0x01c5}, {0x0013, 0x01c6}, {0x0013, 0x01c7}, {0x0013, 0x01c8}, {0x0013, 0x01c9}, - {0x0013, 0x01ca}, {0x0013, 0x01cb}, {0x0013, 0x01cc}, {0x0013, 0x01cd}, {0x0013, 0x01ce}, {0x0013, 0x01cf}, {0x0013, 0x01d0}, {0x0013, 0x01d1}, - {0x0013, 0x01d2}, {0x0013, 0x01d3}, {0x0013, 0x01d4}, {0x0013, 0x01d5}, {0x0013, 0x01d6}, {0x0013, 0x01d7}, {0x0013, 0x01d8}, {0x0013, 0x01d9}, - {0x0013, 0x01da}, {0x0013, 0x01db}, {0x0013, 0x01dc}, {0x0013, 0x01dd}, {0x0013, 0x01de}, {0x0013, 0x01df}, {0x0013, 0x01e0}, {0x0013, 0x01e1}, - {0x0012, 0x0101}, - -}; - -const unsigned int c_aaiCQMFHuffDec14[103][16] = -{ - {0x000affff, 0x0009ffff, 0x0008ffff, 0x0002ffff, 0x0003ffff, 0x0001ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0000001a, 0x0000001b, 0x0000001c, 0x00000033, 0x00000034, 0x0000004c, }, - {0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, }, - {0x00020067, 0x00020067, 0x00020067, 0x00020067, 0x0002007e, 0x0002007e, 0x0002007e, 0x0002007e, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, }, - {0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, }, - {0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, }, - {0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, }, - {0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, }, - {0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, 0x00020036, 0x00020036, 0x00020036, 0x00020036, 0x0002004f, 0x0002004f, 0x0002004f, 0x0002004f, 0x00020064, 0x00020064, 0x00020064, 0x00020064, }, - {0x00010037, 0x00010037, 0x00010050, 0x00010050, 0x00010068, 0x00010068, 0x0001007d, 0x0001007d, 0x0001007f, 0x0001007f, 0x00010080, 0x00010080, 0x00020004, 0x00020004, 0x00020004, 0x00020004, }, - {0x0012ffff, 0x0011ffff, 0x000fffff, 0x0010ffff, 0x000cffff, 0x000bffff, 0x000dffff, 0x000effff, 0x0000001f, 0x00000038, 0x00000069, 0x00000081, 0x00000097, 0x00000098, 0x00010005, 0x00010005, }, - {0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, }, - {0x000200b1, 0x000200b1, 0x000200b1, 0x000200b1, 0x000200b2, 0x000200b2, 0x000200b2, 0x000200b2, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, - {0x00030082, 0x00030082, 0x00030082, 0x00030082, 0x00030082, 0x00030082, 0x00030082, 0x00030082, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, }, - {0x00030099, 0x00030099, 0x00030099, 0x00030099, 0x00030099, 0x00030099, 0x00030099, 0x00030099, 0x000300b0, 0x000300b0, 0x000300b0, 0x000300b0, 0x000300b0, 0x000300b0, 0x000300b0, 0x000300b0, }, - {0x0001009b, 0x0001009b, 0x000100b3, 0x000100b3, 0x000100c9, 0x000100c9, 0x000100ca, 0x000100ca, 0x00020007, 0x00020007, 0x00020007, 0x00020007, 0x00020039, 0x00020039, 0x00020039, 0x00020039, }, - {0x00020052, 0x00020052, 0x00020052, 0x00020052, 0x0002006a, 0x0002006a, 0x0002006a, 0x0002006a, 0x0002009a, 0x0002009a, 0x0002009a, 0x0002009a, 0x000200af, 0x000200af, 0x000200af, 0x000200af, }, - {0x00000053, 0x0000006c, 0x00000084, 0x0000009c, 0x000000b4, 0x000000c8, 0x000000cb, 0x000000cc, 0x00010021, 0x00010021, 0x0001003a, 0x0001003a, 0x0001006b, 0x0001006b, 0x00010083, 0x00010083, }, - {0x0028ffff, 0x0039ffff, 0x004affff, 0x0023ffff, 0x001cffff, 0x001bffff, 0x0019ffff, 0x0018ffff, 0x001affff, 0x0015ffff, 0x0013ffff, 0x0014ffff, 0x0016ffff, 0x0017ffff, 0x00000008, 0x00000022, }, - {0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030085, 0x00030085, 0x00030085, 0x00030085, 0x00030085, 0x00030085, 0x00030085, 0x00030085, }, - {0x0003009d, 0x0003009d, 0x0003009d, 0x0003009d, 0x0003009d, 0x0003009d, 0x0003009d, 0x0003009d, 0x000300b5, 0x000300b5, 0x000300b5, 0x000300b5, 0x000300b5, 0x000300b5, 0x000300b5, 0x000300b5, }, - {0x000200fc, 0x000200fc, 0x000200fc, 0x000200fc, 0x000200fd, 0x000200fd, 0x000200fd, 0x000200fd, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, }, - {0x000300cd, 0x000300cd, 0x000300cd, 0x000300cd, 0x000300cd, 0x000300cd, 0x000300cd, 0x000300cd, 0x000300e2, 0x000300e2, 0x000300e2, 0x000300e2, 0x000300e2, 0x000300e2, 0x000300e2, 0x000300e2, }, - {0x000300e3, 0x000300e3, 0x000300e3, 0x000300e3, 0x000300e3, 0x000300e3, 0x000300e3, 0x000300e3, 0x000300e4, 0x000300e4, 0x000300e4, 0x000300e4, 0x000300e4, 0x000300e4, 0x000300e4, 0x000300e4, }, - {0x0002006d, 0x0002006d, 0x0002006d, 0x0002006d, 0x00020086, 0x00020086, 0x00020086, 0x00020086, 0x0002009e, 0x0002009e, 0x0002009e, 0x0002009e, 0x000200b6, 0x000200b6, 0x000200b6, 0x000200b6, }, - {0x000100fa, 0x000100fa, 0x00010116, 0x00010116, 0x00020009, 0x00020009, 0x00020009, 0x00020009, 0x00020023, 0x00020023, 0x00020023, 0x00020023, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003c, }, - {0x000200ce, 0x000200ce, 0x000200ce, 0x000200ce, 0x000200e1, 0x000200e1, 0x000200e1, 0x000200e1, 0x000200e5, 0x000200e5, 0x000200e5, 0x000200e5, 0x000200fb, 0x000200fb, 0x000200fb, 0x000200fb, }, - {0x00000114, 0x00000115, 0x0001000a, 0x0001000a, 0x00010055, 0x00010055, 0x0001006e, 0x0001006e, 0x0001009f, 0x0001009f, 0x000100b7, 0x000100b7, 0x000100cf, 0x000100cf, 0x000100e6, 0x000100e6, }, - {0x001fffff, 0x001dffff, 0x001effff, 0x0020ffff, 0x0021ffff, 0x0022ffff, 0x0000000b, 0x00000024, 0x00000025, 0x0000003d, 0x00000087, 0x000000a0, 0x000000b8, 0x000000d1, 0x000000e7, 0x000000fe, }, - {0x00030088, 0x00030088, 0x00030088, 0x00030088, 0x00030088, 0x00030088, 0x00030088, 0x00030088, 0x000300b9, 0x000300b9, 0x000300b9, 0x000300b9, 0x000300b9, 0x000300b9, 0x000300b9, 0x000300b9, }, - {0x000300ba, 0x000300ba, 0x000300ba, 0x000300ba, 0x000300ba, 0x000300ba, 0x000300ba, 0x000300ba, 0x000300d0, 0x000300d0, 0x000300d0, 0x000300d0, 0x000300d0, 0x000300d0, 0x000300d0, 0x000300d0, }, - {0x00020148, 0x00020148, 0x00020148, 0x00020148, 0x00020270, 0x00020270, 0x00020270, 0x00020270, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, }, - {0x000300e8, 0x000300e8, 0x000300e8, 0x000300e8, 0x000300e8, 0x000300e8, 0x000300e8, 0x000300e8, 0x000300e9, 0x000300e9, 0x000300e9, 0x000300e9, 0x000300e9, 0x000300e9, 0x000300e9, 0x000300e9, }, - {0x00030100, 0x00030100, 0x00030100, 0x00030100, 0x00030100, 0x00030100, 0x00030100, 0x00030100, 0x0003012e, 0x0003012e, 0x0003012e, 0x0003012e, 0x0003012e, 0x0003012e, 0x0003012e, 0x0003012e, }, - {0x0003012f, 0x0003012f, 0x0003012f, 0x0003012f, 0x0003012f, 0x0003012f, 0x0003012f, 0x0003012f, 0x00030132, 0x00030132, 0x00030132, 0x00030132, 0x00030132, 0x00030132, 0x00030132, 0x00030132, }, - {0x005bffff, 0x005cffff, 0x005dffff, 0x005effff, 0x005fffff, 0x0060ffff, 0x0061ffff, 0x0062ffff, 0x0063ffff, 0x0064ffff, 0x0065ffff, 0x0066ffff, 0x0024ffff, 0x0025ffff, 0x0026ffff, 0x0027ffff, }, - {0x0001026e, 0x0001026e, 0x0001026f, 0x0001026f, 0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00020056, 0x00020056, 0x00020056, 0x00020056, 0x00020071, 0x00020071, 0x00020071, 0x00020071, }, - {0x000200a1, 0x000200a1, 0x000200a1, 0x000200a1, 0x000200a2, 0x000200a2, 0x000200a2, 0x000200a2, 0x000200eb, 0x000200eb, 0x000200eb, 0x000200eb, 0x000200ff, 0x000200ff, 0x000200ff, 0x000200ff, }, - {0x00020101, 0x00020101, 0x00020101, 0x00020101, 0x00020102, 0x00020102, 0x00020102, 0x00020102, 0x00020103, 0x00020103, 0x00020103, 0x00020103, 0x00020113, 0x00020113, 0x00020113, 0x00020113, }, - {0x00020117, 0x00020117, 0x00020117, 0x00020117, 0x00020118, 0x00020118, 0x00020118, 0x00020118, 0x00020119, 0x00020119, 0x00020119, 0x00020119, 0x00020146, 0x00020146, 0x00020146, 0x00020146, }, - {0x0031ffff, 0x002dffff, 0x002bffff, 0x002cffff, 0x002effff, 0x002fffff, 0x0032ffff, 0x0037ffff, 0x0029ffff, 0x002affff, 0x0030ffff, 0x0033ffff, 0x0034ffff, 0x0035ffff, 0x0036ffff, 0x0038ffff, }, - {0x0001008b, 0x0001008b, 0x0001008c, 0x0001008c, 0x0001008d, 0x0001008d, 0x0001008e, 0x0001008e, 0x0001008f, 0x0001008f, 0x00010090, 0x00010090, 0x00010091, 0x00010091, 0x00010092, 0x00010092, }, - {0x00010093, 0x00010093, 0x00010094, 0x00010094, 0x00010095, 0x00010095, 0x000100a3, 0x000100a3, 0x000100a4, 0x000100a4, 0x000100a5, 0x000100a5, 0x000100a6, 0x000100a6, 0x000100a7, 0x000100a7, }, - {0x0001002a, 0x0001002a, 0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, 0x0001002e, 0x0001002e, 0x0001002f, 0x0001002f, 0x00010030, 0x00010030, 0x00010031, 0x00010031, }, - {0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x00010040, 0x00010040, 0x00010041, 0x00010041, 0x00010042, 0x00010042, 0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, }, - {0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010027, 0x00010027, 0x00010028, 0x00010028, 0x00010029, 0x00010029, }, - {0x00010046, 0x00010046, 0x00010047, 0x00010047, 0x00010048, 0x00010048, 0x00010049, 0x00010049, 0x0001004a, 0x0001004a, 0x00010057, 0x00010057, 0x00010058, 0x00010058, 0x00010059, 0x00010059, }, - {0x0001005a, 0x0001005a, 0x0001005b, 0x0001005b, 0x0001005c, 0x0001005c, 0x0001005d, 0x0001005d, 0x0001005e, 0x0001005e, 0x0001005f, 0x0001005f, 0x00010060, 0x00010060, 0x00010061, 0x00010061, }, - {0x000100a8, 0x000100a8, 0x000100a9, 0x000100a9, 0x000100aa, 0x000100aa, 0x000100ab, 0x000100ab, 0x000100ac, 0x000100ac, 0x000100ad, 0x000100ad, 0x000100ae, 0x000100ae, 0x000100bb, 0x000100bb, }, - {0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, 0x00010010, 0x00010010, 0x00010011, 0x00010011, 0x00010012, 0x00010012, 0x00010013, 0x00010013, }, - {0x00010062, 0x00010062, 0x00010063, 0x00010063, 0x00010070, 0x00010070, 0x00010072, 0x00010072, 0x00010073, 0x00010073, 0x00010074, 0x00010074, 0x00010075, 0x00010075, 0x00010076, 0x00010076, }, - {0x000100bc, 0x000100bc, 0x000100bd, 0x000100bd, 0x000100be, 0x000100be, 0x000100bf, 0x000100bf, 0x000100c0, 0x000100c0, 0x000100c1, 0x000100c1, 0x000100c2, 0x000100c2, 0x000100c3, 0x000100c3, }, - {0x000100c4, 0x000100c4, 0x000100c5, 0x000100c5, 0x000100c6, 0x000100c6, 0x000100c7, 0x000100c7, 0x000100d2, 0x000100d2, 0x000100d3, 0x000100d3, 0x000100d4, 0x000100d4, 0x000100d5, 0x000100d5, }, - {0x000100d6, 0x000100d6, 0x000100d7, 0x000100d7, 0x000100d8, 0x000100d8, 0x000100d9, 0x000100d9, 0x000100da, 0x000100da, 0x000100db, 0x000100db, 0x000100dc, 0x000100dc, 0x000100dd, 0x000100dd, }, - {0x000100de, 0x000100de, 0x000100df, 0x000100df, 0x000100e0, 0x000100e0, 0x000100ea, 0x000100ea, 0x000100ec, 0x000100ec, 0x000100ed, 0x000100ed, 0x000100ee, 0x000100ee, 0x000100ef, 0x000100ef, }, - {0x00010077, 0x00010077, 0x00010078, 0x00010078, 0x00010079, 0x00010079, 0x0001007a, 0x0001007a, 0x0001007b, 0x0001007b, 0x0001007c, 0x0001007c, 0x00010089, 0x00010089, 0x0001008a, 0x0001008a, }, - {0x000100f0, 0x000100f0, 0x000100f1, 0x000100f1, 0x000100f2, 0x000100f2, 0x000100f3, 0x000100f3, 0x000100f4, 0x000100f4, 0x000100f5, 0x000100f5, 0x000100f6, 0x000100f6, 0x000100f7, 0x000100f7, }, - {0x003affff, 0x003bffff, 0x003cffff, 0x003dffff, 0x003effff, 0x003fffff, 0x0040ffff, 0x0041ffff, 0x0042ffff, 0x0043ffff, 0x0044ffff, 0x0045ffff, 0x0046ffff, 0x0047ffff, 0x0048ffff, 0x0049ffff, }, - {0x000100f8, 0x000100f8, 0x000100f9, 0x000100f9, 0x00010104, 0x00010104, 0x00010105, 0x00010105, 0x00010106, 0x00010106, 0x00010107, 0x00010107, 0x00010108, 0x00010108, 0x00010109, 0x00010109, }, - {0x0001010a, 0x0001010a, 0x0001010b, 0x0001010b, 0x0001010c, 0x0001010c, 0x0001010d, 0x0001010d, 0x0001010e, 0x0001010e, 0x0001010f, 0x0001010f, 0x00010110, 0x00010110, 0x00010111, 0x00010111, }, - {0x00010112, 0x00010112, 0x0001011a, 0x0001011a, 0x0001011b, 0x0001011b, 0x0001011c, 0x0001011c, 0x0001011d, 0x0001011d, 0x0001011e, 0x0001011e, 0x0001011f, 0x0001011f, 0x00010120, 0x00010120, }, - {0x00010121, 0x00010121, 0x00010122, 0x00010122, 0x00010123, 0x00010123, 0x00010124, 0x00010124, 0x00010125, 0x00010125, 0x00010126, 0x00010126, 0x00010127, 0x00010127, 0x00010128, 0x00010128, }, - {0x00010129, 0x00010129, 0x0001012a, 0x0001012a, 0x0001012b, 0x0001012b, 0x0001012c, 0x0001012c, 0x0001012d, 0x0001012d, 0x00010130, 0x00010130, 0x00010131, 0x00010131, 0x00010133, 0x00010133, }, - {0x00010134, 0x00010134, 0x00010135, 0x00010135, 0x00010136, 0x00010136, 0x00010137, 0x00010137, 0x00010138, 0x00010138, 0x00010139, 0x00010139, 0x0001013a, 0x0001013a, 0x0001013b, 0x0001013b, }, - {0x0001013c, 0x0001013c, 0x0001013d, 0x0001013d, 0x0001013e, 0x0001013e, 0x0001013f, 0x0001013f, 0x00010140, 0x00010140, 0x00010141, 0x00010141, 0x00010142, 0x00010142, 0x00010143, 0x00010143, }, - {0x00010144, 0x00010144, 0x00010145, 0x00010145, 0x00010147, 0x00010147, 0x00010149, 0x00010149, 0x0001014a, 0x0001014a, 0x0001014b, 0x0001014b, 0x0001014c, 0x0001014c, 0x0001014d, 0x0001014d, }, - {0x0001014e, 0x0001014e, 0x0001014f, 0x0001014f, 0x00010150, 0x00010150, 0x00010151, 0x00010151, 0x00010152, 0x00010152, 0x00010153, 0x00010153, 0x00010154, 0x00010154, 0x00010155, 0x00010155, }, - {0x00010156, 0x00010156, 0x00010157, 0x00010157, 0x00010158, 0x00010158, 0x00010159, 0x00010159, 0x0001015a, 0x0001015a, 0x0001015b, 0x0001015b, 0x0001015c, 0x0001015c, 0x0001015d, 0x0001015d, }, - {0x0001015e, 0x0001015e, 0x0001015f, 0x0001015f, 0x00010160, 0x00010160, 0x00010161, 0x00010161, 0x00010162, 0x00010162, 0x00010163, 0x00010163, 0x00010164, 0x00010164, 0x00010165, 0x00010165, }, - {0x00010166, 0x00010166, 0x00010167, 0x00010167, 0x00010168, 0x00010168, 0x00010169, 0x00010169, 0x0001016a, 0x0001016a, 0x0001016b, 0x0001016b, 0x0001016c, 0x0001016c, 0x0001016d, 0x0001016d, }, - {0x0001016e, 0x0001016e, 0x0001016f, 0x0001016f, 0x00010170, 0x00010170, 0x00010171, 0x00010171, 0x00010172, 0x00010172, 0x00010173, 0x00010173, 0x00010174, 0x00010174, 0x00010175, 0x00010175, }, - {0x00010176, 0x00010176, 0x00010177, 0x00010177, 0x00010178, 0x00010178, 0x00010179, 0x00010179, 0x0001017a, 0x0001017a, 0x0001017b, 0x0001017b, 0x0001017c, 0x0001017c, 0x0001017d, 0x0001017d, }, - {0x0001017e, 0x0001017e, 0x0001017f, 0x0001017f, 0x00010180, 0x00010180, 0x00010181, 0x00010181, 0x00010182, 0x00010182, 0x00010183, 0x00010183, 0x00010184, 0x00010184, 0x00010185, 0x00010185, }, - {0x00010186, 0x00010186, 0x00010187, 0x00010187, 0x00010188, 0x00010188, 0x00010189, 0x00010189, 0x0001018a, 0x0001018a, 0x0001018b, 0x0001018b, 0x0001018c, 0x0001018c, 0x0001018d, 0x0001018d, }, - {0x004bffff, 0x004cffff, 0x004dffff, 0x004effff, 0x004fffff, 0x0050ffff, 0x0051ffff, 0x0052ffff, 0x0053ffff, 0x0054ffff, 0x0055ffff, 0x0056ffff, 0x0057ffff, 0x0058ffff, 0x0059ffff, 0x005affff, }, - {0x0001018e, 0x0001018e, 0x0001018f, 0x0001018f, 0x00010190, 0x00010190, 0x00010191, 0x00010191, 0x00010192, 0x00010192, 0x00010193, 0x00010193, 0x00010194, 0x00010194, 0x00010195, 0x00010195, }, - {0x00010196, 0x00010196, 0x00010197, 0x00010197, 0x00010198, 0x00010198, 0x00010199, 0x00010199, 0x0001019a, 0x0001019a, 0x0001019b, 0x0001019b, 0x0001019c, 0x0001019c, 0x0001019d, 0x0001019d, }, - {0x0001019e, 0x0001019e, 0x0001019f, 0x0001019f, 0x000101a0, 0x000101a0, 0x000101a1, 0x000101a1, 0x000101a2, 0x000101a2, 0x000101a3, 0x000101a3, 0x000101a4, 0x000101a4, 0x000101a5, 0x000101a5, }, - {0x000101a6, 0x000101a6, 0x000101a7, 0x000101a7, 0x000101a8, 0x000101a8, 0x000101a9, 0x000101a9, 0x000101aa, 0x000101aa, 0x000101ab, 0x000101ab, 0x000101ac, 0x000101ac, 0x000101ad, 0x000101ad, }, - {0x000101ae, 0x000101ae, 0x000101af, 0x000101af, 0x000101b0, 0x000101b0, 0x000101b1, 0x000101b1, 0x000101b2, 0x000101b2, 0x000101b3, 0x000101b3, 0x000101b4, 0x000101b4, 0x000101b5, 0x000101b5, }, - {0x000101b6, 0x000101b6, 0x000101b7, 0x000101b7, 0x000101b8, 0x000101b8, 0x000101b9, 0x000101b9, 0x000101ba, 0x000101ba, 0x000101bb, 0x000101bb, 0x000101bc, 0x000101bc, 0x000101bd, 0x000101bd, }, - {0x000101be, 0x000101be, 0x000101bf, 0x000101bf, 0x000101c0, 0x000101c0, 0x000101c1, 0x000101c1, 0x000101c2, 0x000101c2, 0x000101c3, 0x000101c3, 0x000101c4, 0x000101c4, 0x000101c5, 0x000101c5, }, - {0x000101c6, 0x000101c6, 0x000101c7, 0x000101c7, 0x000101c8, 0x000101c8, 0x000101c9, 0x000101c9, 0x000101ca, 0x000101ca, 0x000101cb, 0x000101cb, 0x000101cc, 0x000101cc, 0x000101cd, 0x000101cd, }, - {0x000101ce, 0x000101ce, 0x000101cf, 0x000101cf, 0x000101d0, 0x000101d0, 0x000101d1, 0x000101d1, 0x000101d2, 0x000101d2, 0x000101d3, 0x000101d3, 0x000101d4, 0x000101d4, 0x000101d5, 0x000101d5, }, - {0x000101d6, 0x000101d6, 0x000101d7, 0x000101d7, 0x000101d8, 0x000101d8, 0x000101d9, 0x000101d9, 0x000101da, 0x000101da, 0x000101db, 0x000101db, 0x000101dc, 0x000101dc, 0x000101dd, 0x000101dd, }, - {0x000101de, 0x000101de, 0x000101df, 0x000101df, 0x000101e0, 0x000101e0, 0x000101e1, 0x000101e1, 0x000101e2, 0x000101e2, 0x000101e3, 0x000101e3, 0x000101e4, 0x000101e4, 0x000101e5, 0x000101e5, }, - {0x000101e6, 0x000101e6, 0x000101e7, 0x000101e7, 0x000101e8, 0x000101e8, 0x000101e9, 0x000101e9, 0x000101ea, 0x000101ea, 0x000101eb, 0x000101eb, 0x000101ec, 0x000101ec, 0x000101ed, 0x000101ed, }, - {0x000101ee, 0x000101ee, 0x000101ef, 0x000101ef, 0x000101f0, 0x000101f0, 0x000101f1, 0x000101f1, 0x000101f2, 0x000101f2, 0x000101f3, 0x000101f3, 0x000101f4, 0x000101f4, 0x000101f5, 0x000101f5, }, - {0x000101f6, 0x000101f6, 0x000101f7, 0x000101f7, 0x000101f8, 0x000101f8, 0x000101f9, 0x000101f9, 0x000101fa, 0x000101fa, 0x000101fb, 0x000101fb, 0x000101fc, 0x000101fc, 0x000101fd, 0x000101fd, }, - {0x000101fe, 0x000101fe, 0x000101ff, 0x000101ff, 0x00010200, 0x00010200, 0x00010201, 0x00010201, 0x00010202, 0x00010202, 0x00010203, 0x00010203, 0x00010204, 0x00010204, 0x00010205, 0x00010205, }, - {0x00010206, 0x00010206, 0x00010207, 0x00010207, 0x00010208, 0x00010208, 0x00010209, 0x00010209, 0x0001020a, 0x0001020a, 0x0001020b, 0x0001020b, 0x0001020c, 0x0001020c, 0x0001020d, 0x0001020d, }, - {0x0001020e, 0x0001020e, 0x0001020f, 0x0001020f, 0x00010210, 0x00010210, 0x00010211, 0x00010211, 0x00010212, 0x00010212, 0x00010213, 0x00010213, 0x00010214, 0x00010214, 0x00010215, 0x00010215, }, - {0x00010216, 0x00010216, 0x00010217, 0x00010217, 0x00010218, 0x00010218, 0x00010219, 0x00010219, 0x0001021a, 0x0001021a, 0x0001021b, 0x0001021b, 0x0001021c, 0x0001021c, 0x0001021d, 0x0001021d, }, - {0x0001021e, 0x0001021e, 0x0001021f, 0x0001021f, 0x00010220, 0x00010220, 0x00010221, 0x00010221, 0x00010222, 0x00010222, 0x00010223, 0x00010223, 0x00010224, 0x00010224, 0x00010225, 0x00010225, }, - {0x00010226, 0x00010226, 0x00010227, 0x00010227, 0x00010228, 0x00010228, 0x00010229, 0x00010229, 0x0001022a, 0x0001022a, 0x0001022b, 0x0001022b, 0x0001022c, 0x0001022c, 0x0001022d, 0x0001022d, }, - {0x0001022e, 0x0001022e, 0x0001022f, 0x0001022f, 0x00010230, 0x00010230, 0x00010231, 0x00010231, 0x00010232, 0x00010232, 0x00010233, 0x00010233, 0x00010234, 0x00010234, 0x00010235, 0x00010235, }, - {0x00010236, 0x00010236, 0x00010237, 0x00010237, 0x00010238, 0x00010238, 0x00010239, 0x00010239, 0x0001023a, 0x0001023a, 0x0001023b, 0x0001023b, 0x0001023c, 0x0001023c, 0x0001023d, 0x0001023d, }, - {0x0001023e, 0x0001023e, 0x0001023f, 0x0001023f, 0x00010240, 0x00010240, 0x00010241, 0x00010241, 0x00010242, 0x00010242, 0x00010243, 0x00010243, 0x00010244, 0x00010244, 0x00010245, 0x00010245, }, - {0x00010246, 0x00010246, 0x00010247, 0x00010247, 0x00010248, 0x00010248, 0x00010249, 0x00010249, 0x0001024a, 0x0001024a, 0x0001024b, 0x0001024b, 0x0001024c, 0x0001024c, 0x0001024d, 0x0001024d, }, - {0x0001024e, 0x0001024e, 0x0001024f, 0x0001024f, 0x00010250, 0x00010250, 0x00010251, 0x00010251, 0x00010252, 0x00010252, 0x00010253, 0x00010253, 0x00010254, 0x00010254, 0x00010255, 0x00010255, }, - {0x00010256, 0x00010256, 0x00010257, 0x00010257, 0x00010258, 0x00010258, 0x00010259, 0x00010259, 0x0001025a, 0x0001025a, 0x0001025b, 0x0001025b, 0x0001025c, 0x0001025c, 0x0001025d, 0x0001025d, }, - {0x0001025e, 0x0001025e, 0x0001025f, 0x0001025f, 0x00010260, 0x00010260, 0x00010261, 0x00010261, 0x00010262, 0x00010262, 0x00010263, 0x00010263, 0x00010264, 0x00010264, 0x00010265, 0x00010265, }, - {0x00010266, 0x00010266, 0x00010267, 0x00010267, 0x00010268, 0x00010268, 0x00010269, 0x00010269, 0x0001026a, 0x0001026a, 0x0001026b, 0x0001026b, 0x0001026c, 0x0001026c, 0x0001026d, 0x0001026d, }, -}; - -const unsigned int c_aaiCQMFHuffEnc15[28][2] = -{ - {0x0003, 0x0001}, {0x0002, 0x0002}, {0x0002, 0x0003}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0004, 0x0001}, {0x0005, 0x0001}, {0x0006, 0x0001}, - {0x0007, 0x0001}, {0x0008, 0x0001}, {0x0009, 0x0001}, {0x000a, 0x0001}, {0x000b, 0x0001}, {0x000c, 0x0001}, {0x000d, 0x0001}, {0x000f, 0x0003}, - {0x0011, 0x0000}, {0x0011, 0x0001}, {0x0011, 0x0002}, {0x0011, 0x0003}, {0x0011, 0x0004}, {0x0011, 0x0005}, {0x0011, 0x0006}, {0x0011, 0x0007}, - {0x0011, 0x0008}, {0x0011, 0x0009}, {0x0011, 0x000a}, {0x0011, 0x000b}, - -}; - -const unsigned int c_aaiCQMFHuffDec15[10][16] = -{ - {0x0001ffff, 0x00000005, 0x00010000, 0x00010000, 0x00010003, 0x00010003, 0x00010004, 0x00010004, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00020002, 0x00020002, 0x00020002, 0x00020002, }, - {0x0002ffff, 0x00000009, 0x00010008, 0x00010008, 0x00020007, 0x00020007, 0x00020007, 0x00020007, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, - {0x0003ffff, 0x0000000d, 0x0001000c, 0x0001000c, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, }, - {0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x0001000f, 0x0001000f, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, - {0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, - {0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, }, - {0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, }, - {0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, }, - {0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, }, - {0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, }, -}; - -const unsigned int c_aaiCQMFHuffEnc16[32][2] = -{ - {0x0003, 0x0001}, {0x0002, 0x0003}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0003, 0x0004}, {0x0003, 0x0005}, {0x0004, 0x0001}, {0x0005, 0x0001}, - {0x0006, 0x0001}, {0x0007, 0x0001}, {0x0008, 0x0001}, {0x0009, 0x0001}, {0x000a, 0x0001}, {0x000b, 0x0001}, {0x000c, 0x0001}, {0x000d, 0x0001}, - {0x0010, 0x0007}, {0x0011, 0x0001}, {0x0012, 0x0000}, {0x0012, 0x0001}, {0x0011, 0x0002}, {0x0011, 0x0003}, {0x0011, 0x0004}, {0x0011, 0x0005}, - {0x0011, 0x0006}, {0x0011, 0x0007}, {0x0011, 0x0008}, {0x0011, 0x0009}, {0x0011, 0x000a}, {0x0011, 0x000b}, {0x0011, 0x000c}, {0x0011, 0x000d}, -}; - -const unsigned int c_aaiCQMFHuffDec16[11][16] = -{ - {0x0001ffff, 0x00000006, 0x00010000, 0x00010000, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00010004, 0x00010004, 0x00010005, 0x00010005, 0x00020001, 0x00020001, 0x00020001, 0x00020001, }, - {0x0002ffff, 0x0000000a, 0x00010009, 0x00010009, 0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, }, - {0x0003ffff, 0x0000000e, 0x0001000d, 0x0001000d, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, - {0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x00000010, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, - {0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00020013, 0x00020013, 0x00020013, 0x00020013, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, - {0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, }, - {0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, }, - {0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, }, - {0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, }, - {0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, }, - {0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, }, -}; - -const unsigned int c_aaiCQMFHuffEnc17[41][2] = -{ - {0x0004, 0x0001}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0003, 0x0004}, {0x0003, 0x0005}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0002}, - {0x0004, 0x0003}, {0x0005, 0x0001}, {0x0006, 0x0001}, {0x0007, 0x0001}, {0x0008, 0x0001}, {0x0009, 0x0001}, {0x000a, 0x0001}, {0x000b, 0x0001}, - {0x000c, 0x0001}, {0x000d, 0x0001}, {0x000e, 0x0001}, {0x0010, 0x0003}, {0x0011, 0x0005}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, - {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, - {0x0013, 0x000b}, {0x0013, 0x000c}, {0x0013, 0x000d}, {0x0013, 0x000e}, {0x0013, 0x000f}, {0x0013, 0x0010}, {0x0013, 0x0011}, {0x0013, 0x0012}, - {0x0013, 0x0013}, - -}; - -const unsigned int c_aaiCQMFHuffDec17[7][16] = -{ - {0x0001ffff, 0x00000000, 0x00000007, 0x00000008, 0x00010001, 0x00010001, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00010004, 0x00010004, 0x00010005, 0x00010005, 0x00010006, 0x00010006, }, - {0x0002ffff, 0x0000000c, 0x0001000b, 0x0001000b, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, - {0x0003ffff, 0x00000010, 0x0001000f, 0x0001000f, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, }, - {0x0005ffff, 0x0006ffff, 0x0004ffff, 0x00000013, 0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, - {0x00010025, 0x00010025, 0x00010026, 0x00010026, 0x00010027, 0x00010027, 0x00010028, 0x00010028, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, }, - {0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x0001001a, 0x0001001a, 0x0001001b, 0x0001001b, 0x0001001c, 0x0001001c, }, - {0x0001001d, 0x0001001d, 0x0001001e, 0x0001001e, 0x0001001f, 0x0001001f, 0x00010020, 0x00010020, 0x00010021, 0x00010021, 0x00010022, 0x00010022, 0x00010023, 0x00010023, 0x00010024, 0x00010024, }, -}; - -const unsigned int c_aaiCQMFHuffEnc18[40][2] = -{ - {0x0004, 0x0002}, {0x0003, 0x0003}, {0x0003, 0x0004}, {0x0003, 0x0005}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0003}, {0x0004, 0x0004}, - {0x0004, 0x0005}, {0x0005, 0x0001}, {0x0005, 0x0002}, {0x0005, 0x0003}, {0x0006, 0x0001}, {0x0007, 0x0001}, {0x0008, 0x0001}, {0x0009, 0x0001}, - {0x000a, 0x0001}, {0x000b, 0x0001}, {0x000c, 0x0001}, {0x000d, 0x0001}, {0x000e, 0x0001}, {0x000f, 0x0001}, {0x0011, 0x0003}, {0x0012, 0x0004}, - {0x0014, 0x0000}, {0x0014, 0x0001}, {0x0014, 0x0002}, {0x0012, 0x0005}, {0x0014, 0x0003}, {0x0014, 0x0004}, {0x0014, 0x0005}, {0x0014, 0x0006}, - {0x0014, 0x0007}, {0x0014, 0x0008}, {0x0014, 0x0009}, {0x0014, 0x000a}, {0x0014, 0x000b}, {0x0014, 0x000c}, {0x0014, 0x000d}, {0x0013, 0x0007}, -}; - -const unsigned int c_aaiCQMFHuffDec18[7][16] = -{ - {0x0001ffff, 0x0002ffff, 0x00000000, 0x00000006, 0x00000007, 0x00000008, 0x00010001, 0x00010001, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00010004, 0x00010004, 0x00010005, 0x00010005, }, - {0x0003ffff, 0x0000000e, 0x0001000d, 0x0001000d, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, - {0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, - {0x0004ffff, 0x00000012, 0x00010011, 0x00010011, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, - {0x0006ffff, 0x0005ffff, 0x00010015, 0x00010015, 0x00020014, 0x00020014, 0x00020014, 0x00020014, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, }, - {0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, }, - {0x00000018, 0x00000019, 0x0000001a, 0x0000001c, 0x0000001d, 0x0000001e, 0x0000001f, 0x00000020, 0x00000021, 0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000026, 0x00010027, 0x00010027, }, -}; - -const unsigned int c_aaiCQMFHuffEnc19[47][2] = -{ - {0x0004, 0x0002}, {0x0003, 0x0004}, {0x0003, 0x0005}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0003}, {0x0004, 0x0004}, {0x0004, 0x0005}, - {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0005, 0x0002}, {0x0005, 0x0003}, {0x0006, 0x0002}, {0x0006, 0x0003}, {0x0007, 0x0001}, {0x0007, 0x0002}, - {0x0007, 0x0003}, {0x0008, 0x0001}, {0x0009, 0x0001}, {0x000a, 0x0001}, {0x000b, 0x0001}, {0x000c, 0x0001}, {0x000e, 0x0002}, {0x000e, 0x0003}, - {0x0010, 0x0005}, {0x0010, 0x0006}, {0x0010, 0x0007}, {0x0011, 0x0009}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0012, 0x0001}, {0x0012, 0x0002}, - {0x0012, 0x0003}, {0x0012, 0x0004}, {0x0012, 0x0005}, {0x0012, 0x0006}, {0x0012, 0x0007}, {0x0012, 0x0008}, {0x0012, 0x0009}, {0x0012, 0x000a}, - {0x0012, 0x000b}, {0x0012, 0x000c}, {0x0012, 0x000d}, {0x0012, 0x000e}, {0x0012, 0x000f}, {0x0012, 0x0010}, {0x0012, 0x0011}, - -}; - -const unsigned int c_aaiCQMFHuffDec19[10][16] = -{ - {0x0002ffff, 0x0001ffff, 0x00000000, 0x00000005, 0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x00010001, 0x00010001, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00010004, 0x00010004, }, - {0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, - {0x0003ffff, 0x00000011, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, 0x00010010, 0x00010010, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, }, - {0x0004ffff, 0x00000015, 0x00010014, 0x00010014, 0x00020013, 0x00020013, 0x00020013, 0x00020013, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, }, - {0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x0005ffff, 0x00000018, 0x00000019, 0x0000001a, 0x00020016, 0x00020016, 0x00020016, 0x00020016, 0x00020017, 0x00020017, 0x00020017, 0x00020017, }, - {0x0002002d, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, }, - {0x0001001c, 0x0001001c, 0x0001001d, 0x0001001d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x00020020, 0x00020020, 0x00020020, 0x00020020, }, - {0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x00020023, 0x00020023, 0x00020023, 0x00020023, 0x00020024, 0x00020024, 0x00020024, 0x00020024, }, - {0x00020025, 0x00020025, 0x00020025, 0x00020025, 0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00020027, 0x00020027, 0x00020027, 0x00020027, 0x00020028, 0x00020028, 0x00020028, 0x00020028, }, - {0x00020029, 0x00020029, 0x00020029, 0x00020029, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, }, -}; - -const unsigned int c_aaiCQMFHuffEnc20[58][2] = -{ - {0x0004, 0x0002}, {0x0003, 0x0005}, {0x0004, 0x0003}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0004, 0x0006}, - {0x0004, 0x0007}, {0x0004, 0x0008}, {0x0004, 0x0009}, {0x0005, 0x0002}, {0x0005, 0x0003}, {0x0006, 0x0002}, {0x0006, 0x0003}, {0x0007, 0x0002}, - {0x0007, 0x0003}, {0x0008, 0x0002}, {0x0008, 0x0003}, {0x0009, 0x0002}, {0x0009, 0x0003}, {0x000a, 0x0002}, {0x000a, 0x0003}, {0x000b, 0x0002}, - {0x000b, 0x0003}, {0x000c, 0x0002}, {0x000c, 0x0003}, {0x000d, 0x0002}, {0x000d, 0x0003}, {0x000e, 0x0003}, {0x000f, 0x0005}, {0x0011, 0x0007}, - {0x0012, 0x0000}, {0x0012, 0x0001}, {0x0012, 0x0002}, {0x0012, 0x0003}, {0x0011, 0x0008}, {0x0012, 0x0004}, {0x0012, 0x0005}, {0x0012, 0x0006}, - {0x0012, 0x0007}, {0x0012, 0x0008}, {0x0012, 0x0009}, {0x0012, 0x000a}, {0x0012, 0x000b}, {0x0012, 0x000c}, {0x0012, 0x000d}, {0x0011, 0x0009}, - {0x0011, 0x000a}, {0x0011, 0x000b}, {0x0011, 0x000c}, {0x0011, 0x000d}, {0x0011, 0x000e}, {0x0011, 0x000f}, {0x0011, 0x0010}, {0x0011, 0x0011}, - {0x0011, 0x0012}, {0x0011, 0x0013}, - -}; - -const unsigned int c_aaiCQMFHuffDec20[17][16] = -{ - {0x0002ffff, 0x0001ffff, 0x00000000, 0x00000002, 0x00000005, 0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x0000000a, 0x00010001, 0x00010001, 0x00010003, 0x00010003, 0x00010004, 0x00010004, }, - {0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, - {0x0004ffff, 0x0003ffff, 0x00000011, 0x00000012, 0x0001000f, 0x0001000f, 0x00010010, 0x00010010, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, }, - {0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, }, - {0x0006ffff, 0x0005ffff, 0x00000019, 0x0000001a, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00020015, 0x00020015, 0x00020015, 0x00020015, 0x00020016, 0x00020016, 0x00020016, 0x00020016, }, - {0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, }, - {0x000fffff, 0x0010ffff, 0x000effff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000dffff, 0x0001001e, 0x0001001e, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, }, - {0x0002002d, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, }, - {0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, }, - {0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, }, - {0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, }, - {0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, }, - {0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, }, - {0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, }, - {0x00020029, 0x00020029, 0x00020029, 0x00020029, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, }, - {0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x00020023, 0x00020023, 0x00020023, 0x00020023, }, - {0x00020025, 0x00020025, 0x00020025, 0x00020025, 0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00020027, 0x00020027, 0x00020027, 0x00020027, 0x00020028, 0x00020028, 0x00020028, 0x00020028, }, -}; - -const unsigned int c_aaiCQMFHuffEnc21[70][2] = -{ - {0x0005, 0x0003}, {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0004, 0x0008}, {0x0004, 0x0009}, {0x0004, 0x000a}, - {0x0004, 0x000b}, {0x0004, 0x000c}, {0x0004, 0x000d}, {0x0004, 0x000e}, {0x0004, 0x000f}, {0x0005, 0x0004}, {0x0005, 0x0005}, {0x0005, 0x0006}, - {0x0005, 0x0007}, {0x0006, 0x0003}, {0x0006, 0x0004}, {0x0006, 0x0005}, {0x0007, 0x0002}, {0x0007, 0x0003}, {0x0007, 0x0004}, {0x0007, 0x0005}, - {0x0008, 0x0002}, {0x0008, 0x0003}, {0x0009, 0x0002}, {0x0009, 0x0003}, {0x000a, 0x0002}, {0x000a, 0x0003}, {0x000b, 0x0002}, {0x000b, 0x0003}, - {0x000c, 0x0003}, {0x000d, 0x0003}, {0x000d, 0x0004}, {0x000d, 0x0005}, {0x000e, 0x0004}, {0x000f, 0x0007}, {0x000e, 0x0005}, {0x0011, 0x0004}, - {0x0010, 0x000d}, {0x0011, 0x0005}, {0x0012, 0x0000}, {0x0012, 0x0001}, {0x0012, 0x0002}, {0x0012, 0x0003}, {0x0012, 0x0004}, {0x0012, 0x0005}, - {0x0012, 0x0006}, {0x0012, 0x0007}, {0x0011, 0x0006}, {0x0011, 0x0007}, {0x0011, 0x0008}, {0x0011, 0x0009}, {0x0011, 0x000a}, {0x0011, 0x000b}, - {0x0011, 0x000c}, {0x0011, 0x000d}, {0x0011, 0x000e}, {0x0011, 0x000f}, {0x0011, 0x0010}, {0x0011, 0x0011}, {0x0011, 0x0012}, {0x0011, 0x0013}, - {0x0011, 0x0014}, {0x0011, 0x0015}, {0x0011, 0x0016}, {0x0011, 0x0017}, {0x0011, 0x0018}, {0x0011, 0x0019}, - -}; - -const unsigned int c_aaiCQMFHuffDec21[23][16] = -{ - {0x0004ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0000000c, }, - {0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00020013, 0x00020013, 0x00020013, 0x00020013, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, - {0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, }, - {0x0006ffff, 0x0005ffff, 0x00000018, 0x00000019, 0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00020011, 0x00020011, 0x00020011, 0x00020011, }, - {0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, }, - {0x0009ffff, 0x0007ffff, 0x0008ffff, 0x00000020, 0x0001001e, 0x0001001e, 0x0001001f, 0x0001001f, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, }, - {0x00020024, 0x00020024, 0x00020024, 0x00020024, 0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, }, - {0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, }, - {0x0016ffff, 0x0015ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, 0x00000028, 0x00010025, 0x00010025, }, - {0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, }, - {0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, }, - {0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, }, - {0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, }, - {0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, }, - {0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, }, - {0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, }, - {0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, }, - {0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, }, - {0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, }, - {0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, }, - {0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002f, 0x0002002f, 0x0002002f, 0x0002002f, 0x00020030, 0x00020030, 0x00020030, 0x00020030, 0x00020031, 0x00020031, 0x00020031, 0x00020031, }, - {0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002d, }, -}; - -const unsigned int c_aaiCQMFHuffEnc22[81][2] = -{ - {0x0005, 0x0004}, {0x0004, 0x0006}, {0x0005, 0x0005}, {0x0005, 0x0006}, {0x0004, 0x0007}, {0x0003, 0x0005}, {0x0003, 0x0006}, {0x0005, 0x0007}, - {0x0005, 0x0008}, {0x0005, 0x0009}, {0x0004, 0x0008}, {0x0003, 0x0007}, {0x0004, 0x0009}, {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0006, 0x0003}, - {0x0006, 0x0004}, {0x0006, 0x0005}, {0x0006, 0x0006}, {0x0006, 0x0007}, {0x0007, 0x0003}, {0x0007, 0x0004}, {0x0007, 0x0005}, {0x0008, 0x0003}, - {0x0008, 0x0004}, {0x0008, 0x0005}, {0x0009, 0x0003}, {0x0009, 0x0004}, {0x0009, 0x0005}, {0x000a, 0x0003}, {0x000a, 0x0004}, {0x000a, 0x0005}, - {0x000b, 0x0003}, {0x000b, 0x0004}, {0x000b, 0x0005}, {0x000c, 0x0003}, {0x000c, 0x0004}, {0x000c, 0x0005}, {0x000d, 0x0005}, {0x000e, 0x0005}, - {0x000e, 0x0006}, {0x000e, 0x0007}, {0x000e, 0x0008}, {0x000e, 0x0009}, {0x0010, 0x0011}, {0x0010, 0x0012}, {0x0011, 0x0000}, {0x0011, 0x0001}, - {0x0011, 0x0002}, {0x0010, 0x0013}, {0x0011, 0x0003}, {0x0011, 0x0004}, {0x0011, 0x0005}, {0x0011, 0x0006}, {0x0011, 0x0007}, {0x0011, 0x0008}, - {0x0011, 0x0009}, {0x0011, 0x000a}, {0x0011, 0x000b}, {0x0011, 0x000c}, {0x0011, 0x000d}, {0x0011, 0x000e}, {0x0011, 0x000f}, {0x0011, 0x0010}, - {0x0011, 0x0011}, {0x0011, 0x0012}, {0x0011, 0x0013}, {0x0011, 0x0014}, {0x0011, 0x0015}, {0x0011, 0x0016}, {0x0011, 0x0017}, {0x0011, 0x0018}, - {0x0011, 0x0019}, {0x0011, 0x001a}, {0x0011, 0x001b}, {0x0011, 0x001c}, {0x0011, 0x001d}, {0x0011, 0x001e}, {0x0011, 0x001f}, {0x0011, 0x0020}, - {0x0011, 0x0021}, - -}; - -const unsigned int c_aaiCQMFHuffDec22[30][16] = -{ - {0x0005ffff, 0x0006ffff, 0x0003ffff, 0x0001ffff, 0x0002ffff, 0x0004ffff, 0x00000001, 0x00000004, 0x0000000a, 0x0000000c, 0x00010005, 0x00010005, 0x00010006, 0x00010006, 0x0001000b, 0x0001000b, }, - {0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, }, - {0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, - {0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, }, - {0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, - {0x0009ffff, 0x0007ffff, 0x0008ffff, 0x00000017, 0x00000018, 0x00000019, 0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, }, - {0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x00020011, 0x00020011, 0x00020011, 0x00020011, 0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00020013, 0x00020013, 0x00020013, 0x00020013, }, - {0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, }, - {0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, }, - {0x000cffff, 0x000bffff, 0x000affff, 0x00000023, 0x00000024, 0x00000025, 0x00010020, 0x00010020, 0x00010021, 0x00010021, 0x00010022, 0x00010022, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, }, - {0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002b, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, }, - {0x001dffff, 0x0000002c, 0x0000002d, 0x00000031, 0x00020027, 0x00020027, 0x00020027, 0x00020027, 0x00020028, 0x00020028, 0x00020028, 0x00020028, 0x00020029, 0x00020029, 0x00020029, 0x00020029, }, - {0x000dffff, 0x000effff, 0x000fffff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x0019ffff, 0x001affff, 0x001bffff, 0x001cffff, }, - {0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, }, - {0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, }, - {0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, }, - {0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, }, - {0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, }, - {0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, }, - {0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, }, - {0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, }, - {0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, }, - {0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, }, - {0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, }, - {0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, }, - {0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, }, - {0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, }, - {0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, }, - {0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, }, - {0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, }, -}; - -const unsigned int c_aaiCQMFHuffEnc23[93][2] = -{ - {0x0005, 0x0004}, {0x0004, 0x0007}, {0x0004, 0x0008}, {0x0004, 0x0009}, {0x0004, 0x000a}, {0x0004, 0x000b}, {0x0004, 0x000c}, {0x0004, 0x000d}, - {0x0004, 0x000e}, {0x0004, 0x000f}, {0x0005, 0x0005}, {0x0005, 0x0006}, {0x0005, 0x0007}, {0x0005, 0x0008}, {0x0005, 0x0009}, {0x0005, 0x000a}, - {0x0005, 0x000b}, {0x0005, 0x000c}, {0x0005, 0x000d}, {0x0006, 0x0003}, {0x0006, 0x0004}, {0x0006, 0x0005}, {0x0006, 0x0006}, {0x0006, 0x0007}, - {0x0007, 0x0003}, {0x0007, 0x0004}, {0x0007, 0x0005}, {0x0008, 0x0003}, {0x0008, 0x0004}, {0x0008, 0x0005}, {0x0009, 0x0003}, {0x0009, 0x0004}, - {0x0009, 0x0005}, {0x000a, 0x0003}, {0x000a, 0x0004}, {0x000b, 0x0003}, {0x000a, 0x0005}, {0x000b, 0x0004}, {0x000b, 0x0005}, {0x000c, 0x0004}, - {0x000c, 0x0005}, {0x000d, 0x0005}, {0x000d, 0x0006}, {0x000d, 0x0007}, {0x000e, 0x0008}, {0x000e, 0x0009}, {0x0010, 0x0014}, {0x000f, 0x000b}, - {0x000f, 0x000c}, {0x000f, 0x000d}, {0x000f, 0x000e}, {0x0011, 0x0000}, {0x0011, 0x0001}, {0x000f, 0x000f}, {0x0011, 0x0002}, {0x0011, 0x0003}, - {0x0011, 0x0004}, {0x0011, 0x0005}, {0x0011, 0x0006}, {0x0011, 0x0007}, {0x0011, 0x0008}, {0x0011, 0x0009}, {0x0011, 0x000a}, {0x0011, 0x000b}, - {0x0011, 0x000c}, {0x0011, 0x000d}, {0x0011, 0x000e}, {0x0011, 0x000f}, {0x0011, 0x0010}, {0x0011, 0x0011}, {0x0011, 0x0012}, {0x0011, 0x0013}, - {0x0011, 0x0014}, {0x0011, 0x0015}, {0x0011, 0x0016}, {0x0011, 0x0017}, {0x0011, 0x0018}, {0x0011, 0x0019}, {0x0011, 0x001a}, {0x0011, 0x001b}, - {0x0011, 0x001c}, {0x0011, 0x001d}, {0x0011, 0x001e}, {0x0011, 0x001f}, {0x0011, 0x0020}, {0x0011, 0x0021}, {0x0011, 0x0022}, {0x0011, 0x0023}, - {0x0011, 0x0024}, {0x0011, 0x0025}, {0x0011, 0x0026}, {0x0011, 0x0027}, {0x0010, 0x0015}, - -}; - -const unsigned int c_aaiCQMFHuffDec23[35][16] = -{ - {0x0006ffff, 0x0007ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, 0x00000008, 0x00000009, }, - {0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, }, - {0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, - {0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, - {0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, }, - {0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, }, - {0x000affff, 0x0008ffff, 0x0009ffff, 0x0000001b, 0x0000001c, 0x0000001d, 0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x0001001a, 0x0001001a, 0x00020013, 0x00020013, 0x00020013, 0x00020013, }, - {0x00020014, 0x00020014, 0x00020014, 0x00020014, 0x00020015, 0x00020015, 0x00020015, 0x00020015, 0x00020016, 0x00020016, 0x00020016, 0x00020016, 0x00020017, 0x00020017, 0x00020017, 0x00020017, }, - {0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x00020024, 0x00020024, 0x00020024, 0x00020024, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, }, - {0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, }, - {0x000effff, 0x000dffff, 0x000bffff, 0x000cffff, 0x00000027, 0x00000028, 0x00010023, 0x00010023, 0x00010025, 0x00010025, 0x00010026, 0x00010026, 0x00020021, 0x00020021, 0x00020021, 0x00020021, }, - {0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002d, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, }, - {0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, }, - {0x001fffff, 0x0020ffff, 0x0021ffff, 0x0022ffff, 0x0000002e, 0x0000005c, 0x0001002f, 0x0001002f, 0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010035, 0x00010035, }, - {0x000fffff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x0019ffff, 0x001affff, 0x001bffff, 0x001cffff, 0x001dffff, 0x001effff, }, - {0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, }, - {0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, }, - {0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, }, - {0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, }, - {0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, }, - {0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, }, - {0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, }, - {0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, }, - {0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, }, - {0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, }, - {0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, }, - {0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, }, - {0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, }, - {0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, }, - {0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, }, - {0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, }, - {0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, }, - {0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, }, - {0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, }, - {0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, }, -}; - -const unsigned int c_aaiCQMFHuffEnc24[121][2] = -{ - {0x0006, 0x0005}, {0x0004, 0x000d}, {0x0004, 0x000e}, {0x0004, 0x000f}, {0x0005, 0x0006}, {0x0005, 0x0007}, {0x0005, 0x0008}, {0x0005, 0x0009}, - {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0005, 0x000c}, {0x0005, 0x000d}, {0x0005, 0x000e}, {0x0005, 0x000f}, {0x0005, 0x0010}, {0x0005, 0x0011}, - {0x0005, 0x0012}, {0x0005, 0x0013}, {0x0005, 0x0014}, {0x0005, 0x0015}, {0x0005, 0x0016}, {0x0005, 0x0017}, {0x0005, 0x0018}, {0x0005, 0x0019}, - {0x0006, 0x0006}, {0x0006, 0x0007}, {0x0006, 0x0008}, {0x0006, 0x0009}, {0x0006, 0x000a}, {0x0006, 0x000b}, {0x0007, 0x0004}, {0x0007, 0x0005}, - {0x0007, 0x0006}, {0x0007, 0x0007}, {0x0007, 0x0008}, {0x0007, 0x0009}, {0x0008, 0x0004}, {0x0008, 0x0005}, {0x0008, 0x0006}, {0x0008, 0x0007}, - {0x0009, 0x0004}, {0x0009, 0x0005}, {0x0009, 0x0006}, {0x0009, 0x0007}, {0x000a, 0x0004}, {0x000a, 0x0005}, {0x000a, 0x0006}, {0x000a, 0x0007}, - {0x000b, 0x0004}, {0x000b, 0x0005}, {0x000b, 0x0006}, {0x000b, 0x0007}, {0x000c, 0x0004}, {0x000c, 0x0005}, {0x000c, 0x0006}, {0x000d, 0x0004}, - {0x000c, 0x0007}, {0x000d, 0x0005}, {0x000d, 0x0006}, {0x000d, 0x0007}, {0x000e, 0x0007}, {0x000f, 0x0009}, {0x000f, 0x000a}, {0x000f, 0x000b}, - {0x0010, 0x000f}, {0x000f, 0x000c}, {0x0011, 0x0016}, {0x0010, 0x0010}, {0x000f, 0x000d}, {0x0010, 0x0011}, {0x0012, 0x0000}, {0x0011, 0x0017}, - {0x0012, 0x0001}, {0x0012, 0x0002}, {0x0012, 0x0003}, {0x0012, 0x0004}, {0x0012, 0x0005}, {0x0012, 0x0006}, {0x0012, 0x0007}, {0x0012, 0x0008}, - {0x0012, 0x0009}, {0x0012, 0x000a}, {0x0012, 0x000b}, {0x0012, 0x000c}, {0x0012, 0x000d}, {0x0012, 0x000e}, {0x0012, 0x000f}, {0x0012, 0x0010}, - {0x0012, 0x0011}, {0x0012, 0x0012}, {0x0012, 0x0013}, {0x0012, 0x0014}, {0x0012, 0x0015}, {0x0012, 0x0016}, {0x0012, 0x0017}, {0x0012, 0x0018}, - {0x0012, 0x0019}, {0x0012, 0x001a}, {0x0012, 0x001b}, {0x0012, 0x001c}, {0x0012, 0x001d}, {0x0012, 0x001e}, {0x0012, 0x001f}, {0x0012, 0x0020}, - {0x0012, 0x0021}, {0x0012, 0x0022}, {0x0012, 0x0023}, {0x0012, 0x0024}, {0x0012, 0x0025}, {0x0012, 0x0026}, {0x0012, 0x0027}, {0x0012, 0x0028}, - {0x0012, 0x0029}, {0x0012, 0x002a}, {0x0012, 0x002b}, {0x0011, 0x0018}, {0x0011, 0x0019}, {0x0011, 0x001a}, {0x0011, 0x001b}, {0x0011, 0x001c}, - {0x0011, 0x001d}, - -}; - -const unsigned int c_aaiCQMFHuffDec24[37][16] = -{ - {0x000dffff, 0x000bffff, 0x000cffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x00000001, 0x00000002, 0x00000003, }, - {0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, }, - {0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, }, - {0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, - {0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, - {0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, }, - {0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, - {0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, - {0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, }, - {0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, }, - {0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, }, - {0x00010022, 0x00010022, 0x00010023, 0x00010023, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x00020019, 0x00020019, 0x00020019, 0x00020019, }, - {0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, }, - {0x0011ffff, 0x0010ffff, 0x000effff, 0x000fffff, 0x00000024, 0x00000025, 0x00000026, 0x00000027, 0x0001001e, 0x0001001e, 0x0001001f, 0x0001001f, 0x00010020, 0x00010020, 0x00010021, 0x00010021, }, - {0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, }, - {0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, }, - {0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002f, 0x0002002f, 0x0002002f, 0x0002002f, }, - {0x0015ffff, 0x0014ffff, 0x0012ffff, 0x0013ffff, 0x00000034, 0x00000035, 0x00000036, 0x00000038, 0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010033, 0x00010033, }, - {0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, }, - {0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, }, - {0x00000043, 0x00000045, 0x0001003d, 0x0001003d, 0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x00010041, 0x00010041, 0x00010044, 0x00010044, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003c, }, - {0x0024ffff, 0x001affff, 0x001bffff, 0x001cffff, 0x001dffff, 0x001effff, 0x001fffff, 0x0020ffff, 0x0021ffff, 0x0022ffff, 0x0023ffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x0019ffff, 0x00000040, }, - {0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, }, - {0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, }, - {0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, }, - {0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, }, - {0x0002004b, 0x0002004b, 0x0002004b, 0x0002004b, 0x0002004c, 0x0002004c, 0x0002004c, 0x0002004c, 0x0002004d, 0x0002004d, 0x0002004d, 0x0002004d, 0x0002004e, 0x0002004e, 0x0002004e, 0x0002004e, }, - {0x0002004f, 0x0002004f, 0x0002004f, 0x0002004f, 0x00020050, 0x00020050, 0x00020050, 0x00020050, 0x00020051, 0x00020051, 0x00020051, 0x00020051, 0x00020052, 0x00020052, 0x00020052, 0x00020052, }, - {0x00020053, 0x00020053, 0x00020053, 0x00020053, 0x00020054, 0x00020054, 0x00020054, 0x00020054, 0x00020055, 0x00020055, 0x00020055, 0x00020055, 0x00020056, 0x00020056, 0x00020056, 0x00020056, }, - {0x00020057, 0x00020057, 0x00020057, 0x00020057, 0x00020058, 0x00020058, 0x00020058, 0x00020058, 0x00020059, 0x00020059, 0x00020059, 0x00020059, 0x0002005a, 0x0002005a, 0x0002005a, 0x0002005a, }, - {0x0002005b, 0x0002005b, 0x0002005b, 0x0002005b, 0x0002005c, 0x0002005c, 0x0002005c, 0x0002005c, 0x0002005d, 0x0002005d, 0x0002005d, 0x0002005d, 0x0002005e, 0x0002005e, 0x0002005e, 0x0002005e, }, - {0x0002005f, 0x0002005f, 0x0002005f, 0x0002005f, 0x00020060, 0x00020060, 0x00020060, 0x00020060, 0x00020061, 0x00020061, 0x00020061, 0x00020061, 0x00020062, 0x00020062, 0x00020062, 0x00020062, }, - {0x00020063, 0x00020063, 0x00020063, 0x00020063, 0x00020064, 0x00020064, 0x00020064, 0x00020064, 0x00020065, 0x00020065, 0x00020065, 0x00020065, 0x00020066, 0x00020066, 0x00020066, 0x00020066, }, - {0x00020067, 0x00020067, 0x00020067, 0x00020067, 0x00020068, 0x00020068, 0x00020068, 0x00020068, 0x00020069, 0x00020069, 0x00020069, 0x00020069, 0x0002006a, 0x0002006a, 0x0002006a, 0x0002006a, }, - {0x0002006b, 0x0002006b, 0x0002006b, 0x0002006b, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006d, 0x0002006d, 0x0002006d, 0x0002006d, 0x0002006e, 0x0002006e, 0x0002006e, 0x0002006e, }, - {0x0002006f, 0x0002006f, 0x0002006f, 0x0002006f, 0x00020070, 0x00020070, 0x00020070, 0x00020070, 0x00020071, 0x00020071, 0x00020071, 0x00020071, 0x00020072, 0x00020072, 0x00020072, 0x00020072, }, - {0x00020046, 0x00020046, 0x00020046, 0x00020046, 0x00020048, 0x00020048, 0x00020048, 0x00020048, 0x00020049, 0x00020049, 0x00020049, 0x00020049, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, }, -}; - -const unsigned int c_aaiCQMFHuffEnc25[136][2] = -{ - {0x0006, 0x0006}, {0x0005, 0x000b}, {0x0005, 0x000c}, {0x0005, 0x000d}, {0x0005, 0x000e}, {0x0005, 0x000f}, {0x0005, 0x0010}, {0x0005, 0x0011}, - {0x0005, 0x0012}, {0x0005, 0x0013}, {0x0005, 0x0014}, {0x0005, 0x0015}, {0x0005, 0x0016}, {0x0005, 0x0017}, {0x0005, 0x0018}, {0x0005, 0x0019}, - {0x0005, 0x001a}, {0x0005, 0x001b}, {0x0005, 0x001c}, {0x0005, 0x001d}, {0x0005, 0x001e}, {0x0005, 0x001f}, {0x0006, 0x0007}, {0x0006, 0x0008}, - {0x0006, 0x0009}, {0x0006, 0x000a}, {0x0006, 0x000b}, {0x0006, 0x000c}, {0x0006, 0x000d}, {0x0006, 0x000e}, {0x0006, 0x000f}, {0x0006, 0x0010}, - {0x0006, 0x0011}, {0x0006, 0x0012}, {0x0006, 0x0013}, {0x0006, 0x0014}, {0x0006, 0x0015}, {0x0007, 0x0005}, {0x0007, 0x0006}, {0x0007, 0x0007}, - {0x0007, 0x0008}, {0x0007, 0x0009}, {0x0007, 0x000a}, {0x0007, 0x000b}, {0x0008, 0x0005}, {0x0008, 0x0006}, {0x0008, 0x0007}, {0x0008, 0x0008}, - {0x0008, 0x0009}, {0x0009, 0x0005}, {0x0009, 0x0006}, {0x0009, 0x0007}, {0x0009, 0x0008}, {0x0009, 0x0009}, {0x000a, 0x0004}, {0x000a, 0x0005}, - {0x000a, 0x0006}, {0x000a, 0x0007}, {0x000a, 0x0008}, {0x000a, 0x0009}, {0x000b, 0x0005}, {0x000b, 0x0006}, {0x000b, 0x0007}, {0x000c, 0x0005}, - {0x000c, 0x0006}, {0x000c, 0x0007}, {0x000c, 0x0008}, {0x000c, 0x0009}, {0x000d, 0x0006}, {0x000d, 0x0007}, {0x000d, 0x0008}, {0x000d, 0x0009}, - {0x000e, 0x0009}, {0x000e, 0x000a}, {0x000f, 0x0010}, {0x000e, 0x000b}, {0x000f, 0x0011}, {0x0010, 0x001b}, {0x0010, 0x001c}, {0x0010, 0x001d}, - {0x0010, 0x001e}, {0x0011, 0x0000}, {0x0011, 0x0001}, {0x0011, 0x0002}, {0x0011, 0x0003}, {0x0011, 0x0004}, {0x0011, 0x0005}, {0x0011, 0x0006}, - {0x0011, 0x0007}, {0x0011, 0x0008}, {0x0010, 0x001f}, {0x0011, 0x0009}, {0x0011, 0x000a}, {0x0011, 0x000b}, {0x0011, 0x000c}, {0x0011, 0x000d}, - {0x0011, 0x000e}, {0x0011, 0x000f}, {0x0011, 0x0010}, {0x0011, 0x0011}, {0x0011, 0x0012}, {0x0011, 0x0013}, {0x0011, 0x0014}, {0x0011, 0x0015}, - {0x0011, 0x0016}, {0x0011, 0x0017}, {0x0011, 0x0018}, {0x0011, 0x0019}, {0x0011, 0x001a}, {0x0011, 0x001b}, {0x0011, 0x001c}, {0x0011, 0x001d}, - {0x0011, 0x001e}, {0x0011, 0x001f}, {0x0011, 0x0020}, {0x0011, 0x0021}, {0x0011, 0x0022}, {0x0011, 0x0023}, {0x0011, 0x0024}, {0x0011, 0x0025}, - {0x0011, 0x0026}, {0x0011, 0x0027}, {0x0011, 0x0028}, {0x0011, 0x0029}, {0x0011, 0x002a}, {0x0011, 0x002b}, {0x0011, 0x002c}, {0x0011, 0x002d}, - {0x0011, 0x002e}, {0x0011, 0x002f}, {0x0011, 0x0030}, {0x0011, 0x0031}, {0x0011, 0x0032}, {0x0011, 0x0033}, {0x0011, 0x0034}, {0x0011, 0x0035}, -}; - -const unsigned int c_aaiCQMFHuffDec25[54][16] = -{ - {0x0010ffff, 0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, }, - {0x00020023, 0x00020023, 0x00020023, 0x00020023, 0x00020024, 0x00020024, 0x00020024, 0x00020024, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, }, - {0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, }, - {0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, }, - {0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, }, - {0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, - {0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, - {0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, }, - {0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, - {0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, - {0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, }, - {0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, }, - {0x00010028, 0x00010028, 0x00010029, 0x00010029, 0x0001002a, 0x0001002a, 0x0001002b, 0x0001002b, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020016, 0x00020016, 0x00020016, 0x00020016, }, - {0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, }, - {0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, }, - {0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, }, - {0x0015ffff, 0x0014ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0000002c, 0x0000002d, 0x0000002e, 0x0000002f, 0x00000030, 0x00010025, 0x00010025, 0x00010026, 0x00010026, 0x00010027, 0x00010027, }, - {0x0002003a, 0x0002003a, 0x0002003a, 0x0002003a, 0x0002003b, 0x0002003b, 0x0002003b, 0x0002003b, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, }, - {0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, }, - {0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, }, - {0x00020036, 0x00020036, 0x00020036, 0x00020036, 0x00020037, 0x00020037, 0x00020037, 0x00020037, 0x00020038, 0x00020038, 0x00020038, 0x00020038, 0x00020039, 0x00020039, 0x00020039, 0x00020039, }, - {0x001affff, 0x0019ffff, 0x0018ffff, 0x0016ffff, 0x0017ffff, 0x0000003f, 0x00000040, 0x00000041, 0x00000042, 0x00000043, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, 0x0001003e, 0x0001003e, }, - {0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, }, - {0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, }, - {0x0001004a, 0x0001004a, 0x0001004c, 0x0001004c, 0x00020048, 0x00020048, 0x00020048, 0x00020048, 0x00020049, 0x00020049, 0x00020049, 0x00020049, 0x0002004b, 0x0002004b, 0x0002004b, 0x0002004b, }, - {0x002bffff, 0x002cffff, 0x002dffff, 0x002effff, 0x002fffff, 0x0030ffff, 0x0031ffff, 0x0032ffff, 0x0033ffff, 0x0034ffff, 0x0035ffff, 0x0000004d, 0x0000004e, 0x0000004f, 0x00000050, 0x0000005a, }, - {0x001bffff, 0x001cffff, 0x001dffff, 0x001effff, 0x001fffff, 0x0020ffff, 0x0021ffff, 0x0022ffff, 0x0023ffff, 0x0024ffff, 0x0025ffff, 0x0026ffff, 0x0027ffff, 0x0028ffff, 0x0029ffff, 0x002affff, }, - {0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, }, - {0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, }, - {0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, }, - {0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, }, - {0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, }, - {0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, }, - {0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005f, 0x0003005f, 0x0003005f, 0x0003005f, 0x0003005f, 0x0003005f, 0x0003005f, 0x0003005f, }, - {0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, }, - {0x00030062, 0x00030062, 0x00030062, 0x00030062, 0x00030062, 0x00030062, 0x00030062, 0x00030062, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, }, - {0x00030064, 0x00030064, 0x00030064, 0x00030064, 0x00030064, 0x00030064, 0x00030064, 0x00030064, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, }, - {0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, }, - {0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, }, - {0x0003006a, 0x0003006a, 0x0003006a, 0x0003006a, 0x0003006a, 0x0003006a, 0x0003006a, 0x0003006a, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, }, - {0x0003006c, 0x0003006c, 0x0003006c, 0x0003006c, 0x0003006c, 0x0003006c, 0x0003006c, 0x0003006c, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, }, - {0x0003006e, 0x0003006e, 0x0003006e, 0x0003006e, 0x0003006e, 0x0003006e, 0x0003006e, 0x0003006e, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, }, - {0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, }, - {0x00030072, 0x00030072, 0x00030072, 0x00030072, 0x00030072, 0x00030072, 0x00030072, 0x00030072, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, }, - {0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, }, - {0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, }, - {0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, }, - {0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, }, - {0x0003007c, 0x0003007c, 0x0003007c, 0x0003007c, 0x0003007c, 0x0003007c, 0x0003007c, 0x0003007c, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, }, - {0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007f, 0x0003007f, 0x0003007f, 0x0003007f, 0x0003007f, 0x0003007f, 0x0003007f, 0x0003007f, }, - {0x00030080, 0x00030080, 0x00030080, 0x00030080, 0x00030080, 0x00030080, 0x00030080, 0x00030080, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, }, - {0x00030082, 0x00030082, 0x00030082, 0x00030082, 0x00030082, 0x00030082, 0x00030082, 0x00030082, 0x00030083, 0x00030083, 0x00030083, 0x00030083, 0x00030083, 0x00030083, 0x00030083, 0x00030083, }, - {0x00030084, 0x00030084, 0x00030084, 0x00030084, 0x00030084, 0x00030084, 0x00030084, 0x00030084, 0x00030085, 0x00030085, 0x00030085, 0x00030085, 0x00030085, 0x00030085, 0x00030085, 0x00030085, }, - {0x00030086, 0x00030086, 0x00030086, 0x00030086, 0x00030086, 0x00030086, 0x00030086, 0x00030086, 0x00030087, 0x00030087, 0x00030087, 0x00030087, 0x00030087, 0x00030087, 0x00030087, 0x00030087, }, -}; - -const unsigned int c_aaiCQMFHuffEnc26[164][2] = -{ - {0x0006, 0x0008}, {0x0005, 0x0010}, {0x0005, 0x0011}, {0x0005, 0x0012}, {0x0005, 0x0013}, {0x0005, 0x0014}, {0x0005, 0x0015}, {0x0005, 0x0016}, - {0x0005, 0x0017}, {0x0005, 0x0018}, {0x0005, 0x0019}, {0x0005, 0x001a}, {0x0005, 0x001b}, {0x0005, 0x001c}, {0x0005, 0x001d}, {0x0005, 0x001e}, - {0x0006, 0x0009}, {0x0006, 0x000a}, {0x0005, 0x001f}, {0x0006, 0x000b}, {0x0006, 0x000c}, {0x0006, 0x000d}, {0x0006, 0x000e}, {0x0006, 0x000f}, - {0x0006, 0x0010}, {0x0006, 0x0011}, {0x0006, 0x0012}, {0x0006, 0x0013}, {0x0006, 0x0014}, {0x0006, 0x0015}, {0x0006, 0x0016}, {0x0006, 0x0017}, - {0x0006, 0x0018}, {0x0006, 0x0019}, {0x0006, 0x001a}, {0x0006, 0x001b}, {0x0006, 0x001c}, {0x0006, 0x001d}, {0x0006, 0x001e}, {0x0006, 0x001f}, - {0x0007, 0x0006}, {0x0007, 0x0007}, {0x0007, 0x0008}, {0x0007, 0x0009}, {0x0007, 0x000a}, {0x0007, 0x000b}, {0x0007, 0x000c}, {0x0007, 0x000d}, - {0x0007, 0x000e}, {0x0007, 0x000f}, {0x0008, 0x0005}, {0x0008, 0x0006}, {0x0008, 0x0007}, {0x0008, 0x0008}, {0x0008, 0x0009}, {0x0008, 0x000a}, - {0x0008, 0x000b}, {0x0009, 0x0005}, {0x0009, 0x0006}, {0x0009, 0x0007}, {0x0009, 0x0008}, {0x0009, 0x0009}, {0x000a, 0x0005}, {0x000a, 0x0006}, - {0x000a, 0x0007}, {0x000a, 0x0008}, {0x000a, 0x0009}, {0x000b, 0x0005}, {0x000b, 0x0006}, {0x000b, 0x0007}, {0x000b, 0x0008}, {0x000b, 0x0009}, - {0x000c, 0x0005}, {0x000c, 0x0006}, {0x000c, 0x0007}, {0x000c, 0x0008}, {0x000c, 0x0009}, {0x000d, 0x0005}, {0x000d, 0x0006}, {0x000d, 0x0007}, - {0x000d, 0x0008}, {0x000e, 0x0006}, {0x000d, 0x0009}, {0x000e, 0x0007}, {0x000e, 0x0008}, {0x000e, 0x0009}, {0x000f, 0x0008}, {0x000f, 0x0009}, - {0x000f, 0x000a}, {0x0011, 0x0014}, {0x0010, 0x000b}, {0x000f, 0x000b}, {0x0010, 0x000c}, {0x0012, 0x001b}, {0x0010, 0x000d}, {0x0010, 0x000e}, - {0x0011, 0x0015}, {0x0012, 0x001c}, {0x0012, 0x001d}, {0x0010, 0x000f}, {0x0012, 0x001e}, {0x0013, 0x0000}, {0x0012, 0x001f}, {0x0013, 0x0001}, - {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0012, 0x0020}, {0x0013, 0x0005}, {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0013, 0x0008}, - {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0013, 0x000c}, {0x0013, 0x000d}, {0x0013, 0x000e}, {0x0013, 0x000f}, {0x0013, 0x0010}, - {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0013, 0x0014}, {0x0013, 0x0015}, {0x0013, 0x0016}, {0x0013, 0x0017}, {0x0013, 0x0018}, - {0x0013, 0x0019}, {0x0013, 0x001a}, {0x0013, 0x001b}, {0x0013, 0x001c}, {0x0013, 0x001d}, {0x0013, 0x001e}, {0x0013, 0x001f}, {0x0013, 0x0020}, - {0x0013, 0x0021}, {0x0013, 0x0022}, {0x0013, 0x0023}, {0x0013, 0x0024}, {0x0013, 0x0025}, {0x0013, 0x0026}, {0x0013, 0x0027}, {0x0013, 0x0028}, - {0x0013, 0x0029}, {0x0013, 0x002a}, {0x0013, 0x002b}, {0x0013, 0x002c}, {0x0013, 0x002d}, {0x0013, 0x002e}, {0x0013, 0x002f}, {0x0013, 0x0030}, - {0x0013, 0x0031}, {0x0013, 0x0032}, {0x0013, 0x0033}, {0x0013, 0x0034}, {0x0013, 0x0035}, {0x0012, 0x0021}, {0x0012, 0x0022}, {0x0012, 0x0023}, - {0x0012, 0x0024}, {0x0012, 0x0025}, {0x0012, 0x0026}, {0x0012, 0x0027}, - -}; - -const unsigned int c_aaiCQMFHuffDec26[38][16] = -{ - {0x000fffff, 0x0010ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000dffff, 0x000effff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, }, - {0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, }, - {0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, }, - {0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, - {0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, }, - {0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, }, - {0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, - {0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, - {0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, }, - {0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x00020011, 0x00020011, 0x00020011, 0x00020011, 0x00020013, 0x00020013, 0x00020013, 0x00020013, }, - {0x00020014, 0x00020014, 0x00020014, 0x00020014, 0x00020015, 0x00020015, 0x00020015, 0x00020015, 0x00020016, 0x00020016, 0x00020016, 0x00020016, 0x00020017, 0x00020017, 0x00020017, 0x00020017, }, - {0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, }, - {0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, }, - {0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x00020023, 0x00020023, 0x00020023, 0x00020023, }, - {0x00020024, 0x00020024, 0x00020024, 0x00020024, 0x00020025, 0x00020025, 0x00020025, 0x00020025, 0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00020027, 0x00020027, 0x00020027, 0x00020027, }, - {0x0015ffff, 0x0014ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x00000032, 0x00000033, 0x00000034, 0x00000035, 0x00000036, 0x00000037, 0x00000038, 0x00010028, 0x00010028, 0x00010029, 0x00010029, }, - {0x0001002a, 0x0001002a, 0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, 0x0001002e, 0x0001002e, 0x0001002f, 0x0001002f, 0x00010030, 0x00010030, 0x00010031, 0x00010031, }, - {0x00020041, 0x00020041, 0x00020041, 0x00020041, 0x00020042, 0x00020042, 0x00020042, 0x00020042, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, }, - {0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, }, - {0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, }, - {0x00010046, 0x00010046, 0x00010047, 0x00010047, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002003f, 0x0002003f, 0x0002003f, 0x0002003f, 0x00020040, 0x00020040, 0x00020040, 0x00020040, }, - {0x001affff, 0x0019ffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x00000048, 0x00000049, 0x0000004a, 0x0000004b, 0x0000004c, 0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, }, - {0x00020054, 0x00020054, 0x00020054, 0x00020054, 0x00020055, 0x00020055, 0x00020055, 0x00020055, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, }, - {0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, }, - {0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, }, - {0x00010056, 0x00010056, 0x00010057, 0x00010057, 0x00010058, 0x00010058, 0x0001005b, 0x0001005b, 0x00020051, 0x00020051, 0x00020051, 0x00020051, 0x00020053, 0x00020053, 0x00020053, 0x00020053, }, - {0x0020ffff, 0x0021ffff, 0x0022ffff, 0x0023ffff, 0x0024ffff, 0x0025ffff, 0x001dffff, 0x001cffff, 0x001effff, 0x001fffff, 0x001bffff, 0x0000005a, 0x0000005c, 0x0000005e, 0x0000005f, 0x00000063, }, - {0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, }, - {0x00020061, 0x00020061, 0x00020061, 0x00020061, 0x00020062, 0x00020062, 0x00020062, 0x00020062, 0x00020064, 0x00020064, 0x00020064, 0x00020064, 0x00020066, 0x00020066, 0x00020066, 0x00020066, }, - {0x00010097, 0x00010097, 0x00010098, 0x00010098, 0x00010099, 0x00010099, 0x0001009a, 0x0001009a, 0x0001009b, 0x0001009b, 0x0001009c, 0x0001009c, 0x0002005d, 0x0002005d, 0x0002005d, 0x0002005d, }, - {0x0002006b, 0x0002006b, 0x0002006b, 0x0002006b, 0x0002009d, 0x0002009d, 0x0002009d, 0x0002009d, 0x0002009e, 0x0002009e, 0x0002009e, 0x0002009e, 0x0002009f, 0x0002009f, 0x0002009f, 0x0002009f, }, - {0x000200a0, 0x000200a0, 0x000200a0, 0x000200a0, 0x000200a1, 0x000200a1, 0x000200a1, 0x000200a1, 0x000200a2, 0x000200a2, 0x000200a2, 0x000200a2, 0x000200a3, 0x000200a3, 0x000200a3, 0x000200a3, }, - {0x00010065, 0x00010065, 0x00010067, 0x00010067, 0x00010068, 0x00010068, 0x00010069, 0x00010069, 0x0001006a, 0x0001006a, 0x0001006c, 0x0001006c, 0x0001006d, 0x0001006d, 0x0001006e, 0x0001006e, }, - {0x0001006f, 0x0001006f, 0x00010070, 0x00010070, 0x00010071, 0x00010071, 0x00010072, 0x00010072, 0x00010073, 0x00010073, 0x00010074, 0x00010074, 0x00010075, 0x00010075, 0x00010076, 0x00010076, }, - {0x00010077, 0x00010077, 0x00010078, 0x00010078, 0x00010079, 0x00010079, 0x0001007a, 0x0001007a, 0x0001007b, 0x0001007b, 0x0001007c, 0x0001007c, 0x0001007d, 0x0001007d, 0x0001007e, 0x0001007e, }, - {0x0001007f, 0x0001007f, 0x00010080, 0x00010080, 0x00010081, 0x00010081, 0x00010082, 0x00010082, 0x00010083, 0x00010083, 0x00010084, 0x00010084, 0x00010085, 0x00010085, 0x00010086, 0x00010086, }, - {0x00010087, 0x00010087, 0x00010088, 0x00010088, 0x00010089, 0x00010089, 0x0001008a, 0x0001008a, 0x0001008b, 0x0001008b, 0x0001008c, 0x0001008c, 0x0001008d, 0x0001008d, 0x0001008e, 0x0001008e, }, - {0x0001008f, 0x0001008f, 0x00010090, 0x00010090, 0x00010091, 0x00010091, 0x00010092, 0x00010092, 0x00010093, 0x00010093, 0x00010094, 0x00010094, 0x00010095, 0x00010095, 0x00010096, 0x00010096, }, -}; - -extern const unsigned int (*GetHuffEncTable(const int iAlloc))[2]; - -extern const unsigned int (*GetHuffDecTable(const int iAlloc))[16]; - diff --git a/lib_rend/ivas_cldfb_trans_codec/CQMFHuff.h b/lib_rend/ivas_cldfb_trans_codec/CQMFHuff.h deleted file mode 100644 index b8103689fe..0000000000 --- a/lib_rend/ivas_cldfb_trans_codec/CQMFHuff.h +++ /dev/null @@ -1,305 +0,0 @@ -#ifndef _CQMF_HUFF_H_ -#define _CQMF_HUFF_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#ifndef HUFF_READ_SIZE -#define HUFF_READ_SIZE (4) -#endif - -#ifndef HUFF_DEC_TABLE_SIZE -#define HUFF_DEC_TABLE_SIZE (16) -#endif - -#include // For NULL - -extern const unsigned int c_aaiCQMFHuffEnc1[16][2]; - -extern const unsigned int c_aaiCQMFHuffDec1[4][HUFF_DEC_TABLE_SIZE]; - -extern const unsigned int c_aaiCQMFHuffEnc2[25][2]; - -extern const unsigned int c_aaiCQMFHuffDec2[4][HUFF_DEC_TABLE_SIZE]; - -extern const unsigned int c_aaiCQMFHuffEnc3[36][2]; - -extern const unsigned int c_aaiCQMFHuffDec3[14][HUFF_DEC_TABLE_SIZE]; - -extern const unsigned int c_aaiCQMFHuffEnc4[49][2]; - -extern const unsigned int c_aaiCQMFHuffDec4[9][HUFF_DEC_TABLE_SIZE]; - -extern const unsigned int c_aaiCQMFHuffEnc5[64][2]; - -extern const unsigned int c_aaiCQMFHuffDec5[27][HUFF_DEC_TABLE_SIZE]; - -extern const unsigned int c_aaiCQMFHuffEnc6[81][2]; - -extern const unsigned int c_aaiCQMFHuffDec6[21][HUFF_DEC_TABLE_SIZE]; - -extern const unsigned int c_aaiCQMFHuffEnc7[81][2]; - -extern const unsigned int c_aaiCQMFHuffDec7[23][HUFF_DEC_TABLE_SIZE]; - -extern const unsigned int c_aaiCQMFHuffEnc8[121][2]; - -extern const unsigned int c_aaiCQMFHuffDec8[17][HUFF_DEC_TABLE_SIZE]; - -extern const unsigned int c_aaiCQMFHuffEnc9[196][2]; - -extern const unsigned int c_aaiCQMFHuffDec9[30][HUFF_DEC_TABLE_SIZE]; - -extern const unsigned int c_aaiCQMFHuffEnc10[196][2]; - -extern const unsigned int c_aaiCQMFHuffDec10[34][HUFF_DEC_TABLE_SIZE]; - -extern const unsigned int c_aaiCQMFHuffEnc11[256][2]; - -extern const unsigned int c_aaiCQMFHuffDec11[43][HUFF_DEC_TABLE_SIZE]; - -extern const unsigned int c_aaiCQMFHuffEnc12[400][2]; - -extern const unsigned int c_aaiCQMFHuffDec12[44][HUFF_DEC_TABLE_SIZE]; - -extern const unsigned int c_aaiCQMFHuffEnc13[625][2]; - -extern const unsigned int c_aaiCQMFHuffDec13[98][HUFF_DEC_TABLE_SIZE]; - -extern const unsigned int c_aaiCQMFHuffEnc14[625][2]; - -extern const unsigned int c_aaiCQMFHuffDec14[103][HUFF_DEC_TABLE_SIZE]; - -extern const unsigned int c_aaiCQMFHuffEnc15[28][2]; - -extern const unsigned int c_aaiCQMFHuffDec15[10][HUFF_DEC_TABLE_SIZE]; - -extern const unsigned int c_aaiCQMFHuffEnc16[32][2]; - -extern const unsigned int c_aaiCQMFHuffDec16[11][HUFF_DEC_TABLE_SIZE]; - -extern const unsigned int c_aaiCQMFHuffEnc17[41][2]; - -extern const unsigned int c_aaiCQMFHuffDec17[7][HUFF_DEC_TABLE_SIZE]; - -extern const unsigned int c_aaiCQMFHuffEnc18[40][2]; - -extern const unsigned int c_aaiCQMFHuffDec18[7][HUFF_DEC_TABLE_SIZE]; - -extern const unsigned int c_aaiCQMFHuffEnc19[47][2]; - -extern const unsigned int c_aaiCQMFHuffDec19[10][HUFF_DEC_TABLE_SIZE]; - -extern const unsigned int c_aaiCQMFHuffEnc20[58][2]; - -extern const unsigned int c_aaiCQMFHuffDec20[17][HUFF_DEC_TABLE_SIZE]; - -extern const unsigned int c_aaiCQMFHuffEnc21[70][2]; - -extern const unsigned int c_aaiCQMFHuffDec21[23][HUFF_DEC_TABLE_SIZE]; - -extern const unsigned int c_aaiCQMFHuffEnc22[81][2]; - -extern const unsigned int c_aaiCQMFHuffDec22[30][HUFF_DEC_TABLE_SIZE]; - -extern const unsigned int c_aaiCQMFHuffEnc23[93][2]; - -extern const unsigned int c_aaiCQMFHuffDec23[35][HUFF_DEC_TABLE_SIZE]; - -extern const unsigned int c_aaiCQMFHuffEnc24[121][2]; - -extern const unsigned int c_aaiCQMFHuffDec24[37][HUFF_DEC_TABLE_SIZE]; - -extern const unsigned int c_aaiCQMFHuffEnc25[136][2]; - -extern const unsigned int c_aaiCQMFHuffDec25[54][HUFF_DEC_TABLE_SIZE]; - -extern const unsigned int c_aaiCQMFHuffEnc26[164][2]; - -extern const unsigned int c_aaiCQMFHuffDec26[38][HUFF_DEC_TABLE_SIZE]; - -inline const unsigned int (*GetHuffEncTable(const int iAlloc))[2] -{ - const unsigned int (*pauiHuffmanTable)[2] = NULL; - - switch(iAlloc){ - case 1: - pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc1; - break; - case 2: - pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc2; - break; - case 3: - pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc3; - break; - case 4: - pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc4; - break; - case 5: - pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc5; - break; - case 6: - pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc6; - break; - case 7: - pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc7; - break; - case 8: - pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc8; - break; - case 9: - pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc9; - break; - case 10: - pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc10; - break; - case 11: - pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc11; - break; - case 12: - pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc12; - break; - case 13: - pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc13; - break; - case 14: - pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc14; - break; - case 15: - pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc15; - break; - case 16: - pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc16; - break; - case 17: - pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc17; - break; - case 18: - pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc18; - break; - case 19: - pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc19; - break; - case 20: - pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc20; - break; - case 21: - pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc21; - break; - case 22: - pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc22; - break; - case 23: - pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc23; - break; - case 24: - pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc24; - break; - case 25: - pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc25; - break; - case 26: - pauiHuffmanTable = (unsigned int (*)[2])c_aaiCQMFHuffEnc26; - break; - - } - - return pauiHuffmanTable; -} - -inline const unsigned int (*GetHuffDecTable(const int iAlloc))[16] -{ - const unsigned int (*pauiHuffmanTable)[16] = NULL; - - switch(iAlloc){ - case 1: - pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec1; - break; - case 2: - pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec2; - break; - case 3: - pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec3; - break; - case 4: - pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec4; - break; - case 5: - pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec5; - break; - case 6: - pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec6; - break; - case 7: - pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec7; - break; - case 8: - pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec8; - break; - case 9: - pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec9; - break; - case 10: - pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec10; - break; - case 11: - pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec11; - break; - case 12: - pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec12; - break; - case 13: - pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec13; - break; - case 14: - pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec14; - break; - case 15: - pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec15; - break; - case 16: - pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec16; - break; - case 17: - pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec17; - break; - case 18: - pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec18; - break; - case 19: - pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec19; - break; - case 20: - pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec20; - break; - case 21: - pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec21; - break; - case 22: - pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec22; - break; - case 23: - pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec23; - break; - case 24: - pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec24; - break; - case 25: - pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec25; - break; - case 26: - pauiHuffmanTable = (unsigned int (*)[16])c_aaiCQMFHuffDec26; - break; - - } - - return pauiHuffmanTable; -} - -#ifdef __cplusplus -} -#endif - -#endif /* _CQMF_HUFF_H_ */ diff --git a/lib_rend/ivas_cldfb_trans_codec/NoiseGen.c b/lib_rend/ivas_cldfb_trans_codec/NoiseGen.c deleted file mode 100644 index e2f7ea62b1..0000000000 --- a/lib_rend/ivas_cldfb_trans_codec/NoiseGen.c +++ /dev/null @@ -1,47 +0,0 @@ -#include "NoiseGen.h" -#include -#include -#include -#include "wmops.h" - -NoiseGen* CreateNoiseGen() -{ - int n; - - NoiseGen *psNoiseGen = NULL; - - psNoiseGen = (NoiseGen*)malloc(sizeof(NoiseGen)); - psNoiseGen->iNoiseBufferLength = 2048; - psNoiseGen->iNoiseBufferMask = 2047; - psNoiseGen->iNoiseBufferIndex = 0; - - psNoiseGen->pfNoiseBuffer = (float*)malloc(psNoiseGen->iNoiseBufferLength * sizeof(float)); - - /* Generate Laplacian distributed noise */ - for(n = 0; n < psNoiseGen->iNoiseBufferLength; n ++){ - float fNoise = 0.0; - float fScale = 0.707f; - fNoise = (float)((rand() & (RAND_MAX - 1)) - (RAND_MAX >> 1)) / (float)RAND_MAX; - - if(fNoise < 0.0){ - fNoise = fScale * logf(1.0f + 1.9999999f * fNoise); - } - else{ - fNoise = -fScale * logf(1.0f - 1.9999999f * fNoise); - } - - psNoiseGen->pfNoiseBuffer[n] = fNoise; - } - - return psNoiseGen; -} - -void DeleteNoiseGen(NoiseGen *psNoiseGen) -{ - free(psNoiseGen->pfNoiseBuffer); - free(psNoiseGen); -} - -extern float GetNoise(NoiseGen *psNoiseGen); - - diff --git a/lib_rend/ivas_cldfb_trans_codec/NoiseGen.h b/lib_rend/ivas_cldfb_trans_codec/NoiseGen.h deleted file mode 100644 index 1a4ccb924c..0000000000 --- a/lib_rend/ivas_cldfb_trans_codec/NoiseGen.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef _NOISE_GEN_H_ -#define _NOISE_GEN_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -typedef struct NOISE_GEN{ - int iNoiseBufferLength; - int iNoiseBufferMask; - int iNoiseBufferIndex; - float *pfNoiseBuffer; -}NoiseGen; - -NoiseGen* CreateNoiseGen(); - -void DeleteNoiseGen(NoiseGen *psNoiseGen); - -inline float GetNoise(NoiseGen *psNoiseGen) -{ - float fNoiseSample; - - fNoiseSample = psNoiseGen->pfNoiseBuffer[psNoiseGen->iNoiseBufferIndex]; - psNoiseGen->iNoiseBufferIndex ++; - psNoiseGen->iNoiseBufferIndex &= psNoiseGen->iNoiseBufferMask; - - return fNoiseSample; -} - -#ifdef __cplusplus -} -#endif - -#endif /* _NOISE_GEN_H_ */ diff --git a/lib_rend/ivas_cldfb_trans_codec/PerceptualModel.h b/lib_rend/ivas_cldfb_trans_codec/PerceptualModel.h deleted file mode 100644 index e9d62c8106..0000000000 --- a/lib_rend/ivas_cldfb_trans_codec/PerceptualModel.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef _PERCEPTUAL_MODEL_H_ -#define _PERCEPTUAL_MODEL_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -void PerceptualModel(const int iMaxQuantBands, - const int *piRMSEnvelope, - int *piExcitation, - int *piSMR); - -#ifdef __cplusplus -} -#endif - -#endif /* _PERCEPTUAL_MODEL_H_ */ diff --git a/lib_rend/ivas_cldfb_trans_codec/RMSEnvDeltaHuff.h b/lib_rend/ivas_cldfb_trans_codec/RMSEnvDeltaHuff.h deleted file mode 100644 index e7e1059384..0000000000 --- a/lib_rend/ivas_cldfb_trans_codec/RMSEnvDeltaHuff.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef _RMS_ENV_DELTA_HUFF_H_ -#define _RMS_ENV_DELTA_HUFF_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#ifndef HUFF_READ_SIZE -#define HUFF_READ_SIZE (4) -#endif - -#ifndef HUFF_DEC_TABLE_SIZE -#define HUFF_DEC_TABLE_SIZE (16) -#endif - -extern const unsigned int c_aaiRMSEnvHuffEnc[64][2]; - -extern const unsigned int c_aaiRMSEnvHuffDec[13][HUFF_DEC_TABLE_SIZE]; - -#ifdef __cplusplus -} -#endif - -#endif /* _RMS_ENV_DELTA_HUFF_H_ */ diff --git a/lib_rend/ivas_cldfb_trans_codec/RMSEnvGrouping.c b/lib_rend/ivas_cldfb_trans_codec/RMSEnvGrouping.c deleted file mode 100644 index f51051d52d..0000000000 --- a/lib_rend/ivas_cldfb_trans_codec/RMSEnvGrouping.c +++ /dev/null @@ -1,378 +0,0 @@ -#include "RMSEnvGrouping.h" - -/* Double check cost function calculation */ - -#include -#include -#include -#include -#include "wmops.h" -#include "Tables.h" - -typedef struct GMNODE{ - int iGroupStart; - int iGroupLength; - float *pfMergedEnergydB; - struct GMNODE *psNext; -}GMNode; - -typedef struct RMS_ENVELOPE_GROUPING -{ - int iNumBlocks; - int iMaxGroups; - float **ppfBandEnergy; - float **ppfBandEnergydB; - float **ppfWeight; - GMNode *psGMNodes; -}RMSEnvelopeGrouping; - -RMSEnvelopeGrouping* CreateRMSEnvelopeGrouping(int iNumBlocks) -{ - int n; - assert((iNumBlocks & 0x1) == 0); // remove this - - RMSEnvelopeGrouping *psRMSEnvelopeGrouping; - - psRMSEnvelopeGrouping = (RMSEnvelopeGrouping*)malloc(sizeof(RMSEnvelopeGrouping)); - psRMSEnvelopeGrouping->iNumBlocks = iNumBlocks; - psRMSEnvelopeGrouping->iMaxGroups = iNumBlocks >> 1; // Change this - - psRMSEnvelopeGrouping->ppfBandEnergy = (float**)malloc(psRMSEnvelopeGrouping->iNumBlocks * sizeof(float*)); - psRMSEnvelopeGrouping->ppfBandEnergydB = (float**)malloc(psRMSEnvelopeGrouping->iNumBlocks * sizeof(float*)); - psRMSEnvelopeGrouping->ppfWeight = (float**)malloc(psRMSEnvelopeGrouping->iNumBlocks * sizeof(float*)); - for(n = 0; n < psRMSEnvelopeGrouping->iNumBlocks; n ++){ - psRMSEnvelopeGrouping->ppfBandEnergy[n] = (float*)malloc(MAX_BANDS * 2 * sizeof(float)); /* 2 for stereo joint group calc */ - psRMSEnvelopeGrouping->ppfBandEnergydB[n] = (float*)malloc(MAX_BANDS * 2 * sizeof(float)); - psRMSEnvelopeGrouping->ppfWeight[n] = (float*)malloc(MAX_BANDS * 2 * sizeof(float)); - } - - psRMSEnvelopeGrouping->psGMNodes = (GMNode*)malloc(psRMSEnvelopeGrouping->iNumBlocks * sizeof(GMNode)); - for(n = 0; n < psRMSEnvelopeGrouping->iNumBlocks; n ++){ - psRMSEnvelopeGrouping->psGMNodes[n].pfMergedEnergydB = (float*)malloc(MAX_BANDS * 2 * sizeof(float)); - } - - return psRMSEnvelopeGrouping; -} - -void DeleteRMSEnvelopeGrouping(RMSEnvelopeGrouping *psRMSEnvelopeGrouping) -{ - int n; - - for(n = 0; n < psRMSEnvelopeGrouping->iNumBlocks; n ++){ - free(psRMSEnvelopeGrouping->ppfBandEnergy[n]); - free(psRMSEnvelopeGrouping->ppfBandEnergydB[n]); - free(psRMSEnvelopeGrouping->ppfWeight[n]); - } - free(psRMSEnvelopeGrouping->ppfBandEnergy); - free(psRMSEnvelopeGrouping->ppfBandEnergydB); - free(psRMSEnvelopeGrouping->ppfWeight); - - for(n = 0; n < psRMSEnvelopeGrouping->iNumBlocks; n ++){ - free(psRMSEnvelopeGrouping->psGMNodes[n].pfMergedEnergydB); - } - free(psRMSEnvelopeGrouping->psGMNodes); - - free(psRMSEnvelopeGrouping); -} - - -void ComputeBandEnergy(const int iChannels, - const int iNumBlocks, - const int iNumBands, - const int *piBandwidths, - const float ***pppfReal, - const float ***pppfImag, - float **ppfBandEnergy, - float **ppfBandEnergydB, - float **ppfWeight) -{ - int n; - - for(n = 0; n < iChannels; n ++){ - int k; - int iChanOffset; - - iChanOffset = n * iNumBands; - for(k = 0; k < iNumBlocks; k ++){ - int b; - int iFBOffset; - iFBOffset = 0; - for(b = 0; b < iNumBands; b ++){ - int m; - float fEnergy = 1e-12f; - //float fWeight; - - for(m = 0; m < piBandwidths[b]; m ++){ - fEnergy += (pppfReal[n][k][iFBOffset] * pppfReal[n][k][iFBOffset] + pppfImag[n][k][iFBOffset] * pppfImag[n][k][iFBOffset]); - iFBOffset ++; - } - fEnergy /= (float)(2 * piBandwidths[b]); - ppfBandEnergy[k][iChanOffset + b] = fEnergy; - ppfBandEnergydB[k][iChanOffset + b] = 10.0f * log10f(fEnergy); - - ppfWeight[k][iChanOffset + b] = 1.0; - } - } - } -} - -/* THis is temporary cost function */ -float TryMerge(const int iNumBands, - const int iStartBlock, - const int iGroupLength, - const float fMaxAllowedDiffdB, - const float **ppfBandEnergy, - const float **ppfBandEnergydB, - float *pfMegredEnergydB) -{ - int b; - int n; - float fMeanCost; - float fMaxCost; - float fInvGroupSize = 1.0f / (float)iGroupLength; - float fInvNumBands = 1.0f / (float)iNumBands; - - for(b = 0; b < iNumBands; b ++){ - float fGroupEnergy; - - - fGroupEnergy = 0.0; - for(n = iStartBlock; n < (iStartBlock + iGroupLength); n ++){ - fGroupEnergy += ppfBandEnergy[n][b]; - } - fGroupEnergy *= fInvGroupSize; - fGroupEnergy = 10.0f * log10f(fGroupEnergy); //Note epsolon was added when computing BandEnergy; - - pfMegredEnergydB[b] = fGroupEnergy; - } - - fMeanCost = 0.0; - fMaxCost = 0.0; - for(n = iStartBlock; n < (iStartBlock + iGroupLength); n ++){ - float fMeanAbsDiff; - float fMaxAbsDiff; - - fMeanAbsDiff = 0.0; - fMaxAbsDiff = 0.0; - for(b = 0; b < iNumBands; b ++){ - float fAbsDiff; - - fAbsDiff = fabsf(ppfBandEnergydB[n][b] - pfMegredEnergydB[b]); - fMeanAbsDiff += fAbsDiff; - fMaxAbsDiff = (fMaxAbsDiff > fAbsDiff) ? fMaxAbsDiff : fAbsDiff; - } - fMeanAbsDiff *= fInvNumBands; - - fMeanCost = (fMeanCost > fMeanAbsDiff) ? fMeanCost : fMeanAbsDiff; - fMaxCost = (fMaxCost > fMaxAbsDiff) ? fMaxCost : fMaxAbsDiff; - } - - //printf("%f\t%f\n",fMeanCost,fMaxCost); - - if(fMaxCost > fMaxAllowedDiffdB){ - fMeanCost = 1e12f; //Some large value - } - - return fMeanCost; -} - -void ComputeGreedyGroups(RMSEnvelopeGrouping *psRMSEnvelopeGrouping, - const int iChannels, - const int iNumBands, - const float fMeanAllowedDiffdB, - const float fMaxAllowedDiffdB) -{ - float fBestMeanCost; - - fBestMeanCost = 0.0; - while(fBestMeanCost < fMeanAllowedDiffdB){ - GMNode *psGMNode; - GMNode *psBestGMNode; - - fBestMeanCost = fMeanAllowedDiffdB; - psGMNode = &psRMSEnvelopeGrouping->psGMNodes[0]; - psBestGMNode = NULL; - while(psGMNode->psNext != NULL){ - float fMeanCost; - int iGroupLength; - - iGroupLength = psGMNode->iGroupLength + psGMNode->psNext->iGroupLength; - - fMeanCost = TryMerge(iNumBands * iChannels, - psGMNode->iGroupStart, - psGMNode->iGroupLength, - fMaxAllowedDiffdB, - (const float**)psRMSEnvelopeGrouping->ppfBandEnergy, - (const float**)psRMSEnvelopeGrouping->ppfBandEnergydB, - psGMNode->pfMergedEnergydB); - - - if(fMeanCost < fBestMeanCost){ - fBestMeanCost = fMeanCost; - psBestGMNode = psGMNode; - } - - psGMNode = psGMNode->psNext; - } - - if(fBestMeanCost < fMeanAllowedDiffdB && psBestGMNode != NULL && psBestGMNode->psNext != NULL){ - psBestGMNode->iGroupLength += psBestGMNode->psNext->iGroupLength; - psBestGMNode->psNext = psBestGMNode->psNext->psNext; - } - } -} - - -void ComputeRMSEnvelope(const int iChannels, - const int iNumBands, - const int iNumGroups, - const int *piGroupLengths, - const float **ppfBandEnergy, - int ***pppiRMSEnvelope) -{ - int n; - - for(n = 0; n < iChannels; n ++){ - int b; - int iChanOffset; - - iChanOffset = n * iNumBands; - for(b = 0; b < iNumBands; b ++){ - int k; - int iBlockOffset; - - iBlockOffset = 0; - for(k = 0; k < iNumGroups; k ++){ - int m; - float fGroupEnergy; - fGroupEnergy = 0.0; - for(m = 0; m < piGroupLengths[k]; m ++){ - fGroupEnergy += ppfBandEnergy[iBlockOffset][b + iChanOffset]; - iBlockOffset ++; - } - fGroupEnergy /= (float)piGroupLengths[k]; - - pppiRMSEnvelope[n][k][b] = (int)(log2f(fGroupEnergy) + 0.5); - pppiRMSEnvelope[n][k][b] = (pppiRMSEnvelope[n][k][b] > ENV_MIN) ? pppiRMSEnvelope[n][k][b] : ENV_MIN; - pppiRMSEnvelope[n][k][b] = (pppiRMSEnvelope[n][k][b] < ENV_MAX) ? pppiRMSEnvelope[n][k][b] : ENV_MAX; - } - } - } -} - -void LimitRMSEnvelope(const int iBandCount, - const int iRMSDeltaMax, - const int iRMSDeltaMin, - int *piRMSEnvelope) -{ - int iBand; - int iLastSCF; - - /* Increase low envelope values to ensure that the scale factors traces the large values correctly (checking for max deltas) */ - iLastSCF = piRMSEnvelope[iBandCount - 1]; - for(iBand = iBandCount - 2; iBand > -1; iBand --) - { - int iDelta; - - iDelta = iLastSCF - piRMSEnvelope[iBand]; - - if(iDelta > iRMSDeltaMax){ -#ifdef DEBUG_VERBOSE - printf("WARNING ScaleFactor Delta limited\n"); -#endif - piRMSEnvelope[iBand] += (iDelta - iRMSDeltaMax); - } - - iLastSCF = piRMSEnvelope[iBand]; - } - - /* Increase low envelope values to ensure that the envelope traces the large values correctly (checking for min deltas)*/ - iLastSCF = piRMSEnvelope[0]; - for(iBand = 1; iBand < iBandCount; iBand ++){ - int iDelta; - - iDelta = piRMSEnvelope[iBand] - iLastSCF; - - if(iDelta < iRMSDeltaMin){ -#ifdef DEBUG_VERBOSE - printf("WARNING ScaleFactor Delta limited\n"); -#endif - piRMSEnvelope[iBand] += (iRMSDeltaMin - iDelta); - } - - iLastSCF = piRMSEnvelope[iBand]; - } -} - -void ComputeEnvelopeGrouping( RMSEnvelopeGrouping *psRMSEnvelopeGrouping, - const int iChannels, - const int iNumBands, - const int *piBandwidths, - const float ***pppfReal, - const float ***pppfImag, - const float fMeanAllowedDiffdB, - const float fMaxAllowedDiffdB, - int *piNumGroups, - int *piGroupLengths, - int ***pppiRMSEnvelope) -{ - int n; - GMNode *psGMNode; - - /* Compute Band Energies */ - ComputeBandEnergy(iChannels, - psRMSEnvelopeGrouping->iNumBlocks, - iNumBands, - piBandwidths, - pppfReal, - pppfImag, - psRMSEnvelopeGrouping->ppfBandEnergy, - psRMSEnvelopeGrouping->ppfBandEnergydB, - psRMSEnvelopeGrouping->ppfWeight); - - /* Init GMNodes */ - psRMSEnvelopeGrouping->psGMNodes[0].iGroupStart = 0; - psRMSEnvelopeGrouping->psGMNodes[0].iGroupLength = 2; - psRMSEnvelopeGrouping->psGMNodes[0].psNext = NULL; - for(n = 1; n < psRMSEnvelopeGrouping->iMaxGroups; n ++){ - psRMSEnvelopeGrouping->psGMNodes[n - 1].psNext = &psRMSEnvelopeGrouping->psGMNodes[n]; - psRMSEnvelopeGrouping->psGMNodes[n].iGroupStart = n * 2; // change this - psRMSEnvelopeGrouping->psGMNodes[n].iGroupLength = 2; // change this - psRMSEnvelopeGrouping->psGMNodes[n].psNext = NULL; - } - - /* Perform grouping via Greedy Merge */ - ComputeGreedyGroups(psRMSEnvelopeGrouping, - iChannels, - iNumBands, - fMeanAllowedDiffdB, - fMaxAllowedDiffdB); - - /* Calc Groups from Merge Results */ - *piNumGroups = 0; - psGMNode = &psRMSEnvelopeGrouping->psGMNodes[0]; - while(psGMNode != NULL){ - piGroupLengths[*piNumGroups] = psGMNode->iGroupLength; - *piNumGroups += 1; - psGMNode = psGMNode->psNext; - } - - /* Compute RMS Envelope given group lengths */ - ComputeRMSEnvelope(iChannels, - iNumBands, - *piNumGroups, - piGroupLengths, - (const float**)psRMSEnvelopeGrouping->ppfBandEnergy, - pppiRMSEnvelope); - - /* Envelope Tenting */ - for(n = 0; n < iChannels; n ++){ - int k; - for(k = 0; k < *piNumGroups; k ++){ - LimitRMSEnvelope(iNumBands, - ENV_DELTA_MAX, - ENV_DELTA_MIN, - pppiRMSEnvelope[n][k]); - } - } -} diff --git a/lib_rend/ivas_cldfb_trans_codec/RMSEnvGrouping.h b/lib_rend/ivas_cldfb_trans_codec/RMSEnvGrouping.h deleted file mode 100644 index fa7506935f..0000000000 --- a/lib_rend/ivas_cldfb_trans_codec/RMSEnvGrouping.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef _RMS_ENV_GROUPING_H_ -#define _RMS_ENV_GROUPING_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -typedef struct RMS_ENVELOPE_GROUPING RMSEnvelopeGrouping; - -RMSEnvelopeGrouping* CreateRMSEnvelopeGrouping(int iNumBlocks); - -void DeleteRMSEnvelopeGrouping(RMSEnvelopeGrouping *psRMSEnvelopeGrouping); - -void ComputeEnvelopeGrouping(RMSEnvelopeGrouping *psRMSEnvelopeGrouping, - const int iChannels, - const int iNumBands, - const int *piBandwidths, - const float ***pppfReal, - const float ***pppfImag, - const float fMeanAllowedDiffdB, - const float fMaxAllowedDiffdB, - int *piNumGroups, - int *piGroupLengths, - int ***pppiRMSEnvelope); - -#ifdef __cplusplus -} -#endif - -#endif /* _RMS_ENV_GROUPING_H_ */ diff --git a/lib_rend/ivas_cldfb_trans_codec/Tables.c b/lib_rend/ivas_cldfb_trans_codec/Tables.c deleted file mode 100644 index 735c8d21f2..0000000000 --- a/lib_rend/ivas_cldfb_trans_codec/Tables.c +++ /dev/null @@ -1,116 +0,0 @@ -#include "Tables.h" -#include "wmops.h" - -/* Move this to perceptual model ? */ -const int c_aiBandwidths48[MAX_BANDS_48] = { - 1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,4,6,6,7,10, -}; - - -const float c_afScaleFactor[ALLOC_TABLE_SIZE] = { - 0.0f, - 0.353553390593f, - 0.420448207627f, - 0.500000000000f, - 0.594603557501f, - 0.707106781187f, - 0.840896415254f, - 1.000000000000f, - 1.189207115003f, - 1.414213562373f, - 1.681792830507f, - 2.000000000000f, - 2.378414230005f, - 2.828427124746f, - 3.363585661015f, - 4.0f, - 4.756828460011f, - 5.656854249492f, - 6.727171322030f, - 8.0f, - 9.513656920022f, - 11.31370849898f, - 13.45434264406f, - 16.00000000000f, - 19.02731384004f, - 22.62741699797f, - 26.90868528812f, //~40dB SNR -}; - -const float c_afInvScaleFactor[ALLOC_TABLE_SIZE] = { - 0.0f, - 2.367513562373095f, - 2.046407115002721f, - 1.775900000000000f, - 1.536446415253715f, - 1.323056781186548f, - 1.132903557501360f, - 0.965800000000000f, - 0.821348207626857f, - 0.695103390593274f, - 0.587801778750680f, - 0.495800000000000f, - 0.418124103813429f, - 0.352176695296637f, - 0.296200889375340f, - 0.249400000000000f, - 0.209812051906714f, - 0.176538347648318f, - 0.148525444687670f, - 0.124900000000000f, - 0.105056025953357f, - 0.088388347648318f, - 0.074325444687670f, - 0.062500000000000f, - 0.052556025953357f, - 0.044194173824159f, - 0.037162722343835f, -}; - -const float c_afRMSEnvReconstructTable[ENV_RECONSTRUCT_TABLE_SIZE] = { - 2.32830644e-10f, 3.29272254e-10f, 4.65661287e-10f, 6.58544508e-10f, 9.31322575e-10f, 1.31708902e-09f, 1.86264515e-09f, 2.63417803e-09f, - 3.72529030e-09f, 5.26835606e-09f, 7.45058060e-09f, 1.05367121e-08f, 1.49011612e-08f, 2.10734243e-08f, 2.98023224e-08f, 4.21468485e-08f, - 5.96046448e-08f, 8.42936970e-08f, 1.19209290e-07f, 1.68587394e-07f, 2.38418579e-07f, 3.37174788e-07f, 4.76837158e-07f, 6.74349576e-07f, - 9.53674316e-07f, 1.34869915e-06f, 1.90734863e-06f, 2.69739830e-06f, 3.81469727e-06f, 5.39479661e-06f, 7.62939453e-06f, 1.07895932e-05f, - 1.52587891e-05f, 2.15791864e-05f, 3.05175781e-05f, 4.31583729e-05f, 6.10351562e-05f, 8.63167458e-05f, 1.22070312e-04f, 1.72633492e-04f, - 2.44140625e-04f, 3.45266983e-04f, 4.88281250e-04f, 6.90533966e-04f, 9.76562500e-04f, 1.38106793e-03f, 1.95312500e-03f, 2.76213586e-03f, - 3.90625000e-03f, 5.52427173e-03f, 7.81250000e-03f, 1.10485435e-02f, 1.56250000e-02f, 2.20970869e-02f, 3.12500000e-02f, 4.41941738e-02f, - 6.25000000e-02f, 8.83883476e-02f, 1.25000000e-01f, 1.76776695e-01f, 2.50000000e-01f, 3.53553391e-01f, 5.00000000e-01f, 7.07106781e-01f, - 1.00000000e+00f, 1.41421356e+00f, 2.00000000e+00f, 2.82842712e+00f, 4.00000000e+00f, 5.65685425e+00f, 8.00000000e+00f, 1.13137085e+01f, - 1.60000000e+01f, 2.26274170e+01f, 3.20000000e+01f, 4.52548340e+01f, 6.40000000e+01f, 9.05096680e+01f, 1.28000000e+02f, 1.81019336e+02f, - 2.56000000e+02f, 3.62038672e+02f, 5.12000000e+02f, 7.24077344e+02f, 1.02400000e+03f, 1.44815469e+03f, 2.04800000e+03f, 2.89630938e+03f, - 4.09600000e+03f, 5.79261875e+03f, 8.19200000e+03f, 1.15852375e+04f, 1.63840000e+04f, 2.31704750e+04f, 3.27680000e+04f, 4.63409500e+04f, - 6.55360000e+04f, 9.26819000e+04f, 1.31072000e+05f, 1.85363800e+05f, 2.62144000e+05f, 3.70727600e+05f, 5.24288000e+05f, 7.41455200e+05f, - 1.04857600e+06f, 1.48291040e+06f, 2.09715200e+06f, 2.96582080e+06f, 4.19430400e+06f, 5.93164160e+06f, 8.38860800e+06f, 1.18632832e+07f, - 1.67772160e+07f, 2.37265664e+07f, 3.35544320e+07f, 4.74531328e+07f, 6.71088640e+07f, 9.49062656e+07f, 1.34217728e+08f, 1.89812531e+08f, - 2.68435456e+08f, 3.79625062e+08f, 5.36870912e+08f, 7.59250125e+08f, 1.07374182e+09f, 1.51850025e+09f, 2.14748365e+09f, 3.03700050e+09f, - 4.29496730e+09f, -}; - -const int c_aiQuantMaxValues[ALLOC_TABLE_SIZE] = { - 0, 3, 4, 5, 6, 7, 8, 8, - 10, 13, 13, 15, 19, 24, 24, 27, - 31, 40, 39, 46, 57, 69, 80, 92, - 120, 135, 163, -}; - -const int c_aiHuffmanDim[ALLOC_TABLE_SIZE] = { - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, -}; - -const int c_aiHuffmanMod[ALLOC_TABLE_SIZE] = { - 0, 4, 5, 6, 7, 8, 9, 9, - 11, 14, 14, 16, 20, 25, 25, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, -}; - -const int c_aiHuffmanSize[ALLOC_TABLE_SIZE] = { - 1, 16, 25, 36, 49, 64, 81, 81, - 121, 196, 196, 256, 400, 625, 625, 28, - 32, 41, 40, 47, 58, 70, 81, 93, - 121, 136, 164, -}; diff --git a/lib_rend/ivas_cldfb_trans_codec/Tables.h b/lib_rend/ivas_cldfb_trans_codec/Tables.h deleted file mode 100644 index 960ee0d231..0000000000 --- a/lib_rend/ivas_cldfb_trans_codec/Tables.h +++ /dev/null @@ -1,65 +0,0 @@ -#ifndef _TABLES_H_ -#define _TABLES_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define DEBUG_VERBOSE - -#define CQMF_BLOCKS_PER_FRAME (16) -#define CQMF_MAX_BLOCKS_PER_FRAME (16) -#define CQMF_BANDS (60) - -#define MAX_BANDS (23) -#define MAX_BANDS_48 (23) - -extern const int c_aiBandwidths48[MAX_BANDS_48]; // move this - - -#define ENV_MIN (-64) -#define ENV_MAX (64) - -#define ENV0_BITS (7) - -#define ENV_DELTA_MIN (-32) -#define ENV_DELTA_MAX (31) - -#define ENV_RECONSTRUCT_TABLE_SIZE (129) - -#define ENV_RECONSTRUCT_TABLE_CENTER (64) - -#define MIN_ALLOC (0) -#define MAX_ALLOC (26) - -#define ALLOC_OFFSET_SCALE (8) - -#define ALLOC_OFFSET_BITS (8) - -#define MIN_ALLOC_OFFSET (-128) -#define MAX_ALLOC_OFFSET (127) - - - -#define ALLOC_TABLE_SIZE (27) - -extern const float c_afScaleFactor[ALLOC_TABLE_SIZE]; - -extern const float c_afInvScaleFactor[ALLOC_TABLE_SIZE]; - -extern const float c_afRMSEnvReconstructTable[ENV_RECONSTRUCT_TABLE_SIZE]; - -extern const int c_aiQuantMaxValues[ALLOC_TABLE_SIZE]; - -extern const int c_aiHuffmanDim[ALLOC_TABLE_SIZE]; - -extern const int c_aiHuffmanMod[ALLOC_TABLE_SIZE]; - -extern const int c_aiHuffmanSize[ALLOC_TABLE_SIZE]; - -#ifdef __cplusplus -} -#endif - -#endif /* _TABLES_H_ */ diff --git a/lib_rend/ivas_cldfb_trans_codec/cldfb_codec_bitstream.c b/lib_rend/ivas_cldfb_trans_codec/cldfb_codec_bitstream.c deleted file mode 100644 index 4317e0ec12..0000000000 --- a/lib_rend/ivas_cldfb_trans_codec/cldfb_codec_bitstream.c +++ /dev/null @@ -1,226 +0,0 @@ -#include "cldfb_codec_bitstream.h" - -#include -#include -#include "wmops.h" - -#define MAX_BUFFER 1024 - -static const unsigned int MASKS[] = -{ - 0x00000000, 0x00000001, 0x00000003, 0x00000007, 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, - 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, - 0x0000ffff, 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff, 0x001fffff, 0x003fffff, 0x007fffff, - 0x00ffffff, 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff, -}; - -Bitstream* CreateBitstream(const int iDirection, - const int iMaxBuffer) - -{ - - int n; - Bitstream *psBitstream; - - psBitstream = (Bitstream*)malloc(sizeof(Bitstream)); - - psBitstream->iDirection =iDirection; - psBitstream->iMaxBuffer = iMaxBuffer; - psBitstream->iIndex = 0; - psBitstream->iBufferEnd = 0; - psBitstream->iBufferStart = 0; - psBitstream->iError = BS_ERROR_NONE; - - if(psBitstream->iMaxBuffer == -1){ - psBitstream->iMaxBuffer = MAX_BUFFER; - } - - psBitstream->puchBuffer = (unsigned char*)malloc(sizeof(unsigned char) * psBitstream->iMaxBuffer); - - for(n = 0; n < psBitstream->iMaxBuffer; n ++){ - psBitstream->puchBuffer[n] = 0; - } - - return psBitstream; -} - -void DeleteBitstream(Bitstream *psBitstream) -{ - free(psBitstream->puchBuffer); - free(psBitstream); -} - -void BSFlushBuffer(Bitstream *psBitstream) -{ - memset(psBitstream->puchBuffer,0,psBitstream->iMaxBuffer); - psBitstream->iIndex = 0; - psBitstream->iBufferEnd = 0; - psBitstream->iBufferStart = 0; - psBitstream->iError = BS_ERROR_NONE; -} - -int BSPutBytes(Bitstream *psBitstream, - const unsigned char *puchBytes, - const int iByteCount) -{ - int n; - for(n = 0; n < iByteCount; n ++){ - psBitstream->puchBuffer[psBitstream->iBufferEnd] = puchBytes[n]; - psBitstream->iBufferEnd ++; - } - if(psBitstream->iDirection != BS_READ){ - psBitstream->iError = BS_ERROR_FAIL; - } - - return psBitstream->iError; -} - -int BSGetBytes(Bitstream *psBitstream, - unsigned char *puchBytes, - int iByteCount) -{ - int n; - for(n = 0; n < iByteCount; n++){ - puchBytes[n] = psBitstream->puchBuffer[psBitstream->iBufferStart]; - psBitstream->puchBuffer[psBitstream->iBufferStart] = 0; - psBitstream->iBufferStart ++; - } - if(psBitstream->iDirection != BS_WRITE){ - psBitstream->iError = BS_ERROR_FAIL; - } - - return psBitstream->iError; -} - -int BSByteAlign(Bitstream *psBitstream) -{ - if(psBitstream->iDirection == BS_WRITE){ - if(psBitstream->iIndex & 0x7){ - int iByte; - int iRem; - - iByte = psBitstream->iIndex >> 3; - iRem = 8 - (psBitstream->iIndex - (iByte<<3)); - psBitstream->puchBuffer[iByte] &= (0xff ^ MASKS[iRem]); - psBitstream->iIndex += iRem; - } - } - else{ - if(psBitstream->iIndex & 0x7){ - int iByte; - int iRem; - - iByte = psBitstream->iIndex >> 3; - iRem = 8 - (psBitstream->iIndex - (iByte<<3)); - psBitstream->iIndex += iRem; - } - } - - return psBitstream->iError; -} - -int BSPutBits(Bitstream *psBitstream, - int iValue, - int iBitCount) -{ - iValue &= MASKS[iBitCount]; - while(iBitCount){ - int iByte; - int iRem; - int iShift; - - iByte = psBitstream->iIndex >> 3; - iRem = 8 - (psBitstream->iIndex - (iByte<<3)); //8 - psBitstream->iIndex & 0x7; - - iShift = iBitCount-iRem; - if(iShift <= 0){ - iShift *= -1; - psBitstream->puchBuffer[iByte] += (unsigned char) (iValue<iIndex += iBitCount; - iBitCount = 0; - } - else{ - psBitstream->puchBuffer[iByte] += (unsigned char) (iValue>>iShift); - iValue &= MASKS[iShift]; - psBitstream->iIndex += iRem; - iBitCount -= iRem; - } - } - - if(psBitstream->iDirection != BS_WRITE){ - psBitstream->iError = BS_ERROR_FAIL; - } - - return psBitstream->iError; -} - -int BSGetBits(Bitstream *psBitstream, - int iBitCount) -{ - int iValue = 0; - - while(iBitCount){ - unsigned char uchByte; - int iByte; - int iRem; - int iShift; - - iByte = psBitstream->iIndex >> 3; - iRem = 8 - (psBitstream->iIndex - (iByte << 3)); //8 - psBitstream->iIndex & 0x7; - uchByte = psBitstream->puchBuffer[iByte]; - iShift = iBitCount - iRem; - - if(iShift <= 0){ - iShift *= -1; - iValue += (int)((uchByte >> iShift) & MASKS[iBitCount]); - psBitstream->iIndex += iBitCount; - iBitCount = 0; - } - else{ - uchByte &= MASKS[iRem]; - iValue += (((int)uchByte)<iIndex += iRem; - iBitCount -= iRem; - } - } - - if(psBitstream->iDirection != BS_READ){ - psBitstream->iError = BS_ERROR_FAIL; - } - - return iValue; -} - -int BSForceBack(Bitstream *psBitstream, - int iValue, - int iBitCount) -{ - psBitstream->iIndex -= iBitCount; - return (iValue>>iBitCount); -} - -int BSGetByteCount(Bitstream *psBitstream) -{ - int iBytes; - iBytes = psBitstream->iIndex>>3; - if((iBytes << 3) != psBitstream->iIndex){ - iBytes ++; - } - - return iBytes; -} - -unsigned char* BSGetBuffer(Bitstream *psBitstream) -{ - return psBitstream->puchBuffer; -} - -int BSGetAvailableBytes(Bitstream *psBitstream) -{ - return psBitstream->iBufferEnd; -} - -int BSGetError(Bitstream *psBitstream) -{ - return psBitstream->iError; -} diff --git a/lib_rend/ivas_cldfb_trans_codec/cldfb_codec_bitstream.h b/lib_rend/ivas_cldfb_trans_codec/cldfb_codec_bitstream.h deleted file mode 100644 index a3e936e59b..0000000000 --- a/lib_rend/ivas_cldfb_trans_codec/cldfb_codec_bitstream.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef _BITSTREAM_H_ -#define _BITSTREAM_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -enum{BS_READ,BS_WRITE}; -enum{BS_ERROR_NONE,BS_ERROR_FAIL}; - -typedef struct BITSTREAM{ - int iMaxBuffer; - int iDirection; - int iBufferEnd; - int iBufferStart; - int iIndex; - int iError; - unsigned char *puchBuffer; -}Bitstream; - - -Bitstream* CreateBitstream(const int iDirection, - const int iMaxBuffer); - -void DeleteBitstream(Bitstream *psBitstream); - -void BSFlushBuffer(Bitstream *psBitstream); - -int BSPutBytes(Bitstream *psBitstream, - const unsigned char *puchBytes, - const int iByteCount); - -int BSGetBytes(Bitstream *psBitstream, - unsigned char *puchBytes, - int iByteCount); - -int BSByteAlign(Bitstream *psBitstream); - -int BSPutBits(Bitstream *psBitstream, - int iValue, - int iBitCount); - -int BSGetBits(Bitstream *psBitstream, - int iBitCount); - -int BSForceBack(Bitstream *psBitstream, - int iValue, - int iBitCount); - -unsigned char* BSGetBuffer(Bitstream *psBitstream); - -int BSGetByteCount(Bitstream *psBitstream); - -int BSGetAvailableBytes(Bitstream *psBitstream); - -int BSGetError(Bitstream *psBitstream); - -#ifdef __cplusplus -} -#endif - -#endif /* _BITSTREAM_H_ */ diff --git a/lib_rend/ivas_crend.c b/lib_rend/ivas_crend.c index f63d729dc7..0351af3320 100644 --- a/lib_rend/ivas_crend.c +++ b/lib_rend/ivas_crend.c @@ -168,7 +168,11 @@ ivas_error ivas_crend_init_from_rom( intern_config = st_ivas->intern_config; - if ( intern_config == AUDIO_CONFIG_BINAURAL || intern_config == AUDIO_CONFIG_BINAURAL_ROOM ) + if ( intern_config == AUDIO_CONFIG_BINAURAL || intern_config == AUDIO_CONFIG_BINAURAL_ROOM +#ifdef SPLIT_REND_WITH_HEAD_ROT + || intern_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB +#endif + ) { return IVAS_ERR_INTERNAL_FATAL; } @@ -1121,8 +1125,35 @@ ivas_error ivas_crend_process( return IVAS_ERR_OK; } +#ifdef SPLIT_REND_WITH_HEAD_ROT +/*------------------------------------------------------------------------- + * ivas_rend_openMultiBinCrend() + * + * Allocate and initialize crend renderer handle + *------------------------------------------------------------------------*/ +ivas_error ivas_rend_openMultiBinCrend( + CREND_WRAPPER *pCrend, + const IVAS_REND_AudioConfig inConfig, + const IVAS_REND_AudioConfig outConfig, + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, + const int32_t output_Fs ) +{ + int16_t pos_idx; + ivas_error error; + error = IVAS_ERR_OK; + for ( pos_idx = 0; pos_idx < pMultiBinPoseData->num_poses; pos_idx++ ) + { + error = ivas_rend_openCrend( pCrend, inConfig, outConfig, NULL /*hRendCfg*/, output_Fs, pos_idx ); + if ( error != IVAS_ERR_OK ) + { + return error; + } + } + return error; +} +#endif /*------------------------------------------------------------------------- * ivas_rend_openCrend() * @@ -1134,7 +1165,12 @@ ivas_error ivas_rend_openCrend( const IVAS_REND_AudioConfig inConfig, const IVAS_REND_AudioConfig outConfig, RENDER_CONFIG_DATA *hRendCfg, - const int32_t output_Fs ) + const int32_t output_Fs +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + const int16_t pos_idx +#endif +) { /* TODO tmu : Based on ivas_crend_open() - could be harmonized / refactored */ int16_t i, subframe_length; @@ -1142,6 +1178,11 @@ ivas_error ivas_rend_openCrend( HRTFS_HANDLE hHrtf; CREND_HANDLE hCrend; ivas_error error; +#ifdef SPLIT_REND_WITH_HEAD_ROT + hCrend = pCrend->hCrend[pos_idx]; +#else + hCrend = pCrend->hCrend; +#endif error = IVAS_ERR_OK; subframe_length = (int16_t) ( output_Fs / FRAMES_PER_SEC ) / MAX_PARAM_SPATIAL_SUBFRAMES; @@ -1160,7 +1201,6 @@ ivas_error ivas_rend_openCrend( } hCrend->lfe_delay_line = NULL; - for ( i = 0; i < MAX_INTERN_CHANNELS; i++ ) { hCrend->freq_buffer_re[i] = NULL; @@ -1174,6 +1214,7 @@ ivas_error ivas_rend_openCrend( hCrend->freq_buffer_re_diffuse = NULL; hCrend->freq_buffer_im_diffuse = NULL; + hCrend->hReverb = NULL; hCrend->delay_line_rw_index = 0; hCrend->diffuse_delay_line_rw_index = 0; @@ -1262,7 +1303,11 @@ ivas_error ivas_rend_openCrend( hCrend->hTrack = NULL; } +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( ( hRendCfg != NULL ) && ( hRendCfg->roomAcoustics.late_reverb_on ) && ( pos_idx == 0 ) ) +#else if ( ( hRendCfg != NULL ) && ( hRendCfg->roomAcoustics.late_reverb_on ) ) +#endif { if ( ( error = ivas_reverb_open( &( hCrend->hReverb ), getIvasAudioConfigFromRendAudioConfig( inConfig ), @@ -1281,7 +1326,12 @@ ivas_error ivas_rend_openCrend( pCrend->binaural_latency_ns = (int32_t) ( pCrend->hHrtfCrend->latency_s * 1000000000.f ); } +#ifdef SPLIT_REND_WITH_HEAD_ROT + pCrend->hCrend[pos_idx] = hCrend; +#else pCrend->hCrend = hCrend; +#endif + return IVAS_ERR_OK; } @@ -1313,7 +1363,11 @@ ivas_error ivas_rend_initCrend( { return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Encountered unsupported input config in Crend" ); } - if ( outConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL && outConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM ) + if ( outConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL && outConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM +#ifdef SPLIT_REND_WITH_HEAD_ROT + && outConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB && outConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM +#endif + ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Encountered unsupported output type in Crend" ); } @@ -1679,71 +1733,87 @@ ivas_error ivas_rend_initCrend( *------------------------------------------------------------------------*/ ivas_error ivas_rend_closeCrend( - CREND_WRAPPER *pCrend ) + CREND_WRAPPER *pCrend +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + int16_t pos_idx +#endif +) { int16_t i; + CREND_HANDLE hCrend; +#ifdef SPLIT_REND_WITH_HEAD_ROT + hCrend = pCrend->hCrend[pos_idx]; +#else + hCrend = pCrend->hCrend; +#endif if ( pCrend->hHrtfCrend != NULL ) { ivas_hrtf_close( &pCrend->hHrtfCrend ); } - if ( pCrend->hCrend != NULL ) + if ( hCrend != NULL ) { - for ( i = 0; i < MAX_INTERN_CHANNELS; i++ ) { - if ( pCrend->hCrend->freq_buffer_re[i] != NULL ) + if ( hCrend->freq_buffer_re[i] != NULL ) { - count_free( pCrend->hCrend->freq_buffer_re[i] ); - pCrend->hCrend->freq_buffer_re[i] = NULL; + count_free( hCrend->freq_buffer_re[i] ); + hCrend->freq_buffer_re[i] = NULL; } - if ( pCrend->hCrend->freq_buffer_im[i] != NULL ) + if ( hCrend->freq_buffer_im[i] != NULL ) { - count_free( pCrend->hCrend->freq_buffer_im[i] ); - pCrend->hCrend->freq_buffer_im[i] = NULL; + count_free( hCrend->freq_buffer_im[i] ); + hCrend->freq_buffer_im[i] = NULL; } } for ( i = 0; i < BINAURAL_CHANNELS; i++ ) { - if ( pCrend->hCrend->prev_out_buffer[i] != NULL ) + if ( hCrend->prev_out_buffer[i] != NULL ) { - count_free( pCrend->hCrend->prev_out_buffer[i] ); - pCrend->hCrend->prev_out_buffer[i] = NULL; + count_free( hCrend->prev_out_buffer[i] ); + hCrend->prev_out_buffer[i] = NULL; } } - if ( pCrend->hCrend->lfe_delay_line != NULL ) + if ( hCrend->lfe_delay_line != NULL ) { - count_free( pCrend->hCrend->lfe_delay_line ); - pCrend->hCrend->lfe_delay_line = NULL; + count_free( hCrend->lfe_delay_line ); + hCrend->lfe_delay_line = NULL; } - if ( pCrend->hCrend->freq_buffer_re_diffuse != NULL ) + if ( hCrend->freq_buffer_re_diffuse != NULL ) { - count_free( pCrend->hCrend->freq_buffer_re_diffuse ); - pCrend->hCrend->freq_buffer_re_diffuse = NULL; + count_free( hCrend->freq_buffer_re_diffuse ); + hCrend->freq_buffer_re_diffuse = NULL; } - if ( pCrend->hCrend->freq_buffer_im_diffuse != NULL ) + if ( hCrend->freq_buffer_im_diffuse != NULL ) { - count_free( pCrend->hCrend->freq_buffer_im_diffuse ); - pCrend->hCrend->freq_buffer_im_diffuse = NULL; + count_free( hCrend->freq_buffer_im_diffuse ); + hCrend->freq_buffer_im_diffuse = NULL; } - if ( pCrend->hCrend->hTrack != NULL ) + if ( hCrend->hTrack != NULL ) { - count_free( pCrend->hCrend->hTrack ); - pCrend->hCrend->hTrack = NULL; + count_free( hCrend->hTrack ); + hCrend->hTrack = NULL; } - ivas_reverb_close( &pCrend->hCrend->hReverb ); + ivas_reverb_close( &hCrend->hReverb ); - count_free( pCrend->hCrend ); - pCrend->hCrend = NULL; + count_free( hCrend ); + hCrend = NULL; } +#ifdef SPLIT_REND_WITH_HEAD_ROT + pCrend->hCrend[pos_idx] = hCrend; +#else + pCrend->hCrend = hCrend; +#endif + return IVAS_ERR_OK; } @@ -1758,7 +1828,12 @@ ivas_error ivas_rend_crendProcess( const IVAS_REND_AudioConfig inConfig, const IVAS_REND_AudioConfig outConfig, float output[][L_FRAME48k], /* i/o: input/output audio channels */ - const int32_t output_Fs ) + const int32_t output_Fs +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + const int16_t pos_idx +#endif +) { int16_t i, subframe_idx, output_frame; int16_t nchan_out; @@ -1766,6 +1841,12 @@ ivas_error ivas_rend_crendProcess( AUDIO_CONFIG in_config; IVAS_REND_AudioConfigType inConfigType; ivas_error error; + CREND_HANDLE hCrend; +#ifdef SPLIT_REND_WITH_HEAD_ROT + hCrend = pCrend->hCrend[pos_idx]; +#else + hCrend = pCrend->hCrend; +#endif wmops_sub_start( "ivas_rend_crendProcess" ); @@ -1778,14 +1859,19 @@ ivas_error ivas_rend_crendProcess( { if ( ( inConfigType == IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED ) || ( inConfigType == IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS ) ) { - if ( ( error = ivas_rend_crendConvolver( pCrend, inConfig, outConfig, output, pcm_tmp, output_Fs, subframe_idx ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_rend_crendConvolver( pCrend, inConfig, outConfig, output, pcm_tmp, output_Fs, subframe_idx +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + pos_idx +#endif + ) ) != IVAS_ERR_OK ) { return error; } - if ( pCrend->hCrend->hReverb != NULL ) + if ( hCrend->hReverb != NULL ) { - if ( ( error = ivas_reverb_process( pCrend->hCrend->hReverb, in_config, 1, output, pcm_tmp, subframe_idx ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_reverb_process( hCrend->hReverb, in_config, 1, output, pcm_tmp, subframe_idx ) ) != IVAS_ERR_OK ) { return error; } @@ -1821,7 +1907,12 @@ ivas_error ivas_rend_crendConvolver( float pcm_in[][L_FRAME48k], float pcm_out[][L_FRAME48k], const int32_t output_Fs, - const int16_t i_ts ) + const int16_t i_ts +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + const int16_t pos_idx +#endif +) { int16_t i, j, k, m; int16_t subframe_length, idx_in; @@ -1833,6 +1924,12 @@ ivas_error ivas_rend_crendConvolver( float *pFreq_filt_re, *pFreq_filt_im; float pOut[L_FRAME48k * 2]; float tmp_out_re[L_FRAME48k], tmp_out_im[L_FRAME48k]; + CREND_HANDLE hCrend; +#ifdef SPLIT_REND_WITH_HEAD_ROT + hCrend = pCrend->hCrend[pos_idx]; +#else + hCrend = pCrend->hCrend; +#endif getAudioConfigNumChannels( inConfig, &nchan_in ); getAudioConfigNumChannels( outConfig, &nchan_out ); @@ -1852,13 +1949,13 @@ ivas_error ivas_rend_crendConvolver( } } - offset = pCrend->hCrend->delay_line_rw_index * subframe_length; /* subframe_length * ( pCrend->hHrtfCrend->max_num_iterations - 1 ); */ - offset_diffuse = pCrend->hCrend->diffuse_delay_line_rw_index * subframe_length; /* subframe_length *( pCrend->hHrtfCrend->num_iterations_diffuse[0] - 1 ); */ + offset = hCrend->delay_line_rw_index * subframe_length; /* subframe_length * ( pCrend->hHrtfCrend->max_num_iterations - 1 ); */ + offset_diffuse = hCrend->diffuse_delay_line_rw_index * subframe_length; /* subframe_length *( pCrend->hHrtfCrend->num_iterations_diffuse[0] - 1 ); */ if ( pCrend->hHrtfCrend->num_iterations_diffuse[0] > 0 ) { - set_zero( &pCrend->hCrend->freq_buffer_re_diffuse[offset_diffuse], subframe_length ); - set_zero( &pCrend->hCrend->freq_buffer_im_diffuse[offset_diffuse], subframe_length ); + set_zero( &hCrend->freq_buffer_re_diffuse[offset_diffuse], subframe_length ); + set_zero( &hCrend->freq_buffer_im_diffuse[offset_diffuse], subframe_length ); } i = 0; @@ -1869,10 +1966,10 @@ ivas_error ivas_rend_crendConvolver( { if ( pCrend->hHrtfCrend->num_iterations_diffuse[0] > 0 ) { - pFreq_buf_re = &pCrend->hCrend->freq_buffer_re_diffuse[offset_diffuse]; - pFreq_buf_im = &pCrend->hCrend->freq_buffer_im_diffuse[offset_diffuse]; - pFreq_filt_re = &pCrend->hCrend->freq_buffer_re[i][offset]; - pFreq_filt_im = &pCrend->hCrend->freq_buffer_im[i][offset]; + pFreq_buf_re = &hCrend->freq_buffer_re_diffuse[offset_diffuse]; + pFreq_buf_im = &hCrend->freq_buffer_im_diffuse[offset_diffuse]; + pFreq_filt_re = &hCrend->freq_buffer_re[i][offset]; + pFreq_filt_im = &hCrend->freq_buffer_im[i][offset]; for ( k = 0; k < pCrend->hHrtfCrend->index_frequency_max_diffuse; k++ ) { @@ -1881,8 +1978,8 @@ ivas_error ivas_rend_crendConvolver( } } - pFreq_buf_re = &pCrend->hCrend->freq_buffer_re[i][offset]; - pFreq_buf_im = &pCrend->hCrend->freq_buffer_im[i][offset]; + pFreq_buf_re = &hCrend->freq_buffer_re[i][offset]; + pFreq_buf_im = &hCrend->freq_buffer_im[i][offset]; ivas_mdft( pIn, pFreq_buf_re, pFreq_buf_im, subframe_length, subframe_length ); i++; @@ -1902,11 +1999,11 @@ ivas_error ivas_rend_crendConvolver( offset = 0; for ( m = 0; m < pCrend->hHrtfCrend->num_iterations[i][j]; m++ ) { - offset_in = ( pCrend->hCrend->delay_line_rw_index + pCrend->hHrtfCrend->max_num_iterations - pCrend->hHrtfCrend->num_iterations[i][j] + m + 1 ); + offset_in = ( hCrend->delay_line_rw_index + pCrend->hHrtfCrend->max_num_iterations - pCrend->hHrtfCrend->num_iterations[i][j] + m + 1 ); offset_in = offset_in % ( pCrend->hHrtfCrend->max_num_iterations ); offset_in = offset_in * subframe_length; - pFreq_buf_re = &pCrend->hCrend->freq_buffer_re[i][offset_in]; - pFreq_buf_im = &pCrend->hCrend->freq_buffer_im[i][offset_in]; + pFreq_buf_re = &hCrend->freq_buffer_re[i][offset_in]; + pFreq_buf_im = &hCrend->freq_buffer_im[i][offset_in]; pFreq_filt_re = &pCrend->hHrtfCrend->pOut_to_bin_re[i][j][offset]; pFreq_filt_im = &pCrend->hHrtfCrend->pOut_to_bin_im[i][j][offset]; @@ -1924,11 +2021,11 @@ ivas_error ivas_rend_crendConvolver( offset = 0; for ( m = 0; m < pCrend->hHrtfCrend->num_iterations_diffuse[j]; m++ ) { - offset_diffuse = ( pCrend->hCrend->diffuse_delay_line_rw_index + m + 1 ); + offset_diffuse = ( hCrend->diffuse_delay_line_rw_index + m + 1 ); offset_diffuse = offset_diffuse % pCrend->hHrtfCrend->num_iterations_diffuse[0]; offset_diffuse = offset_diffuse * subframe_length; - pFreq_buf_re = &pCrend->hCrend->freq_buffer_re_diffuse[offset_diffuse]; - pFreq_buf_im = &pCrend->hCrend->freq_buffer_im_diffuse[offset_diffuse]; + pFreq_buf_re = &hCrend->freq_buffer_re_diffuse[offset_diffuse]; + pFreq_buf_im = &hCrend->freq_buffer_im_diffuse[offset_diffuse]; pFreq_filt_re = &pCrend->hHrtfCrend->pOut_to_bin_diffuse_re[j][offset]; pFreq_filt_im = &pCrend->hHrtfCrend->pOut_to_bin_diffuse_im[j][offset]; @@ -1945,17 +2042,17 @@ ivas_error ivas_rend_crendConvolver( pFreq_buf_re = &pcm_out[j][i_ts * subframe_length]; for ( k = 0; k < subframe_length; k++ ) { - pFreq_buf_re[k] = pOut[k] + pCrend->hCrend->prev_out_buffer[j][k]; - pCrend->hCrend->prev_out_buffer[j][k] = pOut[k + subframe_length]; + pFreq_buf_re[k] = pOut[k] + hCrend->prev_out_buffer[j][k]; + hCrend->prev_out_buffer[j][k] = pOut[k + subframe_length]; } } - pCrend->hCrend->delay_line_rw_index++; - pCrend->hCrend->delay_line_rw_index = pCrend->hCrend->delay_line_rw_index % ( pCrend->hHrtfCrend->max_num_iterations ); + hCrend->delay_line_rw_index++; + hCrend->delay_line_rw_index = hCrend->delay_line_rw_index % ( pCrend->hHrtfCrend->max_num_iterations ); if ( pCrend->hHrtfCrend->num_iterations_diffuse[0] > 0 ) { - pCrend->hCrend->diffuse_delay_line_rw_index++; - pCrend->hCrend->diffuse_delay_line_rw_index = pCrend->hCrend->diffuse_delay_line_rw_index % ( pCrend->hHrtfCrend->num_iterations_diffuse[0] ); + hCrend->diffuse_delay_line_rw_index++; + hCrend->diffuse_delay_line_rw_index = hCrend->diffuse_delay_line_rw_index % ( pCrend->hHrtfCrend->num_iterations_diffuse[0] ); } return IVAS_ERR_OK; diff --git a/lib_rend/ivas_lib_rend_internal.h b/lib_rend/ivas_lib_rend_internal.h index f985b662a0..d155b849b9 100644 --- a/lib_rend/ivas_lib_rend_internal.h +++ b/lib_rend/ivas_lib_rend_internal.h @@ -41,10 +41,10 @@ typedef struct { int8_t headRotEnabled; IVAS_QUATERNION headPositions[RENDERER_HEAD_POSITIONS_PER_FRAME]; + float crossfade[L_FRAME48k / RENDERER_HEAD_POSITIONS_PER_FRAME]; #ifdef SPLIT_REND_WITH_HEAD_ROT - IVAS_QUATERNION headPositionsPostRend[RENDERER_HEAD_POSITIONS_PER_FRAME]; + IVAS_SPLIT_REND_ROT_AXIS sr_pose_pred_axis; #endif - float crossfade[L_FRAME48k / RENDERER_HEAD_POSITIONS_PER_FRAME]; } IVAS_REND_HeadRotData; typedef struct @@ -57,7 +57,11 @@ typedef struct typedef struct { int32_t binaural_latency_ns; +#ifdef SPLIT_REND_WITH_HEAD_ROT + CREND_HANDLE hCrend[MAX_HEAD_ROT_POSES]; +#else CREND_HANDLE hCrend; +#endif HRTFS_HANDLE hHrtfCrend; } CREND_WRAPPER; @@ -79,21 +83,37 @@ ivas_error getAudioConfigNumChannels( AUDIO_CONFIG getIvasAudioConfigFromRendAudioConfig( IVAS_REND_AudioConfig config ); +#ifdef SPLIT_REND_WITH_HEAD_ROT +ivas_error ivas_rend_openMultiBinCrend( + CREND_WRAPPER *pCrend, + const IVAS_REND_AudioConfig inConfig, + const IVAS_REND_AudioConfig outConfig, + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, + const int32_t output_Fs ); +#endif + ivas_error ivas_rend_openCrend( CREND_WRAPPER *pCrend, const IVAS_REND_AudioConfig inConfig, const IVAS_REND_AudioConfig outConfig, RENDER_CONFIG_DATA *hRendCfg, - const int32_t output_Fs ); + const int32_t output_Fs +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + const int16_t pos_idx +#endif +); #ifdef SPLIT_REND_WITH_HEAD_ROT void ivas_rend_CldfbMultiBinRendProcess( const BINAURAL_RENDERER_HANDLE hCldfbRend, const IVAS_REND_HeadRotData *pHeadRotData, + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, float Cldfb_In_Real[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float Cldfb_In_Imag[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float Cldfb_Out_Real[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* o : Binaural signals */ - float Cldfb_Out_Imag[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX] ); + float Cldfb_Out_Imag[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + const int16_t low_res_pre_rend_rot ); ivas_error ivas_rend_openCldfb( HANDLE_CLDFB_FILTER_BANK cldfbAna[MAX_INPUT_CHANNELS], @@ -102,14 +122,25 @@ ivas_error ivas_rend_openCldfb( ivas_error ivas_rend_openCldfbRend( CLDFB_REND_WRAPPER *pCldfbRend, const IVAS_REND_AudioConfig inConfig, - const IVAS_SPLIT_REND_MODE splitRendMode, + const IVAS_REND_AudioConfig outConfig, RENDER_CONFIG_DATA *hRendCfg, +#ifdef SPLIT_REND_WITH_HEAD_ROT + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, +#endif const int32_t output_Fs ); +void ivas_mat_mult_2by2_complex( float in_re1[2][2], + float in_im1[2][2], + float in_re2[2][2], + float in_im2[2][2], + float out_re2[2][2], + float out_im2[2][2] ); void ivas_split_rend_bitstream_init( ivas_split_rend_bits_t *pBits, const int32_t buf_len_bytes, uint8_t *pbuf ); void ivas_split_rend_huffman_dec_init_min_max_len( ivas_split_rend_huffman_cfg_t *p_huff_cfg ); void ivas_split_rend_init_huff_cfg( BIN_HR_SPLIT_REND_HUFF_HANDLE pHuff_cfg ); -void set_fix_rotation_mat( float fix_pos_rot_mat[][BINAURAL_CHANNELS][BINAURAL_CHANNELS] ); +void set_fix_rotation_mat( float fix_pos_rot_mat[][BINAURAL_CHANNELS][BINAURAL_CHANNELS], + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData ); +void set_pose_types( IVAS_SPLIT_REND_POSE_TYPE pose_type[MAX_HEAD_ROT_POSES - 1], MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData ); int16_t wrap_a( int16_t val, int16_t min_val, int16_t max_val ); void ivas_SplitRenderer_getdiagdiff( int16_t in_idx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], @@ -123,8 +154,19 @@ IVAS_QUATERNION ivas_split_rend_get_sf_rot_data( const IVAS_QUATERNION headPositions[RENDERER_HEAD_POSITIONS_PER_FRAME], int16_t subframe_idx ); -void ivas_rend_closeCldfb( HANDLE_CLDFB_FILTER_BANK cldfbAna[MAX_INPUT_CHANNELS] ); void ivas_rend_closeCldfbRend( CLDFB_REND_WRAPPER *pCldfbRend ); +int32_t ivas_get_lcld_bitrate( const int32_t SplitRendBitRate ); +int32_t ivas_get_split_rend_md_target_brate( const int32_t SplitRendBitRate, const int16_t pcm_out ); +void ivas_split_rend_get_quant_params( + const int16_t num_md_bands, + int16_t pred_real_bands_yaw[IVAS_SPLIT_REND_NUM_QUANT_STRATS], + int16_t pred_imag_bands_yaw[IVAS_SPLIT_REND_NUM_QUANT_STRATS], + int16_t d_bands_yaw[IVAS_SPLIT_REND_NUM_QUANT_STRATS], + int16_t bands_pitch[IVAS_SPLIT_REND_NUM_QUANT_STRATS], + int16_t pred_real_bands_roll[IVAS_SPLIT_REND_NUM_QUANT_STRATS], + int16_t pred_imag_bands_roll[IVAS_SPLIT_REND_NUM_QUANT_STRATS], + int16_t *num_quant_strats, + int16_t *num_complex_bands ); #endif ivas_error ivas_rend_initCrend( @@ -135,14 +177,24 @@ ivas_error ivas_rend_initCrend( const int32_t output_Fs ); ivas_error ivas_rend_closeCrend( - CREND_WRAPPER *pCrend ); + CREND_WRAPPER *pCrend +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + int16_t pos_idx +#endif +); ivas_error ivas_rend_crendProcess( const CREND_WRAPPER *pCrend, const IVAS_REND_AudioConfig inConfig, const IVAS_REND_AudioConfig outConfig, float output[][L_FRAME48k], /* i/o: input/output audio channels */ - const int32_t output_Fs ); + const int32_t output_Fs +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + const int16_t pos_idx +#endif +); ivas_error ivas_rend_crendConvolver( const CREND_WRAPPER *pCrend, @@ -151,7 +203,12 @@ ivas_error ivas_rend_crendConvolver( float pcm_in[][L_FRAME48k], float pcm_out[][L_FRAME48k], const int32_t output_Fs, - const int16_t i_ts ); + const int16_t i_ts +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + const int16_t pos_idx +#endif +); ivas_error ivas_rend_TDObjRenderFrame( const TDREND_WRAPPER *pTDRend, /* i : TD Renderer wrapper structure */ diff --git a/lib_rend/ivas_output_init.c b/lib_rend/ivas_output_init.c index fae2144afe..7d1f95e4cb 100644 --- a/lib_rend/ivas_output_init.c +++ b/lib_rend/ivas_output_init.c @@ -95,6 +95,9 @@ int16_t audioCfg2channels( break; case AUDIO_CONFIG_BINAURAL: case AUDIO_CONFIG_BINAURAL_ROOM: +#ifdef SPLIT_REND_WITH_HEAD_ROT + case AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB: +#endif nchan_out = 2; break; case AUDIO_CONFIG_ISM1: @@ -221,6 +224,9 @@ void ivas_output_init( break; case AUDIO_CONFIG_BINAURAL: case AUDIO_CONFIG_BINAURAL_ROOM: +#ifdef SPLIT_REND_WITH_HEAD_ROT + case AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB: +#endif case AUDIO_CONFIG_ISM1: case AUDIO_CONFIG_ISM2: case AUDIO_CONFIG_ISM3: @@ -282,7 +288,11 @@ void ivas_renderer_select( st_ivas->hHeadTrackData->shd_rot_max_order = -1; } - if ( output_config == AUDIO_CONFIG_BINAURAL || output_config == AUDIO_CONFIG_BINAURAL_ROOM ) + if ( output_config == AUDIO_CONFIG_BINAURAL || output_config == AUDIO_CONFIG_BINAURAL_ROOM +#ifdef SPLIT_REND_WITH_HEAD_ROT + || output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB +#endif + ) { if ( st_ivas->ivas_format == ISM_FORMAT ) { @@ -333,7 +343,11 @@ void ivas_renderer_select( else if ( st_ivas->ivas_format == MASA_FORMAT || ( st_ivas->ivas_format == SBA_FORMAT && st_ivas->nchan_transport <= 2 ) ) { *internal_config = output_config; - if ( output_config == AUDIO_CONFIG_BINAURAL ) + if ( output_config == AUDIO_CONFIG_BINAURAL +#ifdef SPLIT_REND_WITH_HEAD_ROT + || output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB +#endif + ) { *renderer_type = RENDERER_BINAURAL_PARAMETRIC; } @@ -346,7 +360,11 @@ void ivas_renderer_select( { *internal_config = AUDIO_CONFIG_HOA3; - if ( output_config == AUDIO_CONFIG_BINAURAL ) + if ( output_config == AUDIO_CONFIG_BINAURAL +#ifdef SPLIT_REND_WITH_HEAD_ROT + || output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB +#endif + ) { *renderer_type = RENDERER_BINAURAL_FASTCONV; } @@ -629,13 +647,19 @@ void ivas_renderer_select( } #ifdef SPLIT_REND_WITH_HEAD_ROT -void ivas_set_split_rend_setup( IVAS_DEC_SPLIT_REND_WRAPPER *hSplitBinRend, IVAS_SPLIT_REND_BITS_HANDLE hSplitRendBits ) +void ivas_set_split_rend_setup( IVAS_DEC_SPLIT_REND_WRAPPER *hSplitBinRend, IVAS_SPLIT_REND_CONFIG_DATA *hSplitBinConfig, HEAD_TRACK_DATA_HANDLE hHeadTrackData, IVAS_SPLIT_REND_BITS_HANDLE hSplitRendBits ) { hSplitRendBits->bits_written = 0; hSplitRendBits->bits_read = 0; hSplitBinRend->hSplitRendBits = hSplitRendBits; hSplitBinRend->hMultiBinCldfbData = (IVAS_DEC_SPLIT_REND_MULTI_BIN_CLDFB_DATA_HANDLE) dynamic_malloc( sizeof( IVAS_DEC_SPLIT_REND_MULTI_BIN_CLDFB_DATA ) ); + + ivas_renderSplitGetMultiBinPoseData( + hSplitBinConfig, + &hSplitBinRend->splitrend.multiBinPoseData, + hHeadTrackData->sr_pose_pred_axis ); + return; } #endif \ No newline at end of file diff --git a/lib_rend/ivas_render_config.c b/lib_rend/ivas_render_config.c index 7e8caec092..f71c5207b6 100644 --- a/lib_rend/ivas_render_config.c +++ b/lib_rend/ivas_render_config.c @@ -101,7 +101,7 @@ ivas_error ivas_render_config_init_from_rom( return IVAS_ERROR( IVAS_ERR_UNEXPECTED_NULL_POINTER, "Unexpected null pointer while attempting to fill renderer configuration from ROM" ); } -#ifdef DEBUGGING +#if ( defined DEBUGGING ) || ( defined SPLIT_REND_WITH_HEAD_ROT ) ( *hRenderConfig )->renderer_type_override = RENDER_TYPE_OVERRIDE_NONE; #endif ( *hRenderConfig )->roomAcoustics.override = false; @@ -118,5 +118,12 @@ ivas_error ivas_render_config_init_from_rom( mvr2r( ivas_reverb_default_RT60, ( *hRenderConfig )->roomAcoustics.pAcoustic_rt60, IVAS_REVERB_DEFAULT_N_BANDS ); mvr2r( ivas_reverb_default_DSR, ( *hRenderConfig )->roomAcoustics.pAcoustic_dsr, IVAS_REVERB_DEFAULT_N_BANDS ); +#ifdef SPLIT_REND_WITH_HEAD_ROT + ( *hRenderConfig )->split_rend_config.splitRendBitRate = SPLIT_REND_768k; + ( *hRenderConfig )->split_rend_config.dof = 3; + ( *hRenderConfig )->split_rend_config.hq_mode = 0; + ( *hRenderConfig )->split_rend_config.codec_delay_ms = 0; +#endif + return IVAS_ERR_OK; } diff --git a/lib_rend/ivas_rom_binaural_crend_head.c b/lib_rend/ivas_rom_binaural_crend_head.c index ac4216ef77..ae08a9b4bd 100644 --- a/lib_rend/ivas_rom_binaural_crend_head.c +++ b/lib_rend/ivas_rom_binaural_crend_head.c @@ -649,6 +649,397 @@ const uint16_t CRendBin_HOA3_HRIR_pIndex_frequency_max_48kHz[16][BINAURAL_CHANNE const uint16_t CRendBin_HOA3_HRIR_index_frequency_max_diffuse_48kHz = 0; const float CRendBin_HOA3_HRIR_inv_diffuse_weight_48kHz[16]={0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f}; const uint16_t *CRendBin_HOA3_HRIR_pIndex_frequency_max_diffuse_48kHz[BINAURAL_CHANNELS]={NULL,NULL}; + +#ifdef USE_DOLBY_HRTFS_WITH_LIB_REND_HOA3 +const float CRendBin_HOA3_HRIR_coeff_re_48kHz[16][BINAURAL_CHANNELS][480]={ + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.913511f, 0.297764f, -0.448662f, -0.794739f, -0.584308f, -0.066286f, 0.383335f, 0.523490f, 0.329142f, -0.049270f, -0.372446f, -0.439760f, -0.218387f, 0.131463f, 0.375250f, 0.366057f, 0.122749f, -0.199654f, -0.398818f, -0.338040f, -0.044156f, 0.289955f, 0.435397f, 0.292959f, -0.046275f, -0.370822f, -0.470921f, -0.255332f, 0.168596f, 0.524347f, 0.546137f, 0.190399f, -0.315265f, -0.631577f, -0.536748f, -0.071010f, 0.473325f, 0.724680f, 0.491926f, -0.077029f, -0.592750f, -0.709061f, -0.358645f, 0.221486f, 0.653227f, 0.654448f, 0.221714f, -0.358070f, + -0.697005f, -0.571979f, -0.072724f, 0.465706f, 0.688399f, 0.454808f, -0.069878f, -0.531901f, -0.632201f, -0.318528f, 0.196256f, 0.577642f, 0.578020f, 0.195732f, -0.315931f, -0.614947f, -0.504762f, -0.064240f, 0.413279f, 0.615223f, 0.410469f, -0.063698f, -0.489012f, -0.582556f, -0.291711f, 0.177074f, 0.509396f, 0.495935f, 0.163135f, -0.255558f, -0.483220f, -0.385116f, -0.047484f, 0.297139f, 0.430397f, 0.281064f, -0.042923f, -0.329134f, -0.394422f, -0.200007f, 0.123610f, 0.361593f, 0.357624f, 0.119310f, -0.188992f, -0.361951f, -0.292521f, -0.036559f, 0.232740f, 0.340851f, 0.223547f, -0.033904f, -0.257091f, -0.302468f, -0.150325f, 0.091447f, 0.263901f, 0.258505f, 0.085476f, -0.133310f, -0.250324f, -0.197278f, -0.023974f, 0.151501f, 0.223518f, 0.151424f, -0.024096f, -0.195202f, -0.243701f, -0.126585f, 0.078808f, 0.227034f, 0.218009f, 0.070086f, -0.106416f, -0.197846f, -0.157896f, -0.019854f, 0.132839f, 0.208150f, 0.149364f, -0.025039f, -0.212775f, -0.279217f, -0.153368f, 0.101549f, 0.313749f, 0.323895f, 0.111574f, -0.180715f, -0.351256f, -0.286277f, -0.035901f, 0.228684f, 0.334751f, 0.219900f, + -0.033586f, -0.258858f, -0.313198f, -0.162184f, 0.103962f, 0.319367f, 0.335040f, 0.119049f, -0.200630f, -0.406665f, -0.345432f, -0.045133f, 0.297852f, 0.452257f, 0.307675f, -0.048678f, -0.383458f, -0.469653f, -0.242363f, 0.151899f, 0.450820f, 0.452553f, 0.153364f, -0.247292f, -0.481211f, -0.394484f, -0.049986f, 0.320428f, 0.473864f, 0.314398f, -0.048591f, -0.374856f, -0.451318f, -0.230086f, 0.143343f, 0.425377f, 0.429356f, 0.146896f, -0.239536f, -0.471241f, -0.389483f, -0.049519f, 0.316500f, 0.463005f, 0.301169f, -0.045151f, -0.334495f, -0.382053f, -0.182555f, 0.105589f, 0.287834f, 0.265314f, 0.082622f, -0.121622f, -0.215847f, -0.160070f, -0.018038f, 0.105124f, 0.140415f, 0.085958f, -0.012310f, -0.094173f, -0.112729f, -0.057423f, 0.036152f, 0.106033f, 0.105674f, 0.035805f, -0.057042f, -0.111752f, -0.092326f, -0.011591f, 0.076887f, 0.114459f, 0.076487f, -0.011585f, -0.091335f, -0.110111f, -0.055908f, 0.035073f, 0.102854f, 0.102954f, 0.035102f, -0.056172f, -0.110235f, -0.090967f, -0.011393f, 0.075561f, 0.112715f, 0.075676f, -0.011529f, -0.091380f, -0.110514f, -0.056150f, 0.035172f, 0.102964f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.913511f, 0.297764f, -0.448662f, -0.794739f, -0.584308f, -0.066286f, 0.383335f, 0.523490f, 0.329142f, -0.049270f, -0.372446f, -0.439760f, -0.218387f, 0.131463f, 0.375250f, 0.366057f, 0.122749f, -0.199654f, -0.398818f, -0.338040f, -0.044156f, 0.289955f, 0.435397f, 0.292959f, -0.046275f, -0.370822f, -0.470921f, -0.255332f, 0.168596f, 0.524347f, 0.546137f, 0.190399f, -0.315265f, -0.631577f, -0.536748f, -0.071010f, 0.473325f, 0.724680f, 0.491926f, -0.077029f, -0.592750f, -0.709061f, -0.358645f, 0.221486f, 0.653227f, 0.654448f, 0.221714f, -0.358070f, + -0.697005f, -0.571979f, -0.072724f, 0.465706f, 0.688399f, 0.454808f, -0.069878f, -0.531901f, -0.632201f, -0.318528f, 0.196256f, 0.577642f, 0.578020f, 0.195732f, -0.315931f, -0.614947f, -0.504762f, -0.064240f, 0.413279f, 0.615223f, 0.410469f, -0.063698f, -0.489012f, -0.582556f, -0.291711f, 0.177074f, 0.509396f, 0.495935f, 0.163135f, -0.255558f, -0.483220f, -0.385116f, -0.047484f, 0.297139f, 0.430397f, 0.281064f, -0.042923f, -0.329134f, -0.394422f, -0.200007f, 0.123610f, 0.361593f, 0.357624f, 0.119310f, -0.188992f, -0.361951f, -0.292521f, -0.036559f, 0.232740f, 0.340851f, 0.223547f, -0.033904f, -0.257091f, -0.302468f, -0.150325f, 0.091447f, 0.263901f, 0.258505f, 0.085476f, -0.133310f, -0.250324f, -0.197278f, -0.023974f, 0.151501f, 0.223518f, 0.151424f, -0.024096f, -0.195202f, -0.243701f, -0.126585f, 0.078808f, 0.227034f, 0.218009f, 0.070086f, -0.106416f, -0.197846f, -0.157896f, -0.019854f, 0.132839f, 0.208150f, 0.149364f, -0.025039f, -0.212775f, -0.279217f, -0.153368f, 0.101549f, 0.313749f, 0.323895f, 0.111574f, -0.180715f, -0.351256f, -0.286277f, -0.035901f, 0.228684f, 0.334751f, 0.219900f, + -0.033586f, -0.258858f, -0.313198f, -0.162184f, 0.103962f, 0.319367f, 0.335040f, 0.119049f, -0.200630f, -0.406665f, -0.345432f, -0.045133f, 0.297852f, 0.452257f, 0.307675f, -0.048678f, -0.383458f, -0.469653f, -0.242363f, 0.151899f, 0.450820f, 0.452553f, 0.153364f, -0.247292f, -0.481211f, -0.394484f, -0.049986f, 0.320428f, 0.473864f, 0.314398f, -0.048591f, -0.374856f, -0.451318f, -0.230086f, 0.143343f, 0.425377f, 0.429356f, 0.146896f, -0.239536f, -0.471241f, -0.389483f, -0.049519f, 0.316500f, 0.463005f, 0.301169f, -0.045151f, -0.334495f, -0.382053f, -0.182555f, 0.105589f, 0.287834f, 0.265314f, 0.082622f, -0.121622f, -0.215847f, -0.160070f, -0.018038f, 0.105124f, 0.140415f, 0.085958f, -0.012310f, -0.094173f, -0.112729f, -0.057423f, 0.036152f, 0.106033f, 0.105674f, 0.035805f, -0.057042f, -0.111752f, -0.092326f, -0.011591f, 0.076887f, 0.114459f, 0.076487f, -0.011585f, -0.091335f, -0.110111f, -0.055908f, 0.035073f, 0.102854f, 0.102954f, 0.035102f, -0.056172f, -0.110235f, -0.090967f, -0.011393f, 0.075561f, 0.112715f, 0.075676f, -0.011529f, -0.091380f, -0.110514f, -0.056150f, 0.035172f, 0.102964f}, + }, + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.078507f, 0.345720f, 0.419014f, -0.090001f, -0.886763f, -1.112419f, -0.325594f, 0.822011f, 1.242202f, 0.620411f, -0.375701f, -0.958800f, -0.880887f, -0.320707f, 0.396742f, 0.867127f, 0.763383f, 0.133532f, -0.583480f, -0.912185f, -0.661302f, 0.016105f, 0.714207f, 0.974336f, 0.593807f, -0.186547f, -0.845249f, -0.953982f, -0.445024f, 0.358573f, 0.927923f, 0.870609f, 0.232731f, -0.519358f, -0.861148f, -0.599683f, 0.021863f, 0.538672f, 0.607073f, 0.229387f, -0.287399f, -0.575341f, -0.447050f, 0.001938f, 0.449531f, 0.554146f, 0.224325f, -0.281168f, + -0.564275f, -0.418027f, 0.036622f, 0.472044f, 0.578372f, 0.262453f, -0.267590f, -0.630790f, -0.563116f, -0.115202f, 0.410465f, 0.678620f, 0.516618f, 0.015341f, -0.505177f, -0.696887f, -0.433783f, 0.103311f, 0.565666f, 0.662825f, 0.335157f, -0.202959f, -0.596654f, -0.599760f, -0.238688f, 0.240150f, 0.550467f, 0.523064f, 0.188581f, -0.236223f, -0.487678f, -0.435603f, -0.143322f, 0.213448f, 0.444709f, 0.412420f, 0.110317f, -0.287293f, -0.516175f, -0.413270f, -0.035404f, 0.381937f, 0.570908f, 0.396330f, -0.044649f, -0.471027f, -0.602814f, -0.345663f, 0.148526f, 0.563279f, 0.606029f, 0.221870f, -0.332846f, -0.668739f, -0.558611f, -0.082992f, 0.459154f, 0.737843f, 0.559205f, -0.007264f, -0.608363f, -0.804526f, -0.415856f, 0.282748f, 0.750248f, 0.624001f, 0.022441f, -0.567542f, -0.700840f, -0.312376f, 0.272850f, 0.612965f, 0.475340f, -0.005432f, -0.442372f, -0.507417f, -0.189350f, 0.228122f, 0.429891f, 0.310743f, 0.000527f, -0.281747f, -0.381629f, -0.270808f, -0.023022f, 0.239144f, 0.388562f, 0.339103f, 0.101304f, -0.200864f, -0.398655f, -0.382230f, -0.151725f, 0.186980f, 0.446425f, 0.436823f, + 0.117420f, -0.315067f, -0.547592f, -0.399950f, 0.034065f, 0.459939f, 0.581115f, 0.293973f, -0.221988f, -0.603141f, -0.563489f, -0.119548f, 0.419367f, 0.678692f, 0.476034f, -0.059565f, -0.568595f, -0.700166f, -0.359537f, 0.221331f, 0.649202f, 0.641339f, 0.209017f, -0.357720f, -0.684164f, -0.558187f, -0.067778f, 0.461505f, 0.680823f, 0.443499f, -0.096523f, -0.579844f, -0.679605f, -0.322890f, 0.260250f, 0.687010f, 0.667356f, 0.197681f, -0.419959f, -0.769604f, -0.610433f, -0.049359f, 0.534803f, 0.753130f, 0.469899f, -0.105833f, -0.570847f, -0.623745f, -0.274389f, 0.200009f, 0.483611f, 0.428788f, 0.116727f, -0.221116f, -0.363828f, -0.251467f, -0.007878f, 0.183976f, 0.222880f, 0.122812f, -0.036656f, -0.160383f, -0.175959f, -0.075276f, 0.073669f, 0.172365f, 0.158052f, 0.040219f, -0.105590f, -0.182109f, -0.136463f, -0.000640f, 0.132975f, 0.177770f, 0.106182f, -0.035698f, -0.154112f, -0.168449f, -0.070286f, 0.071884f, 0.164807f, 0.149949f, 0.035346f, -0.105920f, -0.177740f, -0.130173f, 0.002044f, 0.129739f, 0.172320f, 0.102166f, -0.039082f, -0.157302f, -0.168874f, -0.069152f, 0.068659f, 0.160064f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, -0.078507f, -0.345720f, -0.419014f, 0.090001f, 0.886763f, 1.112419f, 0.325594f, -0.822011f, -1.242202f, -0.620411f, 0.375701f, 0.958800f, 0.880887f, 0.320707f, -0.396742f, -0.867127f, -0.763383f, -0.133532f, 0.583480f, 0.912185f, 0.661302f, -0.016105f, -0.714207f, -0.974336f, -0.593807f, 0.186547f, 0.845249f, 0.953982f, 0.445024f, -0.358573f, -0.927923f, -0.870609f, -0.232731f, 0.519358f, 0.861148f, 0.599683f, -0.021863f, -0.538672f, -0.607073f, -0.229387f, 0.287399f, 0.575341f, 0.447050f, -0.001938f, -0.449531f, -0.554146f, -0.224325f, 0.281168f, + 0.564275f, 0.418027f, -0.036622f, -0.472044f, -0.578372f, -0.262453f, 0.267590f, 0.630790f, 0.563116f, 0.115202f, -0.410465f, -0.678620f, -0.516618f, -0.015341f, 0.505177f, 0.696887f, 0.433783f, -0.103311f, -0.565666f, -0.662825f, -0.335157f, 0.202959f, 0.596654f, 0.599760f, 0.238688f, -0.240150f, -0.550467f, -0.523064f, -0.188581f, 0.236223f, 0.487678f, 0.435603f, 0.143322f, -0.213448f, -0.444709f, -0.412420f, -0.110317f, 0.287293f, 0.516175f, 0.413270f, 0.035404f, -0.381937f, -0.570908f, -0.396330f, 0.044649f, 0.471027f, 0.602814f, 0.345663f, -0.148526f, -0.563279f, -0.606029f, -0.221870f, 0.332846f, 0.668739f, 0.558611f, 0.082992f, -0.459154f, -0.737843f, -0.559205f, 0.007264f, 0.608363f, 0.804526f, 0.415856f, -0.282748f, -0.750248f, -0.624001f, -0.022441f, 0.567542f, 0.700840f, 0.312376f, -0.272850f, -0.612965f, -0.475340f, 0.005432f, 0.442372f, 0.507417f, 0.189350f, -0.228122f, -0.429891f, -0.310743f, -0.000527f, 0.281747f, 0.381629f, 0.270808f, 0.023022f, -0.239144f, -0.388562f, -0.339103f, -0.101304f, 0.200864f, 0.398655f, 0.382230f, 0.151725f, -0.186980f, -0.446425f, -0.436823f, + -0.117420f, 0.315067f, 0.547592f, 0.399950f, -0.034065f, -0.459939f, -0.581115f, -0.293973f, 0.221988f, 0.603141f, 0.563489f, 0.119548f, -0.419367f, -0.678692f, -0.476034f, 0.059565f, 0.568595f, 0.700166f, 0.359537f, -0.221331f, -0.649202f, -0.641339f, -0.209017f, 0.357720f, 0.684164f, 0.558187f, 0.067778f, -0.461505f, -0.680823f, -0.443499f, 0.096523f, 0.579844f, 0.679605f, 0.322890f, -0.260250f, -0.687010f, -0.667356f, -0.197681f, 0.419959f, 0.769604f, 0.610433f, 0.049359f, -0.534803f, -0.753130f, -0.469899f, 0.105833f, 0.570847f, 0.623745f, 0.274389f, -0.200009f, -0.483611f, -0.428788f, -0.116727f, 0.221116f, 0.363828f, 0.251467f, 0.007878f, -0.183976f, -0.222880f, -0.122812f, 0.036656f, 0.160383f, 0.175959f, 0.075276f, -0.073669f, -0.172365f, -0.158052f, -0.040219f, 0.105590f, 0.182109f, 0.136463f, 0.000640f, -0.132975f, -0.177770f, -0.106182f, 0.035698f, 0.154112f, 0.168449f, 0.070286f, -0.071884f, -0.164807f, -0.149949f, -0.035346f, 0.105920f, 0.177740f, 0.130173f, -0.002044f, -0.129739f, -0.172320f, -0.102166f, 0.039082f, 0.157302f, 0.168874f, 0.069152f, -0.068659f, -0.160064f}, + }, + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.056307f, 0.017289f, -0.053811f, -0.084185f, -0.008613f, 0.092002f, 0.062033f, -0.099580f, -0.214305f, -0.155629f, 0.021739f, 0.206138f, 0.334890f, 0.334066f, 0.118602f, -0.245240f, -0.496706f, -0.418817f, -0.067469f, 0.298129f, 0.449549f, 0.319613f, 0.004971f, -0.284816f, -0.356471f, -0.193076f, 0.042675f, 0.186601f, 0.200892f, 0.126378f, 0.007231f, -0.102915f, -0.147677f, -0.125239f, -0.078000f, -0.010747f, 0.101856f, 0.212645f, 0.203751f, 0.034280f, -0.182624f, -0.287202f, -0.209052f, 0.010500f, 0.257761f, 0.384764f, 0.283593f, -0.015468f, + -0.333452f, -0.458472f, -0.289704f, 0.090437f, 0.447438f, 0.530318f, 0.254630f, -0.210776f, -0.551038f, -0.526344f, -0.136623f, 0.367043f, 0.628934f, 0.435243f, -0.094771f, -0.563169f, -0.599356f, -0.164855f, 0.412008f, 0.690156f, 0.447470f, -0.147777f, -0.645398f, -0.645396f, -0.123062f, 0.523026f, 0.772804f, 0.407638f, -0.297887f, -0.786113f, -0.664916f, -0.025973f, 0.633136f, 0.813435f, 0.401399f, -0.271290f, -0.709653f, -0.625527f, -0.117336f, 0.436247f, 0.656506f, 0.414931f, -0.100258f, -0.524759f, -0.565763f, -0.199279f, 0.311551f, 0.600325f, 0.464962f, 0.018217f, -0.405694f, -0.513509f, -0.262505f, 0.142648f, 0.424981f, 0.419716f, 0.154101f, -0.188441f, -0.385157f, -0.316166f, -0.043001f, 0.242142f, 0.354602f, 0.229791f, -0.052508f, -0.316498f, -0.386687f, -0.204250f, 0.115510f, 0.358371f, 0.369270f, 0.152433f, -0.152826f, -0.363564f, -0.346718f, -0.099628f, 0.218683f, 0.373221f, 0.234852f, -0.096557f, -0.362611f, -0.358813f, -0.094719f, 0.232165f, 0.400346f, 0.313370f, 0.037006f, -0.259275f, -0.398381f, -0.291816f, 0.000873f, 0.298687f, 0.414037f, 0.276027f, -0.028056f, -0.310213f, + -0.393575f, -0.221574f, 0.096431f, 0.349475f, 0.369718f, 0.147825f, -0.168488f, -0.376867f, -0.344875f, -0.090806f, 0.219243f, 0.372901f, 0.262680f, -0.027768f, -0.285267f, -0.331017f, -0.147856f, 0.125124f, 0.303138f, 0.274325f, 0.058929f, -0.203615f, -0.333339f, -0.228658f, 0.049331f, 0.309499f, 0.369146f, 0.183971f, -0.129645f, -0.376515f, -0.401416f, -0.181189f, 0.156776f, 0.408835f, 0.420846f, 0.182202f, -0.167209f, -0.415554f, -0.405188f, -0.139177f, 0.211525f, 0.420888f, 0.359762f, 0.076181f, -0.241102f, -0.385764f, -0.271635f, 0.007857f, 0.253310f, 0.309091f, 0.162282f, -0.071694f, -0.235856f, -0.228506f, -0.067485f, 0.122230f, 0.205738f, 0.140781f, -0.007607f, -0.133583f, -0.161259f, -0.080043f, 0.052690f, 0.146336f, 0.139675f, 0.041588f, -0.082472f, -0.154196f, -0.125716f, -0.012280f, 0.109378f, 0.155270f, 0.098016f, -0.021211f, -0.127542f, -0.152845f, -0.074559f, 0.056635f, 0.145534f, 0.132074f, 0.034821f, -0.081026f, -0.148681f, -0.122026f, -0.007801f, 0.114342f, 0.151241f, 0.085606f, -0.025537f, -0.120195f, -0.151097f, -0.079986f, 0.063410f, 0.152713f, 0.099450f, -0.007121f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.056307f, 0.017289f, -0.053811f, -0.084185f, -0.008613f, 0.092002f, 0.062033f, -0.099580f, -0.214305f, -0.155629f, 0.021739f, 0.206138f, 0.334890f, 0.334066f, 0.118602f, -0.245240f, -0.496706f, -0.418817f, -0.067469f, 0.298129f, 0.449549f, 0.319613f, 0.004971f, -0.284816f, -0.356471f, -0.193076f, 0.042675f, 0.186601f, 0.200892f, 0.126378f, 0.007231f, -0.102915f, -0.147677f, -0.125239f, -0.078000f, -0.010747f, 0.101856f, 0.212645f, 0.203751f, 0.034280f, -0.182624f, -0.287202f, -0.209052f, 0.010500f, 0.257761f, 0.384764f, 0.283593f, -0.015468f, + -0.333452f, -0.458472f, -0.289704f, 0.090437f, 0.447438f, 0.530318f, 0.254630f, -0.210776f, -0.551038f, -0.526344f, -0.136623f, 0.367043f, 0.628934f, 0.435243f, -0.094771f, -0.563169f, -0.599356f, -0.164855f, 0.412008f, 0.690156f, 0.447470f, -0.147777f, -0.645398f, -0.645396f, -0.123062f, 0.523026f, 0.772804f, 0.407638f, -0.297887f, -0.786113f, -0.664916f, -0.025973f, 0.633136f, 0.813435f, 0.401399f, -0.271290f, -0.709653f, -0.625527f, -0.117336f, 0.436247f, 0.656506f, 0.414931f, -0.100258f, -0.524759f, -0.565763f, -0.199279f, 0.311551f, 0.600325f, 0.464962f, 0.018217f, -0.405694f, -0.513509f, -0.262505f, 0.142648f, 0.424981f, 0.419716f, 0.154101f, -0.188441f, -0.385157f, -0.316166f, -0.043001f, 0.242142f, 0.354602f, 0.229791f, -0.052508f, -0.316498f, -0.386687f, -0.204250f, 0.115510f, 0.358371f, 0.369270f, 0.152433f, -0.152826f, -0.363564f, -0.346718f, -0.099628f, 0.218683f, 0.373221f, 0.234852f, -0.096557f, -0.362611f, -0.358813f, -0.094719f, 0.232165f, 0.400346f, 0.313370f, 0.037006f, -0.259275f, -0.398381f, -0.291816f, 0.000873f, 0.298687f, 0.414037f, 0.276027f, -0.028056f, -0.310213f, + -0.393575f, -0.221574f, 0.096431f, 0.349475f, 0.369718f, 0.147825f, -0.168488f, -0.376867f, -0.344875f, -0.090806f, 0.219243f, 0.372901f, 0.262680f, -0.027768f, -0.285267f, -0.331017f, -0.147856f, 0.125124f, 0.303138f, 0.274325f, 0.058929f, -0.203615f, -0.333339f, -0.228658f, 0.049331f, 0.309499f, 0.369146f, 0.183971f, -0.129645f, -0.376515f, -0.401416f, -0.181189f, 0.156776f, 0.408835f, 0.420846f, 0.182202f, -0.167209f, -0.415554f, -0.405188f, -0.139177f, 0.211525f, 0.420888f, 0.359762f, 0.076181f, -0.241102f, -0.385764f, -0.271635f, 0.007857f, 0.253310f, 0.309091f, 0.162282f, -0.071694f, -0.235856f, -0.228506f, -0.067485f, 0.122230f, 0.205738f, 0.140781f, -0.007607f, -0.133583f, -0.161259f, -0.080043f, 0.052690f, 0.146336f, 0.139675f, 0.041588f, -0.082472f, -0.154196f, -0.125716f, -0.012280f, 0.109378f, 0.155270f, 0.098016f, -0.021211f, -0.127542f, -0.152845f, -0.074559f, 0.056635f, 0.145534f, 0.132074f, 0.034821f, -0.081026f, -0.148681f, -0.122026f, -0.007801f, 0.114342f, 0.151241f, 0.085606f, -0.025537f, -0.120195f, -0.151097f, -0.079986f, 0.063410f, 0.152713f, 0.099450f, -0.007121f}, + }, + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.001257f, -0.010350f, -0.038127f, -0.020262f, 0.101537f, 0.231728f, 0.187449f, -0.048267f, -0.267921f, -0.280658f, -0.105940f, 0.108246f, 0.245205f, 0.245493f, 0.087874f, -0.160317f, -0.331689f, -0.287068f, -0.053261f, 0.198700f, 0.300661f, 0.205837f, -0.000868f, -0.179542f, -0.234477f, -0.160497f, -0.010459f, 0.152475f, 0.257183f, 0.223892f, 0.023982f, -0.249718f, -0.410542f, -0.309998f, 0.034923f, 0.422275f, 0.578727f, 0.351839f, -0.148528f, -0.596291f, -0.679309f, -0.330698f, 0.227772f, 0.644195f, 0.662235f, 0.273844f, -0.276815f, -0.644565f, + -0.605496f, -0.198898f, 0.310888f, 0.610724f, 0.526039f, 0.118137f, -0.351556f, -0.582341f, -0.435475f, -0.029220f, 0.356876f, 0.488443f, 0.322304f, -0.001429f, -0.276700f, -0.358345f, -0.230588f, 0.002926f, 0.192389f, 0.234171f, 0.127758f, -0.035102f, -0.139776f, -0.129340f, -0.037364f, 0.051713f, 0.076924f, 0.043600f, 0.004193f, 0.002369f, 0.029736f, 0.034107f, -0.019871f, -0.095210f, -0.107265f, -0.020138f, 0.097616f, 0.137086f, 0.060832f, -0.068516f, -0.157212f, -0.149396f, -0.042409f, 0.115326f, 0.226538f, 0.191254f, -0.001461f, -0.229766f, -0.318442f, -0.183876f, 0.089573f, 0.308853f, 0.315079f, 0.100840f, -0.183333f, -0.341558f, -0.277353f, -0.047925f, 0.206128f, 0.359174f, 0.332410f, 0.099042f, -0.256903f, -0.500277f, -0.384293f, 0.079566f, 0.535639f, 0.570851f, 0.116601f, -0.470852f, -0.731014f, -0.471950f, 0.128375f, 0.677066f, 0.800113f, 0.366226f, -0.367983f, -0.859137f, -0.685369f, 0.043750f, 0.726042f, 0.794194f, 0.225646f, -0.469894f, -0.732371f, -0.408721f, 0.188301f, 0.578924f, 0.487928f, 0.028220f, -0.414147f, -0.499999f, -0.198138f, 0.228352f, 0.460795f, 0.353587f, + 0.000305f, -0.347575f, -0.443945f, -0.220174f, 0.155163f, 0.406336f, 0.365800f, 0.080413f, -0.250538f, -0.411045f, -0.292465f, 0.030280f, 0.329826f, 0.389364f, 0.175045f, -0.149197f, -0.363855f, -0.341250f, -0.100000f, 0.215339f, 0.405586f, 0.336160f, 0.040934f, -0.289118f, -0.438244f, -0.310112f, 0.017972f, 0.345676f, 0.466021f, 0.292635f, -0.073629f, -0.397911f, -0.465924f, -0.232882f, 0.146076f, 0.424699f, 0.428977f, 0.162813f, -0.200832f, -0.428287f, -0.372716f, -0.075313f, 0.257473f, 0.400316f, 0.270810f, -0.022305f, -0.272450f, -0.323881f, -0.167166f, 0.071622f, 0.229241f, 0.218174f, 0.073328f, -0.091825f, -0.171761f, -0.132295f, -0.019156f, 0.083345f, 0.113355f, 0.067401f, -0.012515f, -0.076177f, -0.089938f, -0.046570f, 0.028220f, 0.084743f, 0.083601f, 0.026813f, -0.046361f, -0.089183f, -0.074551f, -0.010206f, 0.061913f, 0.091969f, 0.060416f, -0.009085f, -0.071965f, -0.091638f, -0.055653f, 0.016526f, 0.079074f, 0.089150f, 0.040235f, -0.034127f, -0.086136f, -0.082884f, -0.025007f, 0.050277f, 0.091643f, 0.071803f, 0.006030f, -0.063257f, -0.092957f, -0.060736f, 0.016159f, 0.081453f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.001257f, -0.010350f, -0.038127f, -0.020262f, 0.101537f, 0.231728f, 0.187449f, -0.048267f, -0.267921f, -0.280658f, -0.105940f, 0.108246f, 0.245205f, 0.245493f, 0.087874f, -0.160317f, -0.331689f, -0.287068f, -0.053261f, 0.198700f, 0.300661f, 0.205837f, -0.000868f, -0.179542f, -0.234477f, -0.160497f, -0.010459f, 0.152475f, 0.257183f, 0.223892f, 0.023982f, -0.249718f, -0.410542f, -0.309998f, 0.034923f, 0.422275f, 0.578727f, 0.351839f, -0.148528f, -0.596291f, -0.679309f, -0.330698f, 0.227772f, 0.644195f, 0.662235f, 0.273844f, -0.276815f, -0.644565f, + -0.605496f, -0.198898f, 0.310888f, 0.610724f, 0.526039f, 0.118137f, -0.351556f, -0.582341f, -0.435475f, -0.029220f, 0.356876f, 0.488443f, 0.322304f, -0.001429f, -0.276700f, -0.358345f, -0.230588f, 0.002926f, 0.192389f, 0.234171f, 0.127758f, -0.035102f, -0.139776f, -0.129340f, -0.037364f, 0.051713f, 0.076924f, 0.043600f, 0.004193f, 0.002369f, 0.029736f, 0.034107f, -0.019871f, -0.095210f, -0.107265f, -0.020138f, 0.097616f, 0.137086f, 0.060832f, -0.068516f, -0.157212f, -0.149396f, -0.042409f, 0.115326f, 0.226538f, 0.191254f, -0.001461f, -0.229766f, -0.318442f, -0.183876f, 0.089573f, 0.308853f, 0.315079f, 0.100840f, -0.183333f, -0.341558f, -0.277353f, -0.047925f, 0.206128f, 0.359174f, 0.332410f, 0.099042f, -0.256903f, -0.500277f, -0.384293f, 0.079566f, 0.535639f, 0.570851f, 0.116601f, -0.470852f, -0.731014f, -0.471950f, 0.128375f, 0.677066f, 0.800113f, 0.366226f, -0.367983f, -0.859137f, -0.685369f, 0.043750f, 0.726042f, 0.794194f, 0.225646f, -0.469894f, -0.732371f, -0.408721f, 0.188301f, 0.578924f, 0.487928f, 0.028220f, -0.414147f, -0.499999f, -0.198138f, 0.228352f, 0.460795f, 0.353587f, + 0.000305f, -0.347575f, -0.443945f, -0.220174f, 0.155163f, 0.406336f, 0.365800f, 0.080413f, -0.250538f, -0.411045f, -0.292465f, 0.030280f, 0.329826f, 0.389364f, 0.175045f, -0.149197f, -0.363855f, -0.341250f, -0.100000f, 0.215339f, 0.405586f, 0.336160f, 0.040934f, -0.289118f, -0.438244f, -0.310112f, 0.017972f, 0.345676f, 0.466021f, 0.292635f, -0.073629f, -0.397911f, -0.465924f, -0.232882f, 0.146076f, 0.424699f, 0.428977f, 0.162813f, -0.200832f, -0.428287f, -0.372716f, -0.075313f, 0.257473f, 0.400316f, 0.270810f, -0.022305f, -0.272450f, -0.323881f, -0.167166f, 0.071622f, 0.229241f, 0.218174f, 0.073328f, -0.091825f, -0.171761f, -0.132295f, -0.019156f, 0.083345f, 0.113355f, 0.067401f, -0.012515f, -0.076177f, -0.089938f, -0.046570f, 0.028220f, 0.084743f, 0.083601f, 0.026813f, -0.046361f, -0.089183f, -0.074551f, -0.010206f, 0.061913f, 0.091969f, 0.060416f, -0.009085f, -0.071965f, -0.091638f, -0.055653f, 0.016526f, 0.079074f, 0.089150f, 0.040235f, -0.034127f, -0.086136f, -0.082884f, -0.025007f, 0.050277f, 0.091643f, 0.071803f, 0.006030f, -0.063257f, -0.092957f, -0.060736f, 0.016159f, 0.081453f}, + }, + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, -0.001001f, 0.008051f, -0.008894f, -0.059845f, -0.064833f, 0.067480f, 0.260624f, 0.282055f, 0.030622f, -0.289773f, -0.393012f, -0.215424f, 0.091978f, 0.349428f, 0.414274f, 0.202742f, -0.190698f, -0.479609f, -0.435928f, -0.116713f, 0.227845f, 0.395888f, 0.329501f, 0.083535f, -0.202329f, -0.362505f, -0.313180f, -0.091955f, 0.192348f, 0.392777f, 0.357073f, 0.051868f, -0.337931f, -0.528754f, -0.382114f, 0.000154f, 0.378441f, 0.521532f, 0.327372f, -0.090990f, -0.452110f, -0.512906f, -0.247750f, 0.164487f, 0.475569f, 0.497658f, 0.207830f, -0.209952f, + -0.475852f, -0.423848f, -0.110318f, 0.256492f, 0.457322f, 0.377940f, 0.076008f, -0.250647f, -0.405985f, -0.323890f, -0.071141f, 0.219063f, 0.396551f, 0.353665f, 0.108123f, -0.188027f, -0.356965f, -0.313876f, -0.100766f, 0.147658f, 0.279680f, 0.230608f, 0.070327f, -0.076613f, -0.145200f, -0.141438f, -0.084294f, 0.006600f, 0.089606f, 0.121031f, 0.089203f, 0.008555f, -0.088739f, -0.139597f, -0.082851f, 0.058698f, 0.171068f, 0.158046f, 0.030501f, -0.121105f, -0.201430f, -0.156471f, -0.006449f, 0.146377f, 0.189759f, 0.104012f, -0.031827f, -0.130292f, -0.154818f, -0.103683f, 0.005623f, 0.123392f, 0.180189f, 0.133102f, -0.006621f, -0.176150f, -0.272956f, -0.199324f, 0.045705f, 0.313150f, 0.391470f, 0.187409f, -0.172914f, -0.428776f, -0.385552f, -0.065542f, 0.306202f, 0.466166f, 0.303144f, -0.063414f, -0.370900f, -0.400805f, -0.133949f, 0.232104f, 0.419294f, 0.275344f, -0.094929f, -0.393982f, -0.372024f, -0.046540f, 0.313599f, 0.429476f, 0.235888f, -0.107437f, -0.364874f, -0.373121f, -0.124677f, 0.215898f, 0.403336f, 0.295474f, -0.026340f, -0.326097f, -0.392969f, -0.173120f, 0.197682f, 0.454837f, + 0.377995f, -0.003641f, -0.393177f, -0.476595f, -0.201074f, 0.203259f, 0.437709f, 0.352071f, 0.023386f, -0.303300f, -0.384148f, -0.170314f, 0.146929f, 0.311591f, 0.224057f, -0.014367f, -0.228551f, -0.295861f, -0.185965f, 0.039972f, 0.246601f, 0.294511f, 0.144588f, -0.102280f, -0.281071f, -0.281572f, -0.107973f, 0.139059f, 0.314581f, 0.297943f, 0.076018f, -0.215622f, -0.369508f, -0.267601f, 0.020713f, 0.297068f, 0.381580f, 0.223305f, -0.078408f, -0.331365f, -0.367357f, -0.162443f, 0.138004f, 0.327883f, 0.292464f, 0.077163f, -0.163428f, -0.277651f, -0.210571f, -0.026571f, 0.146260f, 0.204799f, 0.129837f, -0.013835f, -0.125722f, -0.137928f, -0.060312f, 0.036888f, 0.087544f, 0.074450f, 0.020217f, -0.040746f, -0.074894f, -0.060138f, -0.004458f, 0.053807f, 0.075366f, 0.047980f, -0.010478f, -0.063748f, -0.075518f, -0.035369f, 0.028186f, 0.070246f, 0.066049f, 0.022093f, -0.036398f, -0.076800f, -0.071445f, -0.019410f, 0.045541f, 0.079838f, 0.062510f, 0.004823f, -0.058154f, -0.084338f, -0.053017f, 0.013779f, 0.068493f, 0.078241f, 0.040740f, -0.024762f, -0.080037f, -0.078694f, -0.012665f, 0.057449f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.001001f, -0.008051f, 0.008894f, 0.059845f, 0.064833f, -0.067480f, -0.260624f, -0.282055f, -0.030622f, 0.289773f, 0.393012f, 0.215424f, -0.091978f, -0.349428f, -0.414274f, -0.202742f, 0.190698f, 0.479609f, 0.435928f, 0.116713f, -0.227845f, -0.395888f, -0.329501f, -0.083535f, 0.202329f, 0.362505f, 0.313180f, 0.091955f, -0.192348f, -0.392777f, -0.357073f, -0.051868f, 0.337931f, 0.528754f, 0.382114f, -0.000154f, -0.378441f, -0.521532f, -0.327372f, 0.090990f, 0.452110f, 0.512906f, 0.247750f, -0.164487f, -0.475569f, -0.497658f, -0.207830f, 0.209952f, + 0.475852f, 0.423848f, 0.110318f, -0.256492f, -0.457322f, -0.377940f, -0.076008f, 0.250647f, 0.405985f, 0.323890f, 0.071141f, -0.219063f, -0.396551f, -0.353665f, -0.108123f, 0.188027f, 0.356965f, 0.313876f, 0.100766f, -0.147658f, -0.279680f, -0.230608f, -0.070327f, 0.076613f, 0.145200f, 0.141438f, 0.084294f, -0.006600f, -0.089606f, -0.121031f, -0.089203f, -0.008555f, 0.088739f, 0.139597f, 0.082851f, -0.058698f, -0.171068f, -0.158046f, -0.030501f, 0.121105f, 0.201430f, 0.156471f, 0.006449f, -0.146377f, -0.189759f, -0.104012f, 0.031827f, 0.130292f, 0.154818f, 0.103683f, -0.005623f, -0.123392f, -0.180189f, -0.133102f, 0.006621f, 0.176150f, 0.272956f, 0.199324f, -0.045705f, -0.313150f, -0.391470f, -0.187409f, 0.172914f, 0.428776f, 0.385552f, 0.065542f, -0.306202f, -0.466166f, -0.303144f, 0.063414f, 0.370900f, 0.400805f, 0.133949f, -0.232104f, -0.419294f, -0.275344f, 0.094929f, 0.393982f, 0.372024f, 0.046540f, -0.313599f, -0.429476f, -0.235888f, 0.107437f, 0.364874f, 0.373121f, 0.124677f, -0.215898f, -0.403336f, -0.295474f, 0.026340f, 0.326097f, 0.392969f, 0.173120f, -0.197682f, -0.454837f, + -0.377995f, 0.003641f, 0.393177f, 0.476595f, 0.201074f, -0.203259f, -0.437709f, -0.352071f, -0.023386f, 0.303300f, 0.384148f, 0.170314f, -0.146929f, -0.311591f, -0.224057f, 0.014367f, 0.228551f, 0.295861f, 0.185965f, -0.039972f, -0.246601f, -0.294511f, -0.144588f, 0.102280f, 0.281071f, 0.281572f, 0.107973f, -0.139059f, -0.314581f, -0.297943f, -0.076018f, 0.215622f, 0.369508f, 0.267601f, -0.020713f, -0.297068f, -0.381580f, -0.223305f, 0.078408f, 0.331365f, 0.367357f, 0.162443f, -0.138004f, -0.327883f, -0.292464f, -0.077163f, 0.163428f, 0.277651f, 0.210571f, 0.026571f, -0.146260f, -0.204799f, -0.129837f, 0.013835f, 0.125722f, 0.137928f, 0.060312f, -0.036888f, -0.087544f, -0.074450f, -0.020217f, 0.040746f, 0.074894f, 0.060138f, 0.004458f, -0.053807f, -0.075366f, -0.047980f, 0.010478f, 0.063748f, 0.075518f, 0.035369f, -0.028186f, -0.070246f, -0.066049f, -0.022093f, 0.036398f, 0.076800f, 0.071445f, 0.019410f, -0.045541f, -0.079838f, -0.062510f, -0.004823f, 0.058154f, 0.084338f, 0.053017f, -0.013779f, -0.068493f, -0.078241f, -0.040740f, 0.024762f, 0.080037f, 0.078694f, 0.012665f, -0.057449f}, + }, + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, -0.022291f, -0.014662f, -0.012124f, -0.015360f, -0.005069f, 0.023626f, 0.033685f, -0.013080f, -0.095957f, -0.151902f, -0.133705f, -0.011171f, 0.231125f, 0.502826f, 0.564668f, 0.233582f, -0.343747f, -0.749143f, -0.676401f, -0.192825f, 0.365754f, 0.659239f, 0.531925f, 0.095807f, -0.330097f, -0.466435f, -0.302669f, -0.039758f, 0.153288f, 0.238308f, 0.221616f, 0.110339f, -0.044708f, -0.168432f, -0.228245f, -0.214866f, -0.096627f, 0.114945f, 0.289399f, 0.273163f, 0.061065f, -0.191693f, -0.312882f, -0.225856f, 0.027185f, 0.297079f, 0.394209f, 0.228330f, + -0.098776f, -0.363857f, -0.387898f, -0.150826f, 0.198491f, 0.425258f, 0.361797f, 0.041663f, -0.310638f, -0.442134f, -0.252932f, 0.129701f, 0.424975f, 0.395130f, 0.049698f, -0.331639f, -0.425838f, -0.150534f, 0.263011f, 0.463918f, 0.267118f, -0.185714f, -0.513928f, -0.404449f, 0.090847f, 0.559528f, 0.578392f, 0.095438f, -0.513054f, -0.749042f, -0.392834f, 0.309074f, 0.808347f, 0.678262f, -0.014865f, -0.729952f, -0.890830f, -0.369988f, 0.420038f, 0.882423f, 0.696241f, 0.018201f, -0.663044f, -0.869517f, -0.453777f, 0.292949f, 0.832756f, 0.769409f, 0.151109f, -0.562146f, -0.850605f, -0.524463f, 0.151903f, 0.680056f, 0.706150f, 0.265856f, -0.282664f, -0.564178f, -0.460617f, -0.130960f, 0.184829f, 0.343935f, 0.318571f, 0.139239f, -0.111205f, -0.290795f, -0.278292f, -0.085937f, 0.143946f, 0.263584f, 0.216822f, 0.036327f, -0.184660f, -0.306622f, -0.212043f, 0.070925f, 0.336622f, 0.357187f, 0.094159f, -0.253239f, -0.413839f, -0.264576f, 0.083872f, 0.385098f, 0.438501f, 0.215236f, -0.139292f, -0.403663f, -0.415487f, -0.171458f, 0.171937f, 0.404501f, 0.395496f, 0.160742f, -0.154930f, -0.353111f, + -0.300285f, -0.038023f, 0.228710f, 0.298488f, 0.142858f, -0.094819f, -0.243022f, -0.222931f, -0.068139f, 0.114546f, 0.206705f, 0.152791f, 0.000743f, -0.137680f, -0.172234f, -0.089080f, 0.052423f, 0.161104f, 0.168631f, 0.068489f, -0.084943f, -0.206674f, -0.216894f, -0.083951f, 0.133818f, 0.300346f, 0.291634f, 0.091635f, -0.191559f, -0.389955f, -0.370116f, -0.119249f, 0.224709f, 0.448158f, 0.406834f, 0.123402f, -0.232091f, -0.445109f, -0.380664f, -0.074600f, 0.275172f, 0.440619f, 0.323673f, 0.013555f, -0.284836f, -0.382612f, -0.225333f, 0.067476f, 0.288395f, 0.299500f, 0.121110f, -0.111417f, -0.249793f, -0.214134f, -0.037569f, 0.148586f, 0.211717f, 0.124528f, -0.029762f, -0.143411f, -0.154809f, -0.064326f, 0.069792f, 0.156587f, 0.135111f, 0.023866f, -0.099482f, -0.157585f, -0.114707f, 0.005319f, 0.124141f, 0.158408f, 0.086146f, -0.040055f, -0.138817f, -0.148378f, -0.057697f, 0.075496f, 0.154132f, 0.122573f, 0.012219f, -0.099851f, -0.149713f, -0.105780f, 0.014483f, 0.129920f, 0.150647f, 0.067713f, -0.048867f, -0.131137f, -0.141624f, -0.057766f, 0.083886f, 0.160201f, 0.089919f, -0.028866f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.022291f, 0.014662f, 0.012124f, 0.015360f, 0.005069f, -0.023626f, -0.033685f, 0.013080f, 0.095957f, 0.151902f, 0.133705f, 0.011171f, -0.231125f, -0.502826f, -0.564668f, -0.233582f, 0.343747f, 0.749143f, 0.676401f, 0.192825f, -0.365754f, -0.659239f, -0.531925f, -0.095807f, 0.330097f, 0.466435f, 0.302669f, 0.039758f, -0.153288f, -0.238308f, -0.221616f, -0.110339f, 0.044708f, 0.168432f, 0.228245f, 0.214866f, 0.096627f, -0.114945f, -0.289399f, -0.273163f, -0.061065f, 0.191693f, 0.312882f, 0.225856f, -0.027185f, -0.297079f, -0.394209f, -0.228330f, + 0.098776f, 0.363857f, 0.387898f, 0.150826f, -0.198491f, -0.425258f, -0.361797f, -0.041663f, 0.310638f, 0.442134f, 0.252932f, -0.129701f, -0.424975f, -0.395130f, -0.049698f, 0.331639f, 0.425838f, 0.150534f, -0.263011f, -0.463918f, -0.267118f, 0.185714f, 0.513928f, 0.404449f, -0.090847f, -0.559528f, -0.578392f, -0.095438f, 0.513054f, 0.749042f, 0.392834f, -0.309074f, -0.808347f, -0.678262f, 0.014865f, 0.729952f, 0.890830f, 0.369988f, -0.420038f, -0.882423f, -0.696241f, -0.018201f, 0.663044f, 0.869517f, 0.453777f, -0.292949f, -0.832756f, -0.769409f, -0.151109f, 0.562146f, 0.850605f, 0.524463f, -0.151903f, -0.680056f, -0.706150f, -0.265856f, 0.282664f, 0.564178f, 0.460617f, 0.130960f, -0.184829f, -0.343935f, -0.318571f, -0.139239f, 0.111205f, 0.290795f, 0.278292f, 0.085937f, -0.143946f, -0.263584f, -0.216822f, -0.036327f, 0.184660f, 0.306622f, 0.212043f, -0.070925f, -0.336622f, -0.357187f, -0.094159f, 0.253239f, 0.413839f, 0.264576f, -0.083872f, -0.385098f, -0.438501f, -0.215236f, 0.139292f, 0.403663f, 0.415487f, 0.171458f, -0.171937f, -0.404501f, -0.395496f, -0.160742f, 0.154930f, 0.353111f, + 0.300285f, 0.038023f, -0.228710f, -0.298488f, -0.142858f, 0.094819f, 0.243022f, 0.222931f, 0.068139f, -0.114546f, -0.206705f, -0.152791f, -0.000743f, 0.137680f, 0.172234f, 0.089080f, -0.052423f, -0.161104f, -0.168631f, -0.068489f, 0.084943f, 0.206674f, 0.216894f, 0.083951f, -0.133818f, -0.300346f, -0.291634f, -0.091635f, 0.191559f, 0.389955f, 0.370116f, 0.119249f, -0.224709f, -0.448158f, -0.406834f, -0.123402f, 0.232091f, 0.445109f, 0.380664f, 0.074600f, -0.275172f, -0.440619f, -0.323673f, -0.013555f, 0.284836f, 0.382612f, 0.225333f, -0.067476f, -0.288395f, -0.299500f, -0.121110f, 0.111417f, 0.249793f, 0.214134f, 0.037569f, -0.148586f, -0.211717f, -0.124528f, 0.029762f, 0.143411f, 0.154809f, 0.064326f, -0.069792f, -0.156587f, -0.135111f, -0.023866f, 0.099482f, 0.157585f, 0.114707f, -0.005319f, -0.124141f, -0.158408f, -0.086146f, 0.040055f, 0.138817f, 0.148378f, 0.057697f, -0.075496f, -0.154132f, -0.122573f, -0.012219f, 0.099851f, 0.149713f, 0.105780f, -0.014483f, -0.129920f, -0.150647f, -0.067713f, 0.048867f, 0.131137f, 0.141624f, 0.057766f, -0.083886f, -0.160201f, -0.089919f, 0.028866f}, + }, + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, -0.003189f, 0.015780f, 0.012464f, -0.038201f, -0.075010f, -0.002926f, 0.129707f, 0.108899f, -0.164363f, -0.452126f, -0.410504f, -0.020615f, 0.370118f, 0.443553f, 0.212402f, -0.081670f, -0.232452f, -0.189932f, -0.029436f, 0.123835f, 0.177304f, 0.120463f, -0.001459f, -0.134803f, -0.216302f, -0.176732f, -0.010552f, 0.178278f, 0.256196f, 0.182059f, 0.024206f, -0.114848f, -0.158810f, -0.086016f, 0.044617f, 0.117327f, 0.065336f, -0.051259f, -0.111817f, -0.069611f, 0.015086f, 0.060298f, 0.037804f, -0.024585f, -0.067462f, -0.030851f, 0.086290f, 0.188844f, + 0.157463f, -0.018729f, -0.210321f, -0.263084f, -0.127756f, 0.111674f, 0.293457f, 0.271555f, 0.029254f, -0.266813f, -0.378473f, -0.210471f, 0.098370f, 0.309045f, 0.283898f, 0.063567f, -0.192165f, -0.309300f, -0.202449f, 0.057091f, 0.273940f, 0.275297f, 0.061398f, -0.182852f, -0.243317f, -0.072401f, 0.159342f, 0.223913f, 0.060123f, -0.171415f, -0.254703f, -0.118681f, 0.121199f, 0.276710f, 0.226181f, -0.010740f, -0.281226f, -0.385722f, -0.214159f, 0.147315f, 0.439995f, 0.417371f, 0.068911f, -0.334814f, -0.461447f, -0.208150f, 0.216193f, 0.473006f, 0.354739f, -0.063006f, -0.458119f, -0.493553f, -0.111396f, 0.386841f, 0.597174f, 0.355887f, -0.161558f, -0.596105f, -0.627040f, -0.182517f, 0.431560f, 0.699339f, 0.365851f, -0.267592f, -0.635509f, -0.474320f, -0.001010f, 0.401498f, 0.513114f, 0.323527f, -0.042288f, -0.368471f, -0.445665f, -0.229898f, 0.116970f, 0.367255f, 0.381124f, 0.152681f, -0.197679f, -0.450463f, -0.399927f, -0.031331f, 0.414227f, 0.600534f, 0.362021f, -0.156018f, -0.595235f, -0.639849f, -0.244309f, 0.327624f, 0.684841f, 0.585134f, 0.102556f, -0.434906f, -0.677892f, -0.481934f, + 0.014129f, 0.483575f, 0.618251f, 0.332509f, -0.171597f, -0.545927f, -0.547069f, -0.196533f, 0.258392f, 0.520496f, 0.426566f, 0.045920f, -0.360202f, -0.512877f, -0.312111f, 0.096838f, 0.433615f, 0.474500f, 0.194973f, -0.217117f, -0.487000f, -0.439250f, -0.109879f, 0.291113f, 0.515963f, 0.418802f, 0.043930f, -0.378561f, -0.565107f, -0.379160f, 0.061224f, 0.467198f, 0.578218f, 0.323802f, -0.139196f, -0.519383f, -0.569388f, -0.250943f, 0.231338f, 0.562130f, 0.524023f, 0.142931f, -0.325086f, -0.565414f, -0.425176f, -0.018815f, 0.365354f, 0.478495f, 0.275858f, -0.076817f, -0.336773f, -0.351325f, -0.145266f, 0.119622f, 0.268574f, 0.226547f, 0.049526f, -0.131174f, -0.202972f, -0.137985f, 0.006528f, 0.136051f, 0.173006f, 0.095314f, -0.048136f, -0.161874f, -0.168192f, -0.064261f, 0.078743f, 0.167861f, 0.146301f, 0.026552f, -0.113644f, -0.179167f, -0.125580f, 0.008523f, 0.132950f, 0.168499f, 0.093707f, -0.043550f, -0.153280f, -0.161822f, -0.064163f, 0.073638f, 0.161611f, 0.143109f, 0.029082f, -0.106025f, -0.171234f, -0.123276f, 0.003867f, 0.126660f, 0.166547f, 0.095192f, -0.043964f, -0.154618f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, -0.003189f, 0.015780f, 0.012464f, -0.038201f, -0.075010f, -0.002926f, 0.129707f, 0.108899f, -0.164363f, -0.452126f, -0.410504f, -0.020615f, 0.370118f, 0.443553f, 0.212402f, -0.081670f, -0.232452f, -0.189932f, -0.029436f, 0.123835f, 0.177304f, 0.120463f, -0.001459f, -0.134803f, -0.216302f, -0.176732f, -0.010552f, 0.178278f, 0.256196f, 0.182059f, 0.024206f, -0.114848f, -0.158810f, -0.086016f, 0.044617f, 0.117327f, 0.065336f, -0.051259f, -0.111817f, -0.069611f, 0.015086f, 0.060298f, 0.037804f, -0.024585f, -0.067462f, -0.030851f, 0.086290f, 0.188844f, + 0.157463f, -0.018729f, -0.210321f, -0.263084f, -0.127756f, 0.111674f, 0.293457f, 0.271555f, 0.029254f, -0.266813f, -0.378473f, -0.210471f, 0.098370f, 0.309045f, 0.283898f, 0.063567f, -0.192165f, -0.309300f, -0.202449f, 0.057091f, 0.273940f, 0.275297f, 0.061398f, -0.182852f, -0.243317f, -0.072401f, 0.159342f, 0.223913f, 0.060123f, -0.171415f, -0.254703f, -0.118681f, 0.121199f, 0.276710f, 0.226181f, -0.010740f, -0.281226f, -0.385722f, -0.214159f, 0.147315f, 0.439995f, 0.417371f, 0.068911f, -0.334814f, -0.461447f, -0.208150f, 0.216193f, 0.473006f, 0.354739f, -0.063006f, -0.458119f, -0.493553f, -0.111396f, 0.386841f, 0.597174f, 0.355887f, -0.161558f, -0.596105f, -0.627040f, -0.182517f, 0.431560f, 0.699339f, 0.365851f, -0.267592f, -0.635509f, -0.474320f, -0.001010f, 0.401498f, 0.513114f, 0.323527f, -0.042288f, -0.368471f, -0.445665f, -0.229898f, 0.116970f, 0.367255f, 0.381124f, 0.152681f, -0.197679f, -0.450463f, -0.399927f, -0.031331f, 0.414227f, 0.600534f, 0.362021f, -0.156018f, -0.595235f, -0.639849f, -0.244309f, 0.327624f, 0.684841f, 0.585134f, 0.102556f, -0.434906f, -0.677892f, -0.481934f, + 0.014129f, 0.483575f, 0.618251f, 0.332509f, -0.171597f, -0.545927f, -0.547069f, -0.196533f, 0.258392f, 0.520496f, 0.426566f, 0.045920f, -0.360202f, -0.512877f, -0.312111f, 0.096838f, 0.433615f, 0.474500f, 0.194973f, -0.217117f, -0.487000f, -0.439250f, -0.109879f, 0.291113f, 0.515963f, 0.418802f, 0.043930f, -0.378561f, -0.565107f, -0.379160f, 0.061224f, 0.467198f, 0.578218f, 0.323802f, -0.139196f, -0.519383f, -0.569388f, -0.250943f, 0.231338f, 0.562130f, 0.524023f, 0.142931f, -0.325086f, -0.565414f, -0.425176f, -0.018815f, 0.365354f, 0.478495f, 0.275858f, -0.076817f, -0.336773f, -0.351325f, -0.145266f, 0.119622f, 0.268574f, 0.226547f, 0.049526f, -0.131174f, -0.202972f, -0.137985f, 0.006528f, 0.136051f, 0.173006f, 0.095314f, -0.048136f, -0.161874f, -0.168192f, -0.064261f, 0.078743f, 0.167861f, 0.146301f, 0.026552f, -0.113644f, -0.179167f, -0.125580f, 0.008523f, 0.132950f, 0.168499f, 0.093707f, -0.043550f, -0.153280f, -0.161822f, -0.064163f, 0.073638f, 0.161611f, 0.143109f, 0.029082f, -0.106025f, -0.171234f, -0.123276f, 0.003867f, 0.126660f, 0.166547f, 0.095192f, -0.043964f, -0.154618f}, + }, + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, -0.009671f, -0.002398f, -0.005043f, -0.003774f, 0.012776f, 0.002295f, -0.052423f, -0.065725f, 0.028299f, 0.132646f, 0.109211f, -0.009662f, -0.086761f, -0.103559f, -0.139737f, -0.167821f, -0.071437f, 0.123885f, 0.228103f, 0.139344f, -0.029194f, -0.120403f, -0.107875f, -0.056103f, -0.011937f, 0.013977f, 0.027233f, 0.044472f, 0.065560f, 0.053630f, -0.010283f, -0.075516f, -0.084061f, -0.056008f, -0.043553f, -0.030501f, 0.035733f, 0.126023f, 0.136807f, 0.030712f, -0.101832f, -0.145269f, -0.073203f, 0.054061f, 0.154550f, 0.164992f, 0.065424f, -0.091776f, + -0.194612f, -0.153573f, 0.015104f, 0.192166f, 0.243030f, 0.115748f, -0.116416f, -0.291664f, -0.265199f, -0.027362f, 0.261857f, 0.377611f, 0.207991f, -0.142729f, -0.417288f, -0.391740f, -0.050925f, 0.375568f, 0.561838f, 0.333534f, -0.171270f, -0.579031f, -0.562315f, -0.109099f, 0.447616f, 0.681253f, 0.408710f, -0.166382f, -0.621353f, -0.639872f, -0.226609f, 0.325619f, 0.650493f, 0.547609f, 0.104153f, -0.377131f, -0.593510f, -0.434729f, -0.021908f, 0.386996f, 0.541133f, 0.344148f, -0.064620f, -0.403377f, -0.477284f, -0.308512f, -0.037754f, 0.223879f, 0.394623f, 0.371307f, 0.109676f, -0.255920f, -0.473827f, -0.383905f, -0.038949f, 0.347410f, 0.527531f, 0.359616f, -0.067687f, -0.451672f, -0.505895f, -0.208652f, 0.198366f, 0.436236f, 0.382164f, 0.100069f, -0.222133f, -0.374287f, -0.260464f, 0.021819f, 0.267359f, 0.335470f, 0.221492f, 0.001008f, -0.221321f, -0.320202f, -0.208740f, 0.056437f, 0.278109f, 0.284988f, 0.090755f, -0.132344f, -0.220290f, -0.141429f, 0.013876f, 0.124627f, 0.123990f, 0.030580f, -0.081502f, -0.143001f, -0.124777f, -0.030058f, 0.113354f, 0.235666f, 0.234131f, 0.055028f, + -0.217240f, -0.385574f, -0.293713f, 0.027439f, 0.362499f, 0.466663f, 0.246857f, -0.165989f, -0.498472f, -0.513915f, -0.178914f, 0.292521f, 0.569395f, 0.443178f, -0.002730f, -0.448465f, -0.582368f, -0.325902f, 0.133510f, 0.490160f, 0.519593f, 0.213836f, -0.215575f, -0.478827f, -0.408408f, -0.069122f, 0.301102f, 0.458148f, 0.306616f, -0.043388f, -0.352280f, -0.420947f, -0.226899f, 0.086213f, 0.330969f, 0.381882f, 0.213300f, -0.090525f, -0.353437f, -0.400344f, -0.188824f, 0.144741f, 0.380148f, 0.367610f, 0.123881f, -0.184101f, -0.352883f, -0.282348f, -0.040707f, 0.196311f, 0.276897f, 0.170490f, -0.028061f, -0.175950f, -0.184290f, -0.071754f, 0.067066f, 0.140138f, 0.112762f, 0.013476f, -0.089673f, -0.128730f, -0.079902f, 0.020090f, 0.103658f, 0.118975f, 0.057220f, -0.043976f, -0.118359f, -0.113520f, -0.032739f, 0.067326f, 0.121423f, 0.097100f, 0.008767f, -0.088602f, -0.128638f, -0.081807f, 0.019023f, 0.105985f, 0.125014f, 0.063692f, -0.042402f, -0.122759f, -0.118566f, -0.034177f, 0.068234f, 0.124292f, 0.104012f, 0.014836f, -0.092555f, -0.137765f, -0.081403f, 0.022488f, 0.089067f, 0.102950f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, -0.009671f, -0.002398f, -0.005043f, -0.003774f, 0.012776f, 0.002295f, -0.052423f, -0.065725f, 0.028299f, 0.132646f, 0.109211f, -0.009662f, -0.086761f, -0.103559f, -0.139737f, -0.167821f, -0.071437f, 0.123885f, 0.228103f, 0.139344f, -0.029194f, -0.120403f, -0.107875f, -0.056103f, -0.011937f, 0.013977f, 0.027233f, 0.044472f, 0.065560f, 0.053630f, -0.010283f, -0.075516f, -0.084061f, -0.056008f, -0.043553f, -0.030501f, 0.035733f, 0.126023f, 0.136807f, 0.030712f, -0.101832f, -0.145269f, -0.073203f, 0.054061f, 0.154550f, 0.164992f, 0.065424f, -0.091776f, + -0.194612f, -0.153573f, 0.015104f, 0.192166f, 0.243030f, 0.115748f, -0.116416f, -0.291664f, -0.265199f, -0.027362f, 0.261857f, 0.377611f, 0.207991f, -0.142729f, -0.417288f, -0.391740f, -0.050925f, 0.375568f, 0.561838f, 0.333534f, -0.171270f, -0.579031f, -0.562315f, -0.109099f, 0.447616f, 0.681253f, 0.408710f, -0.166382f, -0.621353f, -0.639872f, -0.226609f, 0.325619f, 0.650493f, 0.547609f, 0.104153f, -0.377131f, -0.593510f, -0.434729f, -0.021908f, 0.386996f, 0.541133f, 0.344148f, -0.064620f, -0.403377f, -0.477284f, -0.308512f, -0.037754f, 0.223879f, 0.394623f, 0.371307f, 0.109676f, -0.255920f, -0.473827f, -0.383905f, -0.038949f, 0.347410f, 0.527531f, 0.359616f, -0.067687f, -0.451672f, -0.505895f, -0.208652f, 0.198366f, 0.436236f, 0.382164f, 0.100069f, -0.222133f, -0.374287f, -0.260464f, 0.021819f, 0.267359f, 0.335470f, 0.221492f, 0.001008f, -0.221321f, -0.320202f, -0.208740f, 0.056437f, 0.278109f, 0.284988f, 0.090755f, -0.132344f, -0.220290f, -0.141429f, 0.013876f, 0.124627f, 0.123990f, 0.030580f, -0.081502f, -0.143001f, -0.124777f, -0.030058f, 0.113354f, 0.235666f, 0.234131f, 0.055028f, + -0.217240f, -0.385574f, -0.293713f, 0.027439f, 0.362499f, 0.466663f, 0.246857f, -0.165989f, -0.498472f, -0.513915f, -0.178914f, 0.292521f, 0.569395f, 0.443178f, -0.002730f, -0.448465f, -0.582368f, -0.325902f, 0.133510f, 0.490160f, 0.519593f, 0.213836f, -0.215575f, -0.478827f, -0.408408f, -0.069122f, 0.301102f, 0.458148f, 0.306616f, -0.043388f, -0.352280f, -0.420947f, -0.226899f, 0.086213f, 0.330969f, 0.381882f, 0.213300f, -0.090525f, -0.353437f, -0.400344f, -0.188824f, 0.144741f, 0.380148f, 0.367610f, 0.123881f, -0.184101f, -0.352883f, -0.282348f, -0.040707f, 0.196311f, 0.276897f, 0.170490f, -0.028061f, -0.175950f, -0.184290f, -0.071754f, 0.067066f, 0.140138f, 0.112762f, 0.013476f, -0.089673f, -0.128730f, -0.079902f, 0.020090f, 0.103658f, 0.118975f, 0.057220f, -0.043976f, -0.118359f, -0.113520f, -0.032739f, 0.067326f, 0.121423f, 0.097100f, 0.008767f, -0.088602f, -0.128638f, -0.081807f, 0.019023f, 0.105985f, 0.125014f, 0.063692f, -0.042402f, -0.122759f, -0.118566f, -0.034177f, 0.068234f, 0.124292f, 0.104012f, 0.014836f, -0.092555f, -0.137765f, -0.081403f, 0.022488f, 0.089067f, 0.102950f}, + }, + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, -0.028389f, -0.005278f, -0.054637f, -0.169399f, -0.157904f, 0.125765f, 0.492043f, 0.508943f, -0.008427f, -0.675150f, -0.853474f, -0.316569f, 0.501173f, 0.941674f, 0.720447f, 0.073423f, -0.540885f, -0.770187f, -0.507163f, 0.092717f, 0.667105f, 0.830015f, 0.433738f, -0.290332f, -0.862726f, -0.892713f, -0.368575f, 0.342113f, 0.784566f, 0.735024f, 0.291077f, -0.253708f, -0.587951f, -0.538791f, -0.179797f, 0.213728f, 0.389433f, 0.311209f, 0.114487f, -0.072046f, -0.197297f, -0.236324f, -0.170713f, -0.024583f, 0.137226f, 0.247963f, 0.252819f, 0.123370f, + -0.094107f, -0.273335f, -0.299087f, -0.156398f, 0.078198f, 0.291799f, 0.368753f, 0.238778f, -0.048808f, -0.322948f, -0.407630f, -0.249085f, 0.058800f, 0.337573f, 0.418201f, 0.239838f, -0.094125f, -0.370050f, -0.409480f, -0.191186f, 0.139321f, 0.367386f, 0.349877f, 0.112808f, -0.169146f, -0.304971f, -0.224896f, -0.014286f, 0.167661f, 0.208427f, 0.111270f, -0.030879f, -0.121587f, -0.124061f, -0.059062f, 0.029164f, 0.097757f, 0.119895f, 0.091860f, 0.023127f, -0.073705f, -0.168657f, -0.204509f, -0.134685f, 0.023137f, 0.186667f, 0.259881f, 0.183611f, -0.026361f, -0.256797f, -0.342188f, -0.190867f, 0.118668f, 0.382882f, 0.417720f, 0.175644f, -0.221842f, -0.531322f, -0.520084f, -0.146695f, 0.352573f, 0.600974f, 0.382227f, -0.142702f, -0.532281f, -0.443798f, 0.039325f, 0.476537f, 0.488134f, 0.091741f, -0.361404f, -0.514066f, -0.257965f, 0.219758f, 0.552995f, 0.444987f, -0.054093f, -0.518598f, -0.512679f, -0.029513f, 0.485749f, 0.571942f, 0.177831f, -0.332935f, -0.535851f, -0.297529f, 0.148195f, 0.419516f, 0.311322f, -0.041599f, -0.304305f, -0.252564f, 0.039945f, 0.297644f, 0.300605f, 0.059205f, + -0.220168f, -0.316611f, -0.168704f, 0.088496f, 0.247525f, 0.206120f, 0.037520f, -0.103974f, -0.130526f, -0.070457f, -0.000977f, 0.031312f, 0.025791f, 0.002623f, -0.015916f, -0.015573f, -0.001424f, 0.006688f, 0.001678f, 0.003529f, 0.030354f, 0.060939f, 0.049027f, -0.016883f, -0.085346f, -0.090220f, -0.021341f, 0.065913f, 0.107379f, 0.084075f, 0.024352f, -0.030536f, -0.058835f, -0.065944f, -0.064713f, -0.050445f, -0.006497f, 0.060373f, 0.106995f, 0.091751f, 0.017698f, -0.070548f, -0.120302f, -0.097098f, -0.004966f, 0.099881f, 0.137823f, 0.076031f, -0.035606f, -0.111130f, -0.102507f, -0.026230f, 0.059299f, 0.093310f, 0.055057f, -0.016119f, -0.056914f, -0.043417f, -0.004882f, 0.021932f, 0.026956f, 0.015759f, -0.005454f, -0.024768f, -0.026780f, -0.009809f, 0.011675f, 0.023789f, 0.021849f, 0.006652f, -0.014452f, -0.026465f, -0.018854f, 0.002603f, 0.021685f, 0.025328f, 0.010368f, -0.014367f, -0.031027f, -0.026433f, -0.004358f, 0.019936f, 0.032748f, 0.026369f, 0.001950f, -0.024923f, -0.033169f, -0.017718f, 0.007495f, 0.027748f, 0.034364f, 0.019431f, -0.012784f, -0.034390f, -0.022781f, 0.002350f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, -0.028389f, -0.005278f, -0.054637f, -0.169399f, -0.157904f, 0.125765f, 0.492043f, 0.508943f, -0.008427f, -0.675150f, -0.853474f, -0.316569f, 0.501173f, 0.941674f, 0.720447f, 0.073423f, -0.540885f, -0.770187f, -0.507163f, 0.092717f, 0.667105f, 0.830015f, 0.433738f, -0.290332f, -0.862726f, -0.892713f, -0.368575f, 0.342113f, 0.784566f, 0.735024f, 0.291077f, -0.253708f, -0.587951f, -0.538791f, -0.179797f, 0.213728f, 0.389433f, 0.311209f, 0.114487f, -0.072046f, -0.197297f, -0.236324f, -0.170713f, -0.024583f, 0.137226f, 0.247963f, 0.252819f, 0.123370f, + -0.094107f, -0.273335f, -0.299087f, -0.156398f, 0.078198f, 0.291799f, 0.368753f, 0.238778f, -0.048808f, -0.322948f, -0.407630f, -0.249085f, 0.058800f, 0.337573f, 0.418201f, 0.239838f, -0.094125f, -0.370050f, -0.409480f, -0.191186f, 0.139321f, 0.367386f, 0.349877f, 0.112808f, -0.169146f, -0.304971f, -0.224896f, -0.014286f, 0.167661f, 0.208427f, 0.111270f, -0.030879f, -0.121587f, -0.124061f, -0.059062f, 0.029164f, 0.097757f, 0.119895f, 0.091860f, 0.023127f, -0.073705f, -0.168657f, -0.204509f, -0.134685f, 0.023137f, 0.186667f, 0.259881f, 0.183611f, -0.026361f, -0.256797f, -0.342188f, -0.190867f, 0.118668f, 0.382882f, 0.417720f, 0.175644f, -0.221842f, -0.531322f, -0.520084f, -0.146695f, 0.352573f, 0.600974f, 0.382227f, -0.142702f, -0.532281f, -0.443798f, 0.039325f, 0.476537f, 0.488134f, 0.091741f, -0.361404f, -0.514066f, -0.257965f, 0.219758f, 0.552995f, 0.444987f, -0.054093f, -0.518598f, -0.512679f, -0.029513f, 0.485749f, 0.571942f, 0.177831f, -0.332935f, -0.535851f, -0.297529f, 0.148195f, 0.419516f, 0.311322f, -0.041599f, -0.304305f, -0.252564f, 0.039945f, 0.297644f, 0.300605f, 0.059205f, + -0.220168f, -0.316611f, -0.168704f, 0.088496f, 0.247525f, 0.206120f, 0.037520f, -0.103974f, -0.130526f, -0.070457f, -0.000977f, 0.031312f, 0.025791f, 0.002623f, -0.015916f, -0.015573f, -0.001424f, 0.006688f, 0.001678f, 0.003529f, 0.030354f, 0.060939f, 0.049027f, -0.016883f, -0.085346f, -0.090220f, -0.021341f, 0.065913f, 0.107379f, 0.084075f, 0.024352f, -0.030536f, -0.058835f, -0.065944f, -0.064713f, -0.050445f, -0.006497f, 0.060373f, 0.106995f, 0.091751f, 0.017698f, -0.070548f, -0.120302f, -0.097098f, -0.004966f, 0.099881f, 0.137823f, 0.076031f, -0.035606f, -0.111130f, -0.102507f, -0.026230f, 0.059299f, 0.093310f, 0.055057f, -0.016119f, -0.056914f, -0.043417f, -0.004882f, 0.021932f, 0.026956f, 0.015759f, -0.005454f, -0.024768f, -0.026780f, -0.009809f, 0.011675f, 0.023789f, 0.021849f, 0.006652f, -0.014452f, -0.026465f, -0.018854f, 0.002603f, 0.021685f, 0.025328f, 0.010368f, -0.014367f, -0.031027f, -0.026433f, -0.004358f, 0.019936f, 0.032748f, 0.026369f, 0.001950f, -0.024923f, -0.033169f, -0.017718f, 0.007495f, 0.027748f, 0.034364f, 0.019431f, -0.012784f, -0.034390f, -0.022781f, 0.002350f}, + }, + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, -0.014512f, -0.016429f, -0.034557f, -0.041369f, -0.011506f, 0.011233f, -0.001682f, 0.020521f, 0.114955f, 0.151730f, -0.000411f, -0.239545f, -0.329315f, -0.188255f, 0.057294f, 0.247912f, 0.285779f, 0.131972f, -0.134882f, -0.300966f, -0.198131f, 0.102896f, 0.353787f, 0.357409f, 0.104705f, -0.241536f, -0.450142f, -0.382109f, -0.107998f, 0.164637f, 0.284453f, 0.237340f, 0.082952f, -0.088468f, -0.161984f, -0.079488f, 0.074373f, 0.151869f, 0.106220f, 0.008959f, -0.068660f, -0.107952f, -0.098278f, -0.030286f, 0.062196f, 0.115330f, 0.096918f, 0.024364f, + -0.062598f, -0.118401f, -0.105635f, -0.027284f, 0.065178f, 0.113179f, 0.092096f, 0.015221f, -0.076199f, -0.125822f, -0.095722f, -0.001227f, 0.096789f, 0.136832f, 0.096202f, 0.003389f, -0.080494f, -0.107751f, -0.079055f, -0.026005f, 0.027831f, 0.067568f, 0.069670f, 0.024810f, -0.030010f, -0.043251f, -0.011822f, 0.021250f, 0.026793f, 0.012819f, -0.005506f, -0.021626f, -0.024631f, -0.005569f, 0.019541f, 0.021544f, -0.002011f, -0.021801f, -0.017050f, -0.002437f, -0.006760f, -0.035220f, -0.059542f, -0.043288f, 0.021198f, 0.096044f, 0.121579f, 0.067529f, -0.034057f, -0.110908f, -0.111511f, -0.046586f, 0.027860f, 0.062770f, 0.048662f, 0.006705f, -0.036054f, -0.059507f, -0.052318f, -0.014186f, 0.040268f, 0.080701f, 0.071134f, -0.000909f, -0.093787f, -0.127975f, -0.062266f, 0.045961f, 0.085172f, 0.009536f, -0.100685f, -0.115131f, 0.012257f, 0.188930f, 0.258913f, 0.137516f, -0.104488f, -0.278572f, -0.226963f, 0.027318f, 0.275194f, 0.296640f, 0.062780f, -0.235745f, -0.357727f, -0.207734f, 0.101382f, 0.337736f, 0.318714f, 0.057884f, -0.230749f, -0.314764f, -0.153394f, 0.090726f, 0.233204f, 0.210926f, + 0.065868f, -0.115416f, -0.220274f, -0.163482f, 0.013109f, 0.150715f, 0.138342f, 0.025835f, -0.063481f, -0.077109f, -0.044946f, -0.003320f, 0.029509f, 0.035000f, 0.008694f, -0.021467f, -0.027438f, -0.015248f, -0.002032f, 0.015826f, 0.042475f, 0.053086f, 0.019082f, -0.044226f, -0.080752f, -0.048149f, 0.037747f, 0.110629f, 0.106264f, 0.018906f, -0.087976f, -0.132783f, -0.084551f, 0.014592f, 0.089376f, 0.092076f, 0.032992f, -0.036804f, -0.068869f, -0.049589f, -0.001053f, 0.040434f, 0.048997f, 0.024613f, -0.009241f, -0.026758f, -0.021550f, -0.006760f, 0.002714f, 0.003226f, 0.001042f, 0.003587f, 0.010448f, 0.012400f, 0.004412f, -0.003334f, 0.000949f, 0.008792f, 0.000811f, -0.021391f, -0.032702f, -0.018298f, 0.008520f, 0.026675f, 0.027695f, 0.012546f, -0.012599f, -0.032061f, -0.029080f, -0.005011f, 0.020727f, 0.031063f, 0.022444f, 0.000380f, -0.023163f, -0.031978f, -0.018604f, 0.006009f, 0.023546f, 0.024911f, 0.011571f, -0.009700f, -0.026389f, -0.024980f, -0.005203f, 0.016979f, 0.025820f, 0.018578f, 0.000957f, -0.018776f, -0.028298f, -0.017328f, 0.007337f, 0.023219f, 0.017507f, 0.003770f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.014512f, 0.016429f, 0.034557f, 0.041369f, 0.011506f, -0.011233f, 0.001682f, -0.020521f, -0.114955f, -0.151730f, 0.000411f, 0.239545f, 0.329315f, 0.188255f, -0.057294f, -0.247912f, -0.285779f, -0.131972f, 0.134882f, 0.300966f, 0.198131f, -0.102896f, -0.353787f, -0.357409f, -0.104705f, 0.241536f, 0.450142f, 0.382109f, 0.107998f, -0.164637f, -0.284453f, -0.237340f, -0.082952f, 0.088468f, 0.161984f, 0.079488f, -0.074373f, -0.151869f, -0.106220f, -0.008959f, 0.068660f, 0.107952f, 0.098278f, 0.030286f, -0.062196f, -0.115330f, -0.096918f, -0.024364f, + 0.062598f, 0.118401f, 0.105635f, 0.027284f, -0.065178f, -0.113179f, -0.092096f, -0.015221f, 0.076199f, 0.125822f, 0.095722f, 0.001227f, -0.096789f, -0.136832f, -0.096202f, -0.003389f, 0.080494f, 0.107751f, 0.079055f, 0.026005f, -0.027831f, -0.067568f, -0.069670f, -0.024810f, 0.030010f, 0.043251f, 0.011822f, -0.021250f, -0.026793f, -0.012819f, 0.005506f, 0.021626f, 0.024631f, 0.005569f, -0.019541f, -0.021544f, 0.002011f, 0.021801f, 0.017050f, 0.002437f, 0.006760f, 0.035220f, 0.059542f, 0.043288f, -0.021198f, -0.096044f, -0.121579f, -0.067529f, 0.034057f, 0.110908f, 0.111511f, 0.046586f, -0.027860f, -0.062770f, -0.048662f, -0.006705f, 0.036054f, 0.059507f, 0.052318f, 0.014186f, -0.040268f, -0.080701f, -0.071134f, 0.000909f, 0.093787f, 0.127975f, 0.062266f, -0.045961f, -0.085172f, -0.009536f, 0.100685f, 0.115131f, -0.012257f, -0.188930f, -0.258913f, -0.137516f, 0.104488f, 0.278572f, 0.226963f, -0.027318f, -0.275194f, -0.296640f, -0.062780f, 0.235745f, 0.357727f, 0.207734f, -0.101382f, -0.337736f, -0.318714f, -0.057884f, 0.230749f, 0.314764f, 0.153394f, -0.090726f, -0.233204f, -0.210926f, + -0.065868f, 0.115416f, 0.220274f, 0.163482f, -0.013109f, -0.150715f, -0.138342f, -0.025835f, 0.063481f, 0.077109f, 0.044946f, 0.003320f, -0.029509f, -0.035000f, -0.008694f, 0.021467f, 0.027438f, 0.015248f, 0.002032f, -0.015826f, -0.042475f, -0.053086f, -0.019082f, 0.044226f, 0.080752f, 0.048149f, -0.037747f, -0.110629f, -0.106264f, -0.018906f, 0.087976f, 0.132783f, 0.084551f, -0.014592f, -0.089376f, -0.092076f, -0.032992f, 0.036804f, 0.068869f, 0.049589f, 0.001053f, -0.040434f, -0.048997f, -0.024613f, 0.009241f, 0.026758f, 0.021550f, 0.006760f, -0.002714f, -0.003226f, -0.001042f, -0.003587f, -0.010448f, -0.012400f, -0.004412f, 0.003334f, -0.000949f, -0.008792f, -0.000811f, 0.021391f, 0.032702f, 0.018298f, -0.008520f, -0.026675f, -0.027695f, -0.012546f, 0.012599f, 0.032061f, 0.029080f, 0.005011f, -0.020727f, -0.031063f, -0.022444f, -0.000380f, 0.023163f, 0.031978f, 0.018604f, -0.006009f, -0.023546f, -0.024911f, -0.011571f, 0.009700f, 0.026389f, 0.024980f, 0.005203f, -0.016979f, -0.025820f, -0.018578f, -0.000957f, 0.018776f, 0.028298f, 0.017328f, -0.007337f, -0.023219f, -0.017507f, -0.003770f}, + }, + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, -0.039501f, -0.014112f, 0.001447f, -0.004068f, -0.002193f, 0.017003f, 0.016961f, -0.019323f, -0.036823f, 0.021491f, 0.117651f, 0.152439f, 0.080915f, -0.057964f, -0.197903f, -0.267563f, -0.196424f, 0.006805f, 0.198191f, 0.218189f, 0.071960f, -0.084962f, -0.134768f, -0.095081f, -0.038550f, -0.000622f, 0.019901f, 0.031601f, 0.039778f, 0.036120f, 0.005867f, -0.036701f, -0.050091f, -0.024227f, 0.002850f, 0.007342f, 0.008506f, 0.013304f, -0.007849f, -0.058824f, -0.088248f, -0.057546f, 0.008154f, 0.063020f, 0.087248f, 0.071046f, 0.006013f, -0.078526f, + -0.115136f, -0.066163f, 0.033001f, 0.112445f, 0.123994f, 0.056966f, -0.062296f, -0.168672f, -0.186057f, -0.087154f, 0.072786f, 0.188814f, 0.179448f, 0.045191f, -0.125509f, -0.210510f, -0.140347f, 0.041516f, 0.198222f, 0.201089f, 0.041516f, -0.151201f, -0.219459f, -0.115877f, 0.065868f, 0.185618f, 0.167548f, 0.036145f, -0.115485f, -0.184435f, -0.123726f, 0.019027f, 0.136484f, 0.150895f, 0.067063f, -0.056561f, -0.158565f, -0.186490f, -0.104501f, 0.059578f, 0.192628f, 0.183234f, 0.041682f, -0.112351f, -0.186900f, -0.184294f, -0.122920f, 0.015298f, 0.199251f, 0.287141f, 0.153272f, -0.137288f, -0.353586f, -0.306684f, -0.011627f, 0.324107f, 0.445307f, 0.241526f, -0.139115f, -0.396338f, -0.349188f, -0.086461f, 0.163750f, 0.253809f, 0.180660f, 0.020406f, -0.123393f, -0.158575f, -0.073683f, 0.044711f, 0.106214f, 0.102983f, 0.072845f, 0.022835f, -0.057935f, -0.136913f, -0.146360f, -0.057455f, 0.079377f, 0.171897f, 0.157908f, 0.050169f, -0.077326f, -0.147247f, -0.129855f, -0.050052f, 0.038481f, 0.084909f, 0.066918f, 0.001823f, -0.064539f, -0.081818f, -0.022719f, 0.085073f, 0.151892f, 0.091934f, + -0.075335f, -0.215637f, -0.203705f, -0.046330f, 0.131739f, 0.203050f, 0.127188f, -0.038046f, -0.180410f, -0.204110f, -0.093600f, 0.076439f, 0.192839f, 0.175971f, 0.031978f, -0.141483f, -0.217916f, -0.142897f, 0.020988f, 0.153950f, 0.174858f, 0.084624f, -0.048874f, -0.132889f, -0.108840f, 0.000034f, 0.105166f, 0.127191f, 0.053918f, -0.061650f, -0.141006f, -0.129950f, -0.037851f, 0.070020f, 0.129452f, 0.119294f, 0.049896f, -0.054182f, -0.143336f, -0.153402f, -0.063283f, 0.071070f, 0.159936f, 0.148673f, 0.046307f, -0.084099f, -0.157546f, -0.123720f, -0.012279f, 0.090418f, 0.116318f, 0.062861f, -0.020579f, -0.074279f, -0.067225f, -0.017196f, 0.028481f, 0.039062f, 0.020496f, -0.006691f, -0.027778f, -0.031293f, -0.012037f, 0.016213f, 0.029948f, 0.021218f, 0.000256f, -0.021030f, -0.032573f, -0.023971f, 0.002489f, 0.025708f, 0.027527f, 0.011059f, -0.010583f, -0.027981f, -0.031554f, -0.013988f, 0.015027f, 0.032866f, 0.027570f, 0.005362f, -0.020976f, -0.036955f, -0.029120f, -0.000144f, 0.027148f, 0.033176f, 0.018428f, -0.007250f, -0.032389f, -0.038803f, -0.015968f, 0.016179f, 0.027465f, 0.020341f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.039501f, 0.014112f, -0.001447f, 0.004068f, 0.002193f, -0.017003f, -0.016961f, 0.019323f, 0.036823f, -0.021491f, -0.117651f, -0.152439f, -0.080915f, 0.057964f, 0.197903f, 0.267563f, 0.196424f, -0.006805f, -0.198191f, -0.218189f, -0.071960f, 0.084962f, 0.134768f, 0.095081f, 0.038550f, 0.000622f, -0.019901f, -0.031601f, -0.039778f, -0.036120f, -0.005867f, 0.036701f, 0.050091f, 0.024227f, -0.002850f, -0.007342f, -0.008506f, -0.013304f, 0.007849f, 0.058824f, 0.088248f, 0.057546f, -0.008154f, -0.063020f, -0.087248f, -0.071046f, -0.006013f, 0.078526f, + 0.115136f, 0.066163f, -0.033001f, -0.112445f, -0.123994f, -0.056966f, 0.062296f, 0.168672f, 0.186057f, 0.087154f, -0.072786f, -0.188814f, -0.179448f, -0.045191f, 0.125509f, 0.210510f, 0.140347f, -0.041516f, -0.198222f, -0.201089f, -0.041516f, 0.151201f, 0.219459f, 0.115877f, -0.065868f, -0.185618f, -0.167548f, -0.036145f, 0.115485f, 0.184435f, 0.123726f, -0.019027f, -0.136484f, -0.150895f, -0.067063f, 0.056561f, 0.158565f, 0.186490f, 0.104501f, -0.059578f, -0.192628f, -0.183234f, -0.041682f, 0.112351f, 0.186900f, 0.184294f, 0.122920f, -0.015298f, -0.199251f, -0.287141f, -0.153272f, 0.137288f, 0.353586f, 0.306684f, 0.011627f, -0.324107f, -0.445307f, -0.241526f, 0.139115f, 0.396338f, 0.349188f, 0.086461f, -0.163750f, -0.253809f, -0.180660f, -0.020406f, 0.123393f, 0.158575f, 0.073683f, -0.044711f, -0.106214f, -0.102983f, -0.072845f, -0.022835f, 0.057935f, 0.136913f, 0.146360f, 0.057455f, -0.079377f, -0.171897f, -0.157908f, -0.050169f, 0.077326f, 0.147247f, 0.129855f, 0.050052f, -0.038481f, -0.084909f, -0.066918f, -0.001823f, 0.064539f, 0.081818f, 0.022719f, -0.085073f, -0.151892f, -0.091934f, + 0.075335f, 0.215637f, 0.203705f, 0.046330f, -0.131739f, -0.203050f, -0.127188f, 0.038046f, 0.180410f, 0.204110f, 0.093600f, -0.076439f, -0.192839f, -0.175971f, -0.031978f, 0.141483f, 0.217916f, 0.142897f, -0.020988f, -0.153950f, -0.174858f, -0.084624f, 0.048874f, 0.132889f, 0.108840f, -0.000034f, -0.105166f, -0.127191f, -0.053918f, 0.061650f, 0.141006f, 0.129950f, 0.037851f, -0.070020f, -0.129452f, -0.119294f, -0.049896f, 0.054182f, 0.143336f, 0.153402f, 0.063283f, -0.071070f, -0.159936f, -0.148673f, -0.046307f, 0.084099f, 0.157546f, 0.123720f, 0.012279f, -0.090418f, -0.116318f, -0.062861f, 0.020579f, 0.074279f, 0.067225f, 0.017196f, -0.028481f, -0.039062f, -0.020496f, 0.006691f, 0.027778f, 0.031293f, 0.012037f, -0.016213f, -0.029948f, -0.021218f, -0.000256f, 0.021030f, 0.032573f, 0.023971f, -0.002489f, -0.025708f, -0.027527f, -0.011059f, 0.010583f, 0.027981f, 0.031554f, 0.013988f, -0.015027f, -0.032866f, -0.027570f, -0.005362f, 0.020976f, 0.036955f, 0.029120f, 0.000144f, -0.027148f, -0.033176f, -0.018428f, 0.007250f, 0.032389f, 0.038803f, 0.015968f, -0.016179f, -0.027465f, -0.020341f}, + }, + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, -0.008028f, -0.030862f, 0.009676f, 0.085727f, 0.067804f, -0.036549f, -0.065052f, 0.024173f, 0.057366f, -0.086619f, -0.276767f, -0.304011f, -0.135711f, 0.094524f, 0.250640f, 0.264991f, 0.134484f, -0.063179f, -0.197592f, -0.192615f, -0.080410f, 0.061129f, 0.166518f, 0.174103f, 0.050098f, -0.135892f, -0.228483f, -0.136281f, 0.066498f, 0.216945f, 0.213088f, 0.075011f, -0.096953f, -0.193579f, -0.157912f, -0.018712f, 0.129326f, 0.191689f, 0.135575f, 0.004377f, -0.117880f, -0.165161f, -0.126401f, -0.031928f, 0.082130f, 0.179910f, 0.210960f, 0.130206f, + -0.046955f, -0.225684f, -0.288155f, -0.178546f, 0.052377f, 0.269483f, 0.330193f, 0.178996f, -0.101201f, -0.330484f, -0.351136f, -0.142531f, 0.156960f, 0.344793f, 0.297740f, 0.054499f, -0.218874f, -0.343145f, -0.239732f, 0.018281f, 0.250677f, 0.296501f, 0.135737f, -0.099830f, -0.237905f, -0.197605f, -0.036459f, 0.109878f, 0.141045f, 0.066798f, -0.024553f, -0.065247f, -0.054502f, -0.015417f, 0.037788f, 0.068681f, 0.021734f, -0.087606f, -0.138661f, -0.039928f, 0.127028f, 0.179171f, 0.050024f, -0.128351f, -0.174820f, -0.045040f, 0.140211f, 0.210276f, 0.081798f, -0.167710f, -0.335089f, -0.243401f, 0.083371f, 0.396693f, 0.422168f, 0.114520f, -0.291912f, -0.493282f, -0.364994f, -0.020577f, 0.307036f, 0.412269f, 0.227227f, -0.114617f, -0.344070f, -0.278235f, 0.002836f, 0.246027f, 0.281126f, 0.139970f, -0.041808f, -0.151538f, -0.137708f, -0.020886f, 0.103939f, 0.138466f, 0.078132f, -0.000601f, -0.044502f, -0.061313f, -0.059599f, -0.019148f, 0.059109f, 0.121678f, 0.108125f, 0.011409f, -0.111949f, -0.178258f, -0.131807f, 0.011996f, 0.169925f, 0.240250f, 0.160701f, -0.045311f, -0.250229f, -0.286542f, + -0.097101f, 0.176472f, 0.308886f, 0.205740f, -0.027821f, -0.215339f, -0.251699f, -0.134775f, 0.059793f, 0.206504f, 0.196671f, 0.032547f, -0.157208f, -0.222642f, -0.116422f, 0.077432f, 0.215840f, 0.201364f, 0.048775f, -0.130251f, -0.213974f, -0.156757f, -0.006668f, 0.140419f, 0.199403f, 0.137146f, -0.009715f, -0.151536f, -0.199631f, -0.124755f, 0.024925f, 0.157980f, 0.197323f, 0.123194f, -0.019172f, -0.146052f, -0.181487f, -0.102240f, 0.043681f, 0.162951f, 0.177073f, 0.076212f, -0.072710f, -0.169936f, -0.150541f, -0.031056f, 0.101747f, 0.156659f, 0.105170f, -0.006275f, -0.099771f, -0.119755f, -0.061949f, 0.028726f, 0.088684f, 0.081352f, 0.022618f, -0.038960f, -0.064358f, -0.046128f, -0.001808f, 0.040523f, 0.055097f, 0.032754f, -0.011323f, -0.047621f, -0.052791f, -0.023796f, 0.020890f, 0.051770f, 0.047433f, 0.010778f, -0.032767f, -0.054259f, -0.040478f, -0.000817f, 0.038929f, 0.052589f, 0.031619f, -0.008902f, -0.042108f, -0.047606f, -0.022448f, 0.017823f, 0.047050f, 0.044986f, 0.012971f, -0.026626f, -0.047751f, -0.037995f, -0.003843f, 0.033852f, 0.050276f, 0.032277f, -0.009018f, -0.042975f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.008028f, 0.030862f, -0.009676f, -0.085727f, -0.067804f, 0.036549f, 0.065052f, -0.024173f, -0.057366f, 0.086619f, 0.276767f, 0.304011f, 0.135711f, -0.094524f, -0.250640f, -0.264991f, -0.134484f, 0.063179f, 0.197592f, 0.192615f, 0.080410f, -0.061129f, -0.166518f, -0.174103f, -0.050098f, 0.135892f, 0.228483f, 0.136281f, -0.066498f, -0.216945f, -0.213088f, -0.075011f, 0.096953f, 0.193579f, 0.157912f, 0.018712f, -0.129326f, -0.191689f, -0.135575f, -0.004377f, 0.117880f, 0.165161f, 0.126401f, 0.031928f, -0.082130f, -0.179910f, -0.210960f, -0.130206f, + 0.046955f, 0.225684f, 0.288155f, 0.178546f, -0.052377f, -0.269483f, -0.330193f, -0.178996f, 0.101201f, 0.330484f, 0.351136f, 0.142531f, -0.156960f, -0.344793f, -0.297740f, -0.054499f, 0.218874f, 0.343145f, 0.239732f, -0.018281f, -0.250677f, -0.296501f, -0.135737f, 0.099830f, 0.237905f, 0.197605f, 0.036459f, -0.109878f, -0.141045f, -0.066798f, 0.024553f, 0.065247f, 0.054502f, 0.015417f, -0.037788f, -0.068681f, -0.021734f, 0.087606f, 0.138661f, 0.039928f, -0.127028f, -0.179171f, -0.050024f, 0.128351f, 0.174820f, 0.045040f, -0.140211f, -0.210276f, -0.081798f, 0.167710f, 0.335089f, 0.243401f, -0.083371f, -0.396693f, -0.422168f, -0.114520f, 0.291912f, 0.493282f, 0.364994f, 0.020577f, -0.307036f, -0.412269f, -0.227227f, 0.114617f, 0.344070f, 0.278235f, -0.002836f, -0.246027f, -0.281126f, -0.139970f, 0.041808f, 0.151538f, 0.137708f, 0.020886f, -0.103939f, -0.138466f, -0.078132f, 0.000601f, 0.044502f, 0.061313f, 0.059599f, 0.019148f, -0.059109f, -0.121678f, -0.108125f, -0.011409f, 0.111949f, 0.178258f, 0.131807f, -0.011996f, -0.169925f, -0.240250f, -0.160701f, 0.045311f, 0.250229f, 0.286542f, + 0.097101f, -0.176472f, -0.308886f, -0.205740f, 0.027821f, 0.215339f, 0.251699f, 0.134775f, -0.059793f, -0.206504f, -0.196671f, -0.032547f, 0.157208f, 0.222642f, 0.116422f, -0.077432f, -0.215840f, -0.201364f, -0.048775f, 0.130251f, 0.213974f, 0.156757f, 0.006668f, -0.140419f, -0.199403f, -0.137146f, 0.009715f, 0.151536f, 0.199631f, 0.124755f, -0.024925f, -0.157980f, -0.197323f, -0.123194f, 0.019172f, 0.146052f, 0.181487f, 0.102240f, -0.043681f, -0.162951f, -0.177073f, -0.076212f, 0.072710f, 0.169936f, 0.150541f, 0.031056f, -0.101747f, -0.156659f, -0.105170f, 0.006275f, 0.099771f, 0.119755f, 0.061949f, -0.028726f, -0.088684f, -0.081352f, -0.022618f, 0.038960f, 0.064358f, 0.046128f, 0.001808f, -0.040523f, -0.055097f, -0.032754f, 0.011323f, 0.047621f, 0.052791f, 0.023796f, -0.020890f, -0.051770f, -0.047433f, -0.010778f, 0.032767f, 0.054259f, 0.040478f, 0.000817f, -0.038929f, -0.052589f, -0.031619f, 0.008902f, 0.042108f, 0.047606f, 0.022448f, -0.017823f, -0.047050f, -0.044986f, -0.012971f, 0.026626f, 0.047751f, 0.037995f, 0.003843f, -0.033852f, -0.050276f, -0.032277f, 0.009018f, 0.042975f}, + }, + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.021683f, 0.054940f, 0.082635f, 0.058825f, -0.010914f, -0.057174f, -0.032626f, 0.010089f, -0.014535f, -0.091370f, -0.113146f, -0.033086f, 0.065717f, 0.084827f, 0.031624f, -0.016134f, -0.016922f, 0.012844f, 0.049403f, 0.080502f, 0.085212f, 0.038538f, -0.055079f, -0.149205f, -0.182095f, -0.120155f, 0.011525f, 0.139266f, 0.192799f, 0.151271f, 0.041674f, -0.085172f, -0.165918f, -0.148310f, -0.042381f, 0.069406f, 0.108606f, 0.074496f, 0.016402f, -0.036597f, -0.076304f, -0.077498f, -0.022023f, 0.049474f, 0.069347f, 0.028950f, -0.015032f, -0.020709f, + -0.001272f, 0.015228f, 0.018319f, 0.001956f, -0.034453f, -0.061733f, -0.041166f, 0.016566f, 0.051205f, 0.027793f, -0.022026f, -0.047771f, -0.035099f, 0.000993f, 0.038979f, 0.045437f, -0.011300f, -0.104559f, -0.137665f, -0.039097f, 0.136194f, 0.238802f, 0.165681f, -0.043820f, -0.240751f, -0.278703f, -0.119215f, 0.130516f, 0.284675f, 0.223457f, -0.002635f, -0.213283f, -0.248434f, -0.091713f, 0.125377f, 0.227818f, 0.134514f, -0.071631f, -0.210450f, -0.162154f, 0.030756f, 0.209743f, 0.234553f, 0.083994f, -0.134806f, -0.259955f, -0.192614f, 0.018153f, 0.206423f, 0.225228f, 0.067808f, -0.131372f, -0.209868f, -0.111043f, 0.068780f, 0.167506f, 0.107736f, -0.036527f, -0.121143f, -0.067943f, 0.070883f, 0.154040f, 0.066224f, -0.155722f, -0.307983f, -0.198877f, 0.125923f, 0.390847f, 0.358489f, 0.053036f, -0.292363f, -0.444287f, -0.309274f, 0.032588f, 0.358022f, 0.429018f, 0.188971f, -0.167310f, -0.360823f, -0.264807f, 0.020949f, 0.275594f, 0.312499f, 0.096657f, -0.222027f, -0.405371f, -0.308466f, 0.007916f, 0.328137f, 0.432777f, 0.239282f, -0.133912f, -0.427765f, -0.426709f, -0.134561f, 0.228496f, + 0.408846f, 0.306423f, 0.020734f, -0.241910f, -0.315888f, -0.182754f, 0.037638f, 0.196803f, 0.216999f, 0.105679f, -0.071229f, -0.207442f, -0.201636f, -0.043702f, 0.152359f, 0.236945f, 0.149666f, -0.044532f, -0.214527f, -0.246695f, -0.112995f, 0.101451f, 0.249590f, 0.231984f, 0.065546f, -0.144776f, -0.278601f, -0.254879f, -0.070771f, 0.177518f, 0.336176f, 0.296735f, 0.075890f, -0.196068f, -0.356830f, -0.305258f, -0.065265f, 0.216496f, 0.358725f, 0.269230f, 0.008260f, -0.254334f, -0.350027f, -0.219676f, 0.044907f, 0.262219f, 0.292149f, 0.133224f, -0.092006f, -0.234847f, -0.215241f, -0.061114f, 0.115598f, 0.195040f, 0.133980f, -0.008953f, -0.128279f, -0.150709f, -0.074105f, 0.043715f, 0.124656f, 0.118470f, 0.034003f, -0.070298f, -0.127627f, -0.102482f, -0.009763f, 0.090830f, 0.130463f, 0.081835f, -0.019824f, -0.106564f, -0.124745f, -0.062615f, 0.042922f, 0.121320f, 0.115451f, 0.030731f, -0.070082f, -0.121739f, -0.097242f, -0.011124f, 0.086490f, 0.127804f, 0.078358f, -0.023953f, -0.103506f, -0.114839f, -0.059055f, 0.036969f, 0.119235f, 0.118976f, 0.025621f, -0.074930f, -0.096547f, -0.065130f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.021683f, 0.054940f, 0.082635f, 0.058825f, -0.010914f, -0.057174f, -0.032626f, 0.010089f, -0.014535f, -0.091370f, -0.113146f, -0.033086f, 0.065717f, 0.084827f, 0.031624f, -0.016134f, -0.016922f, 0.012844f, 0.049403f, 0.080502f, 0.085212f, 0.038538f, -0.055079f, -0.149205f, -0.182095f, -0.120155f, 0.011525f, 0.139266f, 0.192799f, 0.151271f, 0.041674f, -0.085172f, -0.165918f, -0.148310f, -0.042381f, 0.069406f, 0.108606f, 0.074496f, 0.016402f, -0.036597f, -0.076304f, -0.077498f, -0.022023f, 0.049474f, 0.069347f, 0.028950f, -0.015032f, -0.020709f, + -0.001272f, 0.015228f, 0.018319f, 0.001956f, -0.034453f, -0.061733f, -0.041166f, 0.016566f, 0.051205f, 0.027793f, -0.022026f, -0.047771f, -0.035099f, 0.000993f, 0.038979f, 0.045437f, -0.011300f, -0.104559f, -0.137665f, -0.039097f, 0.136194f, 0.238802f, 0.165681f, -0.043820f, -0.240751f, -0.278703f, -0.119215f, 0.130516f, 0.284675f, 0.223457f, -0.002635f, -0.213283f, -0.248434f, -0.091713f, 0.125377f, 0.227818f, 0.134514f, -0.071631f, -0.210450f, -0.162154f, 0.030756f, 0.209743f, 0.234553f, 0.083994f, -0.134806f, -0.259955f, -0.192614f, 0.018153f, 0.206423f, 0.225228f, 0.067808f, -0.131372f, -0.209868f, -0.111043f, 0.068780f, 0.167506f, 0.107736f, -0.036527f, -0.121143f, -0.067943f, 0.070883f, 0.154040f, 0.066224f, -0.155722f, -0.307983f, -0.198877f, 0.125923f, 0.390847f, 0.358489f, 0.053036f, -0.292363f, -0.444287f, -0.309274f, 0.032588f, 0.358022f, 0.429018f, 0.188971f, -0.167310f, -0.360823f, -0.264807f, 0.020949f, 0.275594f, 0.312499f, 0.096657f, -0.222027f, -0.405371f, -0.308466f, 0.007916f, 0.328137f, 0.432777f, 0.239282f, -0.133912f, -0.427765f, -0.426709f, -0.134561f, 0.228496f, + 0.408846f, 0.306423f, 0.020734f, -0.241910f, -0.315888f, -0.182754f, 0.037638f, 0.196803f, 0.216999f, 0.105679f, -0.071229f, -0.207442f, -0.201636f, -0.043702f, 0.152359f, 0.236945f, 0.149666f, -0.044532f, -0.214527f, -0.246695f, -0.112995f, 0.101451f, 0.249590f, 0.231984f, 0.065546f, -0.144776f, -0.278601f, -0.254879f, -0.070771f, 0.177518f, 0.336176f, 0.296735f, 0.075890f, -0.196068f, -0.356830f, -0.305258f, -0.065265f, 0.216496f, 0.358725f, 0.269230f, 0.008260f, -0.254334f, -0.350027f, -0.219676f, 0.044907f, 0.262219f, 0.292149f, 0.133224f, -0.092006f, -0.234847f, -0.215241f, -0.061114f, 0.115598f, 0.195040f, 0.133980f, -0.008953f, -0.128279f, -0.150709f, -0.074105f, 0.043715f, 0.124656f, 0.118470f, 0.034003f, -0.070298f, -0.127627f, -0.102482f, -0.009763f, 0.090830f, 0.130463f, 0.081835f, -0.019824f, -0.106564f, -0.124745f, -0.062615f, 0.042922f, 0.121320f, 0.115451f, 0.030731f, -0.070082f, -0.121739f, -0.097242f, -0.011124f, 0.086490f, 0.127804f, 0.078358f, -0.023953f, -0.103506f, -0.114839f, -0.059055f, 0.036969f, 0.119235f, 0.118976f, 0.025621f, -0.074930f, -0.096547f, -0.065130f}, + }, + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.007730f, 0.080171f, 0.096212f, 0.007453f, -0.088714f, -0.103934f, -0.054681f, 0.002742f, 0.030848f, 0.014234f, -0.015074f, 0.008277f, 0.076124f, 0.084684f, -0.006643f, -0.087253f, -0.055716f, 0.028293f, 0.051440f, 0.015024f, -0.006997f, 0.000005f, 0.001138f, -0.005280f, 0.001081f, 0.011824f, 0.010214f, 0.004305f, 0.001002f, -0.013290f, -0.037908f, -0.040559f, 0.001925f, 0.068256f, 0.107980f, 0.080616f, -0.011535f, -0.115216f, -0.161664f, -0.120497f, -0.015099f, 0.100268f, 0.160754f, 0.118872f, -0.004851f, -0.116017f, -0.131302f, -0.058630f, + 0.030118f, 0.078435f, 0.072718f, 0.028224f, -0.018292f, -0.029877f, -0.009849f, 0.001907f, -0.014831f, -0.036002f, -0.031315f, 0.001084f, 0.039750f, 0.056956f, 0.037594f, -0.000311f, -0.019439f, -0.010404f, 0.000519f, -0.001390f, -0.002178f, 0.003140f, 0.001182f, -0.003468f, 0.008642f, 0.024970f, 0.008761f, -0.035265f, -0.049325f, 0.007759f, 0.105746f, 0.161266f, 0.101696f, -0.065274f, -0.229396f, -0.257187f, -0.116632f, 0.094802f, 0.240451f, 0.230976f, 0.055049f, -0.196422f, -0.345277f, -0.256628f, 0.016416f, 0.266014f, 0.317287f, 0.159061f, -0.078991f, -0.230896f, -0.207273f, -0.058329f, 0.084873f, 0.143963f, 0.134948f, 0.090702f, 0.018696f, -0.063674f, -0.131507f, -0.180017f, -0.169874f, -0.003485f, 0.301468f, 0.472723f, 0.233945f, -0.287593f, -0.609607f, -0.417999f, 0.108829f, 0.537724f, 0.584882f, 0.248123f, -0.267570f, -0.641654f, -0.595451f, -0.122917f, 0.443556f, 0.677568f, 0.404806f, -0.160655f, -0.583438f, -0.539967f, -0.074916f, 0.431112f, 0.577305f, 0.268166f, -0.234307f, -0.542556f, -0.439331f, -0.021035f, 0.391348f, 0.500851f, 0.252348f, -0.150940f, -0.422825f, -0.397069f, + -0.116897f, 0.215040f, 0.378326f, 0.281929f, 0.016840f, -0.223517f, -0.285299f, -0.150921f, 0.064824f, 0.205529f, 0.186203f, 0.043905f, -0.108352f, -0.170014f, -0.110406f, 0.022238f, 0.130189f, 0.132527f, 0.032663f, -0.083919f, -0.128764f, -0.080520f, 0.017578f, 0.102451f, 0.126707f, 0.076735f, -0.023238f, -0.125560f, -0.179340f, -0.143762f, -0.011073f, 0.161503f, 0.263606f, 0.211305f, 0.023466f, -0.185632f, -0.284776f, -0.207866f, 0.002690f, 0.212376f, 0.279937f, 0.162514f, -0.052390f, -0.218160f, -0.233791f, -0.101898f, 0.082246f, 0.195628f, 0.171554f, 0.043387f, -0.090829f, -0.147029f, -0.105515f, -0.006855f, 0.082753f, 0.110922f, 0.067512f, -0.013413f, -0.078810f, -0.088794f, -0.038068f, 0.039653f, 0.090800f, 0.079988f, 0.016480f, -0.055921f, -0.091303f, -0.067670f, 0.001573f, 0.071708f, 0.093890f, 0.052725f, -0.021866f, -0.080145f, -0.086437f, -0.036745f, 0.038979f, 0.090792f, 0.082215f, 0.019655f, -0.053772f, -0.091807f, -0.071804f, -0.004177f, 0.069176f, 0.096481f, 0.056860f, -0.019434f, -0.079180f, -0.088307f, -0.043982f, 0.031667f, 0.092295f, 0.086506f, 0.010669f, -0.066537f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.007730f, 0.080171f, 0.096212f, 0.007453f, -0.088714f, -0.103934f, -0.054681f, 0.002742f, 0.030848f, 0.014234f, -0.015074f, 0.008277f, 0.076124f, 0.084684f, -0.006643f, -0.087253f, -0.055716f, 0.028293f, 0.051440f, 0.015024f, -0.006997f, 0.000005f, 0.001138f, -0.005280f, 0.001081f, 0.011824f, 0.010214f, 0.004305f, 0.001002f, -0.013290f, -0.037908f, -0.040559f, 0.001925f, 0.068256f, 0.107980f, 0.080616f, -0.011535f, -0.115216f, -0.161664f, -0.120497f, -0.015099f, 0.100268f, 0.160754f, 0.118872f, -0.004851f, -0.116017f, -0.131302f, -0.058630f, + 0.030118f, 0.078435f, 0.072718f, 0.028224f, -0.018292f, -0.029877f, -0.009849f, 0.001907f, -0.014831f, -0.036002f, -0.031315f, 0.001084f, 0.039750f, 0.056956f, 0.037594f, -0.000311f, -0.019439f, -0.010404f, 0.000519f, -0.001390f, -0.002178f, 0.003140f, 0.001182f, -0.003468f, 0.008642f, 0.024970f, 0.008761f, -0.035265f, -0.049325f, 0.007759f, 0.105746f, 0.161266f, 0.101696f, -0.065274f, -0.229396f, -0.257187f, -0.116632f, 0.094802f, 0.240451f, 0.230976f, 0.055049f, -0.196422f, -0.345277f, -0.256628f, 0.016416f, 0.266014f, 0.317287f, 0.159061f, -0.078991f, -0.230896f, -0.207273f, -0.058329f, 0.084873f, 0.143963f, 0.134948f, 0.090702f, 0.018696f, -0.063674f, -0.131507f, -0.180017f, -0.169874f, -0.003485f, 0.301468f, 0.472723f, 0.233945f, -0.287593f, -0.609607f, -0.417999f, 0.108829f, 0.537724f, 0.584882f, 0.248123f, -0.267570f, -0.641654f, -0.595451f, -0.122917f, 0.443556f, 0.677568f, 0.404806f, -0.160655f, -0.583438f, -0.539967f, -0.074916f, 0.431112f, 0.577305f, 0.268166f, -0.234307f, -0.542556f, -0.439331f, -0.021035f, 0.391348f, 0.500851f, 0.252348f, -0.150940f, -0.422825f, -0.397069f, + -0.116897f, 0.215040f, 0.378326f, 0.281929f, 0.016840f, -0.223517f, -0.285299f, -0.150921f, 0.064824f, 0.205529f, 0.186203f, 0.043905f, -0.108352f, -0.170014f, -0.110406f, 0.022238f, 0.130189f, 0.132527f, 0.032663f, -0.083919f, -0.128764f, -0.080520f, 0.017578f, 0.102451f, 0.126707f, 0.076735f, -0.023238f, -0.125560f, -0.179340f, -0.143762f, -0.011073f, 0.161503f, 0.263606f, 0.211305f, 0.023466f, -0.185632f, -0.284776f, -0.207866f, 0.002690f, 0.212376f, 0.279937f, 0.162514f, -0.052390f, -0.218160f, -0.233791f, -0.101898f, 0.082246f, 0.195628f, 0.171554f, 0.043387f, -0.090829f, -0.147029f, -0.105515f, -0.006855f, 0.082753f, 0.110922f, 0.067512f, -0.013413f, -0.078810f, -0.088794f, -0.038068f, 0.039653f, 0.090800f, 0.079988f, 0.016480f, -0.055921f, -0.091303f, -0.067670f, 0.001573f, 0.071708f, 0.093890f, 0.052725f, -0.021866f, -0.080145f, -0.086437f, -0.036745f, 0.038979f, 0.090792f, 0.082215f, 0.019655f, -0.053772f, -0.091807f, -0.071804f, -0.004177f, 0.069176f, 0.096481f, 0.056860f, -0.019434f, -0.079180f, -0.088307f, -0.043982f, 0.031667f, 0.092295f, 0.086506f, 0.010669f, -0.066537f}, + }, + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000327f, 0.001149f, -0.001510f, -0.008875f, -0.013050f, -0.005400f, 0.006851f, 0.005697f, -0.004945f, 0.013396f, 0.085505f, 0.158040f, 0.116276f, -0.095826f, -0.368269f, -0.475353f, -0.275082f, 0.133924f, 0.471111f, 0.499817f, 0.208594f, -0.193243f, -0.433758f, -0.369791f, -0.086437f, 0.181035f, 0.254309f, 0.148962f, 0.004731f, -0.076945f, -0.088131f, -0.056202f, -0.006669f, 0.027204f, 0.022895f, 0.000684f, -0.004473f, 0.005340f, 0.005248f, -0.004123f, -0.004397f, 0.001279f, -0.002808f, -0.011437f, -0.009031f, 0.000818f, 0.005239f, 0.005567f, + 0.007356f, 0.003631f, -0.012304f, -0.031082f, -0.036115f, -0.017571f, 0.021401f, 0.057430f, 0.054753f, 0.001687f, -0.067438f, -0.102302f, -0.078150f, -0.003504f, 0.083909f, 0.119950f, 0.056626f, -0.069752f, -0.145224f, -0.085262f, 0.075195f, 0.205974f, 0.184298f, -0.005876f, -0.234742f, -0.301243f, -0.108422f, 0.217492f, 0.414957f, 0.308768f, -0.049415f, -0.417879f, -0.518794f, -0.228948f, 0.288208f, 0.651212f, 0.551072f, 0.028210f, -0.539480f, -0.733233f, -0.410640f, 0.197876f, 0.660132f, 0.652053f, 0.188796f, -0.392887f, -0.683422f, -0.489760f, 0.034198f, 0.499410f, 0.570852f, 0.227312f, -0.236280f, -0.475140f, -0.367411f, -0.047930f, 0.256088f, 0.380255f, 0.276559f, 0.013879f, -0.247742f, -0.337521f, -0.190860f, 0.087123f, 0.285518f, 0.252854f, 0.030399f, -0.182966f, -0.214837f, -0.064549f, 0.131073f, 0.236061f, 0.195218f, 0.026904f, -0.190215f, -0.324567f, -0.259257f, -0.006849f, 0.256257f, 0.316266f, 0.112512f, -0.196917f, -0.367722f, -0.271179f, 0.020084f, 0.306344f, 0.398206f, 0.228598f, -0.096095f, -0.350105f, -0.354227f, -0.122532f, 0.165257f, 0.324178f, 0.274840f, 0.046578f, + -0.239456f, -0.396293f, -0.283542f, 0.049290f, 0.369058f, 0.444192f, 0.222903f, -0.144721f, -0.413398f, -0.395543f, -0.096478f, 0.265150f, 0.416012f, 0.252095f, -0.084706f, -0.339563f, -0.343637f, -0.116710f, 0.170605f, 0.325909f, 0.265454f, 0.055553f, -0.156549f, -0.250492f, -0.195198f, -0.044902f, 0.107435f, 0.187442f, 0.171465f, 0.077636f, -0.054117f, -0.164682f, -0.186936f, -0.092831f, 0.066541f, 0.187819f, 0.191041f, 0.073321f, -0.092553f, -0.200977f, -0.178052f, -0.036462f, 0.126972f, 0.200887f, 0.139288f, -0.011540f, -0.149039f, -0.183038f, -0.096673f, 0.042475f, 0.136055f, 0.129793f, 0.044094f, -0.054773f, -0.104572f, -0.082108f, -0.011804f, 0.054461f, 0.075419f, 0.046094f, -0.008119f, -0.053533f, -0.064440f, -0.033454f, 0.021056f, 0.062458f, 0.061831f, 0.020243f, -0.033654f, -0.064888f, -0.053746f, -0.007058f, 0.045056f, 0.067772f, 0.045297f, -0.007897f, -0.056502f, -0.067208f, -0.031054f, 0.028539f, 0.070332f, 0.064933f, 0.016397f, -0.041962f, -0.071918f, -0.054754f, -0.001494f, 0.053749f, 0.074108f, 0.044716f, -0.014964f, -0.063856f, -0.069271f, -0.029502f, 0.028269f, 0.068611f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000327f, 0.001149f, -0.001510f, -0.008875f, -0.013050f, -0.005400f, 0.006851f, 0.005697f, -0.004945f, 0.013396f, 0.085505f, 0.158040f, 0.116276f, -0.095826f, -0.368269f, -0.475353f, -0.275082f, 0.133924f, 0.471111f, 0.499817f, 0.208594f, -0.193243f, -0.433758f, -0.369791f, -0.086437f, 0.181035f, 0.254309f, 0.148962f, 0.004731f, -0.076945f, -0.088131f, -0.056202f, -0.006669f, 0.027204f, 0.022895f, 0.000684f, -0.004473f, 0.005340f, 0.005248f, -0.004123f, -0.004397f, 0.001279f, -0.002808f, -0.011437f, -0.009031f, 0.000818f, 0.005239f, 0.005567f, + 0.007356f, 0.003631f, -0.012304f, -0.031082f, -0.036115f, -0.017571f, 0.021401f, 0.057430f, 0.054753f, 0.001687f, -0.067438f, -0.102302f, -0.078150f, -0.003504f, 0.083909f, 0.119950f, 0.056626f, -0.069752f, -0.145224f, -0.085262f, 0.075195f, 0.205974f, 0.184298f, -0.005876f, -0.234742f, -0.301243f, -0.108422f, 0.217492f, 0.414957f, 0.308768f, -0.049415f, -0.417879f, -0.518794f, -0.228948f, 0.288208f, 0.651212f, 0.551072f, 0.028210f, -0.539480f, -0.733233f, -0.410640f, 0.197876f, 0.660132f, 0.652053f, 0.188796f, -0.392887f, -0.683422f, -0.489760f, 0.034198f, 0.499410f, 0.570852f, 0.227312f, -0.236280f, -0.475140f, -0.367411f, -0.047930f, 0.256088f, 0.380255f, 0.276559f, 0.013879f, -0.247742f, -0.337521f, -0.190860f, 0.087123f, 0.285518f, 0.252854f, 0.030399f, -0.182966f, -0.214837f, -0.064549f, 0.131073f, 0.236061f, 0.195218f, 0.026904f, -0.190215f, -0.324567f, -0.259257f, -0.006849f, 0.256257f, 0.316266f, 0.112512f, -0.196917f, -0.367722f, -0.271179f, 0.020084f, 0.306344f, 0.398206f, 0.228598f, -0.096095f, -0.350105f, -0.354227f, -0.122532f, 0.165257f, 0.324178f, 0.274840f, 0.046578f, + -0.239456f, -0.396293f, -0.283542f, 0.049290f, 0.369058f, 0.444192f, 0.222903f, -0.144721f, -0.413398f, -0.395543f, -0.096478f, 0.265150f, 0.416012f, 0.252095f, -0.084706f, -0.339563f, -0.343637f, -0.116710f, 0.170605f, 0.325909f, 0.265454f, 0.055553f, -0.156549f, -0.250492f, -0.195198f, -0.044902f, 0.107435f, 0.187442f, 0.171465f, 0.077636f, -0.054117f, -0.164682f, -0.186936f, -0.092831f, 0.066541f, 0.187819f, 0.191041f, 0.073321f, -0.092553f, -0.200977f, -0.178052f, -0.036462f, 0.126972f, 0.200887f, 0.139288f, -0.011540f, -0.149039f, -0.183038f, -0.096673f, 0.042475f, 0.136055f, 0.129793f, 0.044094f, -0.054773f, -0.104572f, -0.082108f, -0.011804f, 0.054461f, 0.075419f, 0.046094f, -0.008119f, -0.053533f, -0.064440f, -0.033454f, 0.021056f, 0.062458f, 0.061831f, 0.020243f, -0.033654f, -0.064888f, -0.053746f, -0.007058f, 0.045056f, 0.067772f, 0.045297f, -0.007897f, -0.056502f, -0.067208f, -0.031054f, 0.028539f, 0.070332f, 0.064933f, 0.016397f, -0.041962f, -0.071918f, -0.054754f, -0.001494f, 0.053749f, 0.074108f, 0.044716f, -0.014964f, -0.063856f, -0.069271f, -0.029502f, 0.028269f, 0.068611f}, + }, + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, -0.001650f, 0.002131f, 0.003699f, 0.018015f, 0.064242f, 0.107522f, 0.065963f, -0.078236f, -0.203752f, -0.155026f, 0.064936f, 0.260026f, 0.234380f, -0.002967f, -0.250633f, -0.311979f, -0.157413f, 0.085478f, 0.257232f, 0.272223f, 0.140708f, -0.061315f, -0.228038f, -0.264726f, -0.143246f, 0.065095f, 0.229598f, 0.252235f, 0.130190f, -0.055249f, -0.194660f, -0.209130f, -0.092916f, 0.077767f, 0.187969f, 0.161978f, 0.020904f, -0.129191f, -0.178216f, -0.099759f, 0.035834f, 0.134150f, 0.150589f, 0.093392f, -0.009029f, -0.111727f, -0.149504f, -0.079671f, + 0.062943f, 0.179178f, 0.183759f, 0.068962f, -0.093868f, -0.202376f, -0.189013f, -0.064375f, 0.095511f, 0.201131f, 0.192756f, 0.064788f, -0.117571f, -0.238342f, -0.209660f, -0.045638f, 0.148811f, 0.255428f, 0.212214f, 0.045870f, -0.139218f, -0.230328f, -0.190110f, -0.063400f, 0.086403f, 0.206773f, 0.236874f, 0.134580f, -0.053003f, -0.199533f, -0.207991f, -0.085018f, 0.084093f, 0.192625f, 0.163707f, 0.009347f, -0.156124f, -0.205377f, -0.106388f, 0.069188f, 0.211250f, 0.227524f, 0.096858f, -0.087808f, -0.179832f, -0.126268f, -0.013394f, 0.056779f, 0.072166f, 0.067684f, 0.052010f, 0.019026f, -0.023587f, -0.065843f, -0.090313f, -0.057207f, 0.042492f, 0.130492f, 0.116776f, 0.023056f, -0.049507f, -0.059530f, -0.042430f, -0.008607f, 0.064413f, 0.134721f, 0.101441f, -0.056342f, -0.220031f, -0.248484f, -0.115583f, 0.082044f, 0.217681f, 0.223750f, 0.119052f, -0.027425f, -0.148334f, -0.193692f, -0.131635f, 0.014790f, 0.139169f, 0.124891f, -0.023249f, -0.157548f, -0.132532f, 0.037638f, 0.186596f, 0.162099f, -0.020981f, -0.195876f, -0.206986f, -0.048555f, 0.149751f, 0.241249f, 0.160341f, -0.043053f, + -0.224330f, -0.237908f, -0.068032f, 0.142219f, 0.225595f, 0.141873f, -0.018455f, -0.139490f, -0.157916f, -0.079896f, 0.030819f, 0.099141f, 0.101601f, 0.069416f, 0.028122f, -0.024162f, -0.071551f, -0.069560f, -0.006459f, 0.066288f, 0.090654f, 0.058422f, -0.002056f, -0.058552f, -0.079821f, -0.046489f, 0.018498f, 0.056128f, 0.032249f, -0.020748f, -0.040541f, -0.006552f, 0.038588f, 0.039423f, -0.010205f, -0.062478f, -0.068389f, -0.023557f, 0.037460f, 0.074933f, 0.066418f, 0.015831f, -0.044252f, -0.070924f, -0.046419f, 0.007027f, 0.049879f, 0.056053f, 0.025677f, -0.016867f, -0.037888f, -0.022544f, 0.010005f, 0.028291f, 0.021051f, 0.000168f, -0.018491f, -0.024947f, -0.015302f, 0.004559f, 0.020326f, 0.021985f, 0.010917f, -0.005964f, -0.020179f, -0.021675f, -0.007047f, 0.012849f, 0.022995f, 0.018847f, 0.004745f, -0.012889f, -0.023429f, -0.016008f, 0.004955f, 0.020243f, 0.018933f, 0.008218f, -0.002898f, -0.012806f, -0.017203f, -0.008785f, 0.008116f, 0.018601f, 0.015784f, 0.005245f, -0.006941f, -0.016572f, -0.016100f, -0.002218f, 0.014465f, 0.019642f, 0.011677f, -0.000603f, -0.010363f, -0.015605f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, -0.001650f, 0.002131f, 0.003699f, 0.018015f, 0.064242f, 0.107522f, 0.065963f, -0.078236f, -0.203752f, -0.155026f, 0.064936f, 0.260026f, 0.234380f, -0.002967f, -0.250633f, -0.311979f, -0.157413f, 0.085478f, 0.257232f, 0.272223f, 0.140708f, -0.061315f, -0.228038f, -0.264726f, -0.143246f, 0.065095f, 0.229598f, 0.252235f, 0.130190f, -0.055249f, -0.194660f, -0.209130f, -0.092916f, 0.077767f, 0.187969f, 0.161978f, 0.020904f, -0.129191f, -0.178216f, -0.099759f, 0.035834f, 0.134150f, 0.150589f, 0.093392f, -0.009029f, -0.111727f, -0.149504f, -0.079671f, + 0.062943f, 0.179178f, 0.183759f, 0.068962f, -0.093868f, -0.202376f, -0.189013f, -0.064375f, 0.095511f, 0.201131f, 0.192756f, 0.064788f, -0.117571f, -0.238342f, -0.209660f, -0.045638f, 0.148811f, 0.255428f, 0.212214f, 0.045870f, -0.139218f, -0.230328f, -0.190110f, -0.063400f, 0.086403f, 0.206773f, 0.236874f, 0.134580f, -0.053003f, -0.199533f, -0.207991f, -0.085018f, 0.084093f, 0.192625f, 0.163707f, 0.009347f, -0.156124f, -0.205377f, -0.106388f, 0.069188f, 0.211250f, 0.227524f, 0.096858f, -0.087808f, -0.179832f, -0.126268f, -0.013394f, 0.056779f, 0.072166f, 0.067684f, 0.052010f, 0.019026f, -0.023587f, -0.065843f, -0.090313f, -0.057207f, 0.042492f, 0.130492f, 0.116776f, 0.023056f, -0.049507f, -0.059530f, -0.042430f, -0.008607f, 0.064413f, 0.134721f, 0.101441f, -0.056342f, -0.220031f, -0.248484f, -0.115583f, 0.082044f, 0.217681f, 0.223750f, 0.119052f, -0.027425f, -0.148334f, -0.193692f, -0.131635f, 0.014790f, 0.139169f, 0.124891f, -0.023249f, -0.157548f, -0.132532f, 0.037638f, 0.186596f, 0.162099f, -0.020981f, -0.195876f, -0.206986f, -0.048555f, 0.149751f, 0.241249f, 0.160341f, -0.043053f, + -0.224330f, -0.237908f, -0.068032f, 0.142219f, 0.225595f, 0.141873f, -0.018455f, -0.139490f, -0.157916f, -0.079896f, 0.030819f, 0.099141f, 0.101601f, 0.069416f, 0.028122f, -0.024162f, -0.071551f, -0.069560f, -0.006459f, 0.066288f, 0.090654f, 0.058422f, -0.002056f, -0.058552f, -0.079821f, -0.046489f, 0.018498f, 0.056128f, 0.032249f, -0.020748f, -0.040541f, -0.006552f, 0.038588f, 0.039423f, -0.010205f, -0.062478f, -0.068389f, -0.023557f, 0.037460f, 0.074933f, 0.066418f, 0.015831f, -0.044252f, -0.070924f, -0.046419f, 0.007027f, 0.049879f, 0.056053f, 0.025677f, -0.016867f, -0.037888f, -0.022544f, 0.010005f, 0.028291f, 0.021051f, 0.000168f, -0.018491f, -0.024947f, -0.015302f, 0.004559f, 0.020326f, 0.021985f, 0.010917f, -0.005964f, -0.020179f, -0.021675f, -0.007047f, 0.012849f, 0.022995f, 0.018847f, 0.004745f, -0.012889f, -0.023429f, -0.016008f, 0.004955f, 0.020243f, 0.018933f, 0.008218f, -0.002898f, -0.012806f, -0.017203f, -0.008785f, 0.008116f, 0.018601f, 0.015784f, 0.005245f, -0.006941f, -0.016572f, -0.016100f, -0.002218f, 0.014465f, 0.019642f, 0.011677f, -0.000603f, -0.010363f, -0.015605f}, + }, +}; +const float CRendBin_HOA3_HRIR_coeff_im_48kHz[16][BINAURAL_CHANNELS][480]={ + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, -0.406686f, -0.916311f, -0.776905f, -0.168581f, 0.425205f, 0.636435f, 0.425070f, -0.000162f, -0.365426f, -0.470135f, -0.270582f, 0.093760f, 0.379216f, 0.403051f, 0.166769f, -0.162981f, -0.377242f, -0.346050f, -0.084656f, 0.246068f, 0.424945f, 0.321416f, -0.000157f, -0.325238f, -0.441746f, -0.269420f, 0.100379f, 0.443247f, 0.517168f, 0.233068f, -0.243256f, -0.585745f, -0.546118f, -0.134042f, 0.390550f, 0.681408f, 0.524900f, -0.000279f, -0.546398f, -0.733229f, -0.430530f, 0.151091f, 0.622351f, 0.679724f, 0.290383f, -0.291535f, -0.682257f, -0.620194f, + -0.147926f, 0.416165f, 0.697774f, 0.516441f, -0.000268f, -0.505144f, -0.665457f, -0.386360f, 0.134719f, 0.552799f, 0.602178f, 0.256765f, -0.257473f, -0.602188f, -0.547277f, -0.130520f, 0.367287f, 0.616744f, 0.458260f, -0.000240f, -0.455862f, -0.606886f, -0.355227f, 0.124145f, 0.506306f, 0.543219f, 0.226411f, -0.220888f, -0.501728f, -0.442805f, -0.102577f, 0.280284f, 0.456710f, 0.329376f, -0.000167f, -0.312029f, -0.409981f, -0.239168f, 0.084076f, 0.347324f, 0.378898f, 0.160675f, -0.159243f, -0.366667f, -0.327615f, -0.076851f, 0.212953f, 0.352359f, 0.257910f, -0.000132f, -0.248100f, -0.324493f, -0.186869f, 0.064492f, 0.261192f, 0.280044f, 0.117225f, -0.115066f, -0.262397f, -0.231261f, -0.053171f, 0.143696f, 0.232159f, 0.167757f, -0.000086f, -0.167936f, -0.231537f, -0.141943f, 0.051975f, 0.220035f, 0.241196f, 0.100828f, -0.097017f, -0.214966f, -0.184722f, -0.042039f, 0.115059f, 0.192813f, 0.147047f, -0.000081f, -0.165647f, -0.240473f, -0.154700f, 0.059539f, 0.266465f, 0.311091f, 0.139394f, -0.144211f, -0.342827f, -0.313294f, -0.074584f, 0.208411f, 0.346070f, 0.253408f, -0.000131f, -0.244047f, + -0.321480f, -0.188153f, 0.066776f, 0.281749f, 0.318506f, 0.141893f, -0.149179f, -0.365865f, -0.347757f, -0.086339f, 0.251426f, 0.434248f, 0.330165f, -0.000178f, -0.341610f, -0.464530f, -0.278605f, 0.100096f, 0.420751f, 0.465842f, 0.200356f, -0.201556f, -0.471621f, -0.428504f, -0.102153f, 0.287094f, 0.480599f, 0.355219f, -0.000187f, -0.349083f, -0.463702f, -0.272361f, 0.096191f, 0.399467f, 0.439546f, 0.189040f, -0.191217f, -0.451686f, -0.415081f, -0.100038f, 0.283457f, 0.476139f, 0.350859f, -0.000183f, -0.334379f, -0.431096f, -0.243062f, 0.081439f, 0.317065f, 0.323507f, 0.127868f, -0.118102f, -0.253601f, -0.211037f, -0.045859f, 0.116639f, 0.175463f, 0.116291f, -0.000054f, -0.095171f, -0.119829f, -0.068604f, 0.024081f, 0.100131f, 0.110093f, 0.047012f, -0.046950f, -0.109319f, -0.099283f, -0.023776f, 0.067379f, 0.113890f, 0.084956f, -0.000044f, -0.084644f, -0.112954f, -0.066543f, 0.023524f, 0.097504f, 0.106778f, 0.045599f, -0.045737f, -0.107150f, -0.097777f, -0.023452f, 0.066392f, 0.111994f, 0.083487f, -0.000040f, -0.083740f, -0.112411f, -0.066569f, 0.023616f, 0.097929f, 0.107112f, 0.045681f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, -0.406686f, -0.916311f, -0.776905f, -0.168581f, 0.425205f, 0.636435f, 0.425070f, -0.000162f, -0.365426f, -0.470135f, -0.270582f, 0.093760f, 0.379216f, 0.403051f, 0.166769f, -0.162981f, -0.377242f, -0.346050f, -0.084656f, 0.246068f, 0.424945f, 0.321416f, -0.000157f, -0.325238f, -0.441746f, -0.269420f, 0.100379f, 0.443247f, 0.517168f, 0.233068f, -0.243256f, -0.585745f, -0.546118f, -0.134042f, 0.390550f, 0.681408f, 0.524900f, -0.000279f, -0.546398f, -0.733229f, -0.430530f, 0.151091f, 0.622351f, 0.679724f, 0.290383f, -0.291535f, -0.682257f, -0.620194f, + -0.147926f, 0.416165f, 0.697774f, 0.516441f, -0.000268f, -0.505144f, -0.665457f, -0.386360f, 0.134719f, 0.552799f, 0.602178f, 0.256765f, -0.257473f, -0.602188f, -0.547277f, -0.130520f, 0.367287f, 0.616744f, 0.458260f, -0.000240f, -0.455862f, -0.606886f, -0.355227f, 0.124145f, 0.506306f, 0.543219f, 0.226411f, -0.220888f, -0.501728f, -0.442805f, -0.102577f, 0.280284f, 0.456710f, 0.329376f, -0.000167f, -0.312029f, -0.409981f, -0.239168f, 0.084076f, 0.347324f, 0.378898f, 0.160675f, -0.159243f, -0.366667f, -0.327615f, -0.076851f, 0.212953f, 0.352359f, 0.257910f, -0.000132f, -0.248100f, -0.324493f, -0.186869f, 0.064492f, 0.261192f, 0.280044f, 0.117225f, -0.115066f, -0.262397f, -0.231261f, -0.053171f, 0.143696f, 0.232159f, 0.167757f, -0.000086f, -0.167936f, -0.231537f, -0.141943f, 0.051975f, 0.220035f, 0.241196f, 0.100828f, -0.097017f, -0.214966f, -0.184722f, -0.042039f, 0.115059f, 0.192813f, 0.147047f, -0.000081f, -0.165647f, -0.240473f, -0.154700f, 0.059539f, 0.266465f, 0.311091f, 0.139394f, -0.144211f, -0.342827f, -0.313294f, -0.074584f, 0.208411f, 0.346070f, 0.253408f, -0.000131f, -0.244047f, + -0.321480f, -0.188153f, 0.066776f, 0.281749f, 0.318506f, 0.141893f, -0.149179f, -0.365865f, -0.347757f, -0.086339f, 0.251426f, 0.434248f, 0.330165f, -0.000178f, -0.341610f, -0.464530f, -0.278605f, 0.100096f, 0.420751f, 0.465842f, 0.200356f, -0.201556f, -0.471621f, -0.428504f, -0.102153f, 0.287094f, 0.480599f, 0.355219f, -0.000187f, -0.349083f, -0.463702f, -0.272361f, 0.096191f, 0.399467f, 0.439546f, 0.189040f, -0.191217f, -0.451686f, -0.415081f, -0.100038f, 0.283457f, 0.476139f, 0.350859f, -0.000183f, -0.334379f, -0.431096f, -0.243062f, 0.081439f, 0.317065f, 0.323507f, 0.127868f, -0.118102f, -0.253601f, -0.211037f, -0.045859f, 0.116639f, 0.175463f, 0.116291f, -0.000054f, -0.095171f, -0.119829f, -0.068604f, 0.024081f, 0.100131f, 0.110093f, 0.047012f, -0.046950f, -0.109319f, -0.099283f, -0.023776f, 0.067379f, 0.113890f, 0.084956f, -0.000044f, -0.084644f, -0.112954f, -0.066543f, 0.023524f, 0.097504f, 0.106778f, 0.045599f, -0.045737f, -0.107150f, -0.097777f, -0.023452f, 0.066392f, 0.111994f, 0.083487f, -0.000040f, -0.083740f, -0.112411f, -0.066569f, 0.023616f, 0.097929f, 0.107112f, 0.045681f}, + }, + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.087780f, 0.034783f, -0.413938f, -0.823797f, -0.543983f, 0.436677f, 1.233757f, 0.989475f, -0.095621f, -1.001639f, -1.035433f, -0.372840f, 0.409507f, 0.878895f, 0.826752f, 0.264744f, -0.476218f, -0.887350f, -0.687253f, -0.031724f, 0.653354f, 0.948834f, 0.650812f, -0.085492f, -0.784919f, -0.969321f, -0.514591f, 0.275871f, 0.892013f, 0.931647f, 0.355812f, -0.450648f, -0.926747f, -0.756894f, -0.104999f, 0.539320f, 0.740062f, 0.411148f, -0.160397f, -0.551542f, -0.509523f, -0.098904f, 0.377794f, 0.583713f, 0.362555f, -0.131700f, -0.518203f, -0.490341f, + -0.077566f, 0.394207f, 0.578087f, 0.346371f, -0.145178f, -0.554205f, -0.575106f, -0.175832f, 0.363020f, 0.668174f, 0.543344f, 0.072578f, -0.450557f, -0.690324f, -0.478483f, 0.051578f, 0.546468f, 0.685102f, 0.388291f, -0.149357f, -0.584151f, -0.635485f, -0.278158f, 0.238710f, 0.581877f, 0.561078f, 0.216561f, -0.234327f, -0.521286f, -0.478965f, -0.156980f, 0.226995f, 0.452148f, 0.413337f, 0.136988f, -0.233100f, -0.475182f, -0.414639f, -0.069623f, 0.340507f, 0.547074f, 0.409271f, 0.000863f, -0.425779f, -0.590205f, -0.373678f, 0.092797f, 0.512876f, 0.609849f, 0.299398f, -0.232658f, -0.622576f, -0.584180f, -0.137468f, 0.409303f, 0.698841f, 0.553336f, 0.050380f, -0.520212f, -0.787395f, -0.527778f, 0.121555f, 0.696400f, 0.748332f, 0.229190f, -0.448491f, -0.752721f, -0.469500f, 0.148243f, 0.616505f, 0.603205f, 0.153653f, -0.371906f, -0.577748f, -0.331909f, 0.140844f, 0.459451f, 0.405660f, 0.071022f, -0.270205f, -0.395488f, -0.264035f, 0.011192f, 0.267940f, 0.382377f, 0.305412f, 0.069121f, -0.215691f, -0.395409f, -0.361042f, -0.125550f, 0.185657f, 0.409144f, 0.412590f, 0.157751f, -0.233794f, + -0.502975f, -0.432108f, -0.044154f, 0.392922f, 0.569333f, 0.354416f, -0.119076f, -0.532390f, -0.583459f, -0.212406f, 0.328244f, 0.651192f, 0.523222f, 0.028391f, -0.498465f, -0.697298f, -0.423657f, 0.144019f, 0.619250f, 0.678265f, 0.285071f, -0.292456f, -0.670202f, -0.601845f, -0.137501f, 0.412573f, 0.685667f, 0.504744f, -0.009511f, -0.517472f, -0.679384f, -0.381427f, 0.182167f, 0.636590f, 0.676125f, 0.264131f, -0.339109f, -0.735155f, -0.648158f, -0.124121f, 0.487742f, 0.775706f, 0.550902f, -0.027674f, -0.565173f, -0.703385f, -0.372587f, 0.167766f, 0.539407f, 0.525244f, 0.189417f, -0.213885f, -0.425831f, -0.339339f, -0.053499f, 0.211988f, 0.289647f, 0.174299f, -0.017813f, -0.161265f, -0.187359f, -0.094331f, 0.056744f, 0.168407f, 0.167975f, 0.058205f, -0.088054f, -0.176546f, -0.148412f, -0.020000f, 0.122365f, 0.182101f, 0.121609f, -0.016618f, -0.142616f, -0.174255f, -0.089096f, 0.055731f, 0.161268f, 0.158577f, 0.052789f, -0.087269f, -0.171671f, -0.142248f, -0.015778f, 0.121150f, 0.175885f, 0.115837f, -0.018037f, -0.141389f, -0.172452f, -0.085388f, 0.060831f, 0.163879f, 0.160983f, 0.065107f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, -0.087780f, -0.034783f, 0.413938f, 0.823797f, 0.543983f, -0.436677f, -1.233757f, -0.989475f, 0.095621f, 1.001639f, 1.035433f, 0.372840f, -0.409507f, -0.878895f, -0.826752f, -0.264744f, 0.476218f, 0.887350f, 0.687253f, 0.031724f, -0.653354f, -0.948834f, -0.650812f, 0.085492f, 0.784919f, 0.969321f, 0.514591f, -0.275871f, -0.892013f, -0.931647f, -0.355812f, 0.450648f, 0.926747f, 0.756894f, 0.104999f, -0.539320f, -0.740062f, -0.411148f, 0.160397f, 0.551542f, 0.509523f, 0.098904f, -0.377794f, -0.583713f, -0.362555f, 0.131700f, 0.518203f, 0.490341f, + 0.077566f, -0.394207f, -0.578087f, -0.346371f, 0.145178f, 0.554205f, 0.575106f, 0.175832f, -0.363020f, -0.668174f, -0.543344f, -0.072578f, 0.450557f, 0.690324f, 0.478483f, -0.051578f, -0.546468f, -0.685102f, -0.388291f, 0.149357f, 0.584151f, 0.635485f, 0.278158f, -0.238710f, -0.581877f, -0.561078f, -0.216561f, 0.234327f, 0.521286f, 0.478965f, 0.156980f, -0.226995f, -0.452148f, -0.413337f, -0.136988f, 0.233100f, 0.475182f, 0.414639f, 0.069623f, -0.340507f, -0.547074f, -0.409271f, -0.000863f, 0.425779f, 0.590205f, 0.373678f, -0.092797f, -0.512876f, -0.609849f, -0.299398f, 0.232658f, 0.622576f, 0.584180f, 0.137468f, -0.409303f, -0.698841f, -0.553336f, -0.050380f, 0.520212f, 0.787395f, 0.527778f, -0.121555f, -0.696400f, -0.748332f, -0.229190f, 0.448491f, 0.752721f, 0.469500f, -0.148243f, -0.616505f, -0.603205f, -0.153653f, 0.371906f, 0.577748f, 0.331909f, -0.140844f, -0.459451f, -0.405660f, -0.071022f, 0.270205f, 0.395488f, 0.264035f, -0.011192f, -0.267940f, -0.382377f, -0.305412f, -0.069121f, 0.215691f, 0.395409f, 0.361042f, 0.125550f, -0.185657f, -0.409144f, -0.412590f, -0.157751f, 0.233794f, + 0.502975f, 0.432108f, 0.044154f, -0.392922f, -0.569333f, -0.354416f, 0.119076f, 0.532390f, 0.583459f, 0.212406f, -0.328244f, -0.651192f, -0.523222f, -0.028391f, 0.498465f, 0.697298f, 0.423657f, -0.144019f, -0.619250f, -0.678265f, -0.285071f, 0.292456f, 0.670202f, 0.601845f, 0.137501f, -0.412573f, -0.685667f, -0.504744f, 0.009511f, 0.517472f, 0.679384f, 0.381427f, -0.182167f, -0.636590f, -0.676125f, -0.264131f, 0.339109f, 0.735155f, 0.648158f, 0.124121f, -0.487742f, -0.775706f, -0.550902f, 0.027674f, 0.565173f, 0.703385f, 0.372587f, -0.167766f, -0.539407f, -0.525244f, -0.189417f, 0.213885f, 0.425831f, 0.339339f, 0.053499f, -0.211988f, -0.289647f, -0.174299f, 0.017813f, 0.161265f, 0.187359f, 0.094331f, -0.056744f, -0.168407f, -0.167975f, -0.058205f, 0.088054f, 0.176546f, 0.148412f, 0.020000f, -0.122365f, -0.182101f, -0.121609f, 0.016618f, 0.142616f, 0.174255f, 0.089096f, -0.055731f, -0.161268f, -0.158577f, -0.052789f, 0.087269f, 0.171671f, 0.142248f, 0.015778f, -0.121150f, -0.175885f, -0.115837f, 0.018037f, 0.141389f, 0.172452f, 0.085388f, -0.060831f, -0.163879f, -0.160983f, -0.065107f}, + }, + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, -0.025517f, -0.067699f, -0.059711f, 0.021262f, 0.087860f, 0.027591f, -0.108326f, -0.137330f, 0.007956f, 0.194048f, 0.272375f, 0.216915f, 0.050596f, -0.203942f, -0.429350f, -0.421127f, -0.112012f, 0.291505f, 0.491149f, 0.368016f, 0.035459f, -0.288843f, -0.411418f, -0.264177f, 0.032590f, 0.254119f, 0.272205f, 0.141151f, -0.016718f, -0.129969f, -0.169624f, -0.123453f, -0.025280f, 0.060613f, 0.114644f, 0.156595f, 0.158123f, 0.053616f, -0.132617f, -0.257157f, -0.202331f, 0.002510f, 0.223918f, 0.330390f, 0.248375f, -0.004124f, -0.293050f, -0.426163f, + -0.291690f, 0.047258f, 0.385296f, 0.497701f, 0.283097f, -0.145134f, -0.504786f, -0.537128f, -0.202683f, 0.283697f, 0.594348f, 0.501410f, 0.043377f, -0.463815f, -0.632693f, -0.313684f, 0.259594f, 0.644500f, 0.539145f, 0.014675f, -0.537431f, -0.691059f, -0.307837f, 0.334438f, 0.732386f, 0.551981f, -0.085284f, -0.679373f, -0.747874f, -0.221375f, 0.492107f, 0.834003f, 0.544109f, -0.142170f, -0.700227f, -0.732942f, -0.252410f, 0.368068f, 0.691006f, 0.519214f, 0.004620f, -0.482067f, -0.610463f, -0.305588f, 0.210626f, 0.572832f, 0.525182f, 0.105943f, -0.376945f, -0.576442f, -0.368132f, 0.070519f, 0.418647f, 0.455651f, 0.191607f, -0.177875f, -0.414579f, -0.379206f, -0.109506f, 0.206170f, 0.357593f, 0.256331f, -0.017179f, -0.282726f, -0.372674f, -0.223340f, 0.080586f, 0.342315f, 0.381996f, 0.172626f, -0.142659f, -0.363251f, -0.361012f, -0.140006f, 0.169257f, 0.367374f, 0.305339f, 0.012512f, -0.294289f, -0.372321f, -0.156651f, 0.185362f, 0.397383f, 0.335855f, 0.057718f, -0.247914f, -0.394386f, -0.299028f, -0.018637f, 0.279543f, 0.409662f, 0.285932f, -0.015472f, -0.305948f, -0.406582f, -0.255890f, + 0.053658f, 0.325683f, 0.380723f, 0.180789f, -0.139538f, -0.368206f, -0.359929f, -0.123417f, 0.190257f, 0.378439f, 0.313592f, 0.037523f, -0.255435f, -0.356977f, -0.202607f, 0.085024f, 0.299090f, 0.301084f, 0.102785f, -0.159110f, -0.312767f, -0.251894f, -0.007044f, 0.258857f, 0.354691f, 0.203351f, -0.097225f, -0.347096f, -0.382971f, -0.177645f, 0.148663f, 0.398915f, 0.416738f, 0.185500f, -0.158876f, -0.410573f, -0.415867f, -0.166067f, 0.188105f, 0.422600f, 0.387102f, 0.108936f, -0.227910f, -0.407819f, -0.321736f, -0.035784f, 0.252429f, 0.352172f, 0.215080f, -0.043477f, -0.244196f, -0.267093f, -0.114638f, 0.099755f, 0.226546f, 0.185711f, 0.024464f, -0.130888f, -0.179162f, -0.105058f, 0.031653f, 0.140214f, 0.150736f, 0.059181f, -0.069202f, -0.148885f, -0.131041f, -0.027488f, 0.097056f, 0.159295f, 0.114640f, -0.004873f, -0.116593f, -0.149973f, -0.085672f, 0.038646f, 0.142412f, 0.149980f, 0.055433f, -0.069223f, -0.140044f, -0.119708f, -0.021353f, 0.100455f, 0.162696f, 0.112885f, -0.010139f, -0.111545f, -0.132803f, -0.073548f, 0.042236f, 0.155380f, 0.169574f, 0.057460f, -0.059909f, -0.047863f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, -0.025517f, -0.067699f, -0.059711f, 0.021262f, 0.087860f, 0.027591f, -0.108326f, -0.137330f, 0.007956f, 0.194048f, 0.272375f, 0.216915f, 0.050596f, -0.203942f, -0.429350f, -0.421127f, -0.112012f, 0.291505f, 0.491149f, 0.368016f, 0.035459f, -0.288843f, -0.411418f, -0.264177f, 0.032590f, 0.254119f, 0.272205f, 0.141151f, -0.016718f, -0.129969f, -0.169624f, -0.123453f, -0.025280f, 0.060613f, 0.114644f, 0.156595f, 0.158123f, 0.053616f, -0.132617f, -0.257157f, -0.202331f, 0.002510f, 0.223918f, 0.330390f, 0.248375f, -0.004124f, -0.293050f, -0.426163f, + -0.291690f, 0.047258f, 0.385296f, 0.497701f, 0.283097f, -0.145134f, -0.504786f, -0.537128f, -0.202683f, 0.283697f, 0.594348f, 0.501410f, 0.043377f, -0.463815f, -0.632693f, -0.313684f, 0.259594f, 0.644500f, 0.539145f, 0.014675f, -0.537431f, -0.691059f, -0.307837f, 0.334438f, 0.732386f, 0.551981f, -0.085284f, -0.679373f, -0.747874f, -0.221375f, 0.492107f, 0.834003f, 0.544109f, -0.142170f, -0.700227f, -0.732942f, -0.252410f, 0.368068f, 0.691006f, 0.519214f, 0.004620f, -0.482067f, -0.610463f, -0.305588f, 0.210626f, 0.572832f, 0.525182f, 0.105943f, -0.376945f, -0.576442f, -0.368132f, 0.070519f, 0.418647f, 0.455651f, 0.191607f, -0.177875f, -0.414579f, -0.379206f, -0.109506f, 0.206170f, 0.357593f, 0.256331f, -0.017179f, -0.282726f, -0.372674f, -0.223340f, 0.080586f, 0.342315f, 0.381996f, 0.172626f, -0.142659f, -0.363251f, -0.361012f, -0.140006f, 0.169257f, 0.367374f, 0.305339f, 0.012512f, -0.294289f, -0.372321f, -0.156651f, 0.185362f, 0.397383f, 0.335855f, 0.057718f, -0.247914f, -0.394386f, -0.299028f, -0.018637f, 0.279543f, 0.409662f, 0.285932f, -0.015472f, -0.305948f, -0.406582f, -0.255890f, + 0.053658f, 0.325683f, 0.380723f, 0.180789f, -0.139538f, -0.368206f, -0.359929f, -0.123417f, 0.190257f, 0.378439f, 0.313592f, 0.037523f, -0.255435f, -0.356977f, -0.202607f, 0.085024f, 0.299090f, 0.301084f, 0.102785f, -0.159110f, -0.312767f, -0.251894f, -0.007044f, 0.258857f, 0.354691f, 0.203351f, -0.097225f, -0.347096f, -0.382971f, -0.177645f, 0.148663f, 0.398915f, 0.416738f, 0.185500f, -0.158876f, -0.410573f, -0.415867f, -0.166067f, 0.188105f, 0.422600f, 0.387102f, 0.108936f, -0.227910f, -0.407819f, -0.321736f, -0.035784f, 0.252429f, 0.352172f, 0.215080f, -0.043477f, -0.244196f, -0.267093f, -0.114638f, 0.099755f, 0.226546f, 0.185711f, 0.024464f, -0.130888f, -0.179162f, -0.105058f, 0.031653f, 0.140214f, 0.150736f, 0.059181f, -0.069202f, -0.148885f, -0.131041f, -0.027488f, 0.097056f, 0.159295f, 0.114640f, -0.004873f, -0.116593f, -0.149973f, -0.085672f, 0.038646f, 0.142412f, 0.149980f, 0.055433f, -0.069223f, -0.140044f, -0.119708f, -0.021353f, 0.100455f, 0.162696f, 0.112885f, -0.010139f, -0.111545f, -0.132803f, -0.073548f, 0.042236f, 0.155380f, 0.169574f, 0.057460f, -0.059909f, -0.047863f}, + }, + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, -0.002042f, -0.006491f, 0.018221f, 0.092898f, 0.127745f, 0.004944f, -0.214720f, -0.308788f, -0.162474f, 0.092986f, 0.251560f, 0.234412f, 0.083566f, -0.125155f, -0.287854f, -0.283387f, -0.080378f, 0.190266f, 0.331773f, 0.251119f, 0.021695f, -0.193673f, -0.264877f, -0.171801f, 0.004549f, 0.158511f, 0.224994f, 0.180326f, 0.026145f, -0.184598f, -0.327040f, -0.271230f, -0.002284f, 0.330335f, 0.495187f, 0.338006f, -0.087956f, -0.519361f, -0.646496f, -0.348137f, 0.197506f, 0.634013f, 0.678719f, 0.305470f, -0.251442f, -0.647353f, -0.638588f, -0.236921f, + 0.297457f, 0.629639f, 0.565555f, 0.160782f, -0.327654f, -0.598011f, -0.485372f, -0.070825f, 0.366988f, 0.546173f, 0.377458f, 0.004954f, -0.322284f, -0.422858f, -0.275356f, 0.000175f, 0.231296f, 0.295098f, 0.181142f, -0.015521f, -0.163076f, -0.178732f, -0.077093f, 0.050988f, 0.113344f, 0.084894f, 0.013667f, -0.033031f, -0.028412f, -0.002410f, -0.005173f, -0.048725f, -0.083229f, -0.046604f, 0.053409f, 0.126674f, 0.092061f, -0.029391f, -0.134050f, -0.138879f, -0.044209f, 0.088821f, 0.183007f, 0.170971f, 0.031138f, -0.166987f, -0.279645f, -0.197623f, 0.044871f, 0.278749f, 0.328486f, 0.149138f, -0.137275f, -0.329254f, -0.292843f, -0.058911f, 0.208882f, 0.345092f, 0.287084f, 0.073299f, -0.205124f, -0.412796f, -0.386387f, -0.060468f, 0.380508f, 0.568573f, 0.282760f, -0.284209f, -0.660275f, -0.521323f, 0.032309f, 0.592909f, 0.771411f, 0.437093f, -0.219405f, -0.769081f, -0.788554f, -0.202492f, 0.564137f, 0.882809f, 0.479902f, -0.293536f, -0.782195f, -0.616147f, 0.007175f, 0.556066f, 0.622891f, 0.209705f, -0.323401f, -0.558312f, -0.339903f, 0.123130f, 0.455170f, 0.423068f, 0.085888f, -0.295424f, + -0.456307f, -0.291706f, 0.079549f, 0.388307f, 0.411052f, 0.143068f, -0.211238f, -0.408239f, -0.328078f, -0.029436f, 0.290498f, 0.409966f, 0.239139f, -0.097049f, -0.353140f, -0.358326f, -0.127053f, 0.182945f, 0.380494f, 0.340097f, 0.074494f, -0.253578f, -0.425937f, -0.322690f, -0.008094f, 0.318068f, 0.451161f, 0.303215f, -0.042894f, -0.373736f, -0.473120f, -0.268560f, 0.110137f, 0.414847f, 0.448693f, 0.196000f, -0.175555f, -0.429028f, -0.406398f, -0.125281f, 0.228779f, 0.419947f, 0.324761f, 0.020887f, -0.274691f, -0.368011f, -0.218720f, 0.050806f, 0.254606f, 0.271265f, 0.116064f, -0.086465f, -0.201197f, -0.172146f, -0.042872f, 0.089079f, 0.141235f, 0.095566f, -0.000442f, -0.078029f, -0.095621f, -0.053399f, 0.019395f, 0.079568f, 0.088155f, 0.037208f, -0.038715f, -0.087559f, -0.078549f, -0.019164f, 0.053077f, 0.091282f, 0.068080f, -0.001467f, -0.069128f, -0.091243f, -0.057087f, 0.011523f, 0.074465f, 0.091834f, 0.049379f, -0.025895f, -0.083191f, -0.085646f, -0.033098f, 0.041158f, 0.089334f, 0.078023f, 0.014096f, -0.058479f, -0.092419f, -0.067902f, 0.000366f, 0.070053f, 0.090574f, 0.041310f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, -0.002042f, -0.006491f, 0.018221f, 0.092898f, 0.127745f, 0.004944f, -0.214720f, -0.308788f, -0.162474f, 0.092986f, 0.251560f, 0.234412f, 0.083566f, -0.125155f, -0.287854f, -0.283387f, -0.080378f, 0.190266f, 0.331773f, 0.251119f, 0.021695f, -0.193673f, -0.264877f, -0.171801f, 0.004549f, 0.158511f, 0.224994f, 0.180326f, 0.026145f, -0.184598f, -0.327040f, -0.271230f, -0.002284f, 0.330335f, 0.495187f, 0.338006f, -0.087956f, -0.519361f, -0.646496f, -0.348137f, 0.197506f, 0.634013f, 0.678719f, 0.305470f, -0.251442f, -0.647353f, -0.638588f, -0.236921f, + 0.297457f, 0.629639f, 0.565555f, 0.160782f, -0.327654f, -0.598011f, -0.485372f, -0.070825f, 0.366988f, 0.546173f, 0.377458f, 0.004954f, -0.322284f, -0.422858f, -0.275356f, 0.000175f, 0.231296f, 0.295098f, 0.181142f, -0.015521f, -0.163076f, -0.178732f, -0.077093f, 0.050988f, 0.113344f, 0.084894f, 0.013667f, -0.033031f, -0.028412f, -0.002410f, -0.005173f, -0.048725f, -0.083229f, -0.046604f, 0.053409f, 0.126674f, 0.092061f, -0.029391f, -0.134050f, -0.138879f, -0.044209f, 0.088821f, 0.183007f, 0.170971f, 0.031138f, -0.166987f, -0.279645f, -0.197623f, 0.044871f, 0.278749f, 0.328486f, 0.149138f, -0.137275f, -0.329254f, -0.292843f, -0.058911f, 0.208882f, 0.345092f, 0.287084f, 0.073299f, -0.205124f, -0.412796f, -0.386387f, -0.060468f, 0.380508f, 0.568573f, 0.282760f, -0.284209f, -0.660275f, -0.521323f, 0.032309f, 0.592909f, 0.771411f, 0.437093f, -0.219405f, -0.769081f, -0.788554f, -0.202492f, 0.564137f, 0.882809f, 0.479902f, -0.293536f, -0.782195f, -0.616147f, 0.007175f, 0.556066f, 0.622891f, 0.209705f, -0.323401f, -0.558312f, -0.339903f, 0.123130f, 0.455170f, 0.423068f, 0.085888f, -0.295424f, + -0.456307f, -0.291706f, 0.079549f, 0.388307f, 0.411052f, 0.143068f, -0.211238f, -0.408239f, -0.328078f, -0.029436f, 0.290498f, 0.409966f, 0.239139f, -0.097049f, -0.353140f, -0.358326f, -0.127053f, 0.182945f, 0.380494f, 0.340097f, 0.074494f, -0.253578f, -0.425937f, -0.322690f, -0.008094f, 0.318068f, 0.451161f, 0.303215f, -0.042894f, -0.373736f, -0.473120f, -0.268560f, 0.110137f, 0.414847f, 0.448693f, 0.196000f, -0.175555f, -0.429028f, -0.406398f, -0.125281f, 0.228779f, 0.419947f, 0.324761f, 0.020887f, -0.274691f, -0.368011f, -0.218720f, 0.050806f, 0.254606f, 0.271265f, 0.116064f, -0.086465f, -0.201197f, -0.172146f, -0.042872f, 0.089079f, 0.141235f, 0.095566f, -0.000442f, -0.078029f, -0.095621f, -0.053399f, 0.019395f, 0.079568f, 0.088155f, 0.037208f, -0.038715f, -0.087559f, -0.078549f, -0.019164f, 0.053077f, 0.091282f, 0.068080f, -0.001467f, -0.069128f, -0.091243f, -0.057087f, 0.011523f, 0.074465f, 0.091834f, 0.049379f, -0.025895f, -0.083191f, -0.085646f, -0.033098f, 0.041158f, 0.089334f, 0.078023f, 0.014096f, -0.058479f, -0.092419f, -0.067902f, 0.000366f, 0.070053f, 0.090574f, 0.041310f}, + }, + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.003854f, -0.002454f, -0.022086f, -0.000377f, 0.099186f, 0.181826f, 0.082117f, -0.191030f, -0.382764f, -0.275736f, 0.046776f, 0.319743f, 0.373084f, 0.196545f, -0.129348f, -0.426531f, -0.463165f, -0.170663f, 0.234211f, 0.450413f, 0.367178f, 0.088909f, -0.209233f, -0.373904f, -0.319643f, -0.083985f, 0.189536f, 0.354198f, 0.324794f, 0.088057f, -0.253456f, -0.473396f, -0.380271f, -0.013515f, 0.375516f, 0.533160f, 0.366842f, -0.026016f, -0.405414f, -0.516172f, -0.275535f, 0.149100f, 0.475596f, 0.509776f, 0.240014f, -0.174033f, -0.475619f, -0.463786f, + -0.150085f, 0.245628f, 0.469369f, 0.399923f, 0.094880f, -0.255347f, -0.435018f, -0.343453f, -0.059914f, 0.236384f, 0.392555f, 0.338117f, 0.096408f, -0.205750f, -0.388085f, -0.341328f, -0.107118f, 0.165637f, 0.321632f, 0.280715f, 0.085199f, -0.122724f, -0.214422f, -0.174680f, -0.073073f, 0.029600f, 0.105485f, 0.129493f, 0.087307f, 0.002712f, -0.079435f, -0.121863f, -0.094123f, 0.009993f, 0.128396f, 0.155813f, 0.052664f, -0.102755f, -0.192455f, -0.158217f, -0.023036f, 0.132331f, 0.204180f, 0.135704f, -0.021108f, -0.146438f, -0.165069f, -0.091885f, 0.018978f, 0.119173f, 0.163471f, 0.118366f, -0.003758f, -0.140068f, -0.212421f, -0.162368f, 0.016139f, 0.238529f, 0.344363f, 0.213777f, -0.100655f, -0.379000f, -0.401132f, -0.130592f, 0.246999f, 0.460475f, 0.354353f, 0.002978f, -0.344171f, -0.442839f, -0.227748f, 0.142544f, 0.397859f, 0.348292f, 0.026927f, -0.320921f, -0.414965f, -0.169154f, 0.220157f, 0.432886f, 0.302939f, -0.050896f, -0.353421f, -0.401488f, -0.182011f, 0.153726f, 0.383482f, 0.342808f, 0.051482f, -0.278221f, -0.402450f, -0.235217f, 0.103739f, 0.381982f, 0.393633f, 0.098035f, + -0.306973f, -0.499282f, -0.308403f, 0.114133f, 0.430858f, 0.413902f, 0.102947f, -0.264072f, -0.428247f, -0.279189f, 0.060416f, 0.318844f, 0.301773f, 0.054540f, -0.206693f, -0.298903f, -0.190084f, 0.031604f, 0.234225f, 0.298053f, 0.173879f, -0.067638f, -0.265789f, -0.285611f, -0.118197f, 0.124190f, 0.293458f, 0.288596f, 0.101340f, -0.167947f, -0.345069f, -0.292162f, -0.028544f, 0.263952f, 0.378992f, 0.241019f, -0.054335f, -0.317360f, -0.381380f, -0.201627f, 0.106898f, 0.336272f, 0.333980f, 0.115250f, -0.158787f, -0.307674f, -0.252085f, -0.050007f, 0.156659f, 0.240812f, 0.168034f, 0.004842f, -0.136796f, -0.172650f, -0.094885f, 0.028554f, 0.107929f, 0.100761f, 0.033262f, -0.038872f, -0.075897f, -0.064669f, -0.013631f, 0.046785f, 0.075843f, 0.053090f, -0.004645f, -0.058977f, -0.076249f, -0.044427f, 0.017911f, 0.067960f, 0.069799f, 0.024580f, -0.034779f, -0.072813f, -0.069371f, -0.023984f, 0.039281f, 0.079038f, 0.066652f, 0.010641f, -0.052110f, -0.082806f, -0.060994f, 0.002104f, 0.063874f, 0.079954f, 0.041730f, -0.022081f, -0.073967f, -0.084637f, -0.040362f, 0.034910f, 0.076712f, 0.039734f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, -0.003854f, 0.002454f, 0.022086f, 0.000377f, -0.099186f, -0.181826f, -0.082117f, 0.191030f, 0.382764f, 0.275736f, -0.046776f, -0.319743f, -0.373084f, -0.196545f, 0.129348f, 0.426531f, 0.463165f, 0.170663f, -0.234211f, -0.450413f, -0.367178f, -0.088909f, 0.209233f, 0.373904f, 0.319643f, 0.083985f, -0.189536f, -0.354198f, -0.324794f, -0.088057f, 0.253456f, 0.473396f, 0.380271f, 0.013515f, -0.375516f, -0.533160f, -0.366842f, 0.026016f, 0.405414f, 0.516172f, 0.275535f, -0.149100f, -0.475596f, -0.509776f, -0.240014f, 0.174033f, 0.475619f, 0.463786f, + 0.150085f, -0.245628f, -0.469369f, -0.399923f, -0.094880f, 0.255347f, 0.435018f, 0.343453f, 0.059914f, -0.236384f, -0.392555f, -0.338117f, -0.096408f, 0.205750f, 0.388085f, 0.341328f, 0.107118f, -0.165637f, -0.321632f, -0.280715f, -0.085199f, 0.122724f, 0.214422f, 0.174680f, 0.073073f, -0.029600f, -0.105485f, -0.129493f, -0.087307f, -0.002712f, 0.079435f, 0.121863f, 0.094123f, -0.009993f, -0.128396f, -0.155813f, -0.052664f, 0.102755f, 0.192455f, 0.158217f, 0.023036f, -0.132331f, -0.204180f, -0.135704f, 0.021108f, 0.146438f, 0.165069f, 0.091885f, -0.018978f, -0.119173f, -0.163471f, -0.118366f, 0.003758f, 0.140068f, 0.212421f, 0.162368f, -0.016139f, -0.238529f, -0.344363f, -0.213777f, 0.100655f, 0.379000f, 0.401132f, 0.130592f, -0.246999f, -0.460475f, -0.354353f, -0.002978f, 0.344171f, 0.442839f, 0.227748f, -0.142544f, -0.397859f, -0.348292f, -0.026927f, 0.320921f, 0.414965f, 0.169154f, -0.220157f, -0.432886f, -0.302939f, 0.050896f, 0.353421f, 0.401488f, 0.182011f, -0.153726f, -0.383482f, -0.342808f, -0.051482f, 0.278221f, 0.402450f, 0.235217f, -0.103739f, -0.381982f, -0.393633f, -0.098035f, + 0.306973f, 0.499282f, 0.308403f, -0.114133f, -0.430858f, -0.413902f, -0.102947f, 0.264072f, 0.428247f, 0.279189f, -0.060416f, -0.318844f, -0.301773f, -0.054540f, 0.206693f, 0.298903f, 0.190084f, -0.031604f, -0.234225f, -0.298053f, -0.173879f, 0.067638f, 0.265789f, 0.285611f, 0.118197f, -0.124190f, -0.293458f, -0.288596f, -0.101340f, 0.167947f, 0.345069f, 0.292162f, 0.028544f, -0.263952f, -0.378992f, -0.241019f, 0.054335f, 0.317360f, 0.381380f, 0.201627f, -0.106898f, -0.336272f, -0.333980f, -0.115250f, 0.158787f, 0.307674f, 0.252085f, 0.050007f, -0.156659f, -0.240812f, -0.168034f, -0.004842f, 0.136796f, 0.172650f, 0.094885f, -0.028554f, -0.107929f, -0.100761f, -0.033262f, 0.038872f, 0.075897f, 0.064669f, 0.013631f, -0.046785f, -0.075843f, -0.053090f, 0.004645f, 0.058977f, 0.076249f, 0.044427f, -0.017911f, -0.067960f, -0.069799f, -0.024580f, 0.034779f, 0.072813f, 0.069371f, 0.023984f, -0.039281f, -0.079038f, -0.066652f, -0.010641f, 0.052110f, 0.082806f, 0.060994f, -0.002104f, -0.063874f, -0.079954f, -0.041730f, 0.022081f, 0.073967f, 0.084637f, 0.040362f, -0.034910f, -0.076712f, -0.039734f}, + }, + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.005709f, 0.010879f, 0.009029f, 0.014497f, 0.028118f, 0.021796f, -0.021635f, -0.064568f, -0.047591f, 0.042919f, 0.174684f, 0.301101f, 0.332552f, 0.139058f, -0.285986f, -0.680942f, -0.690074f, -0.235770f, 0.371505f, 0.717305f, 0.607821f, 0.149400f, -0.355819f, -0.587628f, -0.424676f, -0.044500f, 0.253404f, 0.325305f, 0.232083f, 0.075946f, -0.087783f, -0.205289f, -0.223487f, -0.148160f, -0.024157f, 0.123773f, 0.256550f, 0.273946f, 0.108835f, -0.147011f, -0.299983f, -0.237365f, -0.007863f, 0.241826f, 0.354261f, 0.236794f, -0.059506f, -0.339076f, + -0.399689f, -0.193065f, 0.144588f, 0.392061f, 0.380405f, 0.103797f, -0.255794f, -0.442426f, -0.316587f, 0.036976f, 0.368425f, 0.433591f, 0.169769f, -0.232483f, -0.450807f, -0.296888f, 0.104189f, 0.411974f, 0.362406f, -0.011734f, -0.403521f, -0.469538f, -0.117832f, 0.377352f, 0.577477f, 0.269446f, -0.316408f, -0.688907f, -0.515612f, 0.096039f, 0.674967f, 0.745717f, 0.210455f, -0.535597f, -0.890832f, -0.545716f, 0.238937f, 0.845389f, 0.812579f, 0.187246f, -0.553728f, -0.880919f, -0.576103f, 0.139507f, 0.760209f, 0.839593f, 0.313174f, -0.438439f, -0.863970f, -0.657743f, 0.012880f, 0.647436f, 0.797104f, 0.389259f, -0.246367f, -0.651229f, -0.585642f, -0.173294f, 0.255041f, 0.445532f, 0.365919f, 0.132196f, -0.123863f, -0.296386f, -0.300366f, -0.121130f, 0.131319f, 0.283905f, 0.243382f, 0.058090f, -0.149195f, -0.264318f, -0.213203f, 0.002935f, 0.259571f, 0.354185f, 0.176462f, -0.158878f, -0.385738f, -0.314241f, 0.006883f, 0.335851f, 0.433027f, 0.234293f, -0.120865f, -0.399749f, -0.428525f, -0.192458f, 0.159989f, 0.409771f, 0.407355f, 0.165311f, -0.162093f, -0.380703f, -0.363178f, -0.121368f, + 0.182185f, 0.329147f, 0.217130f, -0.048149f, -0.252168f, -0.259387f, -0.096887f, 0.107149f, 0.223963f, 0.189895f, 0.036484f, -0.126658f, -0.188116f, -0.115829f, 0.029570f, 0.148143f, 0.165768f, 0.073698f, -0.070049f, -0.178073f, -0.184208f, -0.074274f, 0.104605f, 0.251155f, 0.256659f, 0.088232f, -0.165369f, -0.345102f, -0.327842f, -0.103404f, 0.212314f, 0.430302f, 0.401416f, 0.127795f, -0.226722f, -0.445483f, -0.395788f, -0.104505f, 0.252892f, 0.449886f, 0.358255f, 0.043671f, -0.282581f, -0.414055f, -0.278763f, 0.024871f, 0.291543f, 0.345936f, 0.169233f, -0.096153f, -0.268652f, -0.253507f, -0.080338f, 0.130126f, 0.236498f, 0.171425f, -0.002885f, -0.150201f, -0.177162f, -0.087915f, 0.048552f, 0.147533f, 0.146069f, 0.043356f, -0.088375f, -0.157521f, -0.122364f, -0.009444f, 0.111084f, 0.161539f, 0.104040f, -0.023391f, -0.131482f, -0.150006f, -0.070957f, 0.056616f, 0.151137f, 0.143361f, 0.035919f, -0.089690f, -0.145884f, -0.105556f, 0.001895f, 0.116345f, 0.162221f, 0.096910f, -0.032915f, -0.126565f, -0.128302f, -0.052313f, 0.064005f, 0.162674f, 0.158987f, 0.035724f, -0.081075f, -0.056659f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, -0.005709f, -0.010879f, -0.009029f, -0.014497f, -0.028118f, -0.021796f, 0.021635f, 0.064568f, 0.047591f, -0.042919f, -0.174684f, -0.301101f, -0.332552f, -0.139058f, 0.285986f, 0.680942f, 0.690074f, 0.235770f, -0.371505f, -0.717305f, -0.607821f, -0.149400f, 0.355819f, 0.587628f, 0.424676f, 0.044500f, -0.253404f, -0.325305f, -0.232083f, -0.075946f, 0.087783f, 0.205289f, 0.223487f, 0.148160f, 0.024157f, -0.123773f, -0.256550f, -0.273946f, -0.108835f, 0.147011f, 0.299983f, 0.237365f, 0.007863f, -0.241826f, -0.354261f, -0.236794f, 0.059506f, 0.339076f, + 0.399689f, 0.193065f, -0.144588f, -0.392061f, -0.380405f, -0.103797f, 0.255794f, 0.442426f, 0.316587f, -0.036976f, -0.368425f, -0.433591f, -0.169769f, 0.232483f, 0.450807f, 0.296888f, -0.104189f, -0.411974f, -0.362406f, 0.011734f, 0.403521f, 0.469538f, 0.117832f, -0.377352f, -0.577477f, -0.269446f, 0.316408f, 0.688907f, 0.515612f, -0.096039f, -0.674967f, -0.745717f, -0.210455f, 0.535597f, 0.890832f, 0.545716f, -0.238937f, -0.845389f, -0.812579f, -0.187246f, 0.553728f, 0.880919f, 0.576103f, -0.139507f, -0.760209f, -0.839593f, -0.313174f, 0.438439f, 0.863970f, 0.657743f, -0.012880f, -0.647436f, -0.797104f, -0.389259f, 0.246367f, 0.651229f, 0.585642f, 0.173294f, -0.255041f, -0.445532f, -0.365919f, -0.132196f, 0.123863f, 0.296386f, 0.300366f, 0.121130f, -0.131319f, -0.283905f, -0.243382f, -0.058090f, 0.149195f, 0.264318f, 0.213203f, -0.002935f, -0.259571f, -0.354185f, -0.176462f, 0.158878f, 0.385738f, 0.314241f, -0.006883f, -0.335851f, -0.433027f, -0.234293f, 0.120865f, 0.399749f, 0.428525f, 0.192458f, -0.159989f, -0.409771f, -0.407355f, -0.165311f, 0.162093f, 0.380703f, 0.363178f, 0.121368f, + -0.182185f, -0.329147f, -0.217130f, 0.048149f, 0.252168f, 0.259387f, 0.096887f, -0.107149f, -0.223963f, -0.189895f, -0.036484f, 0.126658f, 0.188116f, 0.115829f, -0.029570f, -0.148143f, -0.165768f, -0.073698f, 0.070049f, 0.178073f, 0.184208f, 0.074274f, -0.104605f, -0.251155f, -0.256659f, -0.088232f, 0.165369f, 0.345102f, 0.327842f, 0.103404f, -0.212314f, -0.430302f, -0.401416f, -0.127795f, 0.226722f, 0.445483f, 0.395788f, 0.104505f, -0.252892f, -0.449886f, -0.358255f, -0.043671f, 0.282581f, 0.414055f, 0.278763f, -0.024871f, -0.291543f, -0.345936f, -0.169233f, 0.096153f, 0.268652f, 0.253507f, 0.080338f, -0.130126f, -0.236498f, -0.171425f, 0.002885f, 0.150201f, 0.177162f, 0.087915f, -0.048552f, -0.147533f, -0.146069f, -0.043356f, 0.088375f, 0.157521f, 0.122364f, 0.009444f, -0.111084f, -0.161539f, -0.104040f, 0.023391f, 0.131482f, 0.150006f, 0.070957f, -0.056616f, -0.151137f, -0.143361f, -0.035919f, 0.089690f, 0.145884f, 0.105556f, -0.001895f, -0.116345f, -0.162221f, -0.096910f, 0.032915f, 0.126565f, 0.128302f, 0.052313f, -0.064005f, -0.162674f, -0.158987f, -0.035724f, 0.081075f, 0.056659f}, + }, + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.005845f, -0.001257f, -0.036555f, -0.049375f, 0.012643f, 0.084800f, 0.014576f, -0.201375f, -0.309168f, -0.082748f, 0.334661f, 0.545796f, 0.354345f, -0.038791f, -0.300028f, -0.287849f, -0.093049f, 0.112040f, 0.200093f, 0.142178f, 0.003299f, -0.122003f, -0.175417f, -0.135820f, -0.003944f, 0.166483f, 0.261557f, 0.198589f, 0.018859f, -0.149552f, -0.207760f, -0.142108f, -0.005759f, 0.109328f, 0.116794f, 0.013500f, -0.096914f, -0.104851f, -0.013951f, 0.074895f, 0.084523f, 0.027800f, -0.032006f, -0.040871f, 0.017488f, 0.101840f, 0.120955f, 0.014148f, + -0.158385f, -0.246682f, -0.155788f, 0.059675f, 0.245553f, 0.265402f, 0.086381f, -0.186771f, -0.352934f, -0.260570f, 0.038516f, 0.309970f, 0.344531f, 0.135379f, -0.145372f, -0.301340f, -0.237657f, -0.002527f, 0.240431f, 0.310849f, 0.148668f, -0.120962f, -0.277864f, -0.193202f, 0.050179f, 0.224037f, 0.165720f, -0.062061f, -0.232704f, -0.181790f, 0.040655f, 0.236048f, 0.242342f, 0.053073f, -0.196484f, -0.325298f, -0.221162f, 0.074902f, 0.368753f, 0.429341f, 0.171261f, -0.237137f, -0.474123f, -0.334471f, 0.074117f, 0.416297f, 0.416646f, 0.075954f, -0.342246f, -0.505075f, -0.257877f, 0.225430f, 0.548927f, 0.430570f, -0.043506f, -0.507387f, -0.621160f, -0.293115f, 0.274454f, 0.674222f, 0.555679f, -0.029666f, -0.584642f, -0.618175f, -0.138687f, 0.397899f, 0.581786f, 0.367892f, -0.031230f, -0.372027f, -0.477009f, -0.286288f, 0.078980f, 0.371019f, 0.404261f, 0.182245f, -0.145350f, -0.387651f, -0.388422f, -0.109154f, 0.295097f, 0.532622f, 0.391740f, -0.064104f, -0.519012f, -0.636727f, -0.312736f, 0.243096f, 0.648954f, 0.618999f, 0.168320f, -0.396378f, -0.695769f, -0.540792f, -0.048107f, 0.454729f, + 0.646139f, 0.409300f, -0.094082f, -0.523602f, -0.590342f, -0.261818f, 0.223079f, 0.537186f, 0.488163f, 0.125785f, -0.304240f, -0.515916f, -0.368819f, 0.031193f, 0.404420f, 0.497162f, 0.253520f, -0.157908f, -0.461345f, -0.454869f, -0.144638f, 0.261989f, 0.502270f, 0.427614f, 0.082603f, -0.326118f, -0.539975f, -0.404333f, 0.009538f, 0.431059f, 0.576897f, 0.350480f, -0.101522f, -0.493350f, -0.576793f, -0.292774f, 0.182960f, 0.543464f, 0.551483f, 0.200051f, -0.280472f, -0.572702f, -0.483936f, -0.080849f, 0.355408f, 0.532037f, 0.351623f, -0.035457f, -0.357765f, -0.416472f, -0.206505f, 0.104013f, 0.305039f, 0.286136f, 0.092471f, -0.128024f, -0.233683f, -0.176617f, -0.017342f, 0.131343f, 0.181010f, 0.111839f, -0.027622f, -0.149189f, -0.173037f, -0.080999f, 0.064994f, 0.165938f, 0.156643f, 0.045654f, -0.095241f, -0.174626f, -0.137927f, -0.008169f, 0.126073f, 0.174867f, 0.109309f, -0.025298f, -0.142291f, -0.165887f, -0.079334f, 0.060101f, 0.158946f, 0.152835f, 0.047409f, -0.088822f, -0.167055f, -0.134115f, -0.011199f, 0.118513f, 0.169509f, 0.110655f, -0.020076f, -0.138964f, -0.163920f, -0.072282f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.005845f, -0.001257f, -0.036555f, -0.049375f, 0.012643f, 0.084800f, 0.014576f, -0.201375f, -0.309168f, -0.082748f, 0.334661f, 0.545796f, 0.354345f, -0.038791f, -0.300028f, -0.287849f, -0.093049f, 0.112040f, 0.200093f, 0.142178f, 0.003299f, -0.122003f, -0.175417f, -0.135820f, -0.003944f, 0.166483f, 0.261557f, 0.198589f, 0.018859f, -0.149552f, -0.207760f, -0.142108f, -0.005759f, 0.109328f, 0.116794f, 0.013500f, -0.096914f, -0.104851f, -0.013951f, 0.074895f, 0.084523f, 0.027800f, -0.032006f, -0.040871f, 0.017488f, 0.101840f, 0.120955f, 0.014148f, + -0.158385f, -0.246682f, -0.155788f, 0.059675f, 0.245553f, 0.265402f, 0.086381f, -0.186771f, -0.352934f, -0.260570f, 0.038516f, 0.309970f, 0.344531f, 0.135379f, -0.145372f, -0.301340f, -0.237657f, -0.002527f, 0.240431f, 0.310849f, 0.148668f, -0.120962f, -0.277864f, -0.193202f, 0.050179f, 0.224037f, 0.165720f, -0.062061f, -0.232704f, -0.181790f, 0.040655f, 0.236048f, 0.242342f, 0.053073f, -0.196484f, -0.325298f, -0.221162f, 0.074902f, 0.368753f, 0.429341f, 0.171261f, -0.237137f, -0.474123f, -0.334471f, 0.074117f, 0.416297f, 0.416646f, 0.075954f, -0.342246f, -0.505075f, -0.257877f, 0.225430f, 0.548927f, 0.430570f, -0.043506f, -0.507387f, -0.621160f, -0.293115f, 0.274454f, 0.674222f, 0.555679f, -0.029666f, -0.584642f, -0.618175f, -0.138687f, 0.397899f, 0.581786f, 0.367892f, -0.031230f, -0.372027f, -0.477009f, -0.286288f, 0.078980f, 0.371019f, 0.404261f, 0.182245f, -0.145350f, -0.387651f, -0.388422f, -0.109154f, 0.295097f, 0.532622f, 0.391740f, -0.064104f, -0.519012f, -0.636727f, -0.312736f, 0.243096f, 0.648954f, 0.618999f, 0.168320f, -0.396378f, -0.695769f, -0.540792f, -0.048107f, 0.454729f, + 0.646139f, 0.409300f, -0.094082f, -0.523602f, -0.590342f, -0.261818f, 0.223079f, 0.537186f, 0.488163f, 0.125785f, -0.304240f, -0.515916f, -0.368819f, 0.031193f, 0.404420f, 0.497162f, 0.253520f, -0.157908f, -0.461345f, -0.454869f, -0.144638f, 0.261989f, 0.502270f, 0.427614f, 0.082603f, -0.326118f, -0.539975f, -0.404333f, 0.009538f, 0.431059f, 0.576897f, 0.350480f, -0.101522f, -0.493350f, -0.576793f, -0.292774f, 0.182960f, 0.543464f, 0.551483f, 0.200051f, -0.280472f, -0.572702f, -0.483936f, -0.080849f, 0.355408f, 0.532037f, 0.351623f, -0.035457f, -0.357765f, -0.416472f, -0.206505f, 0.104013f, 0.305039f, 0.286136f, 0.092471f, -0.128024f, -0.233683f, -0.176617f, -0.017342f, 0.131343f, 0.181010f, 0.111839f, -0.027622f, -0.149189f, -0.173037f, -0.080999f, 0.064994f, 0.165938f, 0.156643f, 0.045654f, -0.095241f, -0.174626f, -0.137927f, -0.008169f, 0.126073f, 0.174867f, 0.109309f, -0.025298f, -0.142291f, -0.165887f, -0.079334f, 0.060101f, 0.158946f, 0.152835f, 0.047409f, -0.088822f, -0.167055f, -0.134115f, -0.011199f, 0.118513f, 0.169509f, 0.110655f, -0.020076f, -0.138964f, -0.163920f, -0.072282f}, + }, + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.004280f, 0.003712f, -0.000039f, 0.007448f, 0.000653f, -0.031279f, -0.024642f, 0.055582f, 0.109437f, 0.032321f, -0.103567f, -0.146975f, -0.093445f, -0.048562f, -0.015448f, 0.087763f, 0.216210f, 0.206603f, 0.027490f, -0.148188f, -0.169053f, -0.071020f, 0.025224f, 0.066179f, 0.067437f, 0.053319f, 0.040568f, 0.029866f, -0.001616f, -0.057601f, -0.088400f, -0.052951f, 0.011022f, 0.042657f, 0.052949f, 0.086948f, 0.116828f, 0.066078f, -0.058373f, -0.143466f, -0.102838f, 0.025959f, 0.135820f, 0.153005f, 0.071056f, -0.064506f, -0.171225f, -0.165734f, + -0.032676f, 0.140434f, 0.220862f, 0.136917f, -0.062895f, -0.240358f, -0.258909f, -0.081365f, 0.184629f, 0.342546f, 0.251300f, -0.047466f, -0.338949f, -0.391328f, -0.138151f, 0.255548f, 0.497284f, 0.378423f, -0.050929f, -0.487087f, -0.586548f, -0.241610f, 0.309050f, 0.646425f, 0.497923f, -0.037272f, -0.557984f, -0.675954f, -0.312598f, 0.261439f, 0.646352f, 0.594422f, 0.157761f, -0.364834f, -0.633467f, -0.493221f, -0.062175f, 0.374220f, 0.555326f, 0.384568f, -0.027118f, -0.415207f, -0.526856f, -0.313353f, 0.043874f, 0.318965f, 0.414278f, 0.337070f, 0.108750f, -0.204161f, -0.428274f, -0.383596f, -0.068893f, 0.310896f, 0.505334f, 0.384226f, 0.006028f, -0.395733f, -0.534072f, -0.290586f, 0.155093f, 0.468776f, 0.447520f, 0.150126f, -0.203402f, -0.395532f, -0.319112f, -0.033725f, 0.258685f, 0.358371f, 0.223848f, -0.025754f, -0.238817f, -0.319681f, -0.229141f, 0.003595f, 0.245464f, 0.317421f, 0.154378f, -0.112324f, -0.270668f, -0.219759f, -0.035182f, 0.127147f, 0.162269f, 0.073355f, -0.055743f, -0.130966f, -0.110699f, -0.018101f, 0.093874f, 0.173322f, 0.170298f, 0.049660f, -0.155769f, -0.316476f, + -0.283316f, -0.029708f, 0.287462f, 0.431514f, 0.273175f, -0.099654f, -0.436829f, -0.498588f, -0.222307f, 0.224426f, 0.541249f, 0.494937f, 0.098214f, -0.375575f, -0.584817f, -0.380483f, 0.084802f, 0.484989f, 0.559578f, 0.275608f, -0.170620f, -0.485390f, -0.466713f, -0.139996f, 0.262266f, 0.468942f, 0.354388f, 0.008534f, -0.333036f, -0.444719f, -0.261879f, 0.078293f, 0.347718f, 0.393204f, 0.212816f, -0.081399f, -0.330971f, -0.391065f, -0.208294f, 0.117230f, 0.375204f, 0.392412f, 0.159715f, -0.165843f, -0.371777f, -0.330474f, -0.082200f, 0.196114f, 0.320243f, 0.227104f, 0.004077f, -0.188284f, -0.230333f, -0.116915f, 0.052873f, 0.158213f, 0.142989f, 0.038424f, -0.077048f, -0.130993f, -0.093653f, 0.006515f, 0.099905f, 0.124565f, 0.068241f, -0.030164f, -0.108737f, -0.116444f, -0.044911f, 0.058931f, 0.123251f, 0.106074f, 0.022102f, -0.074385f, -0.122885f, -0.089317f, 0.007617f, 0.102044f, 0.129390f, 0.074122f, -0.026652f, -0.110563f, -0.122003f, -0.047945f, 0.061875f, 0.128966f, 0.111521f, 0.027995f, -0.070661f, -0.126499f, -0.094637f, 0.013317f, 0.114585f, 0.132227f, 0.079481f, 0.022065f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.004280f, 0.003712f, -0.000039f, 0.007448f, 0.000653f, -0.031279f, -0.024642f, 0.055582f, 0.109437f, 0.032321f, -0.103567f, -0.146975f, -0.093445f, -0.048562f, -0.015448f, 0.087763f, 0.216210f, 0.206603f, 0.027490f, -0.148188f, -0.169053f, -0.071020f, 0.025224f, 0.066179f, 0.067437f, 0.053319f, 0.040568f, 0.029866f, -0.001616f, -0.057601f, -0.088400f, -0.052951f, 0.011022f, 0.042657f, 0.052949f, 0.086948f, 0.116828f, 0.066078f, -0.058373f, -0.143466f, -0.102838f, 0.025959f, 0.135820f, 0.153005f, 0.071056f, -0.064506f, -0.171225f, -0.165734f, + -0.032676f, 0.140434f, 0.220862f, 0.136917f, -0.062895f, -0.240358f, -0.258909f, -0.081365f, 0.184629f, 0.342546f, 0.251300f, -0.047466f, -0.338949f, -0.391328f, -0.138151f, 0.255548f, 0.497284f, 0.378423f, -0.050929f, -0.487087f, -0.586548f, -0.241610f, 0.309050f, 0.646425f, 0.497923f, -0.037272f, -0.557984f, -0.675954f, -0.312598f, 0.261439f, 0.646352f, 0.594422f, 0.157761f, -0.364834f, -0.633467f, -0.493221f, -0.062175f, 0.374220f, 0.555326f, 0.384568f, -0.027118f, -0.415207f, -0.526856f, -0.313353f, 0.043874f, 0.318965f, 0.414278f, 0.337070f, 0.108750f, -0.204161f, -0.428274f, -0.383596f, -0.068893f, 0.310896f, 0.505334f, 0.384226f, 0.006028f, -0.395733f, -0.534072f, -0.290586f, 0.155093f, 0.468776f, 0.447520f, 0.150126f, -0.203402f, -0.395532f, -0.319112f, -0.033725f, 0.258685f, 0.358371f, 0.223848f, -0.025754f, -0.238817f, -0.319681f, -0.229141f, 0.003595f, 0.245464f, 0.317421f, 0.154378f, -0.112324f, -0.270668f, -0.219759f, -0.035182f, 0.127147f, 0.162269f, 0.073355f, -0.055743f, -0.130966f, -0.110699f, -0.018101f, 0.093874f, 0.173322f, 0.170298f, 0.049660f, -0.155769f, -0.316476f, + -0.283316f, -0.029708f, 0.287462f, 0.431514f, 0.273175f, -0.099654f, -0.436829f, -0.498588f, -0.222307f, 0.224426f, 0.541249f, 0.494937f, 0.098214f, -0.375575f, -0.584817f, -0.380483f, 0.084802f, 0.484989f, 0.559578f, 0.275608f, -0.170620f, -0.485390f, -0.466713f, -0.139996f, 0.262266f, 0.468942f, 0.354388f, 0.008534f, -0.333036f, -0.444719f, -0.261879f, 0.078293f, 0.347718f, 0.393204f, 0.212816f, -0.081399f, -0.330971f, -0.391065f, -0.208294f, 0.117230f, 0.375204f, 0.392412f, 0.159715f, -0.165843f, -0.371777f, -0.330474f, -0.082200f, 0.196114f, 0.320243f, 0.227104f, 0.004077f, -0.188284f, -0.230333f, -0.116915f, 0.052873f, 0.158213f, 0.142989f, 0.038424f, -0.077048f, -0.130993f, -0.093653f, 0.006515f, 0.099905f, 0.124565f, 0.068241f, -0.030164f, -0.108737f, -0.116444f, -0.044911f, 0.058931f, 0.123251f, 0.106074f, 0.022102f, -0.074385f, -0.122885f, -0.089317f, 0.007617f, 0.102044f, 0.129390f, 0.074122f, -0.026652f, -0.110563f, -0.122003f, -0.047945f, 0.061875f, 0.128966f, 0.111521f, 0.027995f, -0.070661f, -0.126499f, -0.094637f, 0.013317f, 0.114585f, 0.132227f, 0.079481f, 0.022065f}, + }, + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.011054f, -0.007070f, -0.051753f, 0.014589f, 0.233520f, 0.380519f, 0.162453f, -0.369840f, -0.731647f, -0.472019f, 0.285481f, 0.897293f, 0.831291f, 0.163924f, -0.562235f, -0.855441f, -0.597748f, -0.003812f, 0.564531f, 0.767912f, 0.457001f, -0.202713f, -0.788397f, -0.889359f, -0.409800f, 0.339658f, 0.859637f, 0.830526f, 0.324490f, -0.300816f, -0.679798f, -0.639208f, -0.247785f, 0.233655f, 0.500997f, 0.420723f, 0.122352f, -0.153025f, -0.272366f, -0.250329f, -0.141199f, 0.015379f, 0.164609f, 0.239381f, 0.206161f, 0.076145f, -0.107656f, -0.262495f, + -0.286346f, -0.142136f, 0.091062f, 0.278557f, 0.322804f, 0.195488f, -0.058660f, -0.312279f, -0.402994f, -0.254102f, 0.050633f, 0.325479f, 0.407512f, 0.245268f, -0.073559f, -0.357746f, -0.422720f, -0.221149f, 0.116620f, 0.372269f, 0.385425f, 0.155511f, -0.158653f, -0.346339f, -0.294224f, -0.062915f, 0.171720f, 0.255869f, 0.160346f, -0.019314f, -0.150339f, -0.162008f, -0.077793f, 0.030104f, 0.100992f, 0.109248f, 0.060535f, -0.017894f, -0.093919f, -0.144493f, -0.149009f, -0.084490f, 0.045428f, 0.181380f, 0.236772f, 0.163461f, -0.013805f, -0.207243f, -0.297200f, -0.195954f, 0.065527f, 0.320373f, 0.378654f, 0.177633f, -0.170608f, -0.452556f, -0.473952f, -0.178205f, 0.280137f, 0.590859f, 0.500293f, 0.040555f, -0.444062f, -0.552824f, -0.183483f, 0.343567f, 0.558098f, 0.278567f, -0.226937f, -0.515700f, -0.368201f, 0.074361f, 0.466951f, 0.507020f, 0.136923f, -0.371910f, -0.581171f, -0.272678f, 0.295031f, 0.599293f, 0.361782f, -0.188773f, -0.560123f, -0.455399f, -0.000212f, 0.409015f, 0.450195f, 0.128342f, -0.250838f, -0.358929f, -0.131950f, 0.194025f, 0.318906f, 0.146404f, -0.157945f, -0.334355f, + -0.247434f, 0.019837f, 0.249120f, 0.269314f, 0.090931f, -0.120606f, -0.203825f, -0.134661f, -0.011592f, 0.062951f, 0.064076f, 0.027257f, -0.007058f, -0.019104f, -0.008269f, 0.010538f, 0.017648f, 0.010506f, 0.008106f, 0.021396f, 0.028143f, -0.002454f, -0.059516f, -0.086719f, -0.042890f, 0.044637f, 0.102853f, 0.085631f, 0.012221f, -0.061110f, -0.092578f, -0.079083f, -0.044526f, -0.011128f, 0.019864f, 0.056626f, 0.087271f, 0.078526f, 0.015838f, -0.067588f, -0.115635f, -0.095662f, -0.016369f, 0.079679f, 0.130979f, 0.092596f, -0.016440f, -0.114220f, -0.126340f, -0.051412f, 0.047829f, 0.101843f, 0.079272f, 0.002521f, -0.066235f, -0.074167f, -0.026831f, 0.023270f, 0.037402f, 0.020887f, -0.003360f, -0.022079f, -0.027762f, -0.014908f, 0.008863f, 0.024752f, 0.022300f, 0.006488f, -0.012643f, -0.025499f, -0.022858f, -0.003943f, 0.017599f, 0.024935f, 0.013225f, -0.009036f, -0.027074f, -0.027334f, -0.007581f, 0.018233f, 0.031604f, 0.025079f, 0.003459f, -0.021928f, -0.035180f, -0.024458f, 0.003203f, 0.025918f, 0.029636f, 0.015872f, -0.009234f, -0.034584f, -0.039129f, -0.014118f, 0.013692f, 0.011282f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.011054f, -0.007070f, -0.051753f, 0.014589f, 0.233520f, 0.380519f, 0.162453f, -0.369840f, -0.731647f, -0.472019f, 0.285481f, 0.897293f, 0.831291f, 0.163924f, -0.562235f, -0.855441f, -0.597748f, -0.003812f, 0.564531f, 0.767912f, 0.457001f, -0.202713f, -0.788397f, -0.889359f, -0.409800f, 0.339658f, 0.859637f, 0.830526f, 0.324490f, -0.300816f, -0.679798f, -0.639208f, -0.247785f, 0.233655f, 0.500997f, 0.420723f, 0.122352f, -0.153025f, -0.272366f, -0.250329f, -0.141199f, 0.015379f, 0.164609f, 0.239381f, 0.206161f, 0.076145f, -0.107656f, -0.262495f, + -0.286346f, -0.142136f, 0.091062f, 0.278557f, 0.322804f, 0.195488f, -0.058660f, -0.312279f, -0.402994f, -0.254102f, 0.050633f, 0.325479f, 0.407512f, 0.245268f, -0.073559f, -0.357746f, -0.422720f, -0.221149f, 0.116620f, 0.372269f, 0.385425f, 0.155511f, -0.158653f, -0.346339f, -0.294224f, -0.062915f, 0.171720f, 0.255869f, 0.160346f, -0.019314f, -0.150339f, -0.162008f, -0.077793f, 0.030104f, 0.100992f, 0.109248f, 0.060535f, -0.017894f, -0.093919f, -0.144493f, -0.149009f, -0.084490f, 0.045428f, 0.181380f, 0.236772f, 0.163461f, -0.013805f, -0.207243f, -0.297200f, -0.195954f, 0.065527f, 0.320373f, 0.378654f, 0.177633f, -0.170608f, -0.452556f, -0.473952f, -0.178205f, 0.280137f, 0.590859f, 0.500293f, 0.040555f, -0.444062f, -0.552824f, -0.183483f, 0.343567f, 0.558098f, 0.278567f, -0.226937f, -0.515700f, -0.368201f, 0.074361f, 0.466951f, 0.507020f, 0.136923f, -0.371910f, -0.581171f, -0.272678f, 0.295031f, 0.599293f, 0.361782f, -0.188773f, -0.560123f, -0.455399f, -0.000212f, 0.409015f, 0.450195f, 0.128342f, -0.250838f, -0.358929f, -0.131950f, 0.194025f, 0.318906f, 0.146404f, -0.157945f, -0.334355f, + -0.247434f, 0.019837f, 0.249120f, 0.269314f, 0.090931f, -0.120606f, -0.203825f, -0.134661f, -0.011592f, 0.062951f, 0.064076f, 0.027257f, -0.007058f, -0.019104f, -0.008269f, 0.010538f, 0.017648f, 0.010506f, 0.008106f, 0.021396f, 0.028143f, -0.002454f, -0.059516f, -0.086719f, -0.042890f, 0.044637f, 0.102853f, 0.085631f, 0.012221f, -0.061110f, -0.092578f, -0.079083f, -0.044526f, -0.011128f, 0.019864f, 0.056626f, 0.087271f, 0.078526f, 0.015838f, -0.067588f, -0.115635f, -0.095662f, -0.016369f, 0.079679f, 0.130979f, 0.092596f, -0.016440f, -0.114220f, -0.126340f, -0.051412f, 0.047829f, 0.101843f, 0.079272f, 0.002521f, -0.066235f, -0.074167f, -0.026831f, 0.023270f, 0.037402f, 0.020887f, -0.003360f, -0.022079f, -0.027762f, -0.014908f, 0.008863f, 0.024752f, 0.022300f, 0.006488f, -0.012643f, -0.025499f, -0.022858f, -0.003943f, 0.017599f, 0.024935f, 0.013225f, -0.009036f, -0.027074f, -0.027334f, -0.007581f, 0.018233f, 0.031604f, 0.025079f, 0.003459f, -0.021928f, -0.035180f, -0.024458f, 0.003203f, 0.025918f, 0.029636f, 0.015872f, -0.009234f, -0.034584f, -0.039129f, -0.014118f, 0.013692f, 0.011282f}, + }, + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, -0.000066f, -0.006446f, -0.004400f, 0.025295f, 0.045628f, 0.027396f, 0.023307f, 0.060622f, 0.039319f, -0.111806f, -0.254961f, -0.192022f, 0.057167f, 0.278509f, 0.317016f, 0.176999f, -0.056693f, -0.252718f, -0.254557f, -0.023929f, 0.256919f, 0.335698f, 0.135558f, -0.194256f, -0.420609f, -0.384673f, -0.101767f, 0.234569f, 0.398843f, 0.322361f, 0.111765f, -0.090608f, -0.194757f, -0.156835f, -0.004372f, 0.135922f, 0.139189f, 0.021353f, -0.093162f, -0.125628f, -0.091576f, -0.024886f, 0.055679f, 0.112411f, 0.100460f, 0.023672f, -0.064900f, -0.114261f, + -0.101236f, -0.029409f, 0.064122f, 0.119308f, 0.099450f, 0.021164f, -0.066218f, -0.114090f, -0.092493f, -0.007394f, 0.090545f, 0.135655f, 0.097412f, 0.000910f, -0.093425f, -0.128529f, -0.088704f, -0.010281f, 0.054542f, 0.082224f, 0.075537f, 0.037293f, -0.021080f, -0.060221f, -0.045531f, 0.003377f, 0.032644f, 0.021011f, -0.006179f, -0.022795f, -0.025339f, -0.014951f, 0.006887f, 0.023010f, 0.012867f, -0.015081f, -0.028698f, -0.014963f, 0.003423f, 0.000888f, -0.016649f, -0.018468f, 0.015625f, 0.069377f, 0.097152f, 0.061345f, -0.028382f, -0.112663f, -0.128016f, -0.062631f, 0.032351f, 0.088685f, 0.077692f, 0.023486f, -0.029762f, -0.053372f, -0.042327f, -0.006150f, 0.037911f, 0.067859f, 0.062751f, 0.013915f, -0.059782f, -0.107345f, -0.077487f, 0.022672f, 0.110306f, 0.099575f, 0.000702f, -0.076162f, -0.033883f, 0.102383f, 0.200474f, 0.145186f, -0.050151f, -0.241788f, -0.265120f, -0.076360f, 0.187150f, 0.301979f, 0.154267f, -0.141852f, -0.335214f, -0.260093f, 0.025295f, 0.298897f, 0.352753f, 0.143439f, -0.172578f, -0.347706f, -0.245457f, 0.033580f, 0.250090f, 0.254389f, 0.089711f, -0.105239f, + -0.219033f, -0.194857f, -0.040020f, 0.141073f, 0.199748f, 0.093566f, -0.059561f, -0.120585f, -0.074908f, -0.001730f, 0.041947f, 0.050779f, 0.031022f, -0.005519f, -0.028797f, -0.018690f, 0.007358f, 0.023235f, 0.029285f, 0.032943f, 0.020207f, -0.020590f, -0.062100f, -0.057199f, 0.004912f, 0.078006f, 0.096812f, 0.034806f, -0.067797f, -0.131307f, -0.102333f, -0.001387f, 0.094374f, 0.116817f, 0.059003f, -0.027568f, -0.079302f, -0.067802f, -0.012913f, 0.041007f, 0.059382f, 0.036624f, -0.005633f, -0.035765f, -0.035699f, -0.013491f, 0.008176f, 0.014984f, 0.010012f, 0.004243f, 0.004227f, 0.007169f, 0.004931f, -0.004483f, -0.010982f, -0.006140f, 0.000460f, -0.006494f, -0.020769f, -0.018990f, 0.004816f, 0.028633f, 0.031314f, 0.014318f, -0.008942f, -0.026857f, -0.028843f, -0.009686f, 0.018714f, 0.033849f, 0.025355f, 0.002213f, -0.020413f, -0.030633f, -0.021410f, 0.003204f, 0.025602f, 0.029328f, 0.014478f, -0.006722f, -0.022440f, -0.024250f, -0.008745f, 0.015146f, 0.028928f, 0.022382f, 0.002881f, -0.015620f, -0.024037f, -0.017533f, 0.003324f, 0.025495f, 0.029810f, 0.013010f, -0.005080f, -0.005426f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000066f, 0.006446f, 0.004400f, -0.025295f, -0.045628f, -0.027396f, -0.023307f, -0.060622f, -0.039319f, 0.111806f, 0.254961f, 0.192022f, -0.057167f, -0.278509f, -0.317016f, -0.176999f, 0.056693f, 0.252718f, 0.254557f, 0.023929f, -0.256919f, -0.335698f, -0.135558f, 0.194256f, 0.420609f, 0.384673f, 0.101767f, -0.234569f, -0.398843f, -0.322361f, -0.111765f, 0.090608f, 0.194757f, 0.156835f, 0.004372f, -0.135922f, -0.139189f, -0.021353f, 0.093162f, 0.125628f, 0.091576f, 0.024886f, -0.055679f, -0.112411f, -0.100460f, -0.023672f, 0.064900f, 0.114261f, + 0.101236f, 0.029409f, -0.064122f, -0.119308f, -0.099450f, -0.021164f, 0.066218f, 0.114090f, 0.092493f, 0.007394f, -0.090545f, -0.135655f, -0.097412f, -0.000910f, 0.093425f, 0.128529f, 0.088704f, 0.010281f, -0.054542f, -0.082224f, -0.075537f, -0.037293f, 0.021080f, 0.060221f, 0.045531f, -0.003377f, -0.032644f, -0.021011f, 0.006179f, 0.022795f, 0.025339f, 0.014951f, -0.006887f, -0.023010f, -0.012867f, 0.015081f, 0.028698f, 0.014963f, -0.003423f, -0.000888f, 0.016649f, 0.018468f, -0.015625f, -0.069377f, -0.097152f, -0.061345f, 0.028382f, 0.112663f, 0.128016f, 0.062631f, -0.032351f, -0.088685f, -0.077692f, -0.023486f, 0.029762f, 0.053372f, 0.042327f, 0.006150f, -0.037911f, -0.067859f, -0.062751f, -0.013915f, 0.059782f, 0.107345f, 0.077487f, -0.022672f, -0.110306f, -0.099575f, -0.000702f, 0.076162f, 0.033883f, -0.102383f, -0.200474f, -0.145186f, 0.050151f, 0.241788f, 0.265120f, 0.076360f, -0.187150f, -0.301979f, -0.154267f, 0.141852f, 0.335214f, 0.260093f, -0.025295f, -0.298897f, -0.352753f, -0.143439f, 0.172578f, 0.347706f, 0.245457f, -0.033580f, -0.250090f, -0.254389f, -0.089711f, 0.105239f, + 0.219033f, 0.194857f, 0.040020f, -0.141073f, -0.199748f, -0.093566f, 0.059561f, 0.120585f, 0.074908f, 0.001730f, -0.041947f, -0.050779f, -0.031022f, 0.005519f, 0.028797f, 0.018690f, -0.007358f, -0.023235f, -0.029285f, -0.032943f, -0.020207f, 0.020590f, 0.062100f, 0.057199f, -0.004912f, -0.078006f, -0.096812f, -0.034806f, 0.067797f, 0.131307f, 0.102333f, 0.001387f, -0.094374f, -0.116817f, -0.059003f, 0.027568f, 0.079302f, 0.067802f, 0.012913f, -0.041007f, -0.059382f, -0.036624f, 0.005633f, 0.035765f, 0.035699f, 0.013491f, -0.008176f, -0.014984f, -0.010012f, -0.004243f, -0.004227f, -0.007169f, -0.004931f, 0.004483f, 0.010982f, 0.006140f, -0.000460f, 0.006494f, 0.020769f, 0.018990f, -0.004816f, -0.028633f, -0.031314f, -0.014318f, 0.008942f, 0.026857f, 0.028843f, 0.009686f, -0.018714f, -0.033849f, -0.025355f, -0.002213f, 0.020413f, 0.030633f, 0.021410f, -0.003204f, -0.025602f, -0.029328f, -0.014478f, 0.006722f, 0.022440f, 0.024250f, 0.008745f, -0.015146f, -0.028928f, -0.022382f, -0.002881f, 0.015620f, 0.024037f, 0.017533f, -0.003324f, -0.025495f, -0.029810f, -0.013010f, 0.005080f, 0.005426f}, + }, + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.015929f, 0.029234f, 0.016763f, 0.009672f, 0.019371f, 0.015823f, -0.011489f, -0.016215f, 0.034107f, 0.084410f, 0.050543f, -0.066458f, -0.180755f, -0.216641f, -0.149273f, 0.011211f, 0.196415f, 0.272361f, 0.156942f, -0.057285f, -0.183501f, -0.145504f, -0.030607f, 0.050032f, 0.070702f, 0.060642f, 0.043305f, 0.025909f, 0.005034f, -0.025033f, -0.049462f, -0.038843f, 0.002459f, 0.029906f, 0.022211f, 0.006533f, 0.000245f, -0.016499f, -0.043976f, -0.038985f, 0.017319f, 0.079179f, 0.095554f, 0.064698f, 0.008506f, -0.056291f, -0.098164f, -0.074085f, + 0.014099f, 0.100620f, 0.117763f, 0.055103f, -0.047962f, -0.135439f, -0.153178f, -0.073713f, 0.069561f, 0.187037f, 0.194092f, 0.077510f, -0.089924f, -0.195295f, -0.161175f, -0.004442f, 0.165011f, 0.216741f, 0.101364f, -0.097592f, -0.220143f, -0.164550f, 0.020137f, 0.180059f, 0.195075f, 0.069319f, -0.095513f, -0.186739f, -0.148793f, -0.011058f, 0.128043f, 0.168222f, 0.086730f, -0.048460f, -0.146158f, -0.158456f, -0.084490f, 0.048132f, 0.174315f, 0.200098f, 0.082528f, -0.098374f, -0.200692f, -0.165052f, -0.051900f, 0.066260f, 0.172868f, 0.238355f, 0.176796f, -0.040045f, -0.271349f, -0.306316f, -0.081786f, 0.242261f, 0.415943f, 0.292026f, -0.060213f, -0.383798f, -0.424293f, -0.158167f, 0.182304f, 0.340012f, 0.255424f, 0.050051f, -0.128676f, -0.193086f, -0.123330f, 0.021458f, 0.127605f, 0.125671f, 0.051253f, -0.022281f, -0.072538f, -0.110355f, -0.115876f, -0.052418f, 0.065262f, 0.159814f, 0.157155f, 0.052063f, -0.086913f, -0.169788f, -0.150465f, -0.053534f, 0.054041f, 0.112166f, 0.097926f, 0.030226f, -0.043825f, -0.076322f, -0.045673f, 0.031129f, 0.099703f, 0.090733f, -0.020480f, -0.160249f, + -0.198293f, -0.077586f, 0.113320f, 0.221111f, 0.168033f, 0.003310f, -0.153638f, -0.199156f, -0.105615f, 0.062865f, 0.192074f, 0.195452f, 0.070221f, -0.102177f, -0.204113f, -0.159134f, 0.003555f, 0.163527f, 0.207756f, 0.118671f, -0.029514f, -0.137242f, -0.140175f, -0.043126f, 0.078844f, 0.131507f, 0.077593f, -0.036429f, -0.125364f, -0.128127f, -0.042646f, 0.073719f, 0.142170f, 0.122797f, 0.039033f, -0.057859f, -0.126496f, -0.134374f, -0.061883f, 0.062732f, 0.158887f, 0.156294f, 0.056158f, -0.075754f, -0.158459f, -0.140410f, -0.031730f, 0.092197f, 0.143301f, 0.094062f, -0.006247f, -0.082657f, -0.090834f, -0.037952f, 0.028813f, 0.059100f, 0.040472f, 0.001575f, -0.025219f, -0.029603f, -0.014679f, 0.011686f, 0.031974f, 0.028588f, 0.004869f, -0.018732f, -0.028072f, -0.021183f, -0.000227f, 0.024684f, 0.033917f, 0.018296f, -0.007839f, -0.024662f, -0.025630f, -0.012063f, 0.012191f, 0.033131f, 0.032631f, 0.009753f, -0.017507f, -0.032117f, -0.027244f, -0.003607f, 0.026002f, 0.038769f, 0.024221f, -0.003907f, -0.026080f, -0.032505f, -0.018105f, 0.013733f, 0.039397f, 0.035358f, 0.012457f, 0.000254f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, -0.015929f, -0.029234f, -0.016763f, -0.009672f, -0.019371f, -0.015823f, 0.011489f, 0.016215f, -0.034107f, -0.084410f, -0.050543f, 0.066458f, 0.180755f, 0.216641f, 0.149273f, -0.011211f, -0.196415f, -0.272361f, -0.156942f, 0.057285f, 0.183501f, 0.145504f, 0.030607f, -0.050032f, -0.070702f, -0.060642f, -0.043305f, -0.025909f, -0.005034f, 0.025033f, 0.049462f, 0.038843f, -0.002459f, -0.029906f, -0.022211f, -0.006533f, -0.000245f, 0.016499f, 0.043976f, 0.038985f, -0.017319f, -0.079179f, -0.095554f, -0.064698f, -0.008506f, 0.056291f, 0.098164f, 0.074085f, + -0.014099f, -0.100620f, -0.117763f, -0.055103f, 0.047962f, 0.135439f, 0.153178f, 0.073713f, -0.069561f, -0.187037f, -0.194092f, -0.077510f, 0.089924f, 0.195295f, 0.161175f, 0.004442f, -0.165011f, -0.216741f, -0.101364f, 0.097592f, 0.220143f, 0.164550f, -0.020137f, -0.180059f, -0.195075f, -0.069319f, 0.095513f, 0.186739f, 0.148793f, 0.011058f, -0.128043f, -0.168222f, -0.086730f, 0.048460f, 0.146158f, 0.158456f, 0.084490f, -0.048132f, -0.174315f, -0.200098f, -0.082528f, 0.098374f, 0.200692f, 0.165052f, 0.051900f, -0.066260f, -0.172868f, -0.238355f, -0.176796f, 0.040045f, 0.271349f, 0.306316f, 0.081786f, -0.242261f, -0.415943f, -0.292026f, 0.060213f, 0.383798f, 0.424293f, 0.158167f, -0.182304f, -0.340012f, -0.255424f, -0.050051f, 0.128676f, 0.193086f, 0.123330f, -0.021458f, -0.127605f, -0.125671f, -0.051253f, 0.022281f, 0.072538f, 0.110355f, 0.115876f, 0.052418f, -0.065262f, -0.159814f, -0.157155f, -0.052063f, 0.086913f, 0.169788f, 0.150465f, 0.053534f, -0.054041f, -0.112166f, -0.097926f, -0.030226f, 0.043825f, 0.076322f, 0.045673f, -0.031129f, -0.099703f, -0.090733f, 0.020480f, 0.160249f, + 0.198293f, 0.077586f, -0.113320f, -0.221111f, -0.168033f, -0.003310f, 0.153638f, 0.199156f, 0.105615f, -0.062865f, -0.192074f, -0.195452f, -0.070221f, 0.102177f, 0.204113f, 0.159134f, -0.003555f, -0.163527f, -0.207756f, -0.118671f, 0.029514f, 0.137242f, 0.140175f, 0.043126f, -0.078844f, -0.131507f, -0.077593f, 0.036429f, 0.125364f, 0.128127f, 0.042646f, -0.073719f, -0.142170f, -0.122797f, -0.039033f, 0.057859f, 0.126496f, 0.134374f, 0.061883f, -0.062732f, -0.158887f, -0.156294f, -0.056158f, 0.075754f, 0.158459f, 0.140410f, 0.031730f, -0.092197f, -0.143301f, -0.094062f, 0.006247f, 0.082657f, 0.090834f, 0.037952f, -0.028813f, -0.059100f, -0.040472f, -0.001575f, 0.025219f, 0.029603f, 0.014679f, -0.011686f, -0.031974f, -0.028588f, -0.004869f, 0.018732f, 0.028072f, 0.021183f, 0.000227f, -0.024684f, -0.033917f, -0.018296f, 0.007839f, 0.024662f, 0.025630f, 0.012063f, -0.012191f, -0.033131f, -0.032631f, -0.009753f, 0.017507f, 0.032117f, 0.027244f, 0.003607f, -0.026002f, -0.038769f, -0.024221f, 0.003907f, 0.026080f, 0.032505f, 0.018105f, -0.013733f, -0.039397f, -0.035358f, -0.012457f, -0.000254f}, + }, + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, -0.008155f, 0.014846f, 0.058753f, 0.017794f, -0.084333f, -0.098226f, -0.008610f, 0.014440f, -0.104677f, -0.200204f, -0.099132f, 0.138016f, 0.310898f, 0.307805f, 0.157331f, -0.050636f, -0.207633f, -0.221553f, -0.092256f, 0.077414f, 0.180593f, 0.179997f, 0.084137f, -0.070051f, -0.188530f, -0.160319f, 0.017504f, 0.202446f, 0.239595f, 0.107707f, -0.083073f, -0.200471f, -0.178500f, -0.041448f, 0.118139f, 0.196726f, 0.147611f, 0.009422f, -0.126068f, -0.177307f, -0.122857f, -0.006478f, 0.104342f, 0.164920f, 0.159215f, 0.080624f, -0.059865f, -0.203826f, + -0.257724f, -0.162978f, 0.044134f, 0.244520f, 0.309322f, 0.182542f, -0.073427f, -0.302159f, -0.348234f, -0.167873f, 0.128452f, 0.343665f, 0.331028f, 0.100414f, -0.189147f, -0.344243f, -0.268073f, -0.017261f, 0.239438f, 0.329783f, 0.195439f, -0.061232f, -0.252306f, -0.250446f, -0.080402f, 0.116388f, 0.199780f, 0.133405f, -0.001476f, -0.089278f, -0.083984f, -0.026769f, 0.026675f, 0.055474f, 0.047047f, -0.013213f, -0.086560f, -0.077400f, 0.045480f, 0.163909f, 0.129214f, -0.043758f, -0.175933f, -0.127868f, 0.049601f, 0.180439f, 0.137651f, -0.052675f, -0.234778f, -0.236480f, -0.010892f, 0.289848f, 0.406696f, 0.199317f, -0.197493f, -0.469040f, -0.397807f, -0.046354f, 0.322545f, 0.468248f, 0.318816f, -0.016454f, -0.310017f, -0.346651f, -0.098294f, 0.221806f, 0.346664f, 0.208015f, -0.035716f, -0.193229f, -0.193558f, -0.075689f, 0.072428f, 0.150923f, 0.107610f, -0.006695f, -0.087971f, -0.092255f, -0.056253f, -0.015739f, 0.032245f, 0.079781f, 0.083034f, 0.014615f, -0.089696f, -0.154426f, -0.123634f, -0.002731f, 0.138293f, 0.205577f, 0.144256f, -0.023592f, -0.204895f, -0.274530f, -0.152777f, 0.101900f, + 0.295208f, 0.258308f, 0.020261f, -0.218863f, -0.284976f, -0.163152f, 0.041509f, 0.202170f, 0.226051f, 0.094405f, -0.104341f, -0.218536f, -0.156668f, 0.030494f, 0.195911f, 0.216775f, 0.081593f, -0.109457f, -0.220309f, -0.178121f, -0.021465f, 0.139141f, 0.204869f, 0.144590f, -0.000310f, -0.143372f, -0.198182f, -0.129450f, 0.020845f, 0.158913f, 0.200904f, 0.124769f, -0.021000f, -0.150172f, -0.188658f, -0.114798f, 0.027787f, 0.152279f, 0.179398f, 0.089884f, -0.058928f, -0.169173f, -0.167794f, -0.056364f, 0.088343f, 0.166696f, 0.128392f, 0.008387f, -0.104990f, -0.139226f, -0.083218f, 0.017082f, 0.094263f, 0.101195f, 0.040770f, -0.037436f, -0.077783f, -0.061206f, -0.010263f, 0.037948f, 0.056549f, 0.037758f, -0.005507f, -0.045018f, -0.054580f, -0.028455f, 0.015674f, 0.049328f, 0.050522f, 0.017695f, -0.027351f, -0.053643f, -0.043687f, -0.005142f, 0.036341f, 0.054174f, 0.036930f, -0.003847f, -0.040664f, -0.049542f, -0.026191f, 0.013462f, 0.044536f, 0.047143f, 0.018626f, -0.022384f, -0.047736f, -0.040751f, -0.007424f, 0.030301f, 0.049175f, 0.036865f, -0.000315f, -0.037910f, -0.048008f, -0.021595f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.008155f, -0.014846f, -0.058753f, -0.017794f, 0.084333f, 0.098226f, 0.008610f, -0.014440f, 0.104677f, 0.200204f, 0.099132f, -0.138016f, -0.310898f, -0.307805f, -0.157331f, 0.050636f, 0.207633f, 0.221553f, 0.092256f, -0.077414f, -0.180593f, -0.179997f, -0.084137f, 0.070051f, 0.188530f, 0.160319f, -0.017504f, -0.202446f, -0.239595f, -0.107707f, 0.083073f, 0.200471f, 0.178500f, 0.041448f, -0.118139f, -0.196726f, -0.147611f, -0.009422f, 0.126068f, 0.177307f, 0.122857f, 0.006478f, -0.104342f, -0.164920f, -0.159215f, -0.080624f, 0.059865f, 0.203826f, + 0.257724f, 0.162978f, -0.044134f, -0.244520f, -0.309322f, -0.182542f, 0.073427f, 0.302159f, 0.348234f, 0.167873f, -0.128452f, -0.343665f, -0.331028f, -0.100414f, 0.189147f, 0.344243f, 0.268073f, 0.017261f, -0.239438f, -0.329783f, -0.195439f, 0.061232f, 0.252306f, 0.250446f, 0.080402f, -0.116388f, -0.199780f, -0.133405f, 0.001476f, 0.089278f, 0.083984f, 0.026769f, -0.026675f, -0.055474f, -0.047047f, 0.013213f, 0.086560f, 0.077400f, -0.045480f, -0.163909f, -0.129214f, 0.043758f, 0.175933f, 0.127868f, -0.049601f, -0.180439f, -0.137651f, 0.052675f, 0.234778f, 0.236480f, 0.010892f, -0.289848f, -0.406696f, -0.199317f, 0.197493f, 0.469040f, 0.397807f, 0.046354f, -0.322545f, -0.468248f, -0.318816f, 0.016454f, 0.310017f, 0.346651f, 0.098294f, -0.221806f, -0.346664f, -0.208015f, 0.035716f, 0.193229f, 0.193558f, 0.075689f, -0.072428f, -0.150923f, -0.107610f, 0.006695f, 0.087971f, 0.092255f, 0.056253f, 0.015739f, -0.032245f, -0.079781f, -0.083034f, -0.014615f, 0.089696f, 0.154426f, 0.123634f, 0.002731f, -0.138293f, -0.205577f, -0.144256f, 0.023592f, 0.204895f, 0.274530f, 0.152777f, -0.101900f, + -0.295208f, -0.258308f, -0.020261f, 0.218863f, 0.284976f, 0.163152f, -0.041509f, -0.202170f, -0.226051f, -0.094405f, 0.104341f, 0.218536f, 0.156668f, -0.030494f, -0.195911f, -0.216775f, -0.081593f, 0.109457f, 0.220309f, 0.178121f, 0.021465f, -0.139141f, -0.204869f, -0.144590f, 0.000310f, 0.143372f, 0.198182f, 0.129450f, -0.020845f, -0.158913f, -0.200904f, -0.124769f, 0.021000f, 0.150172f, 0.188658f, 0.114798f, -0.027787f, -0.152279f, -0.179398f, -0.089884f, 0.058928f, 0.169173f, 0.167794f, 0.056364f, -0.088343f, -0.166696f, -0.128392f, -0.008387f, 0.104990f, 0.139226f, 0.083218f, -0.017082f, -0.094263f, -0.101195f, -0.040770f, 0.037436f, 0.077783f, 0.061206f, 0.010263f, -0.037948f, -0.056549f, -0.037758f, 0.005507f, 0.045018f, 0.054580f, 0.028455f, -0.015674f, -0.049328f, -0.050522f, -0.017695f, 0.027351f, 0.053643f, 0.043687f, 0.005142f, -0.036341f, -0.054174f, -0.036930f, 0.003847f, 0.040664f, 0.049542f, 0.026191f, -0.013462f, -0.044536f, -0.047143f, -0.018626f, 0.022384f, 0.047736f, 0.040751f, 0.007424f, -0.030301f, -0.049175f, -0.036865f, 0.000315f, 0.037910f, 0.048008f, 0.021595f}, + }, + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.012810f, 0.017121f, -0.023611f, -0.082779f, -0.097690f, -0.047262f, 0.003538f, -0.014083f, -0.064057f, -0.047354f, 0.048792f, 0.120644f, 0.089100f, 0.001721f, -0.043962f, -0.022900f, 0.017583f, 0.037386f, 0.030687f, -0.002922f, -0.063400f, -0.126153f, -0.144334f, -0.086185f, 0.032835f, 0.150889f, 0.195961f, 0.137894f, 0.011539f, -0.113968f, -0.181198f, -0.161076f, -0.058453f, 0.071727f, 0.142268f, 0.108887f, 0.016631f, -0.056570f, -0.081227f, -0.070812f, -0.030359f, 0.034923f, 0.081499f, 0.061830f, -0.004604f, -0.047571f, -0.035610f, -0.003534f, + 0.009115f, -0.000319f, -0.020183f, -0.041016f, -0.041611f, -0.003773f, 0.046603f, 0.054526f, 0.007769f, -0.042029f, -0.045486f, -0.009557f, 0.027952f, 0.041716f, 0.020226f, -0.034935f, -0.082451f, -0.052855f, 0.067431f, 0.182815f, 0.167146f, 0.000542f, -0.196812f, -0.268389f, -0.149445f, 0.085226f, 0.270625f, 0.265537f, 0.065877f, -0.177799f, -0.277049f, -0.161586f, 0.068272f, 0.229927f, 0.201780f, 0.013838f, -0.174864f, -0.203990f, -0.050350f, 0.150974f, 0.228536f, 0.119486f, -0.091186f, -0.245501f, -0.226405f, -0.041472f, 0.173638f, 0.252608f, 0.134739f, -0.081479f, -0.221452f, -0.178708f, 0.001454f, 0.162331f, 0.170094f, 0.032187f, -0.113890f, -0.136053f, -0.028907f, 0.093083f, 0.102565f, -0.030299f, -0.193574f, -0.205108f, 0.008998f, 0.290020f, 0.365118f, 0.129023f, -0.234351f, -0.434369f, -0.331419f, -0.008847f, 0.322445f, 0.447517f, 0.268626f, -0.099026f, -0.380143f, -0.363636f, -0.086151f, 0.218452f, 0.324767f, 0.169512f, -0.128360f, -0.348997f, -0.317778f, -0.041811f, 0.284101f, 0.425294f, 0.278163f, -0.066005f, -0.380018f, -0.441335f, -0.192691f, 0.193578f, 0.437660f, 0.374721f, + 0.073156f, -0.242365f, -0.365871f, -0.241897f, 0.016610f, 0.223753f, 0.259028f, 0.134684f, -0.050067f, -0.188486f, -0.205413f, -0.082246f, 0.109284f, 0.229395f, 0.179624f, -0.005002f, -0.187280f, -0.240503f, -0.130300f, 0.073329f, 0.236329f, 0.243713f, 0.086673f, -0.127247f, -0.259240f, -0.233003f, -0.063739f, 0.159671f, 0.308964f, 0.280537f, 0.073767f, -0.191300f, -0.350944f, -0.305382f, -0.077143f, 0.201310f, 0.358878f, 0.291196f, 0.037878f, -0.237347f, -0.357198f, -0.247564f, 0.017429f, 0.263077f, 0.328331f, 0.178240f, -0.072736f, -0.251639f, -0.252638f, -0.095911f, 0.103704f, 0.215867f, 0.175373f, 0.023225f, -0.125971f, -0.172388f, -0.099721f, 0.028833f, 0.125421f, 0.132450f, 0.051941f, -0.058847f, -0.126257f, -0.109294f, -0.022168f, 0.079059f, 0.129283f, 0.093201f, -0.006765f, -0.101922f, -0.128550f, -0.072571f, 0.028351f, 0.111315f, 0.121172f, 0.046684f, -0.061735f, -0.126442f, -0.106310f, -0.021901f, 0.072214f, 0.120632f, 0.088840f, -0.009190f, -0.104607f, -0.127005f, -0.067985f, 0.024784f, 0.097959f, 0.111625f, 0.044173f, -0.070680f, -0.140051f, -0.106843f, -0.028244f, 0.003835f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.012810f, 0.017121f, -0.023611f, -0.082779f, -0.097690f, -0.047262f, 0.003538f, -0.014083f, -0.064057f, -0.047354f, 0.048792f, 0.120644f, 0.089100f, 0.001721f, -0.043962f, -0.022900f, 0.017583f, 0.037386f, 0.030687f, -0.002922f, -0.063400f, -0.126153f, -0.144334f, -0.086185f, 0.032835f, 0.150889f, 0.195961f, 0.137894f, 0.011539f, -0.113968f, -0.181198f, -0.161076f, -0.058453f, 0.071727f, 0.142268f, 0.108887f, 0.016631f, -0.056570f, -0.081227f, -0.070812f, -0.030359f, 0.034923f, 0.081499f, 0.061830f, -0.004604f, -0.047571f, -0.035610f, -0.003534f, + 0.009115f, -0.000319f, -0.020183f, -0.041016f, -0.041611f, -0.003773f, 0.046603f, 0.054526f, 0.007769f, -0.042029f, -0.045486f, -0.009557f, 0.027952f, 0.041716f, 0.020226f, -0.034935f, -0.082451f, -0.052855f, 0.067431f, 0.182815f, 0.167146f, 0.000542f, -0.196812f, -0.268389f, -0.149445f, 0.085226f, 0.270625f, 0.265537f, 0.065877f, -0.177799f, -0.277049f, -0.161586f, 0.068272f, 0.229927f, 0.201780f, 0.013838f, -0.174864f, -0.203990f, -0.050350f, 0.150974f, 0.228536f, 0.119486f, -0.091186f, -0.245501f, -0.226405f, -0.041472f, 0.173638f, 0.252608f, 0.134739f, -0.081479f, -0.221452f, -0.178708f, 0.001454f, 0.162331f, 0.170094f, 0.032187f, -0.113890f, -0.136053f, -0.028907f, 0.093083f, 0.102565f, -0.030299f, -0.193574f, -0.205108f, 0.008998f, 0.290020f, 0.365118f, 0.129023f, -0.234351f, -0.434369f, -0.331419f, -0.008847f, 0.322445f, 0.447517f, 0.268626f, -0.099026f, -0.380143f, -0.363636f, -0.086151f, 0.218452f, 0.324767f, 0.169512f, -0.128360f, -0.348997f, -0.317778f, -0.041811f, 0.284101f, 0.425294f, 0.278163f, -0.066005f, -0.380018f, -0.441335f, -0.192691f, 0.193578f, 0.437660f, 0.374721f, + 0.073156f, -0.242365f, -0.365871f, -0.241897f, 0.016610f, 0.223753f, 0.259028f, 0.134684f, -0.050067f, -0.188486f, -0.205413f, -0.082246f, 0.109284f, 0.229395f, 0.179624f, -0.005002f, -0.187280f, -0.240503f, -0.130300f, 0.073329f, 0.236329f, 0.243713f, 0.086673f, -0.127247f, -0.259240f, -0.233003f, -0.063739f, 0.159671f, 0.308964f, 0.280537f, 0.073767f, -0.191300f, -0.350944f, -0.305382f, -0.077143f, 0.201310f, 0.358878f, 0.291196f, 0.037878f, -0.237347f, -0.357198f, -0.247564f, 0.017429f, 0.263077f, 0.328331f, 0.178240f, -0.072736f, -0.251639f, -0.252638f, -0.095911f, 0.103704f, 0.215867f, 0.175373f, 0.023225f, -0.125971f, -0.172388f, -0.099721f, 0.028833f, 0.125421f, 0.132450f, 0.051941f, -0.058847f, -0.126257f, -0.109294f, -0.022168f, 0.079059f, 0.129283f, 0.093201f, -0.006765f, -0.101922f, -0.128550f, -0.072571f, 0.028351f, 0.111315f, 0.121172f, 0.046684f, -0.061735f, -0.126442f, -0.106310f, -0.021901f, 0.072214f, 0.120632f, 0.088840f, -0.009190f, -0.104607f, -0.127005f, -0.067985f, 0.024784f, 0.097959f, 0.111625f, 0.044173f, -0.070680f, -0.140051f, -0.106843f, -0.028244f, 0.003835f}, + }, + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.029791f, 0.024110f, -0.069304f, -0.130401f, -0.085262f, 0.006216f, 0.061602f, 0.061826f, 0.026628f, -0.004606f, 0.011353f, 0.052948f, 0.034573f, -0.055731f, -0.103650f, -0.035730f, 0.057306f, 0.059600f, -0.001972f, -0.030433f, -0.013414f, -0.002591f, -0.007411f, -0.002977f, 0.005818f, 0.000442f, -0.010228f, -0.013244f, -0.017363f, -0.023452f, -0.008716f, 0.033524f, 0.069024f, 0.055839f, -0.013104f, -0.100332f, -0.144914f, -0.105970f, -0.000370f, 0.108920f, 0.160986f, 0.126541f, 0.016373f, -0.107671f, -0.155852f, -0.090466f, 0.027694f, 0.103208f, + 0.098438f, 0.041483f, -0.022387f, -0.056657f, -0.044930f, -0.009068f, 0.007643f, -0.005925f, -0.017102f, 0.000388f, 0.033678f, 0.052923f, 0.040762f, 0.002035f, -0.035302f, -0.040325f, -0.016264f, 0.002588f, 0.000851f, -0.002960f, 0.001441f, 0.001402f, -0.003146f, 0.003277f, 0.011551f, -0.004707f, -0.033186f, -0.024937f, 0.033432f, 0.087446f, 0.067114f, -0.043920f, -0.181385f, -0.232496f, -0.127400f, 0.078283f, 0.237096f, 0.238411f, 0.085260f, -0.132160f, -0.284340f, -0.251887f, -0.021421f, 0.253375f, 0.359173f, 0.218792f, -0.048761f, -0.249223f, -0.260654f, -0.099663f, 0.101050f, 0.198522f, 0.159174f, 0.058430f, -0.031748f, -0.097275f, -0.132936f, -0.122891f, -0.072162f, 0.016981f, 0.166135f, 0.314974f, 0.263987f, -0.091368f, -0.493974f, -0.515637f, -0.067111f, 0.458150f, 0.608909f, 0.301278f, -0.206671f, -0.583004f, -0.596864f, -0.210518f, 0.349032f, 0.683896f, 0.527981f, -0.010869f, -0.525143f, -0.628249f, -0.250030f, 0.308015f, 0.604156f, 0.412175f, -0.096447f, -0.509530f, -0.516905f, -0.136172f, 0.330713f, 0.537549f, 0.347513f, -0.078045f, -0.419811f, -0.448500f, -0.174447f, 0.193565f, + 0.408604f, 0.344319f, 0.066223f, -0.223687f, -0.334280f, -0.214764f, 0.027577f, 0.217668f, 0.235731f, 0.092407f, -0.092216f, -0.187384f, -0.143646f, -0.008730f, 0.119555f, 0.154758f, 0.074853f, -0.056258f, -0.134173f, -0.103117f, 0.001304f, 0.096629f, 0.123197f, 0.072209f, -0.023827f, -0.111784f, -0.143975f, -0.099795f, 0.009761f, 0.142703f, 0.226341f, 0.188521f, 0.023708f, -0.176065f, -0.279523f, -0.213944f, -0.014716f, 0.197635f, 0.287516f, 0.191524f, -0.027916f, -0.220273f, -0.259018f, -0.130380f, 0.070024f, 0.210319f, 0.206432f, 0.073049f, -0.089660f, -0.172086f, -0.134166f, -0.020411f, 0.087567f, 0.127411f, 0.085585f, -0.002683f, -0.078455f, -0.096583f, -0.050914f, 0.026485f, 0.085166f, 0.085645f, 0.027073f, -0.049349f, -0.091109f, -0.072469f, -0.007296f, 0.063448f, 0.094260f, 0.062457f, -0.011791f, -0.076761f, -0.088888f, -0.042905f, 0.030553f, 0.085880f, 0.086676f, 0.029792f, -0.046997f, -0.091054f, -0.074773f, -0.010929f, 0.060994f, 0.096279f, 0.068699f, -0.006224f, -0.075203f, -0.089687f, -0.044579f, 0.027610f, 0.085692f, 0.095106f, 0.041487f, -0.043449f, -0.087234f, -0.044234f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.029791f, 0.024110f, -0.069304f, -0.130401f, -0.085262f, 0.006216f, 0.061602f, 0.061826f, 0.026628f, -0.004606f, 0.011353f, 0.052948f, 0.034573f, -0.055731f, -0.103650f, -0.035730f, 0.057306f, 0.059600f, -0.001972f, -0.030433f, -0.013414f, -0.002591f, -0.007411f, -0.002977f, 0.005818f, 0.000442f, -0.010228f, -0.013244f, -0.017363f, -0.023452f, -0.008716f, 0.033524f, 0.069024f, 0.055839f, -0.013104f, -0.100332f, -0.144914f, -0.105970f, -0.000370f, 0.108920f, 0.160986f, 0.126541f, 0.016373f, -0.107671f, -0.155852f, -0.090466f, 0.027694f, 0.103208f, + 0.098438f, 0.041483f, -0.022387f, -0.056657f, -0.044930f, -0.009068f, 0.007643f, -0.005925f, -0.017102f, 0.000388f, 0.033678f, 0.052923f, 0.040762f, 0.002035f, -0.035302f, -0.040325f, -0.016264f, 0.002588f, 0.000851f, -0.002960f, 0.001441f, 0.001402f, -0.003146f, 0.003277f, 0.011551f, -0.004707f, -0.033186f, -0.024937f, 0.033432f, 0.087446f, 0.067114f, -0.043920f, -0.181385f, -0.232496f, -0.127400f, 0.078283f, 0.237096f, 0.238411f, 0.085260f, -0.132160f, -0.284340f, -0.251887f, -0.021421f, 0.253375f, 0.359173f, 0.218792f, -0.048761f, -0.249223f, -0.260654f, -0.099663f, 0.101050f, 0.198522f, 0.159174f, 0.058430f, -0.031748f, -0.097275f, -0.132936f, -0.122891f, -0.072162f, 0.016981f, 0.166135f, 0.314974f, 0.263987f, -0.091368f, -0.493974f, -0.515637f, -0.067111f, 0.458150f, 0.608909f, 0.301278f, -0.206671f, -0.583004f, -0.596864f, -0.210518f, 0.349032f, 0.683896f, 0.527981f, -0.010869f, -0.525143f, -0.628249f, -0.250030f, 0.308015f, 0.604156f, 0.412175f, -0.096447f, -0.509530f, -0.516905f, -0.136172f, 0.330713f, 0.537549f, 0.347513f, -0.078045f, -0.419811f, -0.448500f, -0.174447f, 0.193565f, + 0.408604f, 0.344319f, 0.066223f, -0.223687f, -0.334280f, -0.214764f, 0.027577f, 0.217668f, 0.235731f, 0.092407f, -0.092216f, -0.187384f, -0.143646f, -0.008730f, 0.119555f, 0.154758f, 0.074853f, -0.056258f, -0.134173f, -0.103117f, 0.001304f, 0.096629f, 0.123197f, 0.072209f, -0.023827f, -0.111784f, -0.143975f, -0.099795f, 0.009761f, 0.142703f, 0.226341f, 0.188521f, 0.023708f, -0.176065f, -0.279523f, -0.213944f, -0.014716f, 0.197635f, 0.287516f, 0.191524f, -0.027916f, -0.220273f, -0.259018f, -0.130380f, 0.070024f, 0.210319f, 0.206432f, 0.073049f, -0.089660f, -0.172086f, -0.134166f, -0.020411f, 0.087567f, 0.127411f, 0.085585f, -0.002683f, -0.078455f, -0.096583f, -0.050914f, 0.026485f, 0.085166f, 0.085645f, 0.027073f, -0.049349f, -0.091109f, -0.072469f, -0.007296f, 0.063448f, 0.094260f, 0.062457f, -0.011791f, -0.076761f, -0.088888f, -0.042905f, 0.030553f, 0.085880f, 0.086676f, 0.029792f, -0.046997f, -0.091054f, -0.074773f, -0.010929f, 0.060994f, 0.096279f, 0.068699f, -0.006224f, -0.075203f, -0.089687f, -0.044579f, 0.027610f, 0.085692f, 0.095106f, 0.041487f, -0.043449f, -0.087234f, -0.044234f}, + }, + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, -0.000227f, -0.002434f, -0.006371f, -0.005852f, 0.003422f, 0.013194f, 0.010306f, 0.000609f, 0.009746f, 0.041053f, 0.041909f, -0.053172f, -0.224031f, -0.328861f, -0.212799f, 0.119077f, 0.453213f, 0.528605f, 0.265581f, -0.160498f, -0.459728f, -0.442806f, -0.145618f, 0.205982f, 0.366896f, 0.263152f, 0.033124f, -0.128153f, -0.146884f, -0.080417f, -0.004630f, 0.046244f, 0.058165f, 0.031565f, -0.001707f, -0.007509f, 0.005418f, 0.006823f, -0.003169f, -0.003630f, 0.003603f, 0.001845f, -0.004494f, 0.000070f, 0.010543f, 0.011916f, 0.006050f, 0.002164f, + -0.002925f, -0.013410f, -0.019079f, -0.007795f, 0.018241f, 0.044303f, 0.049434f, 0.017318f, -0.040180f, -0.078747f, -0.061217f, 0.005109f, 0.079596f, 0.117901f, 0.086965f, -0.010244f, -0.106381f, -0.107315f, 0.007940f, 0.145315f, 0.176265f, 0.053685f, -0.143549f, -0.256951f, -0.162535f, 0.104473f, 0.336910f, 0.320135f, 0.033931f, -0.317857f, -0.468252f, -0.279924f, 0.153382f, 0.536750f, 0.556697f, 0.141477f, -0.428879f, -0.720055f, -0.496892f, 0.087157f, 0.612777f, 0.706055f, 0.304070f, -0.303380f, -0.685050f, -0.579946f, -0.077082f, 0.458582f, 0.648014f, 0.369868f, -0.147642f, -0.506783f, -0.464135f, -0.107346f, 0.268733f, 0.423470f, 0.309063f, 0.031997f, -0.240519f, -0.354770f, -0.241661f, 0.028462f, 0.271225f, 0.310837f, 0.120162f, -0.143877f, -0.265328f, -0.158945f, 0.061584f, 0.206310f, 0.178584f, 0.018483f, -0.169786f, -0.282924f, -0.243263f, -0.041576f, 0.213320f, 0.334703f, 0.207300f, -0.087317f, -0.316168f, -0.290611f, -0.028146f, 0.271263f, 0.392790f, 0.255340f, -0.052602f, -0.331312f, -0.388780f, -0.180198f, 0.140850f, 0.342677f, 0.304005f, 0.078584f, -0.186507f, -0.340994f, + -0.278789f, -0.004723f, 0.314381f, 0.440181f, 0.262605f, -0.098861f, -0.394319f, -0.426068f, -0.170914f, 0.201793f, 0.427423f, 0.336748f, 0.002592f, -0.313868f, -0.381218f, -0.172282f, 0.143607f, 0.344160f, 0.307339f, 0.080090f, -0.171614f, -0.289435f, -0.224392f, -0.043742f, 0.134709f, 0.217269f, 0.178119f, 0.057729f, -0.076133f, -0.166550f, -0.176536f, -0.092477f, 0.053325f, 0.176577f, 0.192057f, 0.083697f, -0.079927f, -0.194856f, -0.187501f, -0.059074f, 0.109164f, 0.203789f, 0.160020f, 0.010581f, -0.140886f, -0.194673f, -0.119629f, 0.029076f, 0.148102f, 0.160130f, 0.069250f, -0.050698f, -0.119204f, -0.102947f, -0.025635f, 0.056163f, 0.090550f, 0.062735f, 0.000519f, -0.051928f, -0.065469f, -0.037089f, 0.014860f, 0.058879f, 0.065414f, 0.028340f, -0.027221f, -0.063228f, -0.056563f, -0.012689f, 0.039984f, 0.067450f, 0.051074f, 0.000941f, -0.049696f, -0.066689f, -0.037833f, 0.018657f, 0.064810f, 0.067842f, 0.024304f, -0.035973f, -0.071598f, -0.059345f, -0.008405f, 0.047905f, 0.073449f, 0.051018f, -0.005755f, -0.059063f, -0.072066f, -0.035915f, 0.023891f, 0.067410f, 0.068347f, 0.028263f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, -0.000227f, -0.002434f, -0.006371f, -0.005852f, 0.003422f, 0.013194f, 0.010306f, 0.000609f, 0.009746f, 0.041053f, 0.041909f, -0.053172f, -0.224031f, -0.328861f, -0.212799f, 0.119077f, 0.453213f, 0.528605f, 0.265581f, -0.160498f, -0.459728f, -0.442806f, -0.145618f, 0.205982f, 0.366896f, 0.263152f, 0.033124f, -0.128153f, -0.146884f, -0.080417f, -0.004630f, 0.046244f, 0.058165f, 0.031565f, -0.001707f, -0.007509f, 0.005418f, 0.006823f, -0.003169f, -0.003630f, 0.003603f, 0.001845f, -0.004494f, 0.000070f, 0.010543f, 0.011916f, 0.006050f, 0.002164f, + -0.002925f, -0.013410f, -0.019079f, -0.007795f, 0.018241f, 0.044303f, 0.049434f, 0.017318f, -0.040180f, -0.078747f, -0.061217f, 0.005109f, 0.079596f, 0.117901f, 0.086965f, -0.010244f, -0.106381f, -0.107315f, 0.007940f, 0.145315f, 0.176265f, 0.053685f, -0.143549f, -0.256951f, -0.162535f, 0.104473f, 0.336910f, 0.320135f, 0.033931f, -0.317857f, -0.468252f, -0.279924f, 0.153382f, 0.536750f, 0.556697f, 0.141477f, -0.428879f, -0.720055f, -0.496892f, 0.087157f, 0.612777f, 0.706055f, 0.304070f, -0.303380f, -0.685050f, -0.579946f, -0.077082f, 0.458582f, 0.648014f, 0.369868f, -0.147642f, -0.506783f, -0.464135f, -0.107346f, 0.268733f, 0.423470f, 0.309063f, 0.031997f, -0.240519f, -0.354770f, -0.241661f, 0.028462f, 0.271225f, 0.310837f, 0.120162f, -0.143877f, -0.265328f, -0.158945f, 0.061584f, 0.206310f, 0.178584f, 0.018483f, -0.169786f, -0.282924f, -0.243263f, -0.041576f, 0.213320f, 0.334703f, 0.207300f, -0.087317f, -0.316168f, -0.290611f, -0.028146f, 0.271263f, 0.392790f, 0.255340f, -0.052602f, -0.331312f, -0.388780f, -0.180198f, 0.140850f, 0.342677f, 0.304005f, 0.078584f, -0.186507f, -0.340994f, + -0.278789f, -0.004723f, 0.314381f, 0.440181f, 0.262605f, -0.098861f, -0.394319f, -0.426068f, -0.170914f, 0.201793f, 0.427423f, 0.336748f, 0.002592f, -0.313868f, -0.381218f, -0.172282f, 0.143607f, 0.344160f, 0.307339f, 0.080090f, -0.171614f, -0.289435f, -0.224392f, -0.043742f, 0.134709f, 0.217269f, 0.178119f, 0.057729f, -0.076133f, -0.166550f, -0.176536f, -0.092477f, 0.053325f, 0.176577f, 0.192057f, 0.083697f, -0.079927f, -0.194856f, -0.187501f, -0.059074f, 0.109164f, 0.203789f, 0.160020f, 0.010581f, -0.140886f, -0.194673f, -0.119629f, 0.029076f, 0.148102f, 0.160130f, 0.069250f, -0.050698f, -0.119204f, -0.102947f, -0.025635f, 0.056163f, 0.090550f, 0.062735f, 0.000519f, -0.051928f, -0.065469f, -0.037089f, 0.014860f, 0.058879f, 0.065414f, 0.028340f, -0.027221f, -0.063228f, -0.056563f, -0.012689f, 0.039984f, 0.067450f, 0.051074f, 0.000941f, -0.049696f, -0.066689f, -0.037833f, 0.018657f, 0.064810f, 0.067842f, 0.024304f, -0.035973f, -0.071598f, -0.059345f, -0.008405f, 0.047905f, 0.073449f, 0.051018f, -0.005755f, -0.059063f, -0.072066f, -0.035915f, 0.023891f, 0.067410f, 0.068347f, 0.028263f}, + }, + { + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.004115f, 0.009125f, 0.016225f, 0.033251f, 0.032426f, -0.031315f, -0.135128f, -0.164430f, -0.035388f, 0.167415f, 0.241609f, 0.084256f, -0.178409f, -0.310135f, -0.195933f, 0.064715f, 0.270673f, 0.291458f, 0.139852f, -0.075828f, -0.236252f, -0.263883f, -0.144853f, 0.059920f, 0.232089f, 0.264093f, 0.137743f, -0.062168f, -0.212453f, -0.231117f, -0.116280f, 0.059578f, 0.188187f, 0.188054f, 0.060964f, -0.102867f, -0.185488f, -0.128906f, 0.018750f, 0.144211f, 0.165501f, 0.089016f, -0.022643f, -0.112075f, -0.143092f, -0.092715f, 0.026352f, 0.142528f, + 0.166254f, 0.069143f, -0.087278f, -0.199059f, -0.192088f, -0.068502f, 0.095159f, 0.199275f, 0.185727f, 0.064675f, -0.099912f, -0.216128f, -0.203868f, -0.055079f, 0.140102f, 0.253126f, 0.212770f, 0.046625f, -0.145216f, -0.247596f, -0.200099f, -0.042475f, 0.121540f, 0.212253f, 0.207307f, 0.109139f, -0.056930f, -0.207888f, -0.237119f, -0.117290f, 0.065210f, 0.189049f, 0.183194f, 0.053937f, -0.115760f, -0.201508f, -0.131778f, 0.041281f, 0.189758f, 0.216623f, 0.106307f, -0.077753f, -0.213419f, -0.197205f, -0.051520f, 0.087320f, 0.120292f, 0.074726f, 0.023119f, -0.013465f, -0.045734f, -0.067816f, -0.068360f, -0.043142f, 0.016108f, 0.093680f, 0.120623f, 0.046712f, -0.067964f, -0.113625f, -0.071811f, -0.013098f, 0.025193f, 0.058275f, 0.062933f, -0.017179f, -0.153835f, -0.217254f, -0.119105f, 0.080427f, 0.233969f, 0.240559f, 0.110649f, -0.064180f, -0.186196f, -0.208446f, -0.136353f, -0.003219f, 0.128801f, 0.170680f, 0.074816f, -0.084557f, -0.152582f, -0.052058f, 0.120682f, 0.186491f, 0.068121f, -0.127402f, -0.213231f, -0.105805f, 0.099899f, 0.229804f, 0.185222f, 0.003810f, -0.185939f, -0.247274f, + -0.123553f, 0.100102f, 0.244984f, 0.197279f, 0.013797f, -0.149376f, -0.186311f, -0.101192f, 0.032385f, 0.128180f, 0.134745f, 0.069418f, -0.005307f, -0.051196f, -0.073898f, -0.074111f, -0.032267f, 0.040004f, 0.083997f, 0.059136f, -0.009774f, -0.069214f, -0.088217f, -0.061459f, -0.000879f, 0.055853f, 0.061914f, 0.012299f, -0.040249f, -0.041040f, 0.004255f, 0.038152f, 0.018698f, -0.033734f, -0.060953f, -0.031187f, 0.030588f, 0.073644f, 0.068387f, 0.020885f, -0.039193f, -0.074147f, -0.058976f, -0.003866f, 0.049731f, 0.064487f, 0.035818f, -0.011839f, -0.045313f, -0.042448f, -0.008624f, 0.024491f, 0.028481f, 0.005966f, -0.018425f, -0.026810f, -0.017873f, 0.001234f, 0.019172f, 0.023707f, 0.011971f, -0.006311f, -0.019466f, -0.021463f, -0.010479f, 0.008834f, 0.022854f, 0.020190f, 0.004268f, -0.012667f, -0.021982f, -0.018893f, -0.002121f, 0.017933f, 0.023398f, 0.010147f, -0.007076f, -0.015539f, -0.015889f, -0.010177f, 0.002857f, 0.016435f, 0.017618f, 0.005044f, -0.009322f, -0.016548f, -0.015687f, -0.006253f, 0.009272f, 0.019301f, 0.013731f, -0.002209f, -0.014788f, -0.017617f, -0.013120f, -0.004808f}, + {0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.004115f, 0.009125f, 0.016225f, 0.033251f, 0.032426f, -0.031315f, -0.135128f, -0.164430f, -0.035388f, 0.167415f, 0.241609f, 0.084256f, -0.178409f, -0.310135f, -0.195933f, 0.064715f, 0.270673f, 0.291458f, 0.139852f, -0.075828f, -0.236252f, -0.263883f, -0.144853f, 0.059920f, 0.232089f, 0.264093f, 0.137743f, -0.062168f, -0.212453f, -0.231117f, -0.116280f, 0.059578f, 0.188187f, 0.188054f, 0.060964f, -0.102867f, -0.185488f, -0.128906f, 0.018750f, 0.144211f, 0.165501f, 0.089016f, -0.022643f, -0.112075f, -0.143092f, -0.092715f, 0.026352f, 0.142528f, + 0.166254f, 0.069143f, -0.087278f, -0.199059f, -0.192088f, -0.068502f, 0.095159f, 0.199275f, 0.185727f, 0.064675f, -0.099912f, -0.216128f, -0.203868f, -0.055079f, 0.140102f, 0.253126f, 0.212770f, 0.046625f, -0.145216f, -0.247596f, -0.200099f, -0.042475f, 0.121540f, 0.212253f, 0.207307f, 0.109139f, -0.056930f, -0.207888f, -0.237119f, -0.117290f, 0.065210f, 0.189049f, 0.183194f, 0.053937f, -0.115760f, -0.201508f, -0.131778f, 0.041281f, 0.189758f, 0.216623f, 0.106307f, -0.077753f, -0.213419f, -0.197205f, -0.051520f, 0.087320f, 0.120292f, 0.074726f, 0.023119f, -0.013465f, -0.045734f, -0.067816f, -0.068360f, -0.043142f, 0.016108f, 0.093680f, 0.120623f, 0.046712f, -0.067964f, -0.113625f, -0.071811f, -0.013098f, 0.025193f, 0.058275f, 0.062933f, -0.017179f, -0.153835f, -0.217254f, -0.119105f, 0.080427f, 0.233969f, 0.240559f, 0.110649f, -0.064180f, -0.186196f, -0.208446f, -0.136353f, -0.003219f, 0.128801f, 0.170680f, 0.074816f, -0.084557f, -0.152582f, -0.052058f, 0.120682f, 0.186491f, 0.068121f, -0.127402f, -0.213231f, -0.105805f, 0.099899f, 0.229804f, 0.185222f, 0.003810f, -0.185939f, -0.247274f, + -0.123553f, 0.100102f, 0.244984f, 0.197279f, 0.013797f, -0.149376f, -0.186311f, -0.101192f, 0.032385f, 0.128180f, 0.134745f, 0.069418f, -0.005307f, -0.051196f, -0.073898f, -0.074111f, -0.032267f, 0.040004f, 0.083997f, 0.059136f, -0.009774f, -0.069214f, -0.088217f, -0.061459f, -0.000879f, 0.055853f, 0.061914f, 0.012299f, -0.040249f, -0.041040f, 0.004255f, 0.038152f, 0.018698f, -0.033734f, -0.060953f, -0.031187f, 0.030588f, 0.073644f, 0.068387f, 0.020885f, -0.039193f, -0.074147f, -0.058976f, -0.003866f, 0.049731f, 0.064487f, 0.035818f, -0.011839f, -0.045313f, -0.042448f, -0.008624f, 0.024491f, 0.028481f, 0.005966f, -0.018425f, -0.026810f, -0.017873f, 0.001234f, 0.019172f, 0.023707f, 0.011971f, -0.006311f, -0.019466f, -0.021463f, -0.010479f, 0.008834f, 0.022854f, 0.020190f, 0.004268f, -0.012667f, -0.021982f, -0.018893f, -0.002121f, 0.017933f, 0.023398f, 0.010147f, -0.007076f, -0.015539f, -0.015889f, -0.010177f, 0.002857f, 0.016435f, 0.017618f, 0.005044f, -0.009322f, -0.016548f, -0.015687f, -0.006253f, 0.009272f, 0.019301f, 0.013731f, -0.002209f, -0.014788f, -0.017617f, -0.013120f, -0.004808f}, + }, +}; +#else const float CRendBin_HOA3_HRIR_coeff_re_48kHz[16][BINAURAL_CHANNELS][480]={ { {-0.007743f, -0.007558f, -0.007195f, -0.006666f, -0.005988f, -0.005184f, -0.004281f, -0.003308f, -0.002297f, -0.001282f, -0.000295f, 0.000632f, 0.001470f, 0.002193f, 0.002779f, 0.003212f, 0.003480f, 0.003577f, 0.003506f, 0.003272f, 0.002887f, 0.002371f, 0.001744f, 0.001033f, 0.000266f, -0.000524f, -0.001308f, -0.002054f, -0.002731f, -0.003314f, -0.003778f, -0.004105f, -0.004278f, -0.004290f, -0.004136f, -0.003818f, -0.003346f, -0.002730f, -0.001990f, -0.001147f, -0.000226f, 0.000744f, 0.001734f, 0.002716f, 0.003658f, 0.004535f, 0.005321f, 0.005993f, 0.006535f, 0.006932f, 0.007177f, 0.007266f, 0.007200f, 0.006986f, 0.006636f, 0.006164f, 0.005590f, 0.004934f, 0.004220f, 0.003472f, 0.002715f, 0.001972f, 0.001265f, 0.000614f, 0.000036f, -0.000456f, -0.000852f, -0.001146f, -0.001339f, -0.001431f, -0.001430f, -0.001345f, -0.001189f, -0.000977f, -0.000725f, -0.000450f, -0.000171f, 0.000097f, 0.000338f, 0.000538f, 0.000686f, 0.000774f, 0.000798f, 0.000755f, 0.000647f, 0.000478f, 0.000258f, -0.000005f, -0.000297f, -0.000604f, -0.000913f, -0.001206f, -0.001471f, -0.001692f, -0.001859f, -0.001960f, @@ -1037,6 +1428,7 @@ const float CRendBin_HOA3_HRIR_coeff_im_48kHz[16][BINAURAL_CHANNELS][480]={ -0.025960f, 0.182839f, 0.278925f, 0.086432f, -0.206817f, -0.257206f, -0.181695f, 0.010354f, 0.202964f, 0.229244f, 0.098833f, -0.087026f, -0.181307f, -0.141921f, -0.048110f, 0.075799f, 0.114635f, 0.060613f, -0.007091f, -0.085373f, -0.082937f, -0.027346f, 0.088356f, 0.139427f, 0.092503f, -0.030368f, -0.103502f, -0.107065f, -0.020528f, 0.052644f, 0.128449f, 0.060539f, -0.024419f, -0.053943f, -0.053067f, 0.104894f, 0.110330f, -0.030292f, -0.137751f, -0.137278f, 0.001888f, 0.123472f, 0.133148f, -0.007019f, -0.129875f, -0.123791f, 0.026745f, 0.121553f, 0.087812f, -0.059539f, -0.115914f, -0.041189f, 0.084327f, 0.080379f, -0.023472f, -0.085842f, -0.004187f, 0.058332f, 0.012800f, -0.041715f, -0.000345f, 0.009540f, 0.000671f, -0.007229f, 0.003356f, -0.001562f, 0.003583f, -0.001390f, 0.004748f, -0.004077f, 0.001544f, -0.004733f, -0.001209f, -0.004578f, 0.003593f, -0.002046f, 0.008076f, -0.006694f, 0.003824f, -0.000642f, 0.003010f, -0.005633f, 0.003952f, -0.007572f, 0.002614f, -0.004205f, 0.006070f, -0.002496f, 0.004053f, -0.001677f, 0.001551f, -0.006302f, 0.004819f, -0.002902f, 0.002256f, -0.003500f} } }; +#endif const float *CRendBin_HOA3_HRIR_coeff_diffuse_re_48kHz[BINAURAL_CHANNELS]={NULL,NULL}; const float *CRendBin_HOA3_HRIR_coeff_diffuse_im_48kHz[BINAURAL_CHANNELS]={NULL,NULL}; diff --git a/lib_rend/ivas_rom_rend.h b/lib_rend/ivas_rom_rend.h index aaf7fa7113..2ff892071b 100644 --- a/lib_rend/ivas_rom_rend.h +++ b/lib_rend/ivas_rom_rend.h @@ -138,4 +138,8 @@ extern const LS_CONVERSION_MATRIX ls_conversion_cicp16_cicp19[]; /* Mapping table of input config : output config with corresponding matrix */ extern const LS_CONVERSION_MAPPING ls_conversion_mapping[]; +#ifdef SPLIT_REND_WITH_HEAD_ROT +extern const int32_t split_rend_brate_tbl[]; +#endif + #endif /* IVAS_ROM_REND_H */ diff --git a/lib_rend/ivas_rotation.c b/lib_rend/ivas_rotation.c index 1a7cd8b830..970146de56 100644 --- a/lib_rend/ivas_rotation.c +++ b/lib_rend/ivas_rotation.c @@ -76,6 +76,9 @@ ivas_error ivas_headTrack_open( set_zero( ( *hHeadTrackData )->Rmat_prev[i], 3 ); ( *hHeadTrackData )->Rmat_prev[i][i] = 1.0f; } +#ifdef SPLIT_REND_WITH_HEAD_ROT + ( *hHeadTrackData )->sr_pose_pred_axis = DEFAULT_AXIS; +#endif return IVAS_ERR_OK; } @@ -150,6 +153,46 @@ void QuatToRotMat( return; } + +#ifdef SPLIT_REND_WITH_HEAD_ROT +/*------------------------------------------------------------------------- + * Quat2EulerDegree() + * + * Quaternion handling: calculate corresponding Euler angles in degrees + *------------------------------------------------------------------------*/ +void Quat2EulerDegree( + const IVAS_QUATERNION quat, /* i : quaternion describing the rotation */ + float *yaw, /* o : yaw */ + float *pitch, /* o : pitch */ + float *roll /* o : roll */ +) +{ + if ( quat.w != -3.0 ) + { + *yaw = atan2f( 2 * ( quat.w * quat.x + quat.y * quat.z ), 1 - 2 * ( quat.x * quat.x + quat.y * quat.y ) ); + *pitch = asinf( 2 * ( quat.w * quat.y - quat.z * quat.x ) ); + *roll = atan2f( 2 * ( quat.w * quat.z + quat.x * quat.y ), 1 - 2 * ( quat.y * quat.y + quat.z * quat.z ) ); + *yaw *= _180_OVER_PI; + *pitch *= _180_OVER_PI; + *roll *= _180_OVER_PI; + } + else + { + /* Euler angles in R_X(roll)*R_Y(pitch)*R_Z(yaw) convention + * + * yaw: rotate scene counter-clockwise in the horizontal plane + * pitch: rotate scene in the median plane, increase elevation with positive values + * roll: rotate scene from the right ear to the top + */ + *yaw = quat.z; + *pitch = quat.y; + *roll = quat.x; + } + + return; +} +#endif + /*------------------------------------------------------------------------- * Quat2Euler() * diff --git a/lib_rend/ivas_splitRend_lcld_dec.c b/lib_rend/ivas_splitRend_lcld_dec.c index f89564fffc..f8e62daaa2 100644 --- a/lib_rend/ivas_splitRend_lcld_dec.c +++ b/lib_rend/ivas_splitRend_lcld_dec.c @@ -1,65 +1,72 @@ /****************************************************************************************************** - (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby +International AB, Ericsson AB, Fraunhofer-Gesellschaft zur Foerderung der +angewandten Forschung e.V., Huawei Technologies Co. LTD., Koninklijke Philips +N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge +Corporation, and other contributors to this repository. All Rights Reserved. This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. + The IVAS codec Public Collaboration consisting of Dolby International AB, +Ericsson AB, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung +e.V., Huawei Technologies Co. LTD., Koninklijke Philips N.V., Nippon Telegraph +and Telephone Corporation, Nokia Technologies Oy, Orange, Panasonic Holdings +Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their +respective contributions in the software. This notice grants no license of any +kind, including but not limited to patent license, nor is any license granted by +implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration +agreement before making contributions. + + This software is provided "AS IS", without any express or implied warranties. +The software is in the development stage. It is intended exclusively for experts +who have experience with such software and solely for the purpose of inspection. +All implied warranties of non-infringement, merchantability and fitness for a +particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing +this software shall be submitted to and settled by the final, binding +jurisdiction of the courts of Munich, Germany in accordance with the laws of the +Federal Republic of Germany excluding its conflict of law rules and the United +Nations Convention on Contracts on the International Sales of Goods. *******************************************************************************************************/ -#include -#include "options.h" -#include -#include "ivas_prot.h" -#include "prot.h" #include "cnst.h" #include "ivas_cnst.h" -#include "ivas_rom_rend.h" +#include "ivas_lib_rend_internal.h" +#include "ivas_prot.h" +#include "ivas_rom_binauralRenderer.h" #include "ivas_rom_com.h" #include "ivas_rom_dec.h" -#include "ivas_rom_binauralRenderer.h" +#include "ivas_rom_rend.h" #include "lib_rend.h" -#include "ivas_lib_rend_internal.h" +#include "options.h" +#include "prot.h" +#include +#include +#include #ifdef DEBUGGING #include "debug.h" #endif #include "wmops.h" - #ifdef SPLIT_REND_WITH_HEAD_ROT -ivas_error ivas_splitBinLCLDDecOpen( - BIN_HR_SPLIT_LCLD_DEC_HANDLE *hSplitBinLCLDDec, - int32_t iSampleRate, - int32_t iChannels ) +ivas_error +ivas_splitBinLCLDDecOpen( BIN_HR_SPLIT_LCLD_DEC_HANDLE *hSplitBinLCLDDec, + int32_t iSampleRate, + int32_t iChannels ) { ivas_error error; BIN_HR_SPLIT_LCLD_DEC_HANDLE splitBinLCLDDec; error = IVAS_ERR_OK; - if ( ( splitBinLCLDDec = (BIN_HR_SPLIT_LCLD_DEC_HANDLE) count_malloc( sizeof( BIN_HR_SPLIT_LCLD_DEC ) ) ) == NULL ) + if ( ( splitBinLCLDDec = (BIN_HR_SPLIT_LCLD_DEC_HANDLE) count_malloc( + sizeof( BIN_HR_SPLIT_LCLD_DEC ) ) ) == NULL ) { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LCLD decoder Module \n" ) ); + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, + "Can not allocate memory for LCLD decoder Module \n" ) ); } splitBinLCLDDec->pLcld_dec = NULL; // place holder for CLDFB decoder handle @@ -67,12 +74,16 @@ ivas_error ivas_splitBinLCLDDecOpen( splitBinLCLDDec->iChannels = iChannels; splitBinLCLDDec->psCQMFDecoder = CreateCQMFDecoder( iSampleRate, iChannels ); - splitBinLCLDDec->pppfDecCQMFReal = (float ***) malloc( iChannels * sizeof( float ** ) ); - splitBinLCLDDec->pppfDecCQMFImag = (float ***) malloc( iChannels * sizeof( float ** ) ); + splitBinLCLDDec->pppfDecCQMFReal = + (float ***) count_malloc( iChannels * sizeof( float ** ) ); + splitBinLCLDDec->pppfDecCQMFImag = + (float ***) count_malloc( iChannels * sizeof( float ** ) ); for ( int32_t n = 0; n < splitBinLCLDDec->iChannels; n++ ) { - splitBinLCLDDec->pppfDecCQMFReal[n] = (float **) malloc( CLDFB_NO_COL_MAX * sizeof( float * ) ); - splitBinLCLDDec->pppfDecCQMFImag[n] = (float **) malloc( CLDFB_NO_COL_MAX * sizeof( float * ) ); + splitBinLCLDDec->pppfDecCQMFReal[n] = + (float **) count_malloc( CLDFB_NO_COL_MAX * sizeof( float * ) ); + splitBinLCLDDec->pppfDecCQMFImag[n] = + (float **) count_malloc( CLDFB_NO_COL_MAX * sizeof( float * ) ); } #ifdef CLDFB_DEBUG @@ -80,7 +91,8 @@ ivas_error ivas_splitBinLCLDDecOpen( char cldfbFilename[50] = "cldfb_out.bin"; if ( ( splitBinLCLDDec->cldfbOut = fopen( cldfbFilename, "wb" ) ) == NULL ) { - fprintf( stderr, "Error: CLDFB bitstream file %s could not be opened\n\n", cldfbFilename ); + fprintf( stderr, "Error: CLDFB bitstream file %s could not be opened\n\n", + cldfbFilename ); exit( -1 ); } int num_bands = CLDFB_NO_CHANNELS_MAX; @@ -92,8 +104,7 @@ ivas_error ivas_splitBinLCLDDecOpen( return error; } -void ivas_splitBinLCLDDecClose( - BIN_HR_SPLIT_LCLD_DEC_HANDLE *hSplitBinLCLDDec ) +void ivas_splitBinLCLDDecClose( BIN_HR_SPLIT_LCLD_DEC_HANDLE *hSplitBinLCLDDec ) { if ( ( *hSplitBinLCLDDec ) != NULL ) { @@ -104,11 +115,11 @@ void ivas_splitBinLCLDDecClose( for ( int32_t n = 0; n < ( *hSplitBinLCLDDec )->iChannels; n++ ) { - free( ( *hSplitBinLCLDDec )->pppfDecCQMFReal[n] ); - free( ( *hSplitBinLCLDDec )->pppfDecCQMFImag[n] ); + count_free( ( *hSplitBinLCLDDec )->pppfDecCQMFReal[n] ); + count_free( ( *hSplitBinLCLDDec )->pppfDecCQMFImag[n] ); } - free( ( *hSplitBinLCLDDec )->pppfDecCQMFReal ); - free( ( *hSplitBinLCLDDec )->pppfDecCQMFImag ); + count_free( ( *hSplitBinLCLDDec )->pppfDecCQMFReal ); + count_free( ( *hSplitBinLCLDDec )->pppfDecCQMFImag ); #ifdef CLDFB_DEBUG if ( ( *hSplitBinLCLDDec )->cldfbOut != NULL ) @@ -134,45 +145,26 @@ void ivas_splitBinLCLDDecProcess( assert( Cldfb_Out_Imag != NULL ); assert( pBits != NULL ); - int32_t iBytesWritten; - unsigned char auchData[4096]; - unsigned char *bval; - - iBytesWritten = ivas_split_rend_bitstream_read_int32( pBits, 8 * sizeof( uint16_t ) ); #ifdef CLDFB_DEBUG printf( "Bytes read = %d\n", iBytesWritten ); #endif - bval = auchData; - for ( int32_t bytesCount = 0; bytesCount < iBytesWritten; bytesCount++ ) - { - *bval = (uint8_t) ivas_split_rend_bitstream_read_int32( pBits, 8 ); - bval++; - } - // A conversion is needed for the 3d pointer interface here ........ :( + // Initialized with zeros....... :( for ( int32_t n = 0; n < hSplitBinLCLDDec->iChannels; n++ ) { for ( int32_t k = 0; k < CLDFB_NO_COL_MAX; k++ ) { hSplitBinLCLDDec->pppfDecCQMFReal[n][k] = Cldfb_Out_Real[n][k]; hSplitBinLCLDDec->pppfDecCQMFImag[n][k] = Cldfb_Out_Imag[n][k]; + set_f( hSplitBinLCLDDec->pppfDecCQMFReal[n][k], 0, CLDFB_NO_CHANNELS_MAX ); + set_f( hSplitBinLCLDDec->pppfDecCQMFImag[n][k], 0, CLDFB_NO_CHANNELS_MAX ); } } - // Initialized with zeros....... :( - for ( int k = 0; k < CLDFB_NO_COL_MAX; k++ ) - { - for ( int b = 0; b < CLDFB_NO_CHANNELS_MAX; b++ ) - { - for ( int n = 0; n < hSplitBinLCLDDec->iChannels; n++ ) - { - hSplitBinLCLDDec->pppfDecCQMFReal[n][k][b] = 0.0; - hSplitBinLCLDDec->pppfDecCQMFImag[n][k][b] = 0.0; - } - } - } - - DecodeFrame( hSplitBinLCLDDec->psCQMFDecoder, iBytesWritten, auchData, hSplitBinLCLDDec->pppfDecCQMFReal, hSplitBinLCLDDec->pppfDecCQMFImag ); + DecodeFrame( hSplitBinLCLDDec->psCQMFDecoder, + pBits, + hSplitBinLCLDDec->pppfDecCQMFReal, + hSplitBinLCLDDec->pppfDecCQMFImag ); #ifdef CLDFB_DEBUG printf( "Frame Decoded = %d\n", ++hSplitBinLCLDDec->numFrame ); @@ -183,10 +175,12 @@ void ivas_splitBinLCLDDecProcess( { for ( int n = 0; n < hSplitBinLCLDDec->iChannels; n++ ) { - writeByte = fwrite( &hSplitBinLCLDDec->pppfDecCQMFReal[n][k][b], sizeof( float ), 1, hSplitBinLCLDDec->cldfbOut ); + writeByte = fwrite( &hSplitBinLCLDDec->pppfDecCQMFReal[n][k][b], + sizeof( float ), 1, hSplitBinLCLDDec->cldfbOut ); if ( writeByte != 1 ) exit( -1 ); - writeByte = fwrite( &hSplitBinLCLDDec->pppfDecCQMFImag[n][k][b], sizeof( float ), 1, hSplitBinLCLDDec->cldfbOut ); + writeByte = fwrite( &hSplitBinLCLDDec->pppfDecCQMFImag[n][k][b], + sizeof( float ), 1, hSplitBinLCLDDec->cldfbOut ); if ( writeByte != 1 ) exit( -1 ); } diff --git a/lib_rend/ivas_splitRend_lcld_enc.c b/lib_rend/ivas_splitRend_lcld_enc.c index 97da222528..09df0d11ea 100644 --- a/lib_rend/ivas_splitRend_lcld_enc.c +++ b/lib_rend/ivas_splitRend_lcld_enc.c @@ -1,79 +1,92 @@ /****************************************************************************************************** - (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby +International AB, Ericsson AB, Fraunhofer-Gesellschaft zur Foerderung der +angewandten Forschung e.V., Huawei Technologies Co. LTD., Koninklijke Philips +N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge +Corporation, and other contributors to this repository. All Rights Reserved. This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. + The IVAS codec Public Collaboration consisting of Dolby International AB, +Ericsson AB, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung +e.V., Huawei Technologies Co. LTD., Koninklijke Philips N.V., Nippon Telegraph +and Telephone Corporation, Nokia Technologies Oy, Orange, Panasonic Holdings +Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their +respective contributions in the software. This notice grants no license of any +kind, including but not limited to patent license, nor is any license granted by +implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration +agreement before making contributions. + + This software is provided "AS IS", without any express or implied warranties. +The software is in the development stage. It is intended exclusively for experts +who have experience with such software and solely for the purpose of inspection. +All implied warranties of non-infringement, merchantability and fitness for a +particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing +this software shall be submitted to and settled by the final, binding +jurisdiction of the courts of Munich, Germany in accordance with the laws of the +Federal Republic of Germany excluding its conflict of law rules and the United +Nations Convention on Contracts on the International Sales of Goods. *******************************************************************************************************/ -#include -#include "options.h" -#include -#include "ivas_prot.h" -#include "prot.h" #include "cnst.h" #include "ivas_cnst.h" -#include "ivas_rom_rend.h" +#include "ivas_lib_rend_internal.h" +#include "ivas_prot.h" +#include "ivas_rom_binauralRenderer.h" #include "ivas_rom_com.h" #include "ivas_rom_dec.h" -#include "ivas_rom_binauralRenderer.h" +#include "ivas_rom_rend.h" #include "lib_rend.h" -#include "ivas_lib_rend_internal.h" +#include "options.h" +#include "prot.h" +#include +#include +#include #ifdef DEBUGGING #include "debug.h" #endif #include "wmops.h" #ifdef SPLIT_REND_WITH_HEAD_ROT -ivas_error ivas_splitBinLCLDEncOpen( - BIN_HR_SPLIT_LCLD_ENC_HANDLE *hSplitBinLCLDEnc, - int32_t iSampleRate, - int32_t iChannels, - int32_t iDataRate ) +ivas_error +ivas_splitBinLCLDEncOpen( BIN_HR_SPLIT_LCLD_ENC_HANDLE *hSplitBinLCLDEnc, + int32_t iSampleRate, + int32_t iChannels, + int32_t iDataRate ) { ivas_error error; BIN_HR_SPLIT_LCLD_ENC_HANDLE splitBinLCLDEnc; error = IVAS_ERR_OK; - if ( ( splitBinLCLDEnc = (BIN_HR_SPLIT_LCLD_ENC_HANDLE) count_malloc( sizeof( BIN_HR_SPLIT_LCLD_ENC ) ) ) == NULL ) + if ( ( splitBinLCLDEnc = (BIN_HR_SPLIT_LCLD_ENC_HANDLE) count_malloc( + sizeof( BIN_HR_SPLIT_LCLD_ENC ) ) ) == NULL ) { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LCLD encoder Module \n" ) ); + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, + "Can not allocate memory for LCLD encoder Module \n" ) ); } splitBinLCLDEnc->pLcld_enc = NULL; // place holder for CLDFB encoder handle splitBinLCLDEnc->iChannels = iChannels; - splitBinLCLDEnc->psCQMFEncoder = CreateCQMFEncoder( iSampleRate, iChannels, iDataRate ); + splitBinLCLDEnc->psCQMFEncoder = + CreateCQMFEncoder( iSampleRate, iChannels, iDataRate, 1 ); - splitBinLCLDEnc->pppfCQMFReal = (float ***) malloc( iChannels * sizeof( float ** ) ); - splitBinLCLDEnc->pppfCQMFImag = (float ***) malloc( iChannels * sizeof( float ** ) ); + splitBinLCLDEnc->pppfCQMFReal = + (float ***) count_malloc( iChannels * sizeof( float ** ) ); + splitBinLCLDEnc->pppfCQMFImag = + (float ***) count_malloc( iChannels * sizeof( float ** ) ); for ( int32_t n = 0; n < splitBinLCLDEnc->iChannels; n++ ) { - splitBinLCLDEnc->pppfCQMFReal[n] = (float **) malloc( CLDFB_NO_COL_MAX * sizeof( float * ) ); - splitBinLCLDEnc->pppfCQMFImag[n] = (float **) malloc( CLDFB_NO_COL_MAX * sizeof( float * ) ); + splitBinLCLDEnc->pppfCQMFReal[n] = + (float **) count_malloc( CLDFB_NO_COL_MAX * sizeof( float * ) ); + splitBinLCLDEnc->pppfCQMFImag[n] = + (float **) count_malloc( CLDFB_NO_COL_MAX * sizeof( float * ) ); } #ifdef CLDFB_DEBUG @@ -81,7 +94,8 @@ ivas_error ivas_splitBinLCLDEncOpen( char cldfbFilename[50] = "cldfb_in_ref.qmf"; if ( ( splitBinLCLDEnc->cldfbIn = fopen( cldfbFilename, "rb" ) ) == NULL ) { - fprintf( stderr, "Error: CLDFB bitstream file %s could not be opened\n\n", cldfbFilename ); + fprintf( stderr, "Error: CLDFB bitstream file %s could not be opened\n\n", + cldfbFilename ); exit( -1 ); } int chan, band; @@ -93,8 +107,7 @@ ivas_error ivas_splitBinLCLDEncOpen( return error; } -void ivas_splitBinLCLDEncClose( - BIN_HR_SPLIT_LCLD_ENC_HANDLE *hSplitBinLCLDEnc ) +void ivas_splitBinLCLDEncClose( BIN_HR_SPLIT_LCLD_ENC_HANDLE *hSplitBinLCLDEnc ) { if ( ( *hSplitBinLCLDEnc ) != NULL ) { @@ -102,11 +115,11 @@ void ivas_splitBinLCLDEncClose( for ( int32_t n = 0; n < ( *hSplitBinLCLDEnc )->iChannels; n++ ) { - free( ( *hSplitBinLCLDEnc )->pppfCQMFReal[n] ); - free( ( *hSplitBinLCLDEnc )->pppfCQMFImag[n] ); + count_free( ( *hSplitBinLCLDEnc )->pppfCQMFReal[n] ); + count_free( ( *hSplitBinLCLDEnc )->pppfCQMFImag[n] ); } - free( ( *hSplitBinLCLDEnc )->pppfCQMFReal ); - free( ( *hSplitBinLCLDEnc )->pppfCQMFImag ); + count_free( ( *hSplitBinLCLDEnc )->pppfCQMFReal ); + count_free( ( *hSplitBinLCLDEnc )->pppfCQMFImag ); #ifdef CLDFB_DEBUG if ( ( *hSplitBinLCLDEnc )->cldfbIn != NULL ) @@ -125,6 +138,7 @@ void ivas_splitBinLCLDEncProcess( BIN_HR_SPLIT_LCLD_ENC_HANDLE hSplitBinLCLDEnc, float Cldfb_In_Real[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float Cldfb_In_Imag[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + const int32_t available_bits, ivas_split_rend_bits_t *pBits ) { assert( hSplitBinLCLDEnc != NULL ); @@ -132,13 +146,7 @@ void ivas_splitBinLCLDEncProcess( assert( Cldfb_In_Imag != NULL ); assert( pBits != NULL ); - int32_t iBytesWritten; - uint16_t ushBytes; - unsigned char auchData[4096]; - unsigned char *bval; - int32_t code; - - iBytesWritten = 4096; + int32_t iBitsWritten; // A conversion is needed for the 3d pointer interface here ........ :( for ( int32_t n = 0; n < hSplitBinLCLDEnc->iChannels; n++ ) @@ -164,10 +172,12 @@ void ivas_splitBinLCLDEncProcess( break; readByte = fread(&hSplitBinLCLDEnc->pppfCQMFImag[n][k][b], sizeof(float), 1, hSplitBinLCLDEnc->cldfbIn); #else - readByte = fread( &Cldfb_In_Real[n][k][b], sizeof( float ), 1, hSplitBinLCLDEnc->cldfbIn ); + readByte = fread( &Cldfb_In_Real[n][k][b], sizeof( float ), 1, + hSplitBinLCLDEnc->cldfbIn ); if ( readByte != 1 ) break; - readByte = fread( &Cldfb_In_Imag[n][k][b], sizeof( float ), 1, hSplitBinLCLDEnc->cldfbIn ); + readByte = fread( &Cldfb_In_Imag[n][k][b], sizeof( float ), 1, + hSplitBinLCLDEnc->cldfbIn ); #endif } } @@ -194,20 +204,13 @@ void ivas_splitBinLCLDEncProcess( } #endif - EncodeFrame( hSplitBinLCLDEnc->psCQMFEncoder, hSplitBinLCLDEnc->pppfCQMFReal, hSplitBinLCLDEnc->pppfCQMFImag, &iBytesWritten, auchData ); - - bval = auchData; - ushBytes = (uint16_t) iBytesWritten; - ivas_split_rend_bitstream_write_int32( pBits, (int32_t) ushBytes, 8 * sizeof( uint16_t ) ); - for ( int32_t bytesCount = 0; bytesCount < iBytesWritten; bytesCount++ ) - { - code = (int32_t) *bval; - ivas_split_rend_bitstream_write_int32( pBits, code, 8 ); - bval++; - } + EncodeFrame( hSplitBinLCLDEnc->psCQMFEncoder, hSplitBinLCLDEnc->pppfCQMFReal, + hSplitBinLCLDEnc->pppfCQMFImag, &iBitsWritten, available_bits, + pBits ); + assert( iBitsWritten <= available_bits ); #ifdef CLDFB_DEBUG - printf( "Bytes written = %d\n", iBytesWritten ); + printf( "Bits written = %d\n", iBitsWritten ); #endif return; diff --git a/lib_rend/ivas_splitRendererPost.c b/lib_rend/ivas_splitRendererPost.c index 56782f4989..46d15b4030 100644 --- a/lib_rend/ivas_splitRendererPost.c +++ b/lib_rend/ivas_splitRendererPost.c @@ -54,7 +54,9 @@ #ifdef SPLIT_REND_WITH_HEAD_ROT ivas_error ivas_splitBinPostRendOpen( BIN_HR_SPLIT_POST_REND_HANDLE *hBinHrSplitPostRend, - const int32_t output_Fs ) + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, + const int32_t output_Fs, + const int16_t is_cldfb_in ) { BIN_HR_SPLIT_POST_REND_HANDLE hBinRend; ivas_error error; @@ -69,6 +71,7 @@ ivas_error ivas_splitBinPostRendOpen( for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) { hBinRend->cldfbSyn[ch] = NULL; + hBinRend->cldfbAna[ch] = NULL; } #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG for ( int16_t i = 0; i < MAX_HEAD_ROT_POSES; i++ ) @@ -87,6 +90,13 @@ ivas_error ivas_splitBinPostRendOpen( { return error; } + if ( is_cldfb_in == 0 ) + { + if ( ( error = openCldfb( &( hBinRend->cldfbAna[ch] ), CLDFB_ANALYSIS, output_Fs, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) + { + return error; + } + } } #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG @@ -102,7 +112,8 @@ ivas_error ivas_splitBinPostRendOpen( } #endif hBinRend->cf_flag = 0; - set_fix_rotation_mat( hBinRend->fix_pos_rot_mat ); + set_fix_rotation_mat( hBinRend->fix_pos_rot_mat, pMultiBinPoseData ); + set_pose_types( hBinRend->pose_type, pMultiBinPoseData ); ivas_split_rend_init_huff_cfg( &hBinRend->huff_cfg ); *hBinHrSplitPostRend = hBinRend; @@ -121,6 +132,11 @@ void ivas_splitBinPostRendClose( BIN_HR_SPLIT_POST_REND_HANDLE *hBinHrSplitPostR deleteCldfb( &( ( *hBinHrSplitPostRend )->cldfbSyn[ch] ) ); ( *hBinHrSplitPostRend )->cldfbSyn[ch] = NULL; } + if ( ( *hBinHrSplitPostRend )->cldfbAna[ch] != NULL ) + { + deleteCldfb( &( ( *hBinHrSplitPostRend )->cldfbAna[ch] ) ); + ( *hBinHrSplitPostRend )->cldfbAna[ch] = NULL; + } } #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG for ( int16_t i = 0; i < MAX_HEAD_ROT_POSES; i++ ) @@ -240,61 +256,82 @@ static int16_t ivas_split_rend_huffman_decode( static void ivas_split_rend_unquant_md( BIN_HR_SPLIT_REND_MD_HANDLE hMd, + IVAS_SPLIT_REND_POSE_TYPE pose_type, int16_t real_only, float fix_pos_rot_mat[][BINAURAL_CHANNELS] ) { int16_t ch1, ch2; + int16_t gd_idx_min; - ivas_deindex_real_index( - &hMd->pred_mat_re_idx[0][0], - IVAS_SPLIT_REND_PRED_QUANT_PNTS, - IVAS_SPLIT_REND_PRED_MIN_VAL, - IVAS_SPLIT_REND_PRED_MAX_VAL, - &hMd->pred_mat_re[0][0], - BINAURAL_CHANNELS * BINAURAL_CHANNELS ); - ivas_deindex_real_index( - &hMd->pred_mat_im_idx[0][0], - IVAS_SPLIT_REND_PRED_QUANT_PNTS, - IVAS_SPLIT_REND_PRED_MIN_VAL, - IVAS_SPLIT_REND_PRED_MAX_VAL, - &hMd->pred_mat_im[0][0], - BINAURAL_CHANNELS * BINAURAL_CHANNELS ); - ivas_deindex_real_index( - &hMd->gd_idx, - IVAS_SPLIT_REND_D_QUANT_PNTS, - IVAS_SPLIT_REND_D_MIN_VAL, - IVAS_SPLIT_REND_D_MAX_VAL, - &hMd->gd, - 1 ); - - for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) - { - for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) - { - hMd->pred_mat_re[ch1][ch2] = hMd->pred_mat_re[ch1][ch2] + fix_pos_rot_mat[ch1][ch2]; - // hMd->pred_mat_re[ch1][ch2] = hQMd->pred_mat_re[ch1][ch2]; - } - } - if ( real_only ) + if ( pose_type == PRED_ONLY ) { + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) { for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) { - hMd->pred_mat_im[ch1][ch2] = 0.0f; + hMd->pred_mat_re[ch1][ch2] = hMd->pred_mat_re_idx[ch1][ch2] * IVAS_SPLIT_REND_PRED_Q_STEP; + hMd->pred_mat_re[ch1][ch2] = hMd->pred_mat_re[ch1][ch2] + fix_pos_rot_mat[ch1][ch2]; + } + } + if ( real_only ) + { + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + hMd->pred_mat_im[ch1][ch2] = 0.0f; + } + } + } + else + { + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + hMd->pred_mat_im[ch1][ch2] = hMd->pred_mat_im_idx[ch1][ch2] * IVAS_SPLIT_REND_PRED_Q_STEP; + } } } } + else if ( pose_type == COM_GAIN_ONLY ) + { + gd_idx_min = (int16_t) roundf( IVAS_SPLIT_REND_D_1BYQ_STEP * IVAS_SPLIT_REND_D_MIN_VAL ); + hMd->gd_idx += gd_idx_min; + hMd->gd = hMd->gd_idx * IVAS_SPLIT_REND_D_Q_STEP; + } + else if ( pose_type == LR_GAIN_ONLY ) + { + gd_idx_min = (int16_t) roundf( IVAS_SPLIT_REND_PITCH_G_1BYQ_STEP * IVAS_SPLIT_REND_PITCH_G_MIN_VAL ); + hMd->gd_idx += gd_idx_min; + hMd->gd = hMd->gd_idx * IVAS_SPLIT_REND_PITCH_G_Q_STEP; + + hMd->gd2_idx += gd_idx_min; + hMd->gd2 = hMd->gd2_idx * IVAS_SPLIT_REND_PITCH_G_Q_STEP; + } + else + { + hMd->gd = 0.0f; + } + return; } static void ivas_splitBinPostRendMdBase2Dec( ivas_split_rend_bits_t *pBits, BIN_HR_SPLIT_POST_REND_HANDLE hBinHrSplitPostRend, - const int16_t num_md_bands ) + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, + const int16_t num_subframes, + const int16_t pred_real_bands_yaw, + const int16_t pred_imag_bands_yaw, + const int16_t d_bands_yaw, + const int16_t bands_pitch, + const int16_t pred_real_bands_roll, + const int16_t pred_imag_bands_roll ) { - int16_t sf_idx, real_only, pos_idx, b, ch1, ch2; - int16_t min_pred_idx, min_gd_idx, pred_code_len, gd_code_len; + int16_t sf_idx, pos_idx, b, ch1, ch2; + int16_t min_pred_idx, min_gd_idx, min_p_gd_idx, pred_code_len, gd_code_len, p_gd_code_len; int16_t code; BIN_HR_SPLIT_REND_MD_HANDLE hMd; BIN_HR_SPLIT_REND_HUFF_HANDLE pHuff_cfg; @@ -302,38 +339,76 @@ static void ivas_splitBinPostRendMdBase2Dec( pHuff_cfg = &hBinHrSplitPostRend->huff_cfg; min_pred_idx = (int16_t) pHuff_cfg->pred.codebook[0]; min_gd_idx = (int16_t) pHuff_cfg->gd.codebook[0]; + min_p_gd_idx = (int16_t) pHuff_cfg->p_gd.codebook[0]; pred_code_len = pHuff_cfg->pred_base2_code_len; gd_code_len = pHuff_cfg->gd_base2_code_len; + p_gd_code_len = pHuff_cfg->p_gd_base2_code_len; - - for ( sf_idx = 0; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ ) + for ( sf_idx = 0; sf_idx < num_subframes; sf_idx++ ) { - for ( b = 0; b < num_md_bands; b++ ) + for ( pos_idx = 0; pos_idx < pMultiBinPoseData->num_poses - 1; pos_idx++ ) { - if ( b < COMPLEX_MD_BAND_THRESH ) + if ( hBinHrSplitPostRend->pose_type[pos_idx] == ANY_YAW ) { - real_only = 0; + for ( b = 0; b < pred_real_bands_yaw; b++ ) + { + hMd = &hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b]; + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + code = (int16_t) ivas_split_rend_bitstream_read_int32( pBits, pred_code_len ); + hMd->pred_mat_re_idx[ch1][ch2] = code + min_pred_idx; + } + } + } + for ( b = 0; b < pred_imag_bands_yaw; b++ ) + { + hMd = &hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b]; + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + code = (int16_t) ivas_split_rend_bitstream_read_int32( pBits, pred_code_len ); + hMd->pred_mat_im_idx[ch1][ch2] = code + min_pred_idx; + } + } + } + for ( b = 0; b < d_bands_yaw; b++ ) + { + hMd = &hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b]; + code = (int16_t) ivas_split_rend_bitstream_read_int32( pBits, gd_code_len ); + hMd->gd_idx = code + min_gd_idx; + } } - else + else if ( hBinHrSplitPostRend->pose_type[pos_idx] == PITCH_ONLY ) { - real_only = 1; + for ( b = 0; b < bands_pitch; b++ ) + { + hMd = &hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b]; + code = (int16_t) ivas_split_rend_bitstream_read_int32( pBits, p_gd_code_len ); + hMd->gd_idx = code + min_p_gd_idx; + code = (int16_t) ivas_split_rend_bitstream_read_int32( pBits, p_gd_code_len ); + hMd->gd2_idx = code + min_p_gd_idx; + } } - - for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES - 1; pos_idx++ ) + else { - hMd = &hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b]; - - for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + for ( b = 0; b < pred_real_bands_roll; b++ ) { - for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + hMd = &hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b]; + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) { - code = (int16_t) ivas_split_rend_bitstream_read_int32( pBits, pred_code_len ); - hMd->pred_mat_re_idx[ch1][ch2] = code + min_pred_idx; + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + code = (int16_t) ivas_split_rend_bitstream_read_int32( pBits, pred_code_len ); + hMd->pred_mat_re_idx[ch1][ch2] = code + min_pred_idx; + } } } - - if ( real_only == 0 ) + for ( b = 0; b < pred_imag_bands_roll; b++ ) { + hMd = &hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b]; for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) { for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) @@ -343,8 +418,6 @@ static void ivas_splitBinPostRendMdBase2Dec( } } } - code = (int16_t) ivas_split_rend_bitstream_read_int32( pBits, gd_code_len ); - hMd->gd_idx = code + min_gd_idx; } } } @@ -355,10 +428,17 @@ static void ivas_splitBinPostRendMdBase2Dec( static void ivas_splitBinPostRendMdHuffDec( ivas_split_rend_bits_t *pBits, BIN_HR_SPLIT_POST_REND_HANDLE hBinHrSplitPostRend, - const int16_t num_md_bands ) + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, + const int16_t num_subframes, + const int16_t pred_real_bands_yaw, + const int16_t pred_imag_bands_yaw, + const int16_t d_bands_yaw, + const int16_t bands_pitch, + const int16_t pred_real_bands_roll, + const int16_t pred_imag_bands_roll ) { int16_t pos_idx, b, sf_idx; - int16_t real_only, ch1, ch2; + int16_t ch1, ch2; int16_t sym_adj_idx[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; int16_t min_pred_idx, max_pred_idx; BIN_HR_SPLIT_REND_MD_HANDLE hMd; @@ -367,38 +447,76 @@ static void ivas_splitBinPostRendMdHuffDec( pHuff_cfg = &hBinHrSplitPostRend->huff_cfg; min_pred_idx = (int16_t) pHuff_cfg->pred.codebook[0]; max_pred_idx = (int16_t) pHuff_cfg->pred.codebook[( IVAS_SPLIT_REND_PRED_QUANT_PNTS - 1 ) * 3]; - real_only = 0; - for ( sf_idx = 0; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ ) + for ( sf_idx = 0; sf_idx < num_subframes; sf_idx++ ) { - for ( b = 0; b < num_md_bands; b++ ) + for ( pos_idx = 0; pos_idx < pMultiBinPoseData->num_poses - 1; pos_idx++ ) { - if ( b < COMPLEX_MD_BAND_THRESH ) + if ( hBinHrSplitPostRend->pose_type[pos_idx] == ANY_YAW ) { - real_only = 0; + for ( b = 0; b < pred_real_bands_yaw; b++ ) + { + hMd = &hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b]; + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + sym_adj_idx[ch1][ch2] = ivas_split_rend_huffman_decode_opt( &pHuff_cfg->pred, pBits, pHuff_cfg->pred_idx_trav ); + // sym_adj_idx[ch1][ch2] = ivas_split_rend_huffman_decode( &pHuff_cfg->pred, pBits ); + } + } + ivas_SplitRenderer_getdiagdiff( sym_adj_idx, hMd->pred_mat_re_idx, 1, min_pred_idx, max_pred_idx ); + } + for ( b = 0; b < pred_imag_bands_yaw; b++ ) + { + hMd = &hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b]; + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + sym_adj_idx[ch1][ch2] = ivas_split_rend_huffman_decode_opt( &pHuff_cfg->pred, pBits, pHuff_cfg->pred_idx_trav ); + // sym_adj_idx[ch1][ch2] = ivas_split_rend_huffman_decode( &pHuff_cfg->pred, pBits ); + } + } + ivas_SplitRenderer_getdiagdiff( sym_adj_idx, hMd->pred_mat_im_idx, -1, min_pred_idx, max_pred_idx ); + } + for ( b = 0; b < d_bands_yaw; b++ ) + { + hMd = &hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b]; + hMd->gd_idx = ivas_split_rend_huffman_decode_opt( &pHuff_cfg->gd, pBits, pHuff_cfg->gd_idx_trav ); + // hMd->gd_idx = ivas_split_rend_huffman_decode( &pHuff_cfg->gd, pBits ); + } } - else + else if ( hBinHrSplitPostRend->pose_type[pos_idx] == PITCH_ONLY ) { - real_only = 1; - } + for ( b = 0; b < bands_pitch; b++ ) + { + hMd = &hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b]; + hMd->gd_idx = ivas_split_rend_huffman_decode_opt( &pHuff_cfg->p_gd, pBits, pHuff_cfg->p_gd_idx_trav ); + // hMd->gd_idx = ivas_split_rend_huffman_decode( &pHuff_cfg->gd, pBits ); - for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES - 1; pos_idx++ ) + hMd->gd2_idx = ivas_split_rend_huffman_decode_opt( &pHuff_cfg->p_gd, pBits, pHuff_cfg->p_gd_idx_trav ); + } + } + else { - hMd = &hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b]; - - for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + for ( b = 0; b < pred_real_bands_roll; b++ ) { - for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + hMd = &hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b]; + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) { - sym_adj_idx[ch1][ch2] = ivas_split_rend_huffman_decode_opt( &pHuff_cfg->pred, pBits, pHuff_cfg->pred_idx_trav ); - // sym_adj_idx[ch1][ch2] = ivas_split_rend_huffman_decode( &pHuff_cfg->pred, pBits ); + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + sym_adj_idx[ch1][ch2] = ivas_split_rend_huffman_decode_opt( &pHuff_cfg->pred, pBits, pHuff_cfg->pred_idx_trav ); + // sym_adj_idx[ch1][ch2] = ivas_split_rend_huffman_decode( &pHuff_cfg->pred, pBits ); + } } + ivas_SplitRenderer_getdiagdiff( sym_adj_idx, hMd->pred_mat_re_idx, 1, min_pred_idx, max_pred_idx ); } - ivas_SplitRenderer_getdiagdiff( sym_adj_idx, hMd->pred_mat_re_idx, 1, min_pred_idx, max_pred_idx ); - - if ( real_only == 0 ) + for ( b = 0; b < pred_imag_bands_roll; b++ ) { + hMd = &hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b]; for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) { for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) @@ -409,8 +527,6 @@ static void ivas_splitBinPostRendMdHuffDec( } ivas_SplitRenderer_getdiagdiff( sym_adj_idx, hMd->pred_mat_im_idx, -1, min_pred_idx, max_pred_idx ); } - hMd->gd_idx = ivas_split_rend_huffman_decode_opt( &pHuff_cfg->gd, pBits, pHuff_cfg->gd_idx_trav ); - // hMd->gd_idx = ivas_split_rend_huffman_decode( &pHuff_cfg->gd, pBits ); } } } @@ -421,214 +537,717 @@ static void ivas_splitBinPostRendMdHuffDec( void ivas_splitBinPostRendMdDec( ivas_split_rend_bits_t *pBits, BIN_HR_SPLIT_POST_REND_HANDLE hBinHrSplitPostRend, -#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG - BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend, -#endif + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, const int16_t num_md_bands ) { - int16_t pos_idx, b, sf_idx; + int16_t pos_idx, b, sf_idx, num_subframes, ch1; + int16_t pred_real_bands_yaw[IVAS_SPLIT_REND_NUM_QUANT_STRATS], pred_real_bands_roll[IVAS_SPLIT_REND_NUM_QUANT_STRATS]; + int16_t pred_imag_bands_yaw[IVAS_SPLIT_REND_NUM_QUANT_STRATS], pred_imag_bands_roll[IVAS_SPLIT_REND_NUM_QUANT_STRATS]; + int16_t d_bands_yaw[IVAS_SPLIT_REND_NUM_QUANT_STRATS], bands_pitch[IVAS_SPLIT_REND_NUM_QUANT_STRATS]; + int16_t num_complex_bands, num_quant_strats; + int32_t quant_strat_bits, is_huff_coding, quant_strat; #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG int16_t ch1, ch2; #endif - int16_t real_only, yaw_idx; BIN_HR_SPLIT_REND_MD_HANDLE hMd; - real_only = 0; + IVAS_SPLIT_REND_CONFIG_DATA split_rend_config; + IVAS_SPLIT_REND_ROT_AXIS rot_axis; -#ifdef SPLIT_REND_BASE2_CODING - ivas_splitBinPostRendMdBase2Dec( pBits, hBinHrSplitPostRend, num_md_bands ); -#else - ivas_splitBinPostRendMdHuffDec( pBits, hBinHrSplitPostRend, num_md_bands ); -#endif + hBinHrSplitPostRend->low_Res = 1; + //( int16_t ) ivas_split_rend_bitstream_read_int32( pBits, 1 ); + + split_rend_config.dof = (int16_t) ivas_split_rend_bitstream_read_int32( pBits, IVAS_SPLIT_REND_DOF_BITS ); + split_rend_config.hq_mode = (int16_t) ivas_split_rend_bitstream_read_int32( pBits, IVAS_SPLIT_REND_HQ_MODE_BITS ); + rot_axis = (IVAS_SPLIT_REND_ROT_AXIS) ivas_split_rend_bitstream_read_int32( pBits, IVAS_SPLIT_REND_ROT_AXIS_BITS ); + + ivas_renderSplitGetMultiBinPoseData( + &split_rend_config, + pMultiBinPoseData, rot_axis ); - for ( sf_idx = 0; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ ) + set_fix_rotation_mat( hBinHrSplitPostRend->fix_pos_rot_mat, pMultiBinPoseData ); + set_pose_types( hBinHrSplitPostRend->pose_type, pMultiBinPoseData ); + + num_subframes = ( hBinHrSplitPostRend->low_Res == 0 ) ? MAX_PARAM_SPATIAL_SUBFRAMES : 1; + for ( sf_idx = 0; sf_idx < num_subframes; sf_idx++ ) { - for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES - 1; pos_idx++ ) + int16_t angle; + + hBinHrSplitPostRend->QuaternionsPre[sf_idx].w = -3.0f; + + angle = (int16_t) ivas_split_rend_bitstream_read_int32( pBits, IVAS_SPLIT_REND_HEAD_POSE_BITS ); + angle -= 180; + hBinHrSplitPostRend->QuaternionsPre[sf_idx].x = (float) angle; + + angle = (int16_t) ivas_split_rend_bitstream_read_int32( pBits, IVAS_SPLIT_REND_HEAD_POSE_BITS ); + angle -= 180; + hBinHrSplitPostRend->QuaternionsPre[sf_idx].y = (float) angle; + + angle = (int16_t) ivas_split_rend_bitstream_read_int32( pBits, IVAS_SPLIT_REND_HEAD_POSE_BITS ); + angle -= 180; + hBinHrSplitPostRend->QuaternionsPre[sf_idx].z = (float) angle; + } + + ivas_split_rend_get_quant_params( + MAX_SPLIT_REND_MD_BANDS, + pred_real_bands_yaw, + pred_imag_bands_yaw, + d_bands_yaw, + bands_pitch, + pred_real_bands_roll, + pred_imag_bands_roll, + &num_quant_strats, + &num_complex_bands ); + + quant_strat_bits = (int32_t) ceilf( log2f( num_quant_strats ) ); + is_huff_coding = ivas_split_rend_bitstream_read_int32( pBits, 1 ); + quant_strat = ivas_split_rend_bitstream_read_int32( pBits, quant_strat_bits ); + + if ( is_huff_coding == 0 ) + { + ivas_splitBinPostRendMdBase2Dec( + pBits, hBinHrSplitPostRend, + pMultiBinPoseData, + num_subframes, + pred_real_bands_yaw[quant_strat], + pred_imag_bands_yaw[quant_strat], + d_bands_yaw[quant_strat], + bands_pitch[quant_strat], + pred_real_bands_roll[quant_strat], + pred_imag_bands_roll[quant_strat] ); + } + else + { + ivas_splitBinPostRendMdHuffDec( + pBits, hBinHrSplitPostRend, + pMultiBinPoseData, + num_subframes, + pred_real_bands_yaw[quant_strat], + pred_imag_bands_yaw[quant_strat], + d_bands_yaw[quant_strat], + bands_pitch[quant_strat], + pred_real_bands_roll[quant_strat], + pred_imag_bands_roll[quant_strat] ); + } +#ifdef SPLIT_MD_CODING_DEBUG + for ( sf_idx = 0; sf_idx < num_subframes; sf_idx++ ) + { + int16_t val, ch2, val_ref; + char filename[200] = "split_md_debug_indices.bin"; + for ( pos_idx = 0; pos_idx < pMultiBinPoseData->num_poses - 1; pos_idx++ ) { - yaw_idx = ( pos_idx / ( MAX_PITCH_ANGLES * MAX_ROLL_ANGLES ) ); - for ( b = 0; b < num_md_bands; b++ ) + if ( hBinHrSplitPostRend->pose_type[pos_idx] == ANY_YAW ) { - if ( b < COMPLEX_MD_BAND_THRESH ) - { - real_only = 0; - } - else - { - real_only = 1; - } - hMd = &hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b]; -#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG - /*verify that MD is decodd correctly*/ - for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + for ( b = 0; b < pred_real_bands_yaw[quant_strat]; b++ ) { - for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) { - int16_t val; - val = hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b].pred_mat_re_idx[ch1][ch2]; - if ( abs( hMd->pred_mat_re_idx[ch1][ch2] - val ) > 0 ) - { - assert( 0 ); - } - - if ( real_only == 0 ) + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) { - val = hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b].pred_mat_im_idx[ch1][ch2]; - if ( abs( hMd->pred_mat_im_idx[ch1][ch2] - val ) > 0 ) + val = hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b].pred_mat_re_idx[ch1][ch2]; + dbgread( &val_ref, sizeof( int16_t ), 1, filename ); + if ( abs( val_ref - val ) > 0 ) { assert( 0 ); } } - - val = hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b].gd_idx; - if ( abs( hMd->gd_idx - val ) > 0 ) - { - assert( 0 ); - } } } -#endif - - ivas_split_rend_unquant_md( hMd, - real_only, hBinHrSplitPostRend->fix_pos_rot_mat[yaw_idx] ); - -#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG - /*verify that MD is decodd correctly*/ - for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + for ( b = 0; b < pred_imag_bands_yaw[quant_strat]; b++ ) { - for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) { - float val; - val = hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch1][ch2] + - hBinHrSplitPostRend->fix_pos_rot_mat[yaw_idx][ch1][ch2]; - if ( fabs( hMd->pred_mat_re[ch1][ch2] - val ) > 1e-20 ) + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) { - assert( 0 ); + val = hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b].pred_mat_im_idx[ch1][ch2]; + dbgread( &val_ref, sizeof( int16_t ), 1, filename ); + if ( abs( val_ref - val ) > 0 ) + { + assert( 0 ); + } } - - val = hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b].pred_mat_im[ch1][ch2]; - if ( fabs( hMd->pred_mat_im[ch1][ch2] - val ) > 1e-20 ) + } + } + for ( b = 0; b < d_bands_yaw[quant_strat]; b++ ) + { + val = hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b].gd_idx; + dbgread( &val_ref, sizeof( int16_t ), 1, filename ); + if ( abs( val_ref - val ) > 0 ) + { + assert( 0 ); + } + } + } + else if ( hBinHrSplitPostRend->pose_type[pos_idx] == PITCH_ONLY ) + { + for ( b = 0; b < bands_pitch[quant_strat]; b++ ) + { + val = hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b].gd_idx; + dbgread( &val_ref, sizeof( int16_t ), 1, filename ); + if ( abs( val_ref - val ) > 0 ) + { + assert( 0 ); + } + val = hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b].gd2_idx; + dbgread( &val_ref, sizeof( int16_t ), 1, filename ); + if ( abs( val_ref - val ) > 0 ) + { + assert( 0 ); + } + } + } + else + { + for ( b = 0; b < pred_real_bands_roll[quant_strat]; b++ ) + { + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) { - assert( 0 ); + val = hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b].pred_mat_re_idx[ch1][ch2]; + dbgread( &val_ref, sizeof( int16_t ), 1, filename ); + if ( abs( val_ref - val ) > 0 ) + { + assert( 0 ); + } } - - val = hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b].gd; - if ( fabs( hMd->gd - val ) > 1e-20 ) + } + } + for ( b = 0; b < pred_imag_bands_roll[quant_strat]; b++ ) + { + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) { - assert( 0 ); + val = hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b].pred_mat_im_idx[ch1][ch2]; + dbgread( &val_ref, sizeof( int16_t ), 1, filename ); + if ( abs( val_ref - val ) > 0 ) + { + assert( 0 ); + } } } } -#endif } } } - return; -} - -#define REAL_IMAG_INTERPOLATION -static void wrap_around_angle( float *a ) -{ - if ( ( *a ) > 180.0f ) - { - ( *a ) = ( *a ) - 360; - } - else if ( ( *a ) < -180.0f ) - { - ( *a ) = ( *a ) + 360; - } - return; -} -static void wrap_around_ypr( IVAS_QUATERNION *Quaternions ) -{ - /*only if quat is actually yaw, pitch , roll angles*/ - if ( Quaternions->w == -3.0f ) - { - wrap_around_angle( &Quaternions->x ); - wrap_around_angle( &Quaternions->y ); - wrap_around_angle( &Quaternions->z ); - } - return; -} -static void get_interpolation_vars( - const IVAS_QUATERNION *Quaternions_ref, - const IVAS_QUATERNION *Quaternions_act, - int16_t interp_pose_idx[2], - float *interp_fact ) -{ - IVAS_QUATERNION quaternions_diff, quaternions_diffx[MAX_HEAD_ROT_POSES], quaternions_ref_euler, quaternions_act_euler; - int16_t yaw_idx, pitch_idx, roll_idx, pos_idx; - float min_diff, d1, n1; - int16_t idx1, idx2; - - idx1 = 0; - idx2 = 0; - quaternions_diff.x = 0.0f; - quaternions_diff.y = 0.0f; - quaternions_diff.z = 0.0f; - - for ( yaw_idx = 0; yaw_idx < MAX_YAW_ANGLES; yaw_idx++ ) +#endif + for ( sf_idx = 0; sf_idx < num_subframes; sf_idx++ ) { - for ( pitch_idx = 0; pitch_idx < MAX_PITCH_ANGLES; pitch_idx++ ) + for ( pos_idx = 0; pos_idx < pMultiBinPoseData->num_poses - 1; pos_idx++ ) { - for ( roll_idx = 0; roll_idx < MAX_ROLL_ANGLES; roll_idx++ ) + if ( hBinHrSplitPostRend->pose_type[pos_idx] == ANY_YAW ) { - pos_idx = yaw_idx * MAX_PITCH_ANGLES * MAX_ROLL_ANGLES + pitch_idx * MAX_ROLL_ANGLES + roll_idx; - - quaternions_diff.x += split_rend_relative_yaw_angles[yaw_idx]; - quaternions_diff.y += split_rend_relative_pitch_angles[pitch_idx]; - quaternions_diff.z += split_rend_relative_roll_angles[roll_idx]; - quaternions_diffx[pos_idx].x = quaternions_diff.x; - quaternions_diffx[pos_idx].y = quaternions_diff.y; - quaternions_diffx[pos_idx].z = quaternions_diff.z; + for ( b = 0; b < pred_imag_bands_yaw[quant_strat]; b++ ) + { + hMd = &hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b]; + ivas_split_rend_unquant_md( hMd, + PRED_ONLY, + 0, hBinHrSplitPostRend->fix_pos_rot_mat[pos_idx] ); + } + for ( ; b < pred_real_bands_yaw[quant_strat]; b++ ) + { + hMd = &hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b]; + ivas_split_rend_unquant_md( hMd, + PRED_ONLY, + 1, hBinHrSplitPostRend->fix_pos_rot_mat[pos_idx] ); + } + for ( ; b < MAX_SPLIT_REND_MD_BANDS; b++ ) + { + hMd = &hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b]; + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + set_zero( hMd->pred_mat_re[ch1], BINAURAL_CHANNELS ); + set_zero( hMd->pred_mat_im[ch1], BINAURAL_CHANNELS ); + hMd->pred_mat_re[ch1][ch1] = 1.0f; + } + } + for ( b = 0; b < d_bands_yaw[quant_strat]; b++ ) + { + hMd = &hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b]; + ivas_split_rend_unquant_md( hMd, + COM_GAIN_ONLY, + 1, hBinHrSplitPostRend->fix_pos_rot_mat[pos_idx] ); + } + for ( ; b < MAX_SPLIT_REND_MD_BANDS; b++ ) + { + hMd = &hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b]; + hMd->gd = 0.0f; + } + } + else if ( hBinHrSplitPostRend->pose_type[pos_idx] == PITCH_ONLY ) + { + for ( b = 0; b < bands_pitch[quant_strat]; b++ ) + { + hMd = &hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b]; + ivas_split_rend_unquant_md( hMd, + LR_GAIN_ONLY, + 1, hBinHrSplitPostRend->fix_pos_rot_mat[pos_idx] ); + } + for ( ; b < MAX_SPLIT_REND_MD_BANDS; b++ ) + { + hMd = &hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b]; + hMd->gd = 1.0f; + hMd->gd2 = 1.0f; + } + } + else + { + for ( b = 0; b < pred_imag_bands_roll[quant_strat]; b++ ) + { + hMd = &hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b]; + ivas_split_rend_unquant_md( hMd, + PRED_ONLY, + 0, hBinHrSplitPostRend->fix_pos_rot_mat[pos_idx] ); + } + for ( ; b < pred_real_bands_roll[quant_strat]; b++ ) + { + hMd = &hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b]; + ivas_split_rend_unquant_md( hMd, + PRED_ONLY, + 1, hBinHrSplitPostRend->fix_pos_rot_mat[pos_idx] ); + } + for ( ; b < MAX_SPLIT_REND_MD_BANDS; b++ ) + { + hMd = &hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b]; + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + set_zero( hMd->pred_mat_re[ch1], BINAURAL_CHANNELS ); + set_zero( hMd->pred_mat_im[ch1], BINAURAL_CHANNELS ); + hMd->pred_mat_re[ch1][ch1] = 1.0f; + } + } } } } - /*interpolation if actual pose is not same as one of assumed poses*/ +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + for ( sf_idx = 0; sf_idx < num_subframes; sf_idx++ ) + { + float val; + for ( pos_idx = 0; pos_idx < pMultiBinPoseData->num_poses - 1; pos_idx++ ) + { + if ( hBinHrSplitPostRend->pose_type[pos_idx] == ANY_YAW ) + { + for ( b = 0; b < pred_real_bands_yaw[quant_strat]; b++ ) + { + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + val = hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b].pred_mat_re_idx[ch1][ch2]; + if ( fabsf( hMd->pred_mat_re_idx[ch1][ch2] - val ) > 1e-20 ) + { + assert( 0 ); + } + } + } + } + for ( b = 0; b < pred_imag_bands_yaw[quant_strat]; b++ ) + { + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + val = hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b].pred_mat_im_idx[ch1][ch2]; + if ( fabsf( hMd->pred_mat_im_idx[ch1][ch2] - val ) > 1e-20 ) + { + assert( 0 ); + } + } + } + } + for ( b = 0; b < d_bands_yaw[quant_strat]; b++ ) + { + val = hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b].gd_idx; + if ( fabsf( hMd->gd_idx - val ) > 1e-20 ) + { + assert( 0 ); + } + } + } + else if ( hBinHrSplitPostRend->pose_type[pos_idx] == PITCH_ONLY ) + { + for ( b = 0; b < bands_pitch[quant_strat]; b++ ) + { + val = hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b].gd_idx; + if ( fabsf( hMd->gd_idx - val ) > 1e-20 ) + { + assert( 0 ); + } + val = hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b].gd2_idx; + if ( fabsf( hMd->gd2_idx - val ) > 1e-20 ) + { + assert( 0 ); + } + } + } + else + { + for ( b = 0; b < pred_real_bands_roll[quant_strat]; b++ ) + { + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + val = hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b].pred_mat_re_idx[ch1][ch2]; + if ( fabsf( hMd->pred_mat_re_idx[ch1][ch2] - val ) > 1e-20 ) + { + assert( 0 ); + } + } + } + } + for ( b = 0; b < pred_imag_bands_roll[quant_strat]; b++ ) + { + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + val = hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b].pred_mat_im_idx[ch1][ch2]; + if ( fabsf( hMd->pred_mat_im_idx[ch1][ch2] - val ) > 1e-20 ) + { + assert( 0 ); + } + } + } + } + } + } + } +#endif + + if ( hBinHrSplitPostRend->low_Res ) + { + int16_t sf_idx2, res_ratio, ch2; + BIN_HR_SPLIT_REND_MD_HANDLE hMd2; + res_ratio = MAX_PARAM_SPATIAL_SUBFRAMES / num_subframes; + + for ( sf_idx = num_subframes - 1; sf_idx >= 0; sf_idx-- ) + { + for ( sf_idx2 = res_ratio - 1; sf_idx2 >= 0; sf_idx2-- ) + { + hBinHrSplitPostRend->QuaternionsPre[( sf_idx * res_ratio ) + sf_idx2] = hBinHrSplitPostRend->QuaternionsPre[sf_idx]; + for ( pos_idx = 0; pos_idx < pMultiBinPoseData->num_poses - 1; pos_idx++ ) + { + for ( b = 0; b < num_md_bands; b++ ) + { + hMd = &hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b]; + hMd2 = &hBinHrSplitPostRend->rot_md[pos_idx][( sf_idx * res_ratio ) + sf_idx2][b]; + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + hMd2->pred_mat_re[ch1][ch2] = hMd->pred_mat_re[ch1][ch2]; + hMd2->pred_mat_im[ch1][ch2] = hMd->pred_mat_im[ch1][ch2]; + } + } + hMd2->gd = hMd->gd; + hMd2->gd2 = hMd->gd2; + } + } + } + } + } + + return; +} + +#define REAL_IMAG_INTERPOLATION +static void wrap_around_angle( float *a ) +{ + if ( ( *a ) > 180.0f ) + { + ( *a ) = ( *a ) - 360; + } + else if ( ( *a ) < -180.0f ) + { + ( *a ) = ( *a ) + 360; + } + return; +} +static void wrap_around_ypr( IVAS_QUATERNION *Quaternions ) +{ + /*only if quat is actually yaw, pitch , roll angles*/ + if ( Quaternions->w == -3.0f ) + { + wrap_around_angle( &Quaternions->x ); + wrap_around_angle( &Quaternions->y ); + wrap_around_angle( &Quaternions->z ); + } + return; +} + +static float get_interp_fact( float p[MAX_HEAD_ROT_POSES], float p_t, int16_t ind[2] ) +{ + float n, d, interp_fact; + if ( ind[0] != ind[1] ) + { + n = p[ind[0]] - p[ind[1]]; + d = p[ind[0]] - p_t; + interp_fact = d / n; +#ifdef SPLIT_SIN_SCALING_AND_EXTRAPOL_LIMIT + if ( interp_fact < 0.0f ) + { + d = max( -1.0f * MAX_EXTRAPOLATION_ANGLE, ( min( MAX_EXTRAPOLATION_ANGLE, d ) ) ); + n = sinf( n * ( EVS_PI / 180.0f ) ); + d = sinf( d * ( EVS_PI / 180.0f ) ); + interp_fact = d / n; + } +#endif + } + else + { + interp_fact = 0.0f; + } + + return interp_fact; +} + +static void get_nearest_pose_ind( float p[MAX_HEAD_ROT_POSES], float p_t, int16_t ind[2], int16_t num_poses ) +{ + float min_diff, diff; + int16_t pos_idx; + + ind[0] = 0; + ind[1] = 0; + min_diff = 360.0f; + /*find the closest pose from assumed poses*/ + for ( pos_idx = 0; pos_idx < num_poses; pos_idx++ ) + { + diff = fabsf( p_t - p[pos_idx] ); + if ( diff < min_diff ) + { + ind[0] = pos_idx; + min_diff = (float) diff; + } + } + + min_diff = 360.0; + for ( pos_idx = 0; pos_idx < num_poses; pos_idx++ ) + { + diff = fabsf( p_t - p[pos_idx] ); + if ( ( diff < min_diff ) && + ( fabs( p[pos_idx] - p[ind[0]] ) > EPSILON ) ) + { + ind[1] = pos_idx; + min_diff = (float) diff; + } + } + + return; +} + +static void get_interpolation_vars( + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, + const IVAS_QUATERNION *Quaternions_ref, + const IVAS_QUATERNION *Quaternions_act, + int16_t interp_yaw_pose_idx[2], + int16_t interp_pitch_pose_idx[2], + int16_t interp_roll_pose_idx[2], + float *interp_yaw_fact, + float *interp_pitch_fact, + float *interp_roll_fact ) +{ + IVAS_QUATERNION quaternions_diff, quaternions_ref_euler, quaternions_act_euler; + float y[MAX_HEAD_ROT_POSES], p[MAX_HEAD_ROT_POSES], r[MAX_HEAD_ROT_POSES]; + int16_t pos_idx, num_poses; + + quaternions_diff.x = 0.0f; + quaternions_diff.y = 0.0f; + quaternions_diff.z = 0.0f; + + num_poses = pMultiBinPoseData->num_poses; + for ( pos_idx = 0; pos_idx < num_poses; pos_idx++ ) + { + quaternions_diff.x = pMultiBinPoseData->relative_head_poses[pos_idx][0]; + quaternions_diff.y = pMultiBinPoseData->relative_head_poses[pos_idx][1]; + quaternions_diff.z = pMultiBinPoseData->relative_head_poses[pos_idx][2]; + y[pos_idx] = quaternions_diff.x; + p[pos_idx] = quaternions_diff.y; + r[pos_idx] = quaternions_diff.z; + } + + /*interpolation if actual pose is not same as one of assumed poses*/ /*get the deviation*/ - Quat2Euler( *Quaternions_ref, &quaternions_ref_euler.z, &quaternions_ref_euler.y, &quaternions_ref_euler.x ); /*order in Quat2Euler seems to be reversed ?*/ - Quat2Euler( *Quaternions_act, &quaternions_act_euler.z, &quaternions_act_euler.y, &quaternions_act_euler.x ); /*order in Quat2Euler seems to be reversed ?*/ - quaternions_diff.w = -3.0f; /*euler*/ + Quat2EulerDegree( *Quaternions_ref, &quaternions_ref_euler.z, &quaternions_ref_euler.y, &quaternions_ref_euler.x ); /*order in Quat2Euler seems to be reversed ?*/ + Quat2EulerDegree( *Quaternions_act, &quaternions_act_euler.z, &quaternions_act_euler.y, &quaternions_act_euler.x ); /*order in Quat2Euler seems to be reversed ?*/ + quaternions_diff.w = -3.0f; /*euler*/ quaternions_diff.x = quaternions_act_euler.x - quaternions_ref_euler.x; quaternions_diff.y = quaternions_act_euler.y - quaternions_ref_euler.y; quaternions_diff.z = quaternions_act_euler.z - quaternions_ref_euler.z; wrap_around_ypr( &quaternions_diff ); + + interp_yaw_pose_idx[0] = 0; + interp_yaw_pose_idx[1] = 0; if ( fabs( quaternions_diff.x ) > EPSILON ) { - min_diff = 360.0f; - /*find the closest pose from assumed poses*/ - for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES; pos_idx++ ) + get_nearest_pose_ind( y, quaternions_diff.x, interp_yaw_pose_idx, num_poses ); + } + *interp_yaw_fact = get_interp_fact( y, quaternions_diff.x, interp_yaw_pose_idx ); + + interp_pitch_pose_idx[0] = 0; + interp_pitch_pose_idx[1] = 0; + if ( fabs( quaternions_diff.y ) > EPSILON ) + { + get_nearest_pose_ind( p, quaternions_diff.y, interp_pitch_pose_idx, num_poses ); + } + *interp_pitch_fact = get_interp_fact( p, quaternions_diff.y, interp_pitch_pose_idx ); + + interp_roll_pose_idx[0] = 0; + interp_roll_pose_idx[1] = 0; + if ( fabs( quaternions_diff.z ) > EPSILON ) + { + get_nearest_pose_ind( r, quaternions_diff.z, interp_roll_pose_idx, num_poses ); + } + *interp_roll_fact = get_interp_fact( r, quaternions_diff.z, interp_roll_pose_idx ); + + return; +} + +static void interpolate_gain_matrix( + BIN_HR_SPLIT_REND_MD rot_md[][MAX_PARAM_SPATIAL_SUBFRAMES][MAX_SPLIT_REND_MD_BANDS], + int16_t sf_idx, + int16_t band_idx, + int16_t ind[2], + float interp_fact, + float gain[BINAURAL_CHANNELS] ) +{ + float gd1, gd2, gd3, gd4, diff; + + gd1 = 1.0f; + gd2 = 1.0f; + gd3 = 1.0f; + gd4 = 1.0f; + if ( ind[0] != 0 ) + { + gd1 = rot_md[ind[0] - 1][sf_idx][band_idx].gd; + gd3 = rot_md[ind[0] - 1][sf_idx][band_idx].gd2; + } + if ( ind[1] != 0 ) + { + gd2 = rot_md[ind[1] - 1][sf_idx][band_idx].gd; + gd4 = rot_md[ind[1] - 1][sf_idx][band_idx].gd2; + } +#if 0 + diff = gd1 / gd2; + pitch_gain_l = gd2 * powf( diff, 1.0f - interp_pitch_fact ); + pitch_gain_l = max( 0.0f, pitch_gain_l ); + + diff = gd3 / gd4; + pitch_gain_r = gd4 * powf( diff, 1.0f - interp_pitch_fact ); + pitch_gain_r = max( 0.0f, pitch_gain_r ); +#else + diff = gd1 - gd2; + gain[0] = gd1 - ( diff * interp_fact ); + gain[0] = max( 0.0f, gain[0] ); + + diff = gd3 - gd4; + gain[1] = gd3 - ( diff * interp_fact ); + gain[1] = max( 0.0f, gain[1] ); +#endif +} + +static void interpolate_pred_matrix( + BIN_HR_SPLIT_REND_MD rot_md[][MAX_PARAM_SPATIAL_SUBFRAMES][MAX_SPLIT_REND_MD_BANDS], + int16_t sf_idx, + int16_t band_idx, + int16_t ind[2], + float interp_fact, + float mat_re[BINAURAL_CHANNELS][BINAURAL_CHANNELS], + float mat_im[BINAURAL_CHANNELS][BINAURAL_CHANNELS] ) +{ + int16_t ch_idx1, ch_idx2; + float diff; + BIN_HR_SPLIT_REND_MD *pRot_md; + float mix_mat_re1[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float mix_mat_im1[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float mix_mat_re2[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float mix_mat_im2[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; +#ifdef SPIT_ABS_SCALING_INTERP + float abs1, abs2; + float mix_mat_abs[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; +#endif + + for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) + { + set_zero( mix_mat_re1[ch_idx1], BINAURAL_CHANNELS ); + set_zero( mix_mat_im1[ch_idx1], BINAURAL_CHANNELS ); + mix_mat_re1[ch_idx1][ch_idx1] = 1.0f; + + set_zero( mix_mat_re2[ch_idx1], BINAURAL_CHANNELS ); + set_zero( mix_mat_im2[ch_idx1], BINAURAL_CHANNELS ); + mix_mat_re2[ch_idx1][ch_idx1] = 1.0f; + } + + if ( ind[0] != 0 ) + { + pRot_md = &rot_md[ind[0] - 1][sf_idx][band_idx]; + + for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) { - if ( fabs( quaternions_diff.x - quaternions_diffx[pos_idx].x ) < min_diff ) + for ( ch_idx2 = 0; ch_idx2 < BINAURAL_CHANNELS; ch_idx2++ ) { - idx1 = pos_idx; - min_diff = (float) fabs( quaternions_diff.x - quaternions_diffx[pos_idx].x ); + mix_mat_re1[ch_idx1][ch_idx2] = pRot_md->pred_mat_re[ch_idx1][ch_idx2]; + mix_mat_im1[ch_idx1][ch_idx2] = pRot_md->pred_mat_im[ch_idx1][ch_idx2]; } } + } - min_diff = 360.0; - for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES; pos_idx++ ) + if ( ind[1] != 0 ) + { + pRot_md = &rot_md[ind[1] - 1][sf_idx][band_idx]; + + for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) { - if ( ( fabs( quaternions_diff.x - quaternions_diffx[pos_idx].x ) < min_diff ) && - ( pos_idx != idx1 ) ) + for ( ch_idx2 = 0; ch_idx2 < BINAURAL_CHANNELS; ch_idx2++ ) { - idx2 = pos_idx; - min_diff = (float) fabs( quaternions_diff.x - quaternions_diffx[pos_idx].x ); + mix_mat_re2[ch_idx1][ch_idx2] = pRot_md->pred_mat_re[ch_idx1][ch_idx2]; + mix_mat_im2[ch_idx1][ch_idx2] = pRot_md->pred_mat_im[ch_idx1][ch_idx2]; } } } - interp_pose_idx[0] = idx1; - interp_pose_idx[1] = idx2; - if ( idx1 != idx2 ) +#ifdef SPIT_ABS_SCALING_INTERP + for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) { - n1 = quaternions_diffx[idx1].x - quaternions_diffx[idx2].x; - d1 = quaternions_diffx[idx1].x - quaternions_diff.x; - *interp_fact = d1 / n1; + for ( ch_idx2 = 0; ch_idx2 < BINAURAL_CHANNELS; ch_idx2++ ) + { + IVAS_CALCULATE_ABS( mix_mat_re1[ch_idx1][ch_idx2], mix_mat_im1[ch_idx1][ch_idx2], abs1 ); + IVAS_CALCULATE_ABS( mix_mat_re2[ch_idx1][ch_idx2], mix_mat_im2[ch_idx1][ch_idx2], abs2 ); + diff = abs1 - abs2; + mix_mat_abs[ch_idx1][ch_idx2] = abs1 - ( diff * interp_fact ); + mix_mat_abs[ch_idx1][ch_idx2] = fabsf( mix_mat_abs[ch_idx1][ch_idx2] ); + } } - else +#endif + + for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) + { + for ( ch_idx2 = 0; ch_idx2 < BINAURAL_CHANNELS; ch_idx2++ ) + { + diff = mix_mat_re1[ch_idx1][ch_idx2] - mix_mat_re2[ch_idx1][ch_idx2]; + mat_re[ch_idx1][ch_idx2] = mix_mat_re1[ch_idx1][ch_idx2] - ( diff * interp_fact ); + + diff = mix_mat_im1[ch_idx1][ch_idx2] - mix_mat_im2[ch_idx1][ch_idx2]; + mat_im[ch_idx1][ch_idx2] = mix_mat_im1[ch_idx1][ch_idx2] - ( diff * interp_fact ); + } + } + +#ifdef SPIT_ABS_SCALING_INTERP + for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) { - *interp_fact = 0.0f; + for ( ch_idx2 = 0; ch_idx2 < BINAURAL_CHANNELS; ch_idx2++ ) + { + IVAS_CALCULATE_ABS( mat_re[ch_idx1][ch_idx2], mat_im[ch_idx1][ch_idx2], abs1 ); + if ( abs1 > 1e-10 ) + { + abs1 = mix_mat_abs[ch_idx1][ch_idx2] / abs1; + mat_re[ch_idx1][ch_idx2] = mat_re[ch_idx1][ch_idx2] * abs1; + mat_im[ch_idx1][ch_idx2] = mat_im[ch_idx1][ch_idx2] * abs1; + } + } } +#endif return; } @@ -640,82 +1259,44 @@ static void interpolate_rend_md( float *gd_int, int16_t sf_idx, int16_t band_idx, - int16_t interp_pose_idx[2], - float interp_fact ) + int16_t interp_yaw_pose_idx[2], + int16_t interp_pitch_pose_idx[2], + int16_t interp_roll_pose_idx[2], + float interp_yaw_fact, + float interp_pitch_fact, + float interp_roll_fact ) { - int16_t ch_idx1, ch_idx2, idx1, idx2; - float mix_mat_abs1[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; - float mix_mat_ph1[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; - float mix_mat_abs2[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; - float mix_mat_ph2[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; - float mix_mat_abs[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; - float mix_mat_ph[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; - float gd1, gd2, diff; - BIN_HR_SPLIT_REND_MD *pRot_md; - - for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) - { - set_zero( mix_mat_abs1[ch_idx1], BINAURAL_CHANNELS ); - set_zero( mix_mat_ph1[ch_idx1], BINAURAL_CHANNELS ); - mix_mat_abs1[ch_idx1][ch_idx1] = 1.0f; + int16_t ch_idx1, idx1, idx2; +#ifndef SPLIT_REND_REAL_ONLY_ROLL + float mix_mat_re1[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float mix_mat_im1[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float mix_mat_re3[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + float mix_mat_im3[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; + int16_t ch_idx2; +#endif + float gd1, gd2, gd3, gd4, diff, pitch_gain_r, pitch_gain_l; - set_zero( mix_mat_abs2[ch_idx1], BINAURAL_CHANNELS ); - set_zero( mix_mat_ph2[ch_idx1], BINAURAL_CHANNELS ); - mix_mat_abs2[ch_idx1][ch_idx1] = 1.0f; - } gd1 = 0.0f; gd2 = 0.0f; - idx1 = interp_pose_idx[0]; - idx2 = interp_pose_idx[1]; + idx1 = interp_yaw_pose_idx[0]; + idx2 = interp_yaw_pose_idx[1]; if ( ( idx1 != 0 ) || ( idx2 != 0 ) ) { + interpolate_pred_matrix( rot_md, sf_idx, band_idx, interp_yaw_pose_idx, interp_yaw_fact, mix_mat_re, mix_mat_im ); + if ( idx1 != 0 ) { - pRot_md = &rot_md[idx1 - 1][sf_idx][band_idx]; - - for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) - { - for ( ch_idx2 = 0; ch_idx2 < BINAURAL_CHANNELS; ch_idx2++ ) - { - mix_mat_abs1[ch_idx1][ch_idx2] = pRot_md->pred_mat_re[ch_idx1][ch_idx2]; - mix_mat_ph1[ch_idx1][ch_idx2] = pRot_md->pred_mat_im[ch_idx1][ch_idx2]; - } - } gd1 = rot_md[idx1 - 1][sf_idx][band_idx].gd; } if ( idx2 != 0 ) { - pRot_md = &rot_md[idx2 - 1][sf_idx][band_idx]; - - for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) - { - for ( ch_idx2 = 0; ch_idx2 < BINAURAL_CHANNELS; ch_idx2++ ) - { - mix_mat_abs2[ch_idx1][ch_idx2] = pRot_md->pred_mat_re[ch_idx1][ch_idx2]; - mix_mat_ph2[ch_idx1][ch_idx2] = pRot_md->pred_mat_im[ch_idx1][ch_idx2]; - } - } gd2 = rot_md[idx2 - 1][sf_idx][band_idx].gd; } - for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) - { - for ( ch_idx2 = 0; ch_idx2 < BINAURAL_CHANNELS; ch_idx2++ ) - { - diff = mix_mat_abs1[ch_idx1][ch_idx2] - mix_mat_abs2[ch_idx1][ch_idx2]; - mix_mat_abs[ch_idx1][ch_idx2] = mix_mat_abs1[ch_idx1][ch_idx2] - ( diff * interp_fact ); - - diff = mix_mat_ph1[ch_idx1][ch_idx2] - mix_mat_ph2[ch_idx1][ch_idx2]; - mix_mat_ph[ch_idx1][ch_idx2] = mix_mat_ph1[ch_idx1][ch_idx2] - ( diff * interp_fact ); - - mix_mat_re[ch_idx1][ch_idx2] = mix_mat_abs[ch_idx1][ch_idx2]; - mix_mat_im[ch_idx1][ch_idx2] = mix_mat_ph[ch_idx1][ch_idx2]; - } - } diff = gd1 - gd2; - *gd_int = gd1 - ( diff * interp_fact ); + *gd_int = gd1 - ( diff * interp_yaw_fact ); } else { @@ -729,27 +1310,148 @@ static void interpolate_rend_md( *gd_int = 0.0f; } + idx1 = interp_pitch_pose_idx[0]; + idx2 = interp_pitch_pose_idx[1]; + if ( ( idx1 != 0 ) || ( idx2 != 0 ) ) + { + gd1 = 1.0f; + gd2 = 1.0f; + + gd3 = 1.0f; + gd4 = 1.0f; + + if ( idx1 != 0 ) + { + gd1 = rot_md[idx1 - 1][sf_idx][band_idx].gd; + gd3 = rot_md[idx1 - 1][sf_idx][band_idx].gd2; + } + if ( idx2 != 0 ) + { + gd2 = rot_md[idx2 - 1][sf_idx][band_idx].gd; + gd4 = rot_md[idx2 - 1][sf_idx][band_idx].gd2; + } +#if 0 + diff = gd1 / gd2; + pitch_gain_l = gd2 * powf( diff, 1.0f - interp_pitch_fact ); + pitch_gain_l = max( 0.0f, pitch_gain_l ); + + diff = gd3 / gd4; + pitch_gain_r = gd4 * powf( diff, 1.0f - interp_pitch_fact ); + pitch_gain_r = max( 0.0f, pitch_gain_r ); +#else + diff = gd1 - gd2; + pitch_gain_l = gd1 - ( diff * interp_pitch_fact ); + pitch_gain_l = max( 0.0f, pitch_gain_l ); + + diff = gd3 - gd4; + pitch_gain_r = gd3 - ( diff * interp_pitch_fact ); + pitch_gain_r = max( 0.0f, pitch_gain_r ); +#endif + + for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) + { + mix_mat_re[ch_idx1][0] *= pitch_gain_l; + mix_mat_re[ch_idx1][1] *= pitch_gain_r; + mix_mat_im[ch_idx1][0] *= pitch_gain_l; + mix_mat_im[ch_idx1][1] *= pitch_gain_r; + } + } + else + { + pitch_gain_l = 1.0f; + pitch_gain_r = 1.0f; + } + + idx1 = interp_roll_pose_idx[0]; + idx2 = interp_roll_pose_idx[1]; +#ifdef SPLIT_REND_REAL_ONLY_ROLL + if ( ( idx1 != 0 ) || ( idx2 != 0 ) ) + { + gd1 = 1.0f; + gd2 = 1.0f; + + gd3 = 1.0f; + gd4 = 1.0f; + + if ( idx1 != 0 ) + { + gd1 = rot_md[idx1 - 1][sf_idx][band_idx].gd; + gd3 = rot_md[idx1 - 1][sf_idx][band_idx].gd2; + } + if ( idx2 != 0 ) + { + gd2 = rot_md[idx2 - 1][sf_idx][band_idx].gd; + gd4 = rot_md[idx2 - 1][sf_idx][band_idx].gd2; + } +#if 0 + diff = gd1 / gd2; + pitch_gain_l = gd2 * powf( diff, 1.0f - interp_roll_fact ); + pitch_gain_l = max( 0.0f, pitch_gain_l ); + + diff = gd3 / gd4; + pitch_gain_r = gd4 * powf( diff, 1.0f - interp_roll_fact ); + pitch_gain_r = max( 0.0f, pitch_gain_r ); +#else + diff = gd1 - gd2; + pitch_gain_l = gd1 - ( diff * interp_roll_fact ); + pitch_gain_l = max( 0.0f, pitch_gain_l ); + + diff = gd3 - gd4; + pitch_gain_r = gd3 - ( diff * interp_roll_fact ); + pitch_gain_r = max( 0.0f, pitch_gain_r ); +#endif + + for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) + { + mix_mat_re[ch_idx1][0] *= pitch_gain_l; + mix_mat_re[ch_idx1][1] *= pitch_gain_r; + mix_mat_im[ch_idx1][0] *= pitch_gain_l; + mix_mat_im[ch_idx1][1] *= pitch_gain_r; + } + } +#else + if ( ( idx1 != 0 ) || ( idx2 != 0 ) ) + { + + + interpolate_pred_matrix( rot_md, sf_idx, band_idx, interp_roll_pose_idx, interp_roll_fact, mix_mat_re3, mix_mat_im3 ); + + ivas_mat_mult_2by2_complex( mix_mat_re, mix_mat_im, mix_mat_re3, mix_mat_im3, + mix_mat_re1, mix_mat_im1 ); + for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) + { + for ( ch_idx2 = 0; ch_idx2 < BINAURAL_CHANNELS; ch_idx2++ ) + { + mix_mat_re[ch_idx1][ch_idx2] = mix_mat_re1[ch_idx1][ch_idx2]; + mix_mat_im[ch_idx1][ch_idx2] = mix_mat_im1[ch_idx1][ch_idx2]; + } + } + } +#endif + return; } void ivas_SplitRenderer_PostRenderer( - BIN_HR_SPLIT_POST_REND_HANDLE hBinPostRenderer, /* i/o: binaural renderer handle */ - float Cldfb_RealBuffer_Ref_Binaural[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o : Reference/out Binaural signals */ - float Cldfb_ImagBuffer_Ref_Binaural[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o : Reference/out Binaural signals */ - int16_t sf_idx, - const IVAS_QUATERNION *Quaternions_ref, - const IVAS_QUATERNION *Quaternions_act ) + BIN_HR_SPLIT_POST_REND_HANDLE hBinPostRenderer, /* i/o: binaural renderer handle */ + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, + float Cldfb_RealBuffer_Ref_Binaural[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i/o : Reference/out Binaural signals */ + float Cldfb_ImagBuffer_Ref_Binaural[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i/o : Reference/out Binaural signals */ + const IVAS_QUATERNION Quaternions_act[MAX_PARAM_SPATIAL_SUBFRAMES] ) { int16_t pos_idx, b, brange[2], ch_idx1; - int16_t num_md_bands, slot_idx, b2; - float pred_out_re[BINAURAL_CHANNELS], pred_out_im[BINAURAL_CHANNELS], tmp_re, tmp_im, gd_int, gd_cf, gd_cf_abs; - int16_t interp_pose_idx[2]; - float interp_fact; + int16_t num_md_bands, slot_idx, b2, sf_idx, index_slot, num_subframes, num_slots, sf_idx_md; + float pred_out_re[BINAURAL_CHANNELS], pred_out_im[BINAURAL_CHANNELS], tmp_re, tmp_im, gd_int; +#ifndef SPLIT_REND_ZERO_OUT_YAW_D + float gd_cf, gd_cf_abs; +#endif + int16_t interp_yaw_pose_idx[2], interp_pitch_pose_idx[2], interp_roll_pose_idx[2]; + float interp_yaw_fact, interp_pitch_fact, interp_roll_fact; float mix_mat_re[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; float mix_mat_im[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG - float Cldfb_RealBuffer_Recons_Binaural[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; - float Cldfb_ImagBuffer_Recons_Binaural[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_RealBuffer_Recons_Binaural[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer_Recons_Binaural[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; #endif float fade; float *pMix_mat_re_prev[BINAURAL_CHANNELS]; @@ -759,246 +1461,339 @@ void ivas_SplitRenderer_PostRenderer( wmops_sub_start( "ivas_SplitRenderer_PostRenderer" ); + + num_subframes = MAX_PARAM_SPATIAL_SUBFRAMES; + num_slots = MAX_PARAM_SPATIAL_SUBFRAMES; + for ( sf_idx = 0; sf_idx < num_subframes; sf_idx++ ) + { #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG - pos_idx = MAX_HEAD_ROT_POSES - 1; + pos_idx = MAX_HEAD_ROT_POSES - 1; #else - pos_idx = 0; + pos_idx = 0; #endif - get_interpolation_vars( Quaternions_ref, Quaternions_act, interp_pose_idx, &interp_fact ); - for ( b = 0; b < num_md_bands; b++ ) - { - for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) + sf_idx_md = ( hBinPostRenderer->low_Res == 0 ) ? sf_idx : 0; + get_interpolation_vars( pMultiBinPoseData, + &hBinPostRenderer->QuaternionsPre[sf_idx_md], + &Quaternions_act[sf_idx], + interp_yaw_pose_idx, + interp_pitch_pose_idx, + interp_roll_pose_idx, + &interp_yaw_fact, + &interp_pitch_fact, + &interp_roll_fact ); + for ( b = 0; b < num_md_bands; b++ ) { - set_zero( mix_mat_re[ch_idx1], BINAURAL_CHANNELS ); - set_zero( mix_mat_im[ch_idx1], BINAURAL_CHANNELS ); - mix_mat_re[ch_idx1][ch_idx1] = 1.0f; - } - gd_int = 0.0f; + for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) + { + set_zero( mix_mat_re[ch_idx1], BINAURAL_CHANNELS ); + set_zero( mix_mat_im[ch_idx1], BINAURAL_CHANNELS ); + mix_mat_re[ch_idx1][ch_idx1] = 1.0f; + } + gd_int = 0.0f; + interpolate_rend_md( hBinPostRenderer->rot_md, mix_mat_re, mix_mat_im, &gd_int, sf_idx, b, interp_yaw_pose_idx, interp_pitch_pose_idx, interp_roll_pose_idx, interp_yaw_fact, interp_pitch_fact, interp_roll_fact ); - interpolate_rend_md( hBinPostRenderer->rot_md, mix_mat_re, mix_mat_im, &gd_int, sf_idx, b, interp_pose_idx, interp_fact ); - for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) - { - /*update the prediction matrix with interpolated matrix*/ - hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch_idx1][0] = mix_mat_re[ch_idx1][0]; - hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch_idx1][1] = mix_mat_re[ch_idx1][1]; - hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_im[ch_idx1][0] = mix_mat_im[ch_idx1][0]; - hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_im[ch_idx1][1] = mix_mat_im[ch_idx1][1]; - hBinPostRenderer->rot_md[pos_idx][sf_idx][b].gd = gd_int; + for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) + { + /*update the prediction matrix with interpolated matrix*/ + hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch_idx1][0] = mix_mat_re[ch_idx1][0]; + hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch_idx1][1] = mix_mat_re[ch_idx1][1]; + hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_im[ch_idx1][0] = mix_mat_im[ch_idx1][0]; + hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_im[ch_idx1][1] = mix_mat_im[ch_idx1][1]; + hBinPostRenderer->rot_md[pos_idx][sf_idx][b].gd = gd_int; + } } - } + #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG - for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES; pos_idx++ ) -#else - pos_idx = 0; -#endif - { - for ( slot_idx = 0; slot_idx < MAX_PARAM_SPATIAL_SUBFRAMES; slot_idx++ ) + for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES - 1; pos_idx++ ) { - fade = ( (float) slot_idx + 1.0f ) / MAX_PARAM_SPATIAL_SUBFRAMES; for ( b = 0; b < num_md_bands; b++ ) { - for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) + if ( hBinPostRenderer->pose_type[pos_idx] == PITCH_ONLY ) { - if ( hBinPostRenderer->cf_flag ) - { - pMix_mat_re_prev[ch_idx1] = hBinPostRenderer->mixer_mat_re[pos_idx][b][ch_idx1]; - pMix_mat_im_prev[ch_idx1] = hBinPostRenderer->mixer_mat_im[pos_idx][b][ch_idx1]; - mix_mat_re[ch_idx1][0] = fade * ( hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch_idx1][0] ) + - ( 1.0f - fade ) * pMix_mat_re_prev[ch_idx1][0]; - mix_mat_re[ch_idx1][1] = fade * ( hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch_idx1][1] ) + - ( 1.0f - fade ) * pMix_mat_re_prev[ch_idx1][1]; - - mix_mat_im[ch_idx1][0] = fade * ( hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_im[ch_idx1][0] ) + - ( 1.0f - fade ) * pMix_mat_im_prev[ch_idx1][0]; - mix_mat_im[ch_idx1][1] = fade * ( hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_im[ch_idx1][1] ) + - ( 1.0f - fade ) * pMix_mat_im_prev[ch_idx1][1]; - } - else + + for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) { - mix_mat_re[ch_idx1][0] = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch_idx1][0]; - mix_mat_re[ch_idx1][1] = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch_idx1][1]; - mix_mat_im[ch_idx1][0] = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_im[ch_idx1][0]; - mix_mat_im[ch_idx1][1] = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_im[ch_idx1][1]; + set_zero( hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch_idx1], BINAURAL_CHANNELS ); + set_zero( hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_im[ch_idx1], BINAURAL_CHANNELS ); + hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch_idx1][ch_idx1] = 1.0f; } + hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[0][0] *= hBinPostRenderer->rot_md[pos_idx][sf_idx][b].gd; + hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[1][1] *= hBinPostRenderer->rot_md[pos_idx][sf_idx][b].gd2; + hBinPostRenderer->rot_md[pos_idx][sf_idx][b].gd = 0.0f; } - - if ( hBinPostRenderer->cf_flag ) - { - gd_cf = fade * hBinPostRenderer->rot_md[pos_idx][sf_idx][b].gd + - ( 1 - fade ) * hBinPostRenderer->gd_mem[pos_idx][b]; - } - else + else if ( hBinPostRenderer->pose_type[pos_idx] == ANY_ROLL ) { - gd_cf = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].gd; + hBinPostRenderer->rot_md[pos_idx][sf_idx][b].gd = 0.0f; } - gd_cf_abs = (float) fabs( gd_cf ); + } + } +#endif - brange[0] = pBand_grouping[b]; - brange[1] = pBand_grouping[b + 1]; - for ( b2 = brange[0]; b2 < brange[1]; b2++ ) +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES; pos_idx++ ) +#else + pos_idx = 0; +#endif + { + for ( slot_idx = 0; slot_idx < num_slots; slot_idx++ ) + { + index_slot = sf_idx * num_slots + slot_idx; + fade = ( (float) slot_idx + 1.0f ) / MAX_PARAM_SPATIAL_SUBFRAMES; + fade = min( fade, 1.0f ); + for ( b = 0; b < num_md_bands; b++ ) { for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) { - // Apply prediction matrix - IVAS_CMULT_FLOAT( Cldfb_RealBuffer_Ref_Binaural[0][slot_idx][b2], - Cldfb_ImagBuffer_Ref_Binaural[0][slot_idx][b2], - mix_mat_re[0][ch_idx1], - mix_mat_im[0][ch_idx1], - tmp_re, - tmp_im ); - pred_out_re[ch_idx1] = tmp_re; - pred_out_im[ch_idx1] = tmp_im; - - IVAS_CMULT_FLOAT( Cldfb_RealBuffer_Ref_Binaural[1][slot_idx][b2], - Cldfb_ImagBuffer_Ref_Binaural[1][slot_idx][b2], - mix_mat_re[1][ch_idx1], - mix_mat_im[1][ch_idx1], - tmp_re, - tmp_im ); - pred_out_re[ch_idx1] += tmp_re; - pred_out_im[ch_idx1] += tmp_im; + if ( hBinPostRenderer->cf_flag ) + { + pMix_mat_re_prev[ch_idx1] = hBinPostRenderer->mixer_mat_re[pos_idx][b][ch_idx1]; + pMix_mat_im_prev[ch_idx1] = hBinPostRenderer->mixer_mat_im[pos_idx][b][ch_idx1]; + mix_mat_re[ch_idx1][0] = fade * ( hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch_idx1][0] ) + + ( 1.0f - fade ) * pMix_mat_re_prev[ch_idx1][0]; + mix_mat_re[ch_idx1][1] = fade * ( hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch_idx1][1] ) + + ( 1.0f - fade ) * pMix_mat_re_prev[ch_idx1][1]; + + mix_mat_im[ch_idx1][0] = fade * ( hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_im[ch_idx1][0] ) + + ( 1.0f - fade ) * pMix_mat_im_prev[ch_idx1][0]; + mix_mat_im[ch_idx1][1] = fade * ( hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_im[ch_idx1][1] ) + + ( 1.0f - fade ) * pMix_mat_im_prev[ch_idx1][1]; + } + else + { + mix_mat_re[ch_idx1][0] = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch_idx1][0]; + mix_mat_re[ch_idx1][1] = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch_idx1][1]; + mix_mat_im[ch_idx1][0] = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_im[ch_idx1][0]; + mix_mat_im[ch_idx1][1] = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_im[ch_idx1][1]; + } } - // Apply decorrelation - if ( 1 ) +#ifndef SPLIT_REND_ZERO_OUT_YAW_D + if ( hBinPostRenderer->cf_flag ) { - tmp_re = Cldfb_RealBuffer_Ref_Binaural[0][slot_idx][b2] + Cldfb_RealBuffer_Ref_Binaural[1][slot_idx][b2]; - tmp_im = Cldfb_ImagBuffer_Ref_Binaural[0][slot_idx][b2] + Cldfb_ImagBuffer_Ref_Binaural[1][slot_idx][b2]; - - pred_out_re[0] += ( gd_cf_abs * tmp_re ); - pred_out_im[0] += ( gd_cf_abs * tmp_im ); - pred_out_re[1] += ( gd_cf * tmp_re ); - pred_out_im[1] += ( gd_cf * tmp_im ); + gd_cf = fade * hBinPostRenderer->rot_md[pos_idx][sf_idx][b].gd + + ( 1 - fade ) * hBinPostRenderer->gd_mem[pos_idx][b]; + } + else + { + gd_cf = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].gd; } - for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) + gd_cf_abs = (float) fabs( gd_cf ); +#endif + + brange[0] = pBand_grouping[b]; + brange[1] = pBand_grouping[b + 1]; + for ( b2 = brange[0]; b2 < brange[1]; b2++ ) { + for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) + { + // Apply prediction matrix + IVAS_CMULT_FLOAT( Cldfb_RealBuffer_Ref_Binaural[0][index_slot][b2], + Cldfb_ImagBuffer_Ref_Binaural[0][index_slot][b2], + mix_mat_re[0][ch_idx1], + mix_mat_im[0][ch_idx1], + tmp_re, + tmp_im ); + pred_out_re[ch_idx1] = tmp_re; + pred_out_im[ch_idx1] = tmp_im; + + IVAS_CMULT_FLOAT( Cldfb_RealBuffer_Ref_Binaural[1][index_slot][b2], + Cldfb_ImagBuffer_Ref_Binaural[1][index_slot][b2], + mix_mat_re[1][ch_idx1], + mix_mat_im[1][ch_idx1], + tmp_re, + tmp_im ); + pred_out_re[ch_idx1] += tmp_re; + pred_out_im[ch_idx1] += tmp_im; + } + +#ifndef SPLIT_REND_ZERO_OUT_YAW_D + // Apply decorrelation + if ( 1 ) + { + tmp_re = Cldfb_RealBuffer_Ref_Binaural[0][index_slot][b2] + Cldfb_RealBuffer_Ref_Binaural[1][index_slot][b2]; + tmp_im = Cldfb_ImagBuffer_Ref_Binaural[0][index_slot][b2] + Cldfb_ImagBuffer_Ref_Binaural[1][index_slot][b2]; + + pred_out_re[0] += ( gd_cf_abs * tmp_re ); + pred_out_im[0] += ( gd_cf_abs * tmp_im ); + pred_out_re[1] += ( gd_cf * tmp_re ); + pred_out_im[1] += ( gd_cf * tmp_im ); + } +#endif + for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) + { #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG - Cldfb_RealBuffer_Recons_Binaural[pos_idx][ch_idx1][slot_idx][b2] = pred_out_re[ch_idx1]; - Cldfb_ImagBuffer_Recons_Binaural[pos_idx][ch_idx1][slot_idx][b2] = pred_out_im[ch_idx1]; + Cldfb_RealBuffer_Recons_Binaural[pos_idx][ch_idx1][index_slot][b2] = pred_out_re[ch_idx1]; + Cldfb_ImagBuffer_Recons_Binaural[pos_idx][ch_idx1][index_slot][b2] = pred_out_im[ch_idx1]; #else - Cldfb_RealBuffer_Ref_Binaural[ch_idx1][slot_idx][b2] = pred_out_re[ch_idx1]; - Cldfb_ImagBuffer_Ref_Binaural[ch_idx1][slot_idx][b2] = pred_out_im[ch_idx1]; + Cldfb_RealBuffer_Ref_Binaural[ch_idx1][index_slot][b2] = pred_out_re[ch_idx1]; + Cldfb_ImagBuffer_Ref_Binaural[ch_idx1][index_slot][b2] = pred_out_im[ch_idx1]; #endif + } } } } } - } #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG - for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES; pos_idx++ ) + for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES; pos_idx++ ) #else - pos_idx = 0; + pos_idx = 0; #endif - { - for ( b = 0; b < num_md_bands; b++ ) { - for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) + for ( b = 0; b < num_md_bands; b++ ) { - hBinPostRenderer->mixer_mat_re[pos_idx][b][ch_idx1][0] = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch_idx1][0]; - hBinPostRenderer->mixer_mat_re[pos_idx][b][ch_idx1][1] = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch_idx1][1]; - hBinPostRenderer->mixer_mat_im[pos_idx][b][ch_idx1][0] = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_im[ch_idx1][0]; - hBinPostRenderer->mixer_mat_im[pos_idx][b][ch_idx1][1] = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_im[ch_idx1][1]; + for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) + { + hBinPostRenderer->mixer_mat_re[pos_idx][b][ch_idx1][0] = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch_idx1][0]; + hBinPostRenderer->mixer_mat_re[pos_idx][b][ch_idx1][1] = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch_idx1][1]; + hBinPostRenderer->mixer_mat_im[pos_idx][b][ch_idx1][0] = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_im[ch_idx1][0]; + hBinPostRenderer->mixer_mat_im[pos_idx][b][ch_idx1][1] = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_im[ch_idx1][1]; + } + hBinPostRenderer->gd_mem[pos_idx][b] = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].gd; } - hBinPostRenderer->gd_mem[pos_idx][b] = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].gd; } - } - hBinPostRenderer->cf_flag = 1; + hBinPostRenderer->cf_flag = 1; #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG - { - int16_t num_cldfb_bands; - num_cldfb_bands = CLDFB_NO_CHANNELS_MAX; - for ( slot_idx = 0; slot_idx < MAX_PARAM_SPATIAL_SUBFRAMES; slot_idx++ ) { - for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) + int16_t num_cldfb_bands; + num_cldfb_bands = CLDFB_NO_CHANNELS_MAX; + for ( slot_idx = 0; slot_idx < num_slots; slot_idx++ ) { - mvr2r( Cldfb_RealBuffer_Recons_Binaural[MAX_HEAD_ROT_POSES - 1][ch_idx1][slot_idx], Cldfb_RealBuffer_Ref_Binaural[ch_idx1][slot_idx], num_cldfb_bands ); - mvr2r( Cldfb_ImagBuffer_Recons_Binaural[MAX_HEAD_ROT_POSES - 1][ch_idx1][slot_idx], Cldfb_ImagBuffer_Ref_Binaural[ch_idx1][slot_idx], num_cldfb_bands ); + index_slot = sf_idx * num_slots + slot_idx; + for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ ) + { + mvr2r( Cldfb_RealBuffer_Recons_Binaural[MAX_HEAD_ROT_POSES - 1][ch_idx1][index_slot], Cldfb_RealBuffer_Ref_Binaural[ch_idx1][index_slot], num_cldfb_bands ); + mvr2r( Cldfb_ImagBuffer_Recons_Binaural[MAX_HEAD_ROT_POSES - 1][ch_idx1][index_slot], Cldfb_ImagBuffer_Ref_Binaural[ch_idx1][index_slot], num_cldfb_bands ); + } } - } - for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES; pos_idx++ ) - { - char fname[200] = "recons_out_pos"; - char tag[2]; - tag[0] = (char) ( '0' + pos_idx ); - tag[1] = '\0'; - strcat( fname, tag ); - strcat( fname, ".wav" ); - ivas_log_cldfb2wav_data( - Cldfb_RealBuffer_Recons_Binaural[pos_idx], - Cldfb_ImagBuffer_Recons_Binaural[pos_idx], - hBinPostRenderer->cldfbSynReconsBinDec[pos_idx], - BINAURAL_CHANNELS, - num_cldfb_bands, - 48000, - fname ); + for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES; pos_idx++ ) + { + char fname[200] = "recons_out_pos"; + char tag[2]; + tag[0] = (char) ( '0' + pos_idx ); + tag[1] = '\0'; + strcat( fname, tag ); + strcat( fname, ".wav" ); + ivas_log_cldfb2wav_data( + Cldfb_RealBuffer_Recons_Binaural[pos_idx], + Cldfb_ImagBuffer_Recons_Binaural[pos_idx], + hBinPostRenderer->cldfbSynReconsBinDec[pos_idx], + BINAURAL_CHANNELS, + num_cldfb_bands, + 48000, + num_slots, + sf_idx * num_slots, + fname ); + } } - } #endif + } wmops_sub_end(); return; } -void ivas_rend_CldfbSplitPostRendProcess( +static void ivas_rend_CldfbSplitPostRendProcessTdIn( BIN_HR_SPLIT_POST_REND_HANDLE hBinHrSplitPostRend, - const IVAS_QUATERNION QuaternionsPre[MAX_PARAM_SPATIAL_SUBFRAMES], + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, const IVAS_QUATERNION QuaternionsPost[MAX_PARAM_SPATIAL_SUBFRAMES], - float Cldfb_RealBuffer_Binaural[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], - float Cldfb_ImagBuffer_Binaural[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float output[][L_FRAME48k] ) { - int16_t sf_idx, ch_idx, index_slot, slot_idx, num_cldfb_bands; - float Cldfb_RealBuffer_sfIn[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; - float Cldfb_ImagBuffer_sfIn[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; - + int16_t ch_idx, slot_idx, num_cldfb_bands; + float Cldfb_RealBuffer_Binaural[BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer_Binaural[BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; num_cldfb_bands = hBinHrSplitPostRend->cldfbSyn[0]->no_channels; - for ( sf_idx = 0; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ ) + /* Implement CLDFB analysis */ + for ( ch_idx = 0; ch_idx < BINAURAL_CHANNELS; ch_idx++ ) { - for ( slot_idx = 0; slot_idx < MAX_PARAM_SPATIAL_SUBFRAMES; slot_idx++ ) + for ( slot_idx = 0; slot_idx < CLDFB_NO_COL_MAX; slot_idx++ ) { - index_slot = sf_idx * MAX_PARAM_SPATIAL_SUBFRAMES + slot_idx; - for ( ch_idx = 0; ch_idx < BINAURAL_CHANNELS; ch_idx++ ) - { - mvr2r( &Cldfb_RealBuffer_Binaural[ch_idx][index_slot][0], &Cldfb_RealBuffer_sfIn[ch_idx][slot_idx][0], num_cldfb_bands ); - mvr2r( &Cldfb_ImagBuffer_Binaural[ch_idx][index_slot][0], &Cldfb_ImagBuffer_sfIn[ch_idx][slot_idx][0], num_cldfb_bands ); - } + cldfbAnalysis_ts( &( output[ch_idx][num_cldfb_bands * slot_idx] ), + Cldfb_RealBuffer_Binaural[ch_idx][slot_idx], + Cldfb_ImagBuffer_Binaural[ch_idx][slot_idx], + num_cldfb_bands, + hBinHrSplitPostRend->cldfbAna[ch_idx] ); } + } -#ifndef SPLIT_REND_SKIP_POST_REND - ivas_SplitRenderer_PostRenderer( - hBinHrSplitPostRend, - Cldfb_RealBuffer_sfIn, - Cldfb_ImagBuffer_sfIn, - sf_idx, - &QuaternionsPre[sf_idx], - &QuaternionsPost[sf_idx] ); -#endif + ivas_SplitRenderer_PostRenderer( + hBinHrSplitPostRend, + pMultiBinPoseData, + Cldfb_RealBuffer_Binaural, + Cldfb_ImagBuffer_Binaural, + QuaternionsPost ); - /* Implement CLDFB synthesis */ - for ( ch_idx = 0; ch_idx < BINAURAL_CHANNELS; ch_idx++ ) + /* Implement CLDFB synthesis */ + for ( ch_idx = 0; ch_idx < BINAURAL_CHANNELS; ch_idx++ ) + { + float *RealBuffer[CLDFB_NO_COL_MAX]; + float *ImagBuffer[CLDFB_NO_COL_MAX]; + + for ( slot_idx = 0; slot_idx < CLDFB_NO_COL_MAX; slot_idx++ ) { - float *RealBuffer[MAX_PARAM_SPATIAL_SUBFRAMES]; - float *ImagBuffer[MAX_PARAM_SPATIAL_SUBFRAMES]; + RealBuffer[slot_idx] = Cldfb_RealBuffer_Binaural[ch_idx][slot_idx]; + ImagBuffer[slot_idx] = Cldfb_ImagBuffer_Binaural[ch_idx][slot_idx]; + } - index_slot = sf_idx * MAX_PARAM_SPATIAL_SUBFRAMES; + cldfbSynthesis( RealBuffer, ImagBuffer, &( output[ch_idx][0] ), num_cldfb_bands * CLDFB_NO_COL_MAX, hBinHrSplitPostRend->cldfbSyn[ch_idx] ); + } + return; +} - for ( slot_idx = 0; slot_idx < MAX_PARAM_SPATIAL_SUBFRAMES; slot_idx++ ) - { - RealBuffer[slot_idx] = Cldfb_RealBuffer_sfIn[ch_idx][slot_idx]; - ImagBuffer[slot_idx] = Cldfb_ImagBuffer_sfIn[ch_idx][slot_idx]; - } +void ivas_rend_CldfbSplitPostRendProcess( + BIN_HR_SPLIT_POST_REND_HANDLE hBinHrSplitPostRend, + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, + const IVAS_QUATERNION QuaternionsPost[MAX_PARAM_SPATIAL_SUBFRAMES], + float Cldfb_RealBuffer_Binaural[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float Cldfb_ImagBuffer_Binaural[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float output[][L_FRAME48k], + const int16_t is_cldfb_in ) +{ + int16_t ch_idx, slot_idx, num_cldfb_bands; + num_cldfb_bands = hBinHrSplitPostRend->cldfbSyn[0]->no_channels; + + if ( is_cldfb_in == 0 ) + { + ivas_rend_CldfbSplitPostRendProcessTdIn( hBinHrSplitPostRend, pMultiBinPoseData, QuaternionsPost, output ); + return; + } + + ivas_SplitRenderer_PostRenderer( + hBinHrSplitPostRend, + pMultiBinPoseData, + Cldfb_RealBuffer_Binaural, + Cldfb_ImagBuffer_Binaural, + QuaternionsPost ); + + /* Implement CLDFB synthesis */ + for ( ch_idx = 0; ch_idx < BINAURAL_CHANNELS; ch_idx++ ) + { + float *RealBuffer[CLDFB_NO_COL_MAX]; + float *ImagBuffer[CLDFB_NO_COL_MAX]; - cldfbSynthesis( RealBuffer, ImagBuffer, &( output[ch_idx][index_slot * num_cldfb_bands] ), num_cldfb_bands * MAX_PARAM_SPATIAL_SUBFRAMES, hBinHrSplitPostRend->cldfbSyn[ch_idx] ); + for ( slot_idx = 0; slot_idx < CLDFB_NO_COL_MAX; slot_idx++ ) + { + RealBuffer[slot_idx] = Cldfb_RealBuffer_Binaural[ch_idx][slot_idx]; + ImagBuffer[slot_idx] = Cldfb_ImagBuffer_Binaural[ch_idx][slot_idx]; } + + cldfbSynthesis( RealBuffer, ImagBuffer, &( output[ch_idx][0] ), num_cldfb_bands * CLDFB_NO_COL_MAX, hBinHrSplitPostRend->cldfbSyn[ch_idx] ); } return; } + +void ivas_init_split_post_rend_handles( SPLIT_POST_REND_WRAPPER *hSplitRendWrapper ) +{ + hSplitRendWrapper->hBinHrSplitPostRend = NULL; + hSplitRendWrapper->hSplitBinLCLDDec = NULL; + ivas_init_multi_bin_pose_data( &hSplitRendWrapper->multiBinPoseData ); + return; +} #endif \ No newline at end of file diff --git a/lib_rend/ivas_splitRendererPre.c b/lib_rend/ivas_splitRendererPre.c index f5f34302f9..456779f505 100644 --- a/lib_rend/ivas_splitRendererPre.c +++ b/lib_rend/ivas_splitRendererPre.c @@ -56,33 +56,6 @@ #define MAX_BAND_SMOOTH ( 1 ) #define SMOOTH_NORM_FACTOR ( 5.0f ) -static void ivas_mat_mult_2by2_complex( float in_re1[2][2], - float in_im1[2][2], - float in_re2[2][2], - float in_im2[2][2], - float out_re2[2][2], - float out_im2[2][2] ) -{ - int16_t i, j; - float tmp_re, tmp_im; - - for ( i = 0; i < 2; i++ ) - { - for ( j = 0; j < 2; j++ ) - { - - IVAS_CMULT_FLOAT( in_re1[i][0], in_im1[i][0], - in_re2[0][j], in_im2[0][j], tmp_re, tmp_im ); - out_re2[i][j] = tmp_re; - out_im2[i][j] = tmp_im; - IVAS_CMULT_FLOAT( in_re1[i][1], in_im1[i][1], - in_re2[1][j], in_im2[1][j], tmp_re, tmp_im ); - out_re2[i][j] += tmp_re; - out_im2[i][j] += tmp_im; - } - } - return; -} static void ivas_calc_mat_det_2by2_complex( float in_re[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float in_im[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float *det_re, @@ -286,17 +259,18 @@ static void ComputePostPredCov( } static void ComputeBandedCrossCov( - float Cldfb_RealBuffer1[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], - float Cldfb_ImagBuffer1[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], - float Cldfb_RealBuffer2[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], - float Cldfb_ImagBuffer2[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], + float Cldfb_RealBuffer1[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float Cldfb_ImagBuffer1[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float Cldfb_RealBuffer2[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float Cldfb_ImagBuffer2[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float out_cov_re[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float out_cov_im[BINAURAL_CHANNELS][BINAURAL_CHANNELS], - int16_t num_chs, + const int16_t num_chs, const int16_t *pBand_grouping, - int16_t num_subframes, - int16_t md_band_idx, - int16_t real_only ) + const int16_t num_slots, + const int16_t start_slot_idx, + const int16_t md_band_idx, + const int16_t real_only ) { int16_t sf, cldfb_band_idx, ch_idx1, ch_idx2; int16_t brange[2]; @@ -314,7 +288,7 @@ static void ComputeBandedCrossCov( { if ( real_only == 0 ) { - for ( sf = 0; sf < num_subframes; sf++ ) + for ( sf = start_slot_idx; sf < start_slot_idx + num_slots; sf++ ) { for ( cldfb_band_idx = brange[0]; cldfb_band_idx < brange[1]; cldfb_band_idx++ ) { @@ -330,7 +304,7 @@ static void ComputeBandedCrossCov( } else { - for ( sf = 0; sf < num_subframes; sf++ ) + for ( sf = start_slot_idx; sf < start_slot_idx + num_slots; sf++ ) { for ( cldfb_band_idx = brange[0]; cldfb_band_idx < brange[1]; cldfb_band_idx++ ) { @@ -350,15 +324,16 @@ static void ComputeBandedCrossCov( } static void ComputeBandedCov( - float Cldfb_RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], - float Cldfb_ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], + float Cldfb_RealBuffer[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float Cldfb_ImagBuffer[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float out_cov_re[][BINAURAL_CHANNELS], float out_cov_im[][BINAURAL_CHANNELS], - int16_t num_chs, + const int16_t num_chs, const int16_t *pBand_grouping, - int16_t num_subframes, - int16_t md_band_idx, - int16_t real_only ) + const int16_t num_slots, + const int16_t start_slot_idx, + const int16_t md_band_idx, + const int16_t real_only ) { int16_t sf, cldfb_band_idx, ch_idx1, ch_idx2; int16_t brange[2]; @@ -376,7 +351,7 @@ static void ComputeBandedCov( { if ( ( ch_idx2 != ch_idx1 ) && ( real_only == 0 ) ) { - for ( sf = 0; sf < num_subframes; sf++ ) + for ( sf = start_slot_idx; sf < start_slot_idx + num_slots; sf++ ) { for ( cldfb_band_idx = brange[0]; cldfb_band_idx < brange[1]; cldfb_band_idx++ ) { @@ -392,7 +367,7 @@ static void ComputeBandedCov( } else { - for ( sf = 0; sf < num_subframes; sf++ ) + for ( sf = start_slot_idx; sf < start_slot_idx + num_slots; sf++ ) { for ( cldfb_band_idx = brange[0]; cldfb_band_idx < brange[1]; cldfb_band_idx++ ) { @@ -473,53 +448,73 @@ static void ivas_split_rend_huffman_encode( static void ivas_split_rend_quant_md( BIN_HR_SPLIT_REND_MD_HANDLE hMd, + IVAS_SPLIT_REND_POSE_TYPE pose_type, int16_t real_only, float fix_pos_rot_mat[][BINAURAL_CHANNELS] ) { int16_t ch1, ch2; - for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + int16_t gd_idx_min; + float sign, quant_val; + + if ( pose_type == PRED_ONLY ) { - for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + if ( real_only == 1 ) { - hMd->pred_mat_re[ch1][ch2] -= fix_pos_rot_mat[ch1][ch2]; - hMd->pred_mat_re[ch1][ch2] = min( IVAS_SPLIT_REND_PRED_MAX_VAL, max( hMd->pred_mat_re[ch1][ch2], IVAS_SPLIT_REND_PRED_MIN_VAL ) ); + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + sign = ( hMd->pred_mat_re[ch1][ch2] >= 0.0f ) ? 1.0f : -1.0f; + IVAS_CALCULATE_ABS( hMd->pred_mat_re[ch1][ch2], hMd->pred_mat_im[ch1][ch2], hMd->pred_mat_re[ch1][ch2] ); + hMd->pred_mat_re[ch1][ch2] *= sign; + hMd->pred_mat_im[ch1][ch2] = 0.0f; + } + } } - } - if ( real_only == 0 ) - { for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) { for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) { - hMd->pred_mat_im[ch1][ch2] = min( IVAS_SPLIT_REND_PRED_MAX_VAL, max( hMd->pred_mat_im[ch1][ch2], IVAS_SPLIT_REND_PRED_MIN_VAL ) ); + quant_val = hMd->pred_mat_re[ch1][ch2] - fix_pos_rot_mat[ch1][ch2]; + quant_val = min( IVAS_SPLIT_REND_PRED_MAX_VAL, max( quant_val, IVAS_SPLIT_REND_PRED_MIN_VAL ) ); + hMd->pred_mat_re_idx[ch1][ch2] = (int16_t) roundf( IVAS_SPLIT_REND_PRED_1BYQ_STEP * quant_val ); + // hMd->pred_mat_re[ch1][ch2] = hMd->pred_mat_re_idx[ch1][ch2] * IVAS_SPLIT_REND_PRED_Q_STEP; } } + if ( real_only == 0 ) + { + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + quant_val = min( IVAS_SPLIT_REND_PRED_MAX_VAL, max( hMd->pred_mat_im[ch1][ch2], IVAS_SPLIT_REND_PRED_MIN_VAL ) ); + hMd->pred_mat_im_idx[ch1][ch2] = (int16_t) roundf( IVAS_SPLIT_REND_PRED_1BYQ_STEP * quant_val ); + // hMd->pred_mat_im[ch1][ch2] = hMd->pred_mat_im_idx[ch1][ch2] * IVAS_SPLIT_REND_PRED_Q_STEP; + } + } + } + } + else if ( pose_type == COM_GAIN_ONLY ) + { + quant_val = min( IVAS_SPLIT_REND_D_MAX_VAL, max( hMd->gd, IVAS_SPLIT_REND_D_MIN_VAL ) ); + gd_idx_min = (int16_t) roundf( IVAS_SPLIT_REND_D_1BYQ_STEP * IVAS_SPLIT_REND_D_MIN_VAL ); + hMd->gd_idx = (int16_t) roundf( IVAS_SPLIT_REND_D_1BYQ_STEP * quant_val ); + hMd->gd = hMd->gd_idx * IVAS_SPLIT_REND_D_Q_STEP; + hMd->gd_idx = hMd->gd_idx - gd_idx_min; + } + else if ( pose_type == LR_GAIN_ONLY ) + { + quant_val = min( IVAS_SPLIT_REND_PITCH_G_MAX_VAL, max( hMd->gd, IVAS_SPLIT_REND_PITCH_G_MIN_VAL ) ); + gd_idx_min = (int16_t) roundf( IVAS_SPLIT_REND_PITCH_G_1BYQ_STEP * IVAS_SPLIT_REND_PITCH_G_MIN_VAL ); + hMd->gd_idx = (int16_t) roundf( IVAS_SPLIT_REND_PITCH_G_1BYQ_STEP * quant_val ); + // hMd->gd = hMd->gd_idx * IVAS_SPLIT_REND_PITCH_G_Q_STEP; + hMd->gd_idx = hMd->gd_idx - gd_idx_min; + + quant_val = min( IVAS_SPLIT_REND_PITCH_G_MAX_VAL, max( hMd->gd2, IVAS_SPLIT_REND_PITCH_G_MIN_VAL ) ); + hMd->gd2_idx = (int16_t) roundf( IVAS_SPLIT_REND_PITCH_G_1BYQ_STEP * quant_val ); + // hMd->gd2 = hMd->gd2_idx * IVAS_SPLIT_REND_PITCH_G_Q_STEP; + hMd->gd2_idx = hMd->gd2_idx - gd_idx_min; } - hMd->gd = min( IVAS_SPLIT_REND_D_MAX_VAL, max( hMd->gd, IVAS_SPLIT_REND_D_MIN_VAL ) ); - - ivas_quantise_real_values( &hMd->pred_mat_re[0][0], - IVAS_SPLIT_REND_PRED_QUANT_PNTS, - IVAS_SPLIT_REND_PRED_MIN_VAL, - IVAS_SPLIT_REND_PRED_MAX_VAL, - &hMd->pred_mat_re_idx[0][0], - &hMd->pred_mat_re[0][0], - BINAURAL_CHANNELS * BINAURAL_CHANNELS ); - - ivas_quantise_real_values( &hMd->pred_mat_im[0][0], - IVAS_SPLIT_REND_PRED_QUANT_PNTS, - IVAS_SPLIT_REND_PRED_MIN_VAL, - IVAS_SPLIT_REND_PRED_MAX_VAL, - &hMd->pred_mat_im_idx[0][0], - &hMd->pred_mat_im[0][0], - BINAURAL_CHANNELS * BINAURAL_CHANNELS ); - - ivas_quantise_real_values( &hMd->gd, - IVAS_SPLIT_REND_D_QUANT_PNTS, - IVAS_SPLIT_REND_D_MIN_VAL, - IVAS_SPLIT_REND_D_MAX_VAL, - &hMd->gd_idx, - &hMd->gd, - 1 ); return; } @@ -532,7 +527,7 @@ static void ComputeCoeffs( float cov_io_im[][BINAURAL_CHANNELS], float cov_oo_re[][BINAURAL_CHANNELS], BIN_HR_SPLIT_REND_MD_HANDLE hMd, - float fix_pos_rot_mat[][BINAURAL_CHANNELS], + IVAS_SPLIT_REND_POSE_TYPE pose_type, int16_t real_only ) { float postpred_cov_re[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; @@ -546,328 +541,794 @@ static void ComputeCoeffs( float aa, bb, cc, dd, sign; int16_t i, j; - -#if 1 - - cov_norm_fact = GetNormFact( - cov_ii_re, - cov_ii_im, - cov_io_re, - cov_io_im, - cov_oo_re ); - - // normalize the covariance - for ( i = 0; i < BINAURAL_CHANNELS; i++ ) + if ( pose_type == PITCH_ONLY ) { - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) +#if 0 + float gd_tmp; + + gd_tmp = cov_ii_re[0][0] + cov_ii_re[1][1]; + if ( gd_tmp < EPSILON ) { - cov_ii_norm_re[i][j] = cov_ii_re[i][j] * cov_norm_fact; - cov_ii_norm_im[i][j] = cov_ii_im[i][j] * cov_norm_fact; - cov_io_norm_re[i][j] = cov_io_re[i][j] * cov_norm_fact; - cov_io_norm_im[i][j] = cov_io_im[i][j] * cov_norm_fact; - cov_oo_norm_re[i][j] = cov_oo_re[i][j] * cov_norm_fact; + hMd->gd = 1.0f; + } + else + { + gd_tmp = ( cov_oo_re[0][0] + cov_oo_re[1][1] ) / gd_tmp; + hMd->gd = sqrtf( gd_tmp ); } - } - - ComputePredMat( cov_ii_norm_re, - cov_ii_norm_im, - cov_io_norm_re, - cov_io_norm_im, - hMd->pred_mat_re, - hMd->pred_mat_im, - BINAURAL_CHANNELS, - real_only ); #else + float gd_tmp[BINAURAL_CHANNELS]; + + for ( i = 0; i < BINAURAL_CHANNELS; i++ ) + { + gd_tmp[i] = cov_ii_re[i][i]; + if ( gd_tmp[i] < EPSILON ) + { + gd_tmp[i] = 1.0f; + } + else + { + gd_tmp[i] = ( cov_oo_re[i][i] ) / gd_tmp[i]; + gd_tmp[i] = sqrtf( gd_tmp[i] ); + } + } + hMd->gd = gd_tmp[0]; + hMd->gd2 = gd_tmp[1]; #endif + } + else + { + cov_norm_fact = GetNormFact( + cov_ii_re, + cov_ii_im, + cov_io_re, + cov_io_im, + cov_oo_re ); + + // normalize the covariance + for ( i = 0; i < BINAURAL_CHANNELS; i++ ) + { + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + cov_ii_norm_re[i][j] = cov_ii_re[i][j] * cov_norm_fact; + cov_ii_norm_im[i][j] = cov_ii_im[i][j] * cov_norm_fact; + cov_io_norm_re[i][j] = cov_io_re[i][j] * cov_norm_fact; + cov_io_norm_im[i][j] = cov_io_im[i][j] * cov_norm_fact; + cov_oo_norm_re[i][j] = cov_oo_re[i][j] * cov_norm_fact; + } + } - /*TODO : change this function to real only as thats what is needed*/ - ComputePostPredCov( cov_ii_norm_re, + ComputePredMat( cov_ii_norm_re, cov_ii_norm_im, + cov_io_norm_re, + cov_io_norm_im, hMd->pred_mat_re, hMd->pred_mat_im, - postpred_cov_re, - postpred_cov_im, - BINAURAL_CHANNELS ); + BINAURAL_CHANNELS, + real_only ); - // normalize everything to +-1 range - for ( i = 0; i < BINAURAL_CHANNELS; i++ ) - { - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + + /*TODO : change this function to real only as thats what is needed*/ + ComputePostPredCov( cov_ii_norm_re, + cov_ii_norm_im, + hMd->pred_mat_re, + hMd->pred_mat_im, + postpred_cov_re, + postpred_cov_im, + BINAURAL_CHANNELS ); + + // normalize everything to +-1 range + gd = 1.0f / ( PCM16_TO_FLT_FAC ); + for ( i = 0; i < BINAURAL_CHANNELS; i++ ) { - postpred_cov_re[i][j] *= 1.0f / ( PCM16_TO_FLT_FAC ); - cov_ii_norm_re[i][j] = cov_ii_norm_re[i][j] * 1.0f / ( PCM16_TO_FLT_FAC ); - cov_oo_norm_re[i][j] = cov_oo_norm_re[i][j] * 1.0f / ( PCM16_TO_FLT_FAC ); + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + { + postpred_cov_re[i][j] *= gd; + cov_ii_norm_re[i][j] = cov_ii_norm_re[i][j] * gd; + cov_oo_norm_re[i][j] = cov_oo_norm_re[i][j] * gd; + } } - } - sigma_d = cov_ii_norm_re[0][0] + cov_ii_norm_re[1][1] + cov_ii_norm_re[0][1] + cov_ii_norm_re[1][0] + EPSILON; +#ifdef SPLIT_REND_ZERO_OUT_YAW_D + if ( 1 ) +#else + if ( pose_type != ANY_YAW ) +#endif + { + gd2 = 0.0f; + sigma_d = 0.0f; + hMd->gd = 0.0f; + } + else + { + + sigma_d = cov_ii_norm_re[0][0] + cov_ii_norm_re[1][1] + cov_ii_norm_re[0][1] + cov_ii_norm_re[1][0] + EPSILON; - rho_hat = max( EPSILON, sqrtf( postpred_cov_re[0][0] * postpred_cov_re[1][1] ) ); - rho_hat = postpred_cov_re[0][1] / rho_hat; - rho = max( EPSILON, sqrtf( cov_oo_norm_re[0][0] * cov_oo_norm_re[1][1] ) ); - rho = cov_oo_norm_re[0][1] / rho; - rho_hat = min( max( rho_hat, -0.9999f ), 0.9999f ); - rho = min( max( rho, -0.9999f ), 0.9999f ); + rho_hat = max( EPSILON, sqrtf( postpred_cov_re[0][0] * postpred_cov_re[1][1] ) ); + rho_hat = postpred_cov_re[0][1] / rho_hat; + rho = max( EPSILON, sqrtf( cov_oo_norm_re[0][0] * cov_oo_norm_re[1][1] ) ); + rho = cov_oo_norm_re[0][1] / rho; + rho_hat = min( max( rho_hat, -0.9999f ), 0.9999f ); + rho = min( max( rho, -0.9999f ), 0.9999f ); - // Compute decorrelator gain : gd2 = 0; - gd = 0; - gd2 = 0; + // Compute decorrelator gain : gd2 = 0; + gd = 0; + gd2 = 0; - aa = ( sigma_d * sigma_d ) * ( ( rho_hat * rho_hat ) - 1 ) + EPSILON; - bb = -( rho_hat * rho_hat ) * sigma_d * ( cov_oo_norm_re[0][0] + cov_oo_norm_re[1][1] ); - cc = ( rho_hat * rho_hat ) * cov_oo_norm_re[0][0] * cov_oo_norm_re[1][1]; - cc -= cov_oo_norm_re[0][1] * cov_oo_norm_re[0][1]; + aa = ( sigma_d * sigma_d ) * ( ( rho_hat * rho_hat ) - 1 ) + EPSILON; + bb = -( rho_hat * rho_hat ) * sigma_d * ( cov_oo_norm_re[0][0] + cov_oo_norm_re[1][1] ); + cc = ( rho_hat * rho_hat ) * cov_oo_norm_re[0][0] * cov_oo_norm_re[1][1]; + cc -= cov_oo_norm_re[0][1] * cov_oo_norm_re[0][1]; - sign = +1.0f; - if ( rho < ( rho_hat - 0.0001 ) ) - { - bb -= 2 * sigma_d * cov_oo_norm_re[0][1]; - sign = -1.0f; - } - else if ( rho > ( rho_hat + 0.0001 ) ) - { - bb += 2 * sigma_d * cov_oo_norm_re[0][1]; - } - dd = bb * bb - ( 4 * aa * cc ); - if ( dd >= 0 ) - { - float gd2_1, gd2_2; - gd2_1 = ( -bb + sqrtf( dd ) ) / ( 2 * aa ); - gd2_2 = ( -bb - sqrtf( dd ) ) / ( 2 * aa ); - if ( ( gd2_1 >= 0 ) && ( gd2_2 >= 0 ) ) + sign = +1.0f; + if ( rho < ( rho_hat - 0.0001 ) ) + { + bb -= 2 * sigma_d * cov_oo_norm_re[0][1]; + sign = -1.0f; + } + else if ( rho > ( rho_hat + 0.0001 ) ) + { + bb += 2 * sigma_d * cov_oo_norm_re[0][1]; + } + dd = bb * bb - ( 4 * aa * cc ); + if ( dd >= 0 ) + { + float gd2_1, gd2_2; + gd2_1 = ( -bb + sqrtf( dd ) ) / ( 2 * aa ); + gd2_2 = ( -bb - sqrtf( dd ) ) / ( 2 * aa ); + if ( ( gd2_1 >= 0 ) && ( gd2_2 >= 0 ) ) + { + gd2 = min( gd2_1, gd2_2 ); + } + else + { + gd2 = max( 0, max( gd2_1, gd2_2 ) ); + } + gd = sign * sqrtf( gd2 ); + } + + gd = min( IVAS_SPLIT_REND_D_MAX_VAL, max( gd, IVAS_SPLIT_REND_D_MIN_VAL ) ); + hMd->gd = SPLIT_REND_DECOR_ALPHA * gd + ( 1 - SPLIT_REND_DECOR_ALPHA ) * hMd->gd; + gd2 = min( gd2, cov_oo_norm_re[0][0] / sigma_d ); + gd2 = min( gd2, cov_oo_norm_re[1][1] / sigma_d ); + } + + if ( postpred_cov_re[0][0] > EPSILON ) + { + gl2 = ( cov_oo_norm_re[0][0] - ( gd2 * sigma_d ) ) / max( EPSILON, postpred_cov_re[0][0] ); + gl2 = max( gl2, 1.0f ); + gl2 = sqrtf( gl2 ); + } + else + { + gl2 = 1.0f; + } + if ( postpred_cov_re[1][1] > EPSILON ) { - gd2 = min( gd2_1, gd2_2 ); + gr2 = ( cov_oo_norm_re[1][1] - ( gd2 * sigma_d ) ) / max( EPSILON, postpred_cov_re[1][1] ); + gr2 = max( gr2, 1.0f ); + gr2 = sqrtf( gr2 ); } else { - gd2 = max( 0, max( gd2_1, gd2_2 ) ); + gr2 = 1.0f; + } + + for ( i = 0; i < BINAURAL_CHANNELS; i++ ) + { + hMd->pred_mat_re[i][0] *= gl2; + hMd->pred_mat_re[i][1] *= gr2; + } + if ( real_only == 0 ) + { + for ( i = 0; i < BINAURAL_CHANNELS; i++ ) + { + hMd->pred_mat_im[i][0] *= gl2; + hMd->pred_mat_im[i][1] *= gr2; + } } - gd = sign * sqrtf( gd2 ); } + return; +} - gd = min( 1.0f, max( gd, 0.0f ) ); - hMd->gd = SPLIT_REND_DECOR_ALPHA * gd + ( 1 - SPLIT_REND_DECOR_ALPHA ) * hMd->gd; - gd2 = min( gd2, cov_oo_norm_re[0][0] / sigma_d ); - gd2 = min( gd2, cov_oo_norm_re[1][1] / sigma_d ); +static void get_base2_bits( + const BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend, + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, + const int16_t num_subframes, + const int16_t num_quant_strats, + const int16_t pred_real_bands_yaw[IVAS_SPLIT_REND_NUM_QUANT_STRATS], + const int16_t pred_imag_bands_yaw[IVAS_SPLIT_REND_NUM_QUANT_STRATS], + const int16_t d_bands_yaw[IVAS_SPLIT_REND_NUM_QUANT_STRATS], + const int16_t bands_pitch[IVAS_SPLIT_REND_NUM_QUANT_STRATS], + const int16_t pred_real_bands_roll[IVAS_SPLIT_REND_NUM_QUANT_STRATS], + const int16_t pred_imag_bands_roll[IVAS_SPLIT_REND_NUM_QUANT_STRATS], + int32_t base2bits[IVAS_SPLIT_REND_NUM_QUANT_STRATS] ) +{ + int16_t pred_bits, d_gain_bits, pitch_gain_bits, pose_idx, q; + IVAS_SPLIT_REND_POSE_TYPE pose_type; + pred_bits = (int16_t) ceilf( log2f( IVAS_SPLIT_REND_PRED_QUANT_PNTS ) ); + d_gain_bits = (int16_t) ceilf( log2f( IVAS_SPLIT_REND_D_QUANT_PNTS ) ); + pitch_gain_bits = d_gain_bits; - if ( postpred_cov_re[0][0] > EPSILON ) - { - gl2 = ( cov_oo_norm_re[0][0] - ( gd2 * sigma_d ) ) / max( EPSILON, postpred_cov_re[0][0] ); - gl2 = max( gl2, 1.0f ); - gl2 = sqrtf( gl2 ); - } - else + for ( q = 0; q < num_quant_strats; q++ ) { - gl2 = 1.0f; - } - if ( postpred_cov_re[1][1] > EPSILON ) - { - gr2 = ( cov_oo_norm_re[1][1] - ( gd2 * sigma_d ) ) / max( EPSILON, postpred_cov_re[1][1] ); - gr2 = max( gr2, 1.0f ); - gr2 = sqrtf( gr2 ); - } - else - { - gr2 = 1.0f; + base2bits[q] = 0; } - for ( i = 0; i < BINAURAL_CHANNELS; i++ ) + for ( q = 0; q < num_quant_strats; q++ ) { - hMd->pred_mat_re[i][0] *= gl2; - hMd->pred_mat_re[i][0] = min( 2.0f, max( hMd->pred_mat_re[i][0], -2.0f ) ); - - hMd->pred_mat_re[i][1] *= gr2; - hMd->pred_mat_re[i][1] = min( 2.0f, max( hMd->pred_mat_re[i][1], -2.0f ) ); - } - if ( real_only == 0 ) - { - for ( i = 0; i < BINAURAL_CHANNELS; i++ ) + for ( pose_idx = 0; pose_idx < pMultiBinPoseData->num_poses - 1; pose_idx++ ) { - hMd->pred_mat_im[i][0] *= gl2; - hMd->pred_mat_im[i][0] = min( 2.0f, max( hMd->pred_mat_im[i][0], -2.0f ) ); - - hMd->pred_mat_im[i][1] *= gr2; - hMd->pred_mat_im[i][1] = min( 2.0f, max( hMd->pred_mat_im[i][1], -2.0f ) ); + pose_type = hBinHrSplitPreRend->pose_type[pose_idx]; + if ( pose_type == ANY_YAW ) + { + base2bits[q] += pred_bits * pred_real_bands_yaw[q] * num_subframes * BINAURAL_CHANNELS * BINAURAL_CHANNELS; + base2bits[q] += pred_bits * pred_imag_bands_yaw[q] * num_subframes * BINAURAL_CHANNELS * BINAURAL_CHANNELS; + base2bits[q] += d_gain_bits * d_bands_yaw[q] * num_subframes; + } + else if ( pose_type == PITCH_ONLY ) + { + base2bits[q] += pitch_gain_bits * bands_pitch[q] * num_subframes; + base2bits[q] += pitch_gain_bits * bands_pitch[q] * num_subframes; + } + else + { + base2bits[q] += pred_bits * pred_real_bands_roll[q] * num_subframes * BINAURAL_CHANNELS * BINAURAL_CHANNELS; + base2bits[q] += pred_bits * pred_imag_bands_roll[q] * num_subframes * BINAURAL_CHANNELS * BINAURAL_CHANNELS; + } } } - ivas_split_rend_quant_md( hMd, real_only, fix_pos_rot_mat ); return; } static void ivas_SplitRenderer_code_md_base2( - BIN_HR_SPLIT_REND_MD rot_md[MAX_HEAD_ROT_POSES - 1][MAX_PARAM_SPATIAL_SUBFRAMES][MAX_SPLIT_REND_MD_BANDS], - BIN_HR_SPLIT_REND_HUFF_HANDLE pHuff_cfg, - ivas_split_rend_bits_t *pBits, - int16_t sf_idx, - int16_t num_md_bands ) + const BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend, + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, + const int16_t num_subframes, + const int16_t pred_real_bands_yaw, + const int16_t pred_imag_bands_yaw, + const int16_t d_bands_yaw, + const int16_t bands_pitch, + const int16_t pred_real_bands_roll, + const int16_t pred_imag_bands_roll, + ivas_split_rend_bits_t *pBits ) { - int16_t real_only, pos_idx, b, ch1, ch2; - int16_t min_pred_idx, min_gd_idx, pred_code_len, gd_code_len; + int16_t pos_idx, b, ch1, ch2, sf_idx; + int16_t min_pred_idx, min_gd_idx, min_p_gd_idx, pred_code_len, gd_code_len, p_gd_code_len, num_poses; int32_t code; BIN_HR_SPLIT_REND_MD_HANDLE hMd; + BIN_HR_SPLIT_REND_HUFF_HANDLE pHuff_cfg; + pHuff_cfg = &hBinHrSplitPreRend->huff_cfg; min_pred_idx = (int16_t) pHuff_cfg->pred.codebook[0]; min_gd_idx = (int16_t) pHuff_cfg->gd.codebook[0]; + min_p_gd_idx = (int16_t) pHuff_cfg->p_gd.codebook[0]; pred_code_len = pHuff_cfg->pred_base2_code_len; gd_code_len = pHuff_cfg->gd_base2_code_len; + p_gd_code_len = pHuff_cfg->p_gd_base2_code_len; + + num_poses = pMultiBinPoseData->num_poses; - for ( b = 0; b < num_md_bands; b++ ) + for ( sf_idx = 0; sf_idx < num_subframes; sf_idx++ ) { - if ( b < COMPLEX_MD_BAND_THRESH ) - { - real_only = 0; - } - else + for ( pos_idx = 0; pos_idx < num_poses - 1; pos_idx++ ) { - real_only = 1; - } + if ( hBinHrSplitPreRend->pose_type[pos_idx] == ANY_YAW ) + { + for ( b = 0; b < pred_real_bands_yaw; b++ ) + { + hMd = &hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b]; + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + code = hMd->pred_mat_re_idx[ch1][ch2] - min_pred_idx; + ivas_split_rend_bitstream_write_int32( pBits, code, pred_code_len ); + } + } + } - for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES - 1; pos_idx++ ) - { - hMd = &rot_md[pos_idx][sf_idx][b]; - for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + for ( b = 0; b < pred_imag_bands_yaw; b++ ) + { + hMd = &hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b]; + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + code = hMd->pred_mat_im_idx[ch1][ch2] - min_pred_idx; + ivas_split_rend_bitstream_write_int32( pBits, code, pred_code_len ); + } + } + } + for ( b = 0; b < d_bands_yaw; b++ ) + { + hMd = &hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b]; + code = hMd->gd_idx - min_gd_idx; + ivas_split_rend_bitstream_write_int32( pBits, code, gd_code_len ); + } + } + else if ( hBinHrSplitPreRend->pose_type[pos_idx] == PITCH_ONLY ) { - for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + for ( b = 0; b < bands_pitch; b++ ) { - code = hMd->pred_mat_re_idx[ch1][ch2] - min_pred_idx; - ivas_split_rend_bitstream_write_int32( pBits, code, pred_code_len ); + hMd = &hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b]; + code = hMd->gd_idx - min_p_gd_idx; + ivas_split_rend_bitstream_write_int32( pBits, code, p_gd_code_len ); + + code = hMd->gd2_idx - min_p_gd_idx; + ivas_split_rend_bitstream_write_int32( pBits, code, p_gd_code_len ); } } - if ( real_only == 0 ) + else { - for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + for ( b = 0; b < pred_real_bands_roll; b++ ) + { + hMd = &hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b]; + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + code = hMd->pred_mat_re_idx[ch1][ch2] - min_pred_idx; + ivas_split_rend_bitstream_write_int32( pBits, code, pred_code_len ); + } + } + } + + for ( b = 0; b < pred_imag_bands_roll; b++ ) { - for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + hMd = &hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b]; + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) { - code = hMd->pred_mat_im_idx[ch1][ch2] - min_pred_idx; - ivas_split_rend_bitstream_write_int32( pBits, code, pred_code_len ); + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + code = hMd->pred_mat_im_idx[ch1][ch2] - min_pred_idx; + ivas_split_rend_bitstream_write_int32( pBits, code, pred_code_len ); + } } } } - code = hMd->gd_idx - min_gd_idx; - ivas_split_rend_bitstream_write_int32( pBits, code, gd_code_len ); } } #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG { static int num_bits = 0; - static int cntr = 0, sh_cnt = 0; + static int cntr = 0; float fnum_bits; cntr++; - sh_cnt++; - if ( sh_cnt == MAX_PARAM_SPATIAL_SUBFRAMES ) + num_bits += pBits->bits_written; + // collect bits for every second + if ( cntr == 50 ) { - num_bits += pBits->bits_written; - // collect bits for every second - if ( cntr == 200 ) - { - cntr = 0; - fnum_bits = (float) num_bits / 1000.0f; - dbgwrite_txt( &fnum_bits, 1, "split_rend_MD_bitrate.txt", "MD bitrate (kbps)" ); - num_bits = 0; - } - sh_cnt = 0; + cntr = 0; + fnum_bits = (float) num_bits / 1000.0f; + dbgwrite_txt( &fnum_bits, 1, "split_rend_MD_bitrate.txt", "MD bitrate (kbps)" ); + num_bits = 0; } } #endif return; } -static void ivas_SplitRenderer_code_md( - BIN_HR_SPLIT_REND_MD rot_md[MAX_HEAD_ROT_POSES - 1][MAX_PARAM_SPATIAL_SUBFRAMES][MAX_SPLIT_REND_MD_BANDS], - BIN_HR_SPLIT_REND_HUFF_HANDLE pHuff_cfg, - ivas_split_rend_bits_t *pBits, - int16_t sf_idx, - int16_t num_md_bands ) +static void ivas_SplitRenderer_code_md_huff( + const BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend, + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, + const int16_t num_subframes, + const int16_t pred_real_bands_yaw, + const int16_t pred_imag_bands_yaw, + const int16_t d_bands_yaw, + const int16_t bands_pitch, + const int16_t pred_real_bands_roll, + const int16_t pred_imag_bands_roll, + ivas_split_rend_bits_t *pBits ) { - int16_t real_only, pos_idx, b, ch1, ch2; + int16_t pos_idx, b, ch1, ch2, sf_idx, num_poses; int16_t sym_adj_idx[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; int16_t min_pred_idx, max_pred_idx; int32_t code, len; BIN_HR_SPLIT_REND_MD_HANDLE hMd; - + BIN_HR_SPLIT_REND_HUFF_HANDLE pHuff_cfg; + pHuff_cfg = &hBinHrSplitPreRend->huff_cfg; min_pred_idx = (int16_t) pHuff_cfg->pred.codebook[0]; max_pred_idx = (int16_t) pHuff_cfg->pred.codebook[( IVAS_SPLIT_REND_PRED_QUANT_PNTS - 1 ) * 3]; - real_only = 0; - for ( b = 0; b < num_md_bands; b++ ) - { - if ( b < COMPLEX_MD_BAND_THRESH ) - { - real_only = 0; - } - else - { - real_only = 1; - } - for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES - 1; pos_idx++ ) - { - hMd = &rot_md[pos_idx][sf_idx][b]; + num_poses = pMultiBinPoseData->num_poses; - ivas_SplitRenderer_getdiagdiff( hMd->pred_mat_re_idx, sym_adj_idx, -1, min_pred_idx, max_pred_idx ); - for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + for ( sf_idx = 0; sf_idx < num_subframes; sf_idx++ ) + { + for ( pos_idx = 0; pos_idx < num_poses - 1; pos_idx++ ) + { + if ( hBinHrSplitPreRend->pose_type[pos_idx] == ANY_YAW ) { - for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + for ( b = 0; b < pred_real_bands_yaw; b++ ) + { + hMd = &hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b]; + ivas_SplitRenderer_getdiagdiff( hMd->pred_mat_re_idx, sym_adj_idx, -1, min_pred_idx, max_pred_idx ); + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + ivas_split_rend_huffman_encode( &pHuff_cfg->pred, sym_adj_idx[ch1][ch2], &code, &len ); + ivas_split_rend_bitstream_write_int32( pBits, code, len ); + } + } + } + for ( b = 0; b < pred_imag_bands_yaw; b++ ) + { + hMd = &hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b]; + ivas_SplitRenderer_getdiagdiff( hMd->pred_mat_im_idx, sym_adj_idx, 1, min_pred_idx, max_pred_idx ); + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + ivas_split_rend_huffman_encode( &pHuff_cfg->pred, sym_adj_idx[ch1][ch2], &code, &len ); + ivas_split_rend_bitstream_write_int32( pBits, code, len ); + } + } + } + for ( b = 0; b < d_bands_yaw; b++ ) { - ivas_split_rend_huffman_encode( &pHuff_cfg->pred, sym_adj_idx[ch1][ch2], &code, &len ); + hMd = &hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b]; + ivas_split_rend_huffman_encode( &pHuff_cfg->gd, hMd->gd_idx, &code, &len ); ivas_split_rend_bitstream_write_int32( pBits, code, len ); } } - if ( real_only == 0 ) + else if ( hBinHrSplitPreRend->pose_type[pos_idx] == PITCH_ONLY ) + { + for ( b = 0; b < bands_pitch; b++ ) + { + hMd = &hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b]; + ivas_split_rend_huffman_encode( &pHuff_cfg->p_gd, hMd->gd_idx, &code, &len ); + ivas_split_rend_bitstream_write_int32( pBits, code, len ); + + ivas_split_rend_huffman_encode( &pHuff_cfg->p_gd, hMd->gd2_idx, &code, &len ); + ivas_split_rend_bitstream_write_int32( pBits, code, len ); + } + } + else { - ivas_SplitRenderer_getdiagdiff( hMd->pred_mat_im_idx, sym_adj_idx, 1, min_pred_idx, max_pred_idx ); - for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + for ( b = 0; b < pred_real_bands_roll; b++ ) { - for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + hMd = &hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b]; + ivas_SplitRenderer_getdiagdiff( hMd->pred_mat_re_idx, sym_adj_idx, -1, min_pred_idx, max_pred_idx ); + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) { - ivas_split_rend_huffman_encode( &pHuff_cfg->pred, sym_adj_idx[ch1][ch2], &code, &len ); - ivas_split_rend_bitstream_write_int32( pBits, code, len ); + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + ivas_split_rend_huffman_encode( &pHuff_cfg->pred, sym_adj_idx[ch1][ch2], &code, &len ); + ivas_split_rend_bitstream_write_int32( pBits, code, len ); + } + } + } + for ( b = 0; b < pred_imag_bands_roll; b++ ) + { + hMd = &hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b]; + ivas_SplitRenderer_getdiagdiff( hMd->pred_mat_im_idx, sym_adj_idx, 1, min_pred_idx, max_pred_idx ); + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + ivas_split_rend_huffman_encode( &pHuff_cfg->pred, sym_adj_idx[ch1][ch2], &code, &len ); + ivas_split_rend_bitstream_write_int32( pBits, code, len ); + } } } } - ivas_split_rend_huffman_encode( &pHuff_cfg->gd, hMd->gd_idx, &code, &len ); - ivas_split_rend_bitstream_write_int32( pBits, code, len ); } } #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG { static int num_bits = 0; - static int cntr = 0, sh_cnt = 0; + static int cntr = 0; float fnum_bits; cntr++; - sh_cnt++; + num_bits += pBits->bits_written; + // collect bits for every second + if ( cntr == 50 ) + { + cntr = 0; + fnum_bits = (float) num_bits / 1000.0f; + dbgwrite_txt( &fnum_bits, 1, "split_rend_MD_bitrate.txt", "MD bitrate (kbps)" ); + num_bits = 0; + } + } +#endif + return; +} + +static void ivas_SplitRenderer_quant_code( + const BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend, + const IVAS_QUATERNION headPositions[MAX_PARAM_SPATIAL_SUBFRAMES], + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, + ivas_split_rend_bits_t *pBits, + const int16_t low_res_pre_rend_rot, + const int32_t target_md_bits ) +{ + int16_t num_complex_bands, q, num_subframes, sf_idx, pos_idx, b, num_quant_strats; + int32_t overhead_bits, quant_strat_bits, huff_bits, start_bit; + int16_t pred_real_bands_yaw[IVAS_SPLIT_REND_NUM_QUANT_STRATS], pred_real_bands_roll[IVAS_SPLIT_REND_NUM_QUANT_STRATS]; + int16_t pred_imag_bands_yaw[IVAS_SPLIT_REND_NUM_QUANT_STRATS], pred_imag_bands_roll[IVAS_SPLIT_REND_NUM_QUANT_STRATS]; + int16_t d_bands_yaw[IVAS_SPLIT_REND_NUM_QUANT_STRATS], bands_pitch[IVAS_SPLIT_REND_NUM_QUANT_STRATS]; + int32_t base2bits[IVAS_SPLIT_REND_NUM_QUANT_STRATS]; + BIN_HR_SPLIT_REND_MD_HANDLE hMd; + + if ( low_res_pre_rend_rot ) + { + num_subframes = 1; + } + else + { + num_subframes = MAX_PARAM_SPATIAL_SUBFRAMES; + } + + overhead_bits = pBits->bits_written; + + // ivas_split_rend_bitstream_write_int32( pBits, low_res_pre_rend_rot, 1 ); + ivas_split_rend_bitstream_write_int32( pBits, pMultiBinPoseData->dof, IVAS_SPLIT_REND_DOF_BITS ); + ivas_split_rend_bitstream_write_int32( pBits, pMultiBinPoseData->hq_mode, IVAS_SPLIT_REND_HQ_MODE_BITS ); + ivas_split_rend_bitstream_write_int32( pBits, (int32_t) pMultiBinPoseData->rot_axis, IVAS_SPLIT_REND_ROT_AXIS_BITS ); + + /* code ref pose*/ + for ( sf_idx = 0; sf_idx < num_subframes; sf_idx++ ) + { + int16_t angle; + IVAS_QUATERNION head_pos_euler; + Quat2EulerDegree( headPositions[sf_idx], &head_pos_euler.z, &head_pos_euler.y, &head_pos_euler.x ); + angle = (int16_t) roundf( head_pos_euler.x ); + angle += 180; + ivas_split_rend_bitstream_write_int32( pBits, angle, IVAS_SPLIT_REND_HEAD_POSE_BITS ); + + angle = (int16_t) roundf( head_pos_euler.y ); + angle += 180; + ivas_split_rend_bitstream_write_int32( pBits, angle, IVAS_SPLIT_REND_HEAD_POSE_BITS ); + + angle = (int16_t) roundf( head_pos_euler.z ); + angle += 180; + ivas_split_rend_bitstream_write_int32( pBits, angle, IVAS_SPLIT_REND_HEAD_POSE_BITS ); + } - if ( sh_cnt == MAX_PARAM_SPATIAL_SUBFRAMES ) + ivas_split_rend_get_quant_params( + MAX_SPLIT_REND_MD_BANDS, + pred_real_bands_yaw, + pred_imag_bands_yaw, + d_bands_yaw, + bands_pitch, + pred_real_bands_roll, + pred_imag_bands_roll, + &num_quant_strats, + &num_complex_bands ); + quant_strat_bits = (int32_t) ceilf( log2f( num_quant_strats ) ); + + overhead_bits = pBits->bits_written - overhead_bits + quant_strat_bits + 1; // 1 for base2 vs huff + get_base2_bits( + hBinHrSplitPreRend, + pMultiBinPoseData, + num_subframes, + num_quant_strats, + pred_real_bands_yaw, + pred_imag_bands_yaw, + d_bands_yaw, + bands_pitch, + pred_real_bands_roll, + pred_imag_bands_roll, + base2bits ); + + for ( q = 0; q < num_quant_strats; q++ ) + { + for ( sf_idx = 0; sf_idx < num_subframes; sf_idx++ ) { - num_bits += pBits->bits_written; - // collect bits for every second - if ( cntr == 200 ) + for ( pos_idx = 0; pos_idx < pMultiBinPoseData->num_poses - 1; pos_idx++ ) { - cntr = 0; - fnum_bits = (float) num_bits / 1000.0f; - dbgwrite_txt( &fnum_bits, 1, "split_rend_MD_bitrate.txt", "MD bitrate (kbps)" ); - num_bits = 0; + if ( hBinHrSplitPreRend->pose_type[pos_idx] == ANY_YAW ) + { + for ( b = 0; b < pred_imag_bands_yaw[q]; b++ ) + { + hMd = &hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b]; + ivas_split_rend_quant_md( hMd, + PRED_ONLY, + 0, hBinHrSplitPreRend->fix_pos_rot_mat[pos_idx] ); + } + for ( ; b < pred_real_bands_yaw[q]; b++ ) + { + hMd = &hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b]; + ivas_split_rend_quant_md( hMd, + PRED_ONLY, + 1, hBinHrSplitPreRend->fix_pos_rot_mat[pos_idx] ); + } + for ( b = 0; b < d_bands_yaw[q]; b++ ) + { + hMd = &hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b]; + ivas_split_rend_quant_md( hMd, + COM_GAIN_ONLY, + 1, hBinHrSplitPreRend->fix_pos_rot_mat[pos_idx] ); + } + } + else if ( hBinHrSplitPreRend->pose_type[pos_idx] == PITCH_ONLY ) + { + for ( b = 0; b < bands_pitch[q]; b++ ) + { + hMd = &hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b]; + ivas_split_rend_quant_md( hMd, + LR_GAIN_ONLY, + 1, hBinHrSplitPreRend->fix_pos_rot_mat[pos_idx] ); + } + } + else + { + for ( b = 0; b < pred_imag_bands_roll[q]; b++ ) + { + hMd = &hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b]; + ivas_split_rend_quant_md( hMd, + PRED_ONLY, + 0, hBinHrSplitPreRend->fix_pos_rot_mat[pos_idx] ); + } + for ( ; b < pred_real_bands_roll[q]; b++ ) + { + hMd = &hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b]; + ivas_split_rend_quant_md( hMd, + PRED_ONLY, + 1, hBinHrSplitPreRend->fix_pos_rot_mat[pos_idx] ); + } + } + } + } + + /*get base2 bits and check if its within target. if yes then code with base2 to save complexity on post renderer*/ +#if 0 + if ( target_md_bits >= ( base2bits[q] + overhead_bits ) ) + { + ivas_split_rend_bitstream_write_int32( pBits, 0, 1 ); + ivas_split_rend_bitstream_write_int32( pBits, q, quant_strat_bits ); + ivas_SplitRenderer_code_md_base2( + hBinHrSplitPreRend, + pMultiBinPoseData, + num_subframes, + pred_real_bands_yaw[q], + pred_imag_bands_yaw[q], + d_bands_yaw[q], + bands_pitch[q], + pred_real_bands_roll[q], + pred_imag_bands_roll[q], + pBits ); + break; + } + else +#endif + { + start_bit = pBits->bits_written; + ivas_split_rend_bitstream_write_int32( pBits, 1, 1 ); + ivas_split_rend_bitstream_write_int32( pBits, q, quant_strat_bits ); + huff_bits = pBits->bits_written; + ivas_SplitRenderer_code_md_huff( + hBinHrSplitPreRend, + pMultiBinPoseData, + num_subframes, + pred_real_bands_yaw[q], + pred_imag_bands_yaw[q], + d_bands_yaw[q], + bands_pitch[q], + pred_real_bands_roll[q], + pred_imag_bands_roll[q], + pBits ); + huff_bits = pBits->bits_written - huff_bits; + if ( ( target_md_bits >= ( base2bits[q] + overhead_bits ) ) || ( target_md_bits >= ( huff_bits + overhead_bits ) ) || ( q == ( num_quant_strats - 1 ) ) ) + { + if ( huff_bits > base2bits[q] ) + { + pBits->bits_written = start_bit; + ivas_split_rend_bitstream_write_int32( pBits, 0, 1 ); + ivas_split_rend_bitstream_write_int32( pBits, q, quant_strat_bits ); + ivas_SplitRenderer_code_md_base2( + hBinHrSplitPreRend, + pMultiBinPoseData, + num_subframes, + pred_real_bands_yaw[q], + pred_imag_bands_yaw[q], + d_bands_yaw[q], + bands_pitch[q], + pred_real_bands_roll[q], + pred_imag_bands_roll[q], + pBits ); + } + break; + } + pBits->bits_written = start_bit; + } + } + +#ifdef SPLIT_MD_CODING_DEBUG + for ( sf_idx = 0; sf_idx < num_subframes; sf_idx++ ) + { + int16_t val, quant_strat, ch1, ch2; + char filename[200] = "split_md_debug_indices.bin"; + quant_strat = q; + for ( pos_idx = 0; pos_idx < pMultiBinPoseData->num_poses - 1; pos_idx++ ) + { + if ( hBinHrSplitPreRend->pose_type[pos_idx] == ANY_YAW ) + { + for ( b = 0; b < pred_real_bands_yaw[quant_strat]; b++ ) + { + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + val = hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b].pred_mat_re_idx[ch1][ch2]; + dbgwrite( &val, sizeof( int16_t ), 1, 1, filename ); + } + } + } + for ( b = 0; b < pred_imag_bands_yaw[quant_strat]; b++ ) + { + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + val = hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b].pred_mat_im_idx[ch1][ch2]; + dbgwrite( &val, sizeof( int16_t ), 1, 1, filename ); + } + } + } + for ( b = 0; b < d_bands_yaw[quant_strat]; b++ ) + { + val = hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b].gd_idx; + dbgwrite( &val, sizeof( int16_t ), 1, 1, filename ); + } + } + else if ( hBinHrSplitPreRend->pose_type[pos_idx] == PITCH_ONLY ) + { + for ( b = 0; b < bands_pitch[quant_strat]; b++ ) + { + val = hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b].gd_idx; + dbgwrite( &val, sizeof( int16_t ), 1, 1, filename ); + val = hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b].gd2_idx; + dbgwrite( &val, sizeof( int16_t ), 1, 1, filename ); + } + } + else + { + for ( b = 0; b < pred_real_bands_roll[quant_strat]; b++ ) + { + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + val = hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b].pred_mat_re_idx[ch1][ch2]; + dbgwrite( &val, sizeof( int16_t ), 1, 1, filename ); + } + } + } + for ( b = 0; b < pred_imag_bands_roll[quant_strat]; b++ ) + { + for ( ch1 = 0; ch1 < BINAURAL_CHANNELS; ch1++ ) + { + for ( ch2 = 0; ch2 < BINAURAL_CHANNELS; ch2++ ) + { + val = hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b].pred_mat_im_idx[ch1][ch2]; + dbgwrite( &val, sizeof( int16_t ), 1, 1, filename ); + } + } + } } - sh_cnt = 0; } } #endif + return; } + void ivas_SplitRenderer_GetRotMd( - BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend, /* i/o: binaural renderer handle */ - float Cldfb_RealBuffer_Ref_Binaural[][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : Reference Binaural signals */ - float Cldfb_ImagBuffer_Ref_Binaural[][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : Reference Binaural signals */ - ivas_split_rend_bits_t *pBits, - int16_t sf_idx ) + BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend, /* i/o: binaural renderer handle */ + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, + float Cldfb_RealBuffer_Ref_Binaural[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* o : Reference Binaural signals */ + float Cldfb_ImagBuffer_Ref_Binaural[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* o : Reference Binaural signals */ + int16_t low_res ) { float cov_ii_re[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; float cov_oo_re[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; @@ -877,110 +1338,112 @@ void ivas_SplitRenderer_GetRotMd( float cov_io_im[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; int16_t real_only = 0; - int16_t pos_idx, b; - int16_t yaw_idx; - int16_t num_md_bands; + int16_t pos_idx, b, sf_idx, start_slot_idx, num_slots, num_subframes; + int16_t num_md_bands, num_poses; const int16_t *pBand_grouping = SplitRend_band_grouping; num_md_bands = MAX_SPLIT_REND_MD_BANDS; wmops_sub_start( "ivas_SplitRenderer_GetRotMd" ); + num_poses = pMultiBinPoseData->num_poses; + + if ( low_res ) + { + num_slots = CLDFB_NO_COL_MAX; + num_subframes = 1; + } + else + { + num_slots = MAX_PARAM_SPATIAL_SUBFRAMES; + num_subframes = MAX_PARAM_SPATIAL_SUBFRAMES; + } /*compute reference signal covariance*/ - for ( b = 0; b < num_md_bands; b++ ) + for ( sf_idx = 0; sf_idx < num_subframes; sf_idx++ ) { - if ( b < COMPLEX_MD_BAND_THRESH ) - { - real_only = 0; - } - else + start_slot_idx = sf_idx * num_slots; + for ( b = 0; b < num_md_bands; b++ ) { - real_only = 1; - } - ComputeBandedCov( Cldfb_RealBuffer_Ref_Binaural[0], - Cldfb_ImagBuffer_Ref_Binaural[0], - cov_ii_re, cov_ii_im, - BINAURAL_CHANNELS, - pBand_grouping, - MAX_PARAM_SPATIAL_SUBFRAMES, b, real_only ); - - /*compute rotated signal covariance*/ - for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES - 1; pos_idx++ ) - { - ComputeBandedCrossCov( Cldfb_RealBuffer_Ref_Binaural[0], - Cldfb_ImagBuffer_Ref_Binaural[0], - Cldfb_RealBuffer_Ref_Binaural[pos_idx + 1], - Cldfb_ImagBuffer_Ref_Binaural[pos_idx + 1], - cov_io_re, cov_io_im, - BINAURAL_CHANNELS, - pBand_grouping, - MAX_PARAM_SPATIAL_SUBFRAMES, b, real_only ); - - ComputeBandedCov( Cldfb_RealBuffer_Ref_Binaural[pos_idx + 1], - Cldfb_ImagBuffer_Ref_Binaural[pos_idx + 1], - cov_oo_re, cov_oo_im, + if ( b < COMPLEX_MD_BAND_THRESH ) + { + real_only = 0; + } + else + { + real_only = 1; + } + ComputeBandedCov( Cldfb_RealBuffer_Ref_Binaural[0], + Cldfb_ImagBuffer_Ref_Binaural[0], + cov_ii_re, cov_ii_im, BINAURAL_CHANNELS, pBand_grouping, - MAX_PARAM_SPATIAL_SUBFRAMES, b, real_only ); - - yaw_idx = ( pos_idx / ( MAX_PITCH_ANGLES * MAX_ROLL_ANGLES ) ); - ComputeCoeffs( cov_ii_re, - cov_ii_im, - cov_io_re, - cov_io_im, - cov_oo_re, - &hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b], - hBinHrSplitPreRend->fix_pos_rot_mat[yaw_idx], - real_only ); - } - } + num_slots, start_slot_idx, b, real_only ); -#ifdef SPLIT_REND_BASE2_CODING - ivas_SplitRenderer_code_md_base2( - hBinHrSplitPreRend->rot_md, - &hBinHrSplitPreRend->huff_cfg, - pBits, - sf_idx, - num_md_bands ); -#else - ivas_SplitRenderer_code_md( - hBinHrSplitPreRend->rot_md, - &hBinHrSplitPreRend->huff_cfg, - pBits, - sf_idx, - num_md_bands ); -#endif + /*compute rotated signal covariance*/ + for ( pos_idx = 0; pos_idx < num_poses - 1; pos_idx++ ) + { + ComputeBandedCrossCov( Cldfb_RealBuffer_Ref_Binaural[0], + Cldfb_ImagBuffer_Ref_Binaural[0], + Cldfb_RealBuffer_Ref_Binaural[pos_idx + 1], + Cldfb_ImagBuffer_Ref_Binaural[pos_idx + 1], + cov_io_re, cov_io_im, + BINAURAL_CHANNELS, + pBand_grouping, + num_slots, start_slot_idx, b, real_only ); + + ComputeBandedCov( Cldfb_RealBuffer_Ref_Binaural[pos_idx + 1], + Cldfb_ImagBuffer_Ref_Binaural[pos_idx + 1], + cov_oo_re, cov_oo_im, + BINAURAL_CHANNELS, + pBand_grouping, + num_slots, start_slot_idx, b, real_only ); + + ComputeCoeffs( cov_ii_re, + cov_ii_im, + cov_io_re, + cov_io_im, + cov_oo_re, + &hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b], + hBinHrSplitPreRend->pose_type[pos_idx], + real_only ); + } + } #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG - { - int16_t num_cldfb_bands; - num_cldfb_bands = CLDFB_NO_CHANNELS_MAX; - for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES; pos_idx++ ) { - char fname[200] = "rotated_ref_pos"; - char tag[2]; - tag[0] = (char) ( '0' + pos_idx ); - tag[1] = '\0'; - strcat( fname, tag ); - strcat( fname, ".wav" ); + int16_t num_cldfb_bands; + num_cldfb_bands = CLDFB_NO_CHANNELS_MAX; + for ( pos_idx = 0; pos_idx < num_poses - 1; pos_idx++ ) + { + char fname[200] = "rotated_cldfbref_pos"; + char tag[2]; + tag[0] = (char) ( '0' + pos_idx ); + tag[1] = '\0'; + strcat( fname, tag ); + strcat( fname, ".wav" ); + ivas_log_cldfb2wav_data( + Cldfb_RealBuffer_Ref_Binaural[pos_idx + 1], + Cldfb_ImagBuffer_Ref_Binaural[pos_idx + 1], + hBinHrSplitPreRend->cldfbSynRotBinDec[pos_idx], + BINAURAL_CHANNELS, + num_cldfb_bands, + 48000, + num_slots, + start_slot_idx, + fname ); + } ivas_log_cldfb2wav_data( - Cldfb_RealBuffer_Ref_Binaural[pos_idx + 1], - Cldfb_ImagBuffer_Ref_Binaural[pos_idx + 1], - hBinHrSplitPreRend->cldfbSynRotBinDec[pos_idx], + Cldfb_RealBuffer_Ref_Binaural[0], + Cldfb_ImagBuffer_Ref_Binaural[0], + hBinHrSplitPreRend->cldfbSynRotBinDec[MAX_HEAD_ROT_POSES], BINAURAL_CHANNELS, num_cldfb_bands, 48000, - fname ); + num_slots, + start_slot_idx, + "rotated_cldfbref_RefPos.wav" ); } - ivas_log_cldfb2wav_data( - Cldfb_RealBuffer_Ref_Binaural[0], - Cldfb_ImagBuffer_Ref_Binaural[0], - hBinHrSplitPreRend->cldfbSynRotBinDec[MAX_HEAD_ROT_POSES], - BINAURAL_CHANNELS, - num_cldfb_bands, - 48000, - "rotated_ref_RefPos.wav" ); - } #endif + } wmops_sub_end(); @@ -989,54 +1452,36 @@ void ivas_SplitRenderer_GetRotMd( void ivas_rend_CldfbSplitPreRendProcess( const BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend, + const IVAS_QUATERNION headPositions[MAX_PARAM_SPATIAL_SUBFRAMES], + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, float Cldfb_In_BinReal[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float Cldfb_In_BinImag[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], - const int16_t max_bands, - ivas_split_rend_bits_t *pBits ) + ivas_split_rend_bits_t *pBits, + const int32_t target_md_bits, + const int16_t low_res_pre_rend_rot ) { - int16_t sf_idx, slot_idx, ch_idx, idx, pos_idx, num_poses; -#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG - float Cldfb_RealBuffer_Binaural[MAX_HEAD_ROT_POSES + 1][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; - float Cldfb_ImagBuffer_Binaural[MAX_HEAD_ROT_POSES + 1][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; -#else - float Cldfb_RealBuffer_Binaural[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; - float Cldfb_ImagBuffer_Binaural[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; -#endif - -#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG - num_poses = MAX_HEAD_ROT_POSES + 1; -#else - num_poses = MAX_HEAD_ROT_POSES; -#endif - for ( sf_idx = 0; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ ) - { - for ( pos_idx = 0; pos_idx < num_poses; pos_idx++ ) - { - for ( slot_idx = 0; slot_idx < MAX_PARAM_SPATIAL_SUBFRAMES; slot_idx++ ) - { - idx = sf_idx * MAX_PARAM_SPATIAL_SUBFRAMES + slot_idx; - for ( ch_idx = 0; ch_idx < BINAURAL_CHANNELS; ch_idx++ ) - { - mvr2r( &Cldfb_In_BinReal[pos_idx][ch_idx][idx][0], &Cldfb_RealBuffer_Binaural[pos_idx][ch_idx][slot_idx][0], max_bands ); - mvr2r( &Cldfb_In_BinImag[pos_idx][ch_idx][idx][0], &Cldfb_ImagBuffer_Binaural[pos_idx][ch_idx][slot_idx][0], max_bands ); - } - } - } + ivas_SplitRenderer_GetRotMd( + hBinHrSplitPreRend, + pMultiBinPoseData, + Cldfb_In_BinReal, + Cldfb_In_BinImag, + low_res_pre_rend_rot ); - ivas_SplitRenderer_GetRotMd( - hBinHrSplitPreRend, - Cldfb_RealBuffer_Binaural, - Cldfb_ImagBuffer_Binaural, - pBits, - sf_idx ); - } + ivas_SplitRenderer_quant_code( + hBinHrSplitPreRend, + headPositions, + pMultiBinPoseData, + pBits, + low_res_pre_rend_rot, + target_md_bits ); return; } ivas_error ivas_splitBinPreRendOpen( - BIN_HR_SPLIT_PRE_REND_HANDLE *hBinHrSplitPreRend + BIN_HR_SPLIT_PRE_REND_HANDLE *hBinHrSplitPreRend, + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG , const int32_t output_Fs @@ -1077,7 +1522,7 @@ ivas_error ivas_splitBinPreRendOpen( } #endif - for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES - 1; pos_idx++ ) + for ( pos_idx = 0; pos_idx < pMultiBinPoseData->num_poses - 1; pos_idx++ ) { for ( sf_idx = 0; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ ) { @@ -1087,7 +1532,8 @@ ivas_error ivas_splitBinPreRendOpen( } } } - set_fix_rotation_mat( hBinRend->fix_pos_rot_mat ); + set_fix_rotation_mat( hBinRend->fix_pos_rot_mat, pMultiBinPoseData ); + set_pose_types( hBinRend->pose_type, pMultiBinPoseData ); ivas_split_rend_init_huff_cfg( &hBinRend->huff_cfg ); *hBinHrSplitPreRend = hBinRend; return error; @@ -1121,31 +1567,44 @@ void ivas_splitBinPreRendClose( BIN_HR_SPLIT_PRE_REND_HANDLE *hBinHrSplitPreRend void ivas_init_split_rend_handles( SPLIT_REND_WRAPPER *hSplitRendWrapper ) { - hSplitRendWrapper->hBinHrSplitPostRend = NULL; hSplitRendWrapper->hBinHrSplitPreRend = NULL; hSplitRendWrapper->hCldfbHandles = NULL; - hSplitRendWrapper->hSplitBinLCLDDec = NULL; hSplitRendWrapper->hSplitBinLCLDEnc = NULL; + + ivas_init_multi_bin_pose_data( &hSplitRendWrapper->multiBinPoseData ); return; } -ivas_error ivas_split_renderer_open( SPLIT_REND_WRAPPER *hSplitRendWrapper, const int32_t OutSampleRate, const IVAS_SPLIT_REND_MODE splitRendMode, const int16_t is_cldfb_in ) +ivas_error ivas_split_renderer_open( SPLIT_REND_WRAPPER *hSplitRendWrapper, + const IVAS_SPLIT_REND_CONFIG_DATA *pSplitRendConfig, + const int32_t OutSampleRate, + const int16_t is_cldfb_in, + const int16_t is_pcm_out ) { ivas_error error, ch, num_ch; error = IVAS_ERR_OK; + hSplitRendWrapper->hCldfbHandles = NULL; if ( is_cldfb_in == 0 ) { if ( ( hSplitRendWrapper->hCldfbHandles = (CLDFB_HANDLES_WRAPPER_HANDLE) count_malloc( sizeof( CLDFB_HANDLES_WRAPPER ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CLDFB handles\n" ) ); } +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + num_ch = ( 1 + MAX_HEAD_ROT_POSES ) * BINAURAL_CHANNELS; +#else num_ch = MAX_HEAD_ROT_POSES * BINAURAL_CHANNELS; +#endif for ( ch = 0; ch < num_ch; ch++ ) { hSplitRendWrapper->hCldfbHandles->cldfbAna[ch] = NULL; } - +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + num_ch = ( 1 + hSplitRendWrapper->multiBinPoseData.num_poses ) * BINAURAL_CHANNELS; +#else + num_ch = hSplitRendWrapper->multiBinPoseData.num_poses * BINAURAL_CHANNELS; +#endif for ( ch = 0; ch < num_ch; ch++ ) { if ( ( error = openCldfb( &( hSplitRendWrapper->hCldfbHandles->cldfbAna[ch] ), CLDFB_ANALYSIS, OutSampleRate, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) @@ -1155,61 +1614,25 @@ ivas_error ivas_split_renderer_open( SPLIT_REND_WRAPPER *hSplitRendWrapper, cons } } - switch ( splitRendMode ) - { - case SPLIT_REND_PRE: - - error = ivas_splitBinPreRendOpen( &hSplitRendWrapper->hBinHrSplitPreRend -#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG - , - OutSampleRate -#endif - ); - if ( error != IVAS_ERR_OK ) - { - return error; - } - error = ivas_splitBinLCLDEncOpen( &hSplitRendWrapper->hSplitBinLCLDEnc, OutSampleRate, 2, 384000 ); - break; - case SPLIT_REND_POST: - error = ivas_splitBinPostRendOpen( &hSplitRendWrapper->hBinHrSplitPostRend, OutSampleRate ); - if ( error != IVAS_ERR_OK ) - { - return error; - } - error = ivas_splitBinLCLDDecOpen( &hSplitRendWrapper->hSplitBinLCLDDec, OutSampleRate, 2 ); - if ( error != IVAS_ERR_OK ) - { - return error; - } - break; - case SPLIT_REND_COMB: - error = ivas_splitBinPreRendOpen( &hSplitRendWrapper->hBinHrSplitPreRend + error = ivas_splitBinPreRendOpen( &hSplitRendWrapper->hBinHrSplitPreRend, + &hSplitRendWrapper->multiBinPoseData #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG - , - OutSampleRate + , + OutSampleRate #endif - ); - if ( error != IVAS_ERR_OK ) - { - return error; - } - error = ivas_splitBinLCLDEncOpen( &hSplitRendWrapper->hSplitBinLCLDEnc, OutSampleRate, 2, 384000 ); - if ( error != IVAS_ERR_OK ) - { - return error; - } - error = ivas_splitBinPostRendOpen( &hSplitRendWrapper->hBinHrSplitPostRend, OutSampleRate ); - if ( error != IVAS_ERR_OK ) - { - return error; - } - error = ivas_splitBinLCLDDecOpen( &hSplitRendWrapper->hSplitBinLCLDDec, OutSampleRate, 2 ); - break; - default: - return IVAS_ERR_INVALID_OUTPUT_FORMAT; + ); + if ( error != IVAS_ERR_OK ) + { + return error; + } + if ( is_pcm_out == 0 ) + { + error = ivas_splitBinLCLDEncOpen( &hSplitRendWrapper->hSplitBinLCLDEnc, OutSampleRate, 2, ivas_get_lcld_bitrate( pSplitRendConfig->splitRendBitRate ) ); + if ( error != IVAS_ERR_OK ) + { + return error; + } } - return error; } @@ -1223,102 +1646,192 @@ void ivas_split_renderer_close( SPLIT_REND_WRAPPER *hSplitBinRend ) { ivas_splitBinLCLDEncClose( &hSplitBinRend->hSplitBinLCLDEnc ); } - if ( hSplitBinRend->hBinHrSplitPostRend != NULL ) - { - ivas_splitBinPostRendClose( &hSplitBinRend->hBinHrSplitPostRend ); - } - if ( hSplitBinRend->hSplitBinLCLDDec != NULL ) - { - ivas_splitBinLCLDDecClose( &hSplitBinRend->hSplitBinLCLDDec ); - } if ( hSplitBinRend->hCldfbHandles != NULL ) { + int16_t num_ch, ch; +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + num_ch = ( 1 + MAX_HEAD_ROT_POSES ) * BINAURAL_CHANNELS; +#else + num_ch = MAX_HEAD_ROT_POSES * BINAURAL_CHANNELS; +#endif + for ( ch = 0; ch < num_ch; ch++ ) + { + if ( hSplitBinRend->hCldfbHandles->cldfbAna[ch] != NULL ) + { + deleteCldfb( &hSplitBinRend->hCldfbHandles->cldfbAna[ch] ); + hSplitBinRend->hCldfbHandles->cldfbAna[ch] = NULL; + } + } + count_free( hSplitBinRend->hCldfbHandles ); hSplitBinRend->hCldfbHandles = NULL; } return; } -ivas_error ivas_renderMultiBinToSplitBinaural( +static ivas_error ivas_renderMultiTDBinToSplitBinaural( SPLIT_REND_WRAPPER *hSplitBin, + const IVAS_QUATERNION headPositions[MAX_PARAM_SPATIAL_SUBFRAMES], + const int32_t SplitRendBitRate, ivas_split_rend_bits_t *pBits, - float Cldfb_In_BinReal[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], - float Cldfb_In_BinImag[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], - const IVAS_QUATERNION QuaternionsPre[MAX_PARAM_SPATIAL_SUBFRAMES], - const IVAS_QUATERNION QuaternionsPost[MAX_PARAM_SPATIAL_SUBFRAMES], const int16_t max_bands, - float out[][L_FRAME48k] ) + float in[][L_FRAME48k], + const int16_t low_res_pre_rend_rot, + const int16_t pcm_out ) { ivas_error error; + int32_t bit_len, available_bits, target_md_bits, actual_md_bits; + int16_t num_cldfb_bands, ch, slot_idx, pos_idx, num_poses; +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + float Cldfb_In_BinReal[MAX_HEAD_ROT_POSES + 1][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_In_BinImag[MAX_HEAD_ROT_POSES + 1][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; +#else + float Cldfb_In_BinReal[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_In_BinImag[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; +#endif + error = IVAS_ERR_OK; - if ( hSplitBin->hCldfbHandles != NULL ) + assert( hSplitBin->hCldfbHandles != NULL ); + num_cldfb_bands = hSplitBin->hCldfbHandles->cldfbAna[0]->no_channels; + num_poses = hSplitBin->multiBinPoseData.num_poses; + +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + for ( pos_idx = 0; pos_idx < num_poses; pos_idx++ ) { - /*if CLDFB handles have been allocated then assume valid multi binaural input in out[][] buffer and perform CLDFB analysis*/ - int16_t num_cldfb_bands, ch, slot_idx, pos_idx; + float *pPcm[BINAURAL_CHANNELS]; + + char fname[200] = "rotated_ref_pos"; + char tag[2]; + tag[0] = (char) ( '0' + pos_idx ); + tag[1] = '\0'; + strcat( fname, tag ); + strcat( fname, ".wav" ); + for ( int i = 0; i < BINAURAL_CHANNELS; i++ ) + { + pPcm[i] = in[pos_idx * BINAURAL_CHANNELS + i]; + } + dbgwrite_wav( pPcm, 960, + fname, 48000, BINAURAL_CHANNELS ); + } +#endif - assert( hSplitBin->hCldfbHandles != NULL ); - num_cldfb_bands = hSplitBin->hCldfbHandles->cldfbAna[0]->no_channels; - /* CLDFB Analysis*/ + + /* CLDFB Analysis*/ #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG - for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES + 1; pos_idx++ ) + for ( pos_idx = 0; pos_idx < num_poses + 1; pos_idx++ ) #else - for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES; pos_idx++ ) + for ( pos_idx = 0; pos_idx < num_poses; pos_idx++ ) #endif + { + for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) { - for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) + for ( slot_idx = 0; slot_idx < CLDFB_NO_COL_MAX; slot_idx++ ) { - for ( slot_idx = 0; slot_idx < CLDFB_NO_COL_MAX; slot_idx++ ) - { - cldfbAnalysis_ts( &( out[pos_idx * BINAURAL_CHANNELS + ch][num_cldfb_bands * slot_idx] ), - Cldfb_In_BinReal[pos_idx][ch][slot_idx], - Cldfb_In_BinImag[pos_idx][ch][slot_idx], - max_bands, - hSplitBin->hCldfbHandles->cldfbAna[ch] ); - } + cldfbAnalysis_ts( &( in[pos_idx * BINAURAL_CHANNELS + ch][num_cldfb_bands * slot_idx] ), + Cldfb_In_BinReal[pos_idx][ch][slot_idx], + Cldfb_In_BinImag[pos_idx][ch][slot_idx], + max_bands, + hSplitBin->hCldfbHandles->cldfbAna[pos_idx * BINAURAL_CHANNELS + ch] ); } } } + target_md_bits = ivas_get_split_rend_md_target_brate( SplitRendBitRate, pcm_out ) * L_FRAME48k / 48000; + actual_md_bits = pBits->bits_written; ivas_rend_CldfbSplitPreRendProcess( hSplitBin->hBinHrSplitPreRend, + headPositions, + &hSplitBin->multiBinPoseData, Cldfb_In_BinReal, Cldfb_In_BinImag, - max_bands, - pBits ); - - ivas_splitBinLCLDEncProcess( - hSplitBin->hSplitBinLCLDEnc, - Cldfb_In_BinReal[0], - Cldfb_In_BinImag[0], - pBits ); + pBits, + target_md_bits, + low_res_pre_rend_rot ); + if ( pcm_out == 0 ) + { + // available_bits = ivas_get_lcld_bitrate( SplitRendBitRate ) * L_FRAME48k / 48000; + available_bits = SplitRendBitRate * L_FRAME48k / 48000; + actual_md_bits = pBits->bits_written - actual_md_bits; + available_bits -= actual_md_bits; + ivas_splitBinLCLDEncProcess( + hSplitBin->hSplitBinLCLDEnc, + Cldfb_In_BinReal[0], + Cldfb_In_BinImag[0], + available_bits, + pBits ); + } - /*CLFDB decoding and SPLIT post rendering MD based adjustments*/ + /*zero pad*/ + bit_len = SplitRendBitRate / FRAMES_PER_SEC; + while ( pBits->bits_written < bit_len ) { + ivas_split_rend_bitstream_write_int32( pBits, (int32_t) 0, 1 ); + } + return error; +} - ivas_splitBinPostRendMdDec( - pBits, - hSplitBin->hBinHrSplitPostRend, -#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG - hSplitBin->hBinHrSplitPreRend, -#endif - MAX_SPLIT_REND_MD_BANDS ); +ivas_error ivas_renderMultiBinToSplitBinaural( + SPLIT_REND_WRAPPER *hSplitBin, + const IVAS_QUATERNION headPositions[MAX_PARAM_SPATIAL_SUBFRAMES], + const int32_t SplitRendBitRate, + ivas_split_rend_bits_t *pBits, + float Cldfb_In_BinReal[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float Cldfb_In_BinImag[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + const int16_t max_bands, + float out[][L_FRAME48k], + const int16_t low_res_pre_rend_rot, + const int16_t pcm_out ) +{ + ivas_error error; + int32_t bit_len, target_md_bits, actual_md_bits, available_bits; + error = IVAS_ERR_OK; - ivas_splitBinLCLDDecProcess( - hSplitBin->hSplitBinLCLDDec, - pBits, - Cldfb_In_BinReal[0], - Cldfb_In_BinImag[0] ); + set_fix_rotation_mat( hSplitBin->hBinHrSplitPreRend->fix_pos_rot_mat, &hSplitBin->multiBinPoseData ); + set_pose_types( hSplitBin->hBinHrSplitPreRend->pose_type, &hSplitBin->multiBinPoseData ); - ivas_rend_CldfbSplitPostRendProcess( - hSplitBin->hBinHrSplitPostRend, - QuaternionsPre, - QuaternionsPost, + if ( hSplitBin->hCldfbHandles != NULL ) + { + /*TD input*/ + /*if CLDFB handles have been allocated then assume valid multi binaural input in out[][] buffer and perform CLDFB analysis*/ + error = ivas_renderMultiTDBinToSplitBinaural( hSplitBin, headPositions, SplitRendBitRate, pBits, max_bands, out, + low_res_pre_rend_rot, pcm_out ); + return error; + } + target_md_bits = ivas_get_split_rend_md_target_brate( SplitRendBitRate, pcm_out ) * L_FRAME48k / 48000; + actual_md_bits = pBits->bits_written; + ivas_rend_CldfbSplitPreRendProcess( + hSplitBin->hBinHrSplitPreRend, + headPositions, + &hSplitBin->multiBinPoseData, + Cldfb_In_BinReal, + Cldfb_In_BinImag, + pBits, + target_md_bits, + low_res_pre_rend_rot ); + + if ( pcm_out == 0 ) + { + // available_bits = ivas_get_lcld_bitrate( SplitRendBitRate ) * L_FRAME48k / 48000; + available_bits = SplitRendBitRate * L_FRAME48k / 48000; + actual_md_bits = pBits->bits_written - actual_md_bits; + available_bits -= actual_md_bits; + ivas_splitBinLCLDEncProcess( + hSplitBin->hSplitBinLCLDEnc, Cldfb_In_BinReal[0], Cldfb_In_BinImag[0], - out ); + available_bits, + pBits ); } + /*zero pad*/ + /*TODO: do this inside the LCLD ENC codec */ + bit_len = SplitRendBitRate / FRAMES_PER_SEC; + + while ( pBits->bits_written < bit_len ) + { + ivas_split_rend_bitstream_write_int32( pBits, (int32_t) 0, 1 ); + } return error; } #endif \ No newline at end of file diff --git a/lib_rend/ivas_splitRenderer_utils.c b/lib_rend/ivas_splitRenderer_utils.c index 9d68e424fd..ca97872929 100644 --- a/lib_rend/ivas_splitRenderer_utils.c +++ b/lib_rend/ivas_splitRenderer_utils.c @@ -49,6 +49,34 @@ #include "wmops.h" #ifdef SPLIT_REND_WITH_HEAD_ROT + +void ivas_mat_mult_2by2_complex( float in_re1[2][2], + float in_im1[2][2], + float in_re2[2][2], + float in_im2[2][2], + float out_re2[2][2], + float out_im2[2][2] ) +{ + int16_t i, j; + float tmp_re, tmp_im; + + for ( i = 0; i < 2; i++ ) + { + for ( j = 0; j < 2; j++ ) + { + + IVAS_CMULT_FLOAT( in_re1[i][0], in_im1[i][0], + in_re2[0][j], in_im2[0][j], tmp_re, tmp_im ); + out_re2[i][j] = tmp_re; + out_im2[i][j] = tmp_im; + IVAS_CMULT_FLOAT( in_re1[i][1], in_im1[i][1], + in_re2[1][j], in_im2[1][j], tmp_re, tmp_im ); + out_re2[i][j] += tmp_re; + out_im2[i][j] += tmp_im; + } + } + return; +} void ivas_split_rend_bitstream_init( ivas_split_rend_bits_t *pBits, const int32_t buf_len_bytes, uint8_t *pbuf ) { pBits->bits_buf = pbuf; @@ -143,17 +171,30 @@ void ivas_split_rend_init_huff_cfg( BIN_HR_SPLIT_REND_HUFF_HANDLE pHuff_cfg ) ivas_split_huff_get_idx_trav_list( pHuff_cfg->gd_idx_trav, &pHuff_cfg->gd ); pHuff_cfg->gd_base2_code_len = (int16_t) ceilf( log2f( pHuff_cfg->gd.sym_len ) ); + pHuff_cfg->p_gd.codebook = &ivas_split_rend_huff_p_d_consts[0][0]; + pHuff_cfg->p_gd.sym_len = IVAS_SPLIT_REND_D_QUANT_PNTS; + ivas_split_rend_huffman_dec_init_min_max_len( &pHuff_cfg->p_gd ); + ivas_split_huff_get_idx_trav_list( pHuff_cfg->p_gd_idx_trav, &pHuff_cfg->p_gd ); + pHuff_cfg->p_gd_base2_code_len = (int16_t) ceilf( log2f( pHuff_cfg->p_gd.sym_len ) ); + + pHuff_cfg->p_gd_diff.codebook = &ivas_split_rend_huff_p_d_diff_consts[0][0]; + pHuff_cfg->p_gd_diff.sym_len = IVAS_SPLIT_REND_D_QUANT_PNTS; + ivas_split_rend_huffman_dec_init_min_max_len( &pHuff_cfg->p_gd_diff ); + ivas_split_huff_get_idx_trav_list( pHuff_cfg->p_gd_diff_idx_trav, &pHuff_cfg->p_gd_diff ); + pHuff_cfg->p_gd_diff_base2_code_len = (int16_t) ceilf( log2f( pHuff_cfg->p_gd_diff.sym_len ) ); + return; } -void set_fix_rotation_mat( float fix_pos_rot_mat[][BINAURAL_CHANNELS][BINAURAL_CHANNELS] ) +void set_fix_rotation_mat( float fix_pos_rot_mat[][BINAURAL_CHANNELS][BINAURAL_CHANNELS], MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData ) { float yaw_a, cos_yaw, sin_yaw; int16_t pos_idx; yaw_a = 0.0f; - for ( pos_idx = 0; pos_idx < MAX_YAW_ANGLES - 1; pos_idx++ ) + + for ( pos_idx = 0; pos_idx < pMultiBinPoseData->num_poses - 1; pos_idx++ ) { - yaw_a += split_rend_relative_yaw_angles[pos_idx + 1]; + yaw_a = pMultiBinPoseData->relative_head_poses[pos_idx + 1][0]; cos_yaw = cosf( EVS_PI * yaw_a / 180.0f ); sin_yaw = sinf( EVS_PI * yaw_a / 180.0f ); sin_yaw = 0.0f; @@ -165,6 +206,31 @@ void set_fix_rotation_mat( float fix_pos_rot_mat[][BINAURAL_CHANNELS][BINAURAL_C return; } +void set_pose_types( IVAS_SPLIT_REND_POSE_TYPE pose_type[MAX_HEAD_ROT_POSES - 1], MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData ) +{ + int16_t pos_idx; + for ( pos_idx = 0; pos_idx < pMultiBinPoseData->num_poses - 1; pos_idx++ ) + { + if ( fabs( pMultiBinPoseData->relative_head_poses[pos_idx + 1][0] ) > EPSILON ) + { + pose_type[pos_idx] = ANY_YAW; + } + else if ( fabs( pMultiBinPoseData->relative_head_poses[pos_idx + 1][2] ) > EPSILON ) + { +#ifdef SPLIT_REND_REAL_ONLY_ROLL + pose_type[pos_idx] = PITCH_ONLY; +#else + pose_type[pos_idx] = ANY_ROLL; +#endif + } + else + { + pose_type[pos_idx] = PITCH_ONLY; + } + } + return; +} + int16_t wrap_a( int16_t val, int16_t min_val, int16_t max_val ) { if ( val < min_val ) @@ -195,10 +261,10 @@ void ivas_SplitRenderer_getdiagdiff( return; } - int32_t ivas_split_rend_bitstream_read_int32( ivas_split_rend_bits_t *pBits, int32_t bits ) { - int32_t val, k; + int32_t val, k, bit_val; + #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG assert( ( pBits->bits_written - pBits->bits_read ) >= bits ); assert( bits <= 32 ); @@ -208,10 +274,15 @@ int32_t ivas_split_rend_bitstream_read_int32( ivas_split_rend_bits_t *pBits, int val = 0; for ( k = bits - 1; k >= 0; k-- ) { +#if 0 if ( pBits->bits_buf[pBits->bits_read >> 3] & ( 1 << ( pBits->bits_read & 7 ) ) ) { val |= 1 << k; } +#else + bit_val = ( pBits->bits_buf[pBits->bits_read >> 3] & ( 1 << ( pBits->bits_read & 7 ) ) ) != 0; + val |= bit_val << k; +#endif pBits->bits_read++; } return val; @@ -246,7 +317,6 @@ void ivas_split_rend_bitstream_write_int32( ivas_split_rend_bits_t *pBits, int32 return; } - IVAS_QUATERNION ivas_split_rend_get_sf_rot_data( const IVAS_QUATERNION headPositions[RENDERER_HEAD_POSITIONS_PER_FRAME], int16_t subframe_idx ) @@ -260,41 +330,293 @@ IVAS_QUATERNION ivas_split_rend_get_sf_rot_data( #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG void ivas_log_cldfb2wav_data( - float Cldfb_In_Real[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], - float Cldfb_In_Imag[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], + float Cldfb_In_Real[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float Cldfb_In_Imag[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], HANDLE_CLDFB_FILTER_BANK *cldfbSyn, const int16_t num_chs, const int16_t num_freq_bands, const int32_t output_Fs, + const int16_t num_slots, + const int16_t start_slot_idx, const char *filename ) { - float *RealBuffer[MAX_PARAM_SPATIAL_SUBFRAMES]; - float *ImagBuffer[MAX_PARAM_SPATIAL_SUBFRAMES]; + float *RealBuffer[CLDFB_NO_COL_MAX]; + float *ImagBuffer[CLDFB_NO_COL_MAX]; float pcm_out[BINAURAL_CHANNELS][L_FRAME48k]; float *pPcm[BINAURAL_CHANNELS]; - float Cldfb_local_Real[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; - float Cldfb_local_Imag[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_local_Real[BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_local_Imag[BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; int16_t sf, ch; assert( num_chs <= BINAURAL_CHANNELS ); for ( ch = 0; ch < num_chs; ch++ ) { - for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) + for ( sf = start_slot_idx; sf < start_slot_idx + num_slots; sf++ ) { mvr2r( Cldfb_In_Real[ch][sf], Cldfb_local_Real[ch][sf], num_freq_bands ); mvr2r( Cldfb_In_Imag[ch][sf], Cldfb_local_Imag[ch][sf], num_freq_bands ); - RealBuffer[sf] = Cldfb_local_Real[ch][sf]; - ImagBuffer[sf] = Cldfb_local_Imag[ch][sf]; + RealBuffer[sf - start_slot_idx] = Cldfb_local_Real[ch][sf]; + ImagBuffer[sf - start_slot_idx] = Cldfb_local_Imag[ch][sf]; } cldfbSynthesis( RealBuffer, ImagBuffer, &( pcm_out[ch][0] ), - num_freq_bands * MAX_PARAM_SPATIAL_SUBFRAMES, + num_freq_bands * num_slots, cldfbSyn[ch] ); pPcm[ch] = pcm_out[ch]; } - dbgwrite_wav( pPcm, num_freq_bands * MAX_PARAM_SPATIAL_SUBFRAMES, + dbgwrite_wav( pPcm, num_freq_bands * num_slots, filename, output_Fs, num_chs ); } #endif + +int32_t ivas_get_split_rend_md_target_brate( const int32_t SplitRendBitRate, const int16_t pcm_out ) +{ + int32_t md_bitrate; + if ( pcm_out == 1 ) + { + md_bitrate = SplitRendBitRate; + } + else + { + switch ( SplitRendBitRate ) + { + case SPLIT_REND_768k: + { + md_bitrate = 256000; + break; + } + case SPLIT_REND_512k: + { + md_bitrate = 128000; + break; + } + case SPLIT_REND_384k: + { + md_bitrate = 128000; + break; + } + default: + { + return -1; + } + } + } + return md_bitrate; +} + +int32_t ivas_get_lcld_bitrate( const int32_t SplitRendBitRate ) +{ + switch ( SplitRendBitRate ) + { + case SPLIT_REND_768k: + { + return IVAS_384k; + } + case SPLIT_REND_512k: + { + return IVAS_384k; + } + case SPLIT_REND_384k: + { + return IVAS_256k; + } + default: + { + return -1; + } + } +} + +void ivas_split_rend_get_quant_params( + const int16_t num_md_bands, + int16_t pred_real_bands_yaw[IVAS_SPLIT_REND_NUM_QUANT_STRATS], + int16_t pred_imag_bands_yaw[IVAS_SPLIT_REND_NUM_QUANT_STRATS], + int16_t d_bands_yaw[IVAS_SPLIT_REND_NUM_QUANT_STRATS], + int16_t bands_pitch[IVAS_SPLIT_REND_NUM_QUANT_STRATS], + int16_t pred_real_bands_roll[IVAS_SPLIT_REND_NUM_QUANT_STRATS], + int16_t pred_imag_bands_roll[IVAS_SPLIT_REND_NUM_QUANT_STRATS], + int16_t *num_quant_strats, + int16_t *num_complex_bands ) +{ + int16_t q; + + *num_quant_strats = IVAS_SPLIT_REND_NUM_QUANT_STRATS; + *num_complex_bands = COMPLEX_MD_BAND_THRESH_LOW; + assert( *num_complex_bands <= num_md_bands ); + + + for ( q = 0; q < *num_quant_strats; q++ ) + { + pred_real_bands_yaw[q] = num_md_bands; + pred_real_bands_roll[q] = num_md_bands; + } + pred_imag_bands_yaw[0] = num_md_bands; + pred_imag_bands_roll[0] = num_md_bands; + for ( q = 1; q < *num_quant_strats; q++ ) + { + pred_imag_bands_yaw[q] = ( q == 1 ) ? num_md_bands : *num_complex_bands; + pred_imag_bands_roll[q] = *num_complex_bands; + } + +#ifdef SPLIT_REND_ZERO_OUT_YAW_D + d_bands_yaw[0] = 0; +#else + d_bands_yaw[0] = num_md_bands; +#endif + bands_pitch[0] = num_md_bands; + for ( q = 1; q < *num_quant_strats; q++ ) + { + d_bands_yaw[q] = 0; + bands_pitch[q] = num_md_bands; + } + + return; +} + +void ivas_renderSplitGetMultiBinPoseData( + const IVAS_SPLIT_REND_CONFIG_DATA *pSplit_rend_config, + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, + const IVAS_SPLIT_REND_ROT_AXIS rot_axis ) +{ + int16_t pos_idx, num_yaw_poses, num_pitch_poses, num_roll_poses; + const float *relative_yaw_angles; + const float *relative_pitch_angles; + const float *relative_roll_angles; + + for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES; pos_idx++ ) + { + pMultiBinPoseData->relative_head_poses[pos_idx][0] = 0.0f; + pMultiBinPoseData->relative_head_poses[pos_idx][1] = 0.0f; + pMultiBinPoseData->relative_head_poses[pos_idx][2] = 0.0f; + } + + num_yaw_poses = 0; + num_pitch_poses = 0; + num_roll_poses = 0; + + if ( pSplit_rend_config->dof == 1 ) + { + relative_yaw_angles = split_rend_relative_yaw_pos_angles_hq; + relative_pitch_angles = split_rend_relative_pitch_pos_angles_hq; + relative_roll_angles = split_rend_relative_roll_pos_angles_hq; + switch ( rot_axis ) + { + case DEFAULT_AXIS: + case YAW: + { + num_yaw_poses = SPLIT_REND_MAX_YAW_ONLY_POSES; + break; + } + case PITCH: + { + num_pitch_poses = SPLIT_REND_MAX_PITCH_ONLY_POSES; + break; + } + case ROLL: + { + num_roll_poses = SPLIT_REND_MAX_ROLL_ONLY_POSES; + break; + } + default: + { + assert( 0 && "unsupported rotation axis value" ); + } + } + } + else if ( pSplit_rend_config->dof == 2 ) + { + relative_yaw_angles = split_rend_relative_yaw_pos_angles_hq; + relative_pitch_angles = split_rend_relative_pitch_pos_angles_hq; + relative_roll_angles = split_rend_relative_roll_pos_angles_hq; + switch ( rot_axis ) + { + case DEFAULT_AXIS: + case YAW: + case PITCH: + case YAW_PITCH: + { + num_yaw_poses = SPLIT_REND_MAX_YAW_ONLY_POSES; + num_pitch_poses = SPLIT_REND_MAX_PITCH_ONLY_POSES; + break; + } + case ROLL: + case YAW_ROLL: + { + num_yaw_poses = SPLIT_REND_MAX_YAW_ONLY_POSES; + num_roll_poses = SPLIT_REND_MAX_ROLL_ONLY_POSES; + break; + } + case PITCH_ROLL: + { + num_pitch_poses = SPLIT_REND_MAX_PITCH_ONLY_POSES; + num_roll_poses = SPLIT_REND_MAX_ROLL_ONLY_POSES; + break; + } + default: + { + assert( 0 && "unsupported rotation axis value" ); + } + } + } + else + { + if ( pSplit_rend_config->hq_mode == 1 ) + { + relative_yaw_angles = split_rend_relative_yaw_pos_angles_hq; + relative_pitch_angles = split_rend_relative_pitch_pos_angles_hq; + relative_roll_angles = split_rend_relative_roll_pos_angles_hq; + num_yaw_poses = SPLIT_REND_MAX_YAW_ONLY_POSES; + num_pitch_poses = SPLIT_REND_MAX_PITCH_ONLY_POSES; + num_roll_poses = SPLIT_REND_MAX_ROLL_ONLY_POSES; + } + else + { + relative_yaw_angles = split_rend_relative_yaw_pos_angles; + relative_pitch_angles = split_rend_relative_pitch_pos_angles; + relative_roll_angles = split_rend_relative_roll_pos_angles; + num_yaw_poses = SPLIT_REND_MAX_YAW_ONLY_POSES; + num_pitch_poses = 1; + num_roll_poses = 1; + } + } + pMultiBinPoseData->num_poses = num_yaw_poses + num_pitch_poses + num_roll_poses + 1; + assert( pMultiBinPoseData->num_poses <= MAX_HEAD_ROT_POSES ); + + + for ( pos_idx = 0; pos_idx < num_yaw_poses; pos_idx++ ) + { + pMultiBinPoseData->relative_head_poses[pos_idx + 1][0] = relative_yaw_angles[pos_idx]; + } + for ( pos_idx = 0; pos_idx < num_pitch_poses; pos_idx++ ) + { + pMultiBinPoseData->relative_head_poses[pos_idx + num_yaw_poses + 1][1] = relative_pitch_angles[pos_idx]; + } + for ( pos_idx = 0; pos_idx < num_roll_poses; pos_idx++ ) + { + pMultiBinPoseData->relative_head_poses[pos_idx + num_yaw_poses + num_pitch_poses + 1][2] = relative_roll_angles[pos_idx]; + } + pMultiBinPoseData->dof = pSplit_rend_config->dof; + pMultiBinPoseData->hq_mode = pSplit_rend_config->hq_mode; + pMultiBinPoseData->rot_axis = rot_axis; + + return; +} + +void ivas_init_multi_bin_pose_data( MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData ) +{ + int16_t pos_idx; + + for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES; pos_idx++ ) + { + pMultiBinPoseData->relative_head_poses[pos_idx][0] = 0.0f; + pMultiBinPoseData->relative_head_poses[pos_idx][1] = 0.0f; + pMultiBinPoseData->relative_head_poses[pos_idx][2] = 0.0f; + } + pMultiBinPoseData->num_poses = 1; + pMultiBinPoseData->dof = 3; + pMultiBinPoseData->hq_mode = 0; + pMultiBinPoseData->rot_axis = DEFAULT_AXIS; + return; +} #endif diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 098ecf562b..0e163ea100 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -48,6 +48,8 @@ #include #include +//#define ROTATE_CREND_IN_CLDFB_DOMAIN + /* Maximum buffer length (per channel) in samples. * Keep this separate from L_FRAME48k in case we want to support different size later */ #define MAX_BUFFER_LENGTH_PER_CHANNEL ( L_FRAME48k ) @@ -92,7 +94,7 @@ typedef struct const EFAP_WRAPPER *pEfapOutWrapper; const IVAS_REND_HeadRotData *pHeadRotData; #ifdef SPLIT_REND_WITH_HEAD_ROT - const IVAS_SPLIT_REND_MODE *pSplitRendMode; + const RENDER_CONFIG_HANDLE *hhRendererConfig; #endif /* TODO @Philips : would this be a better place to store the render config data? * bearing in mind we could have multiple inputs to the renderer, we might neeed to accomodate @@ -148,9 +150,21 @@ typedef struct CLDFB_REND_WRAPPER cldfbRendWrapper; SPLIT_REND_WRAPPER splitRendWrapper; #endif +#ifdef SPLIT_REND_WITH_HEAD_ROT + rotation_gains rot_gains_prev[MAX_HEAD_ROT_POSES]; +#else rotation_gains rot_gains_prev; +#endif } input_sba; +#ifdef SPLIT_REND_WITH_HEAD_ROT +typedef struct +{ + input_base base; + SPLIT_POST_REND_WRAPPER splitPostRendWrapper; +} input_split_post_rend; +#endif + /* Due to API of some rendering methods, the renderer has to use the decoder struct. Only struct members relevant for rendering will be initialized, therefore typedef as "dummy" decoder struct */ typedef Decoder_Struct DecoderDummy; @@ -176,6 +190,9 @@ struct IVAS_REND input_mc inputsMc[RENDERER_MAX_MC_INPUTS]; input_sba inputsSba[RENDERER_MAX_SBA_INPUTS]; input_masa inputsMasa[RENDERER_MAX_MASA_INPUTS]; +#ifdef SPLIT_REND_WITH_HEAD_ROT + input_split_post_rend inputsSplitPost[RENDERER_MAX_BIN_INPUTS]; +#endif /* TODO @Philips - inputConfig should not be stored here, but read from e.g. input_mc->input_base.inConfig, please remove this */ IVAS_REND_AudioConfig inputConfig; @@ -184,10 +201,6 @@ struct IVAS_REND IVAS_LSSETUP_CUSTOM_STRUCT customLsOut; IVAS_REND_HeadRotData headRotData; -#ifdef SPLIT_REND_WITH_HEAD_ROT - IVAS_SPLIT_REND_MODE splitRendMode; -#endif - int8_t rendererConfigEnabled; RENDER_CONFIG_DATA *hRendererConfig; /* Renderer config pointer */ }; @@ -209,6 +222,32 @@ static float *getSmplPtr( return buffer.data + chnlIdx * buffer.config.numSamplesPerChannel + smplIdx; } +#ifdef SPLIT_REND_WITH_HEAD_ROT +static void convertBitsBufferToInternalBitsBuff( + const IVAS_REND_BitstreamBuffer outBits, + ivas_split_rend_bits_t *hBits ) +{ + hBits->bits_buf = outBits.bits; + hBits->bits_read = outBits.config.bitsRead; + hBits->bits_written = outBits.config.bitsWritten; + hBits->buf_len = outBits.config.bufLenInBytes; + + return; +} + +static void convertInternalBitsBuffToBitsBuffer( + IVAS_REND_BitstreamBuffer *hOutBits, + const ivas_split_rend_bits_t bits ) +{ + hOutBits->bits = bits.bits_buf; + hOutBits->config.bitsRead = bits.bits_read; + hOutBits->config.bitsWritten = bits.bits_written; + hOutBits->config.bufLenInBytes = bits.buf_len; + + return; +} +#endif + #ifdef SPLIT_REND_WITH_HEAD_ROT static void copyBufferToCLDFBarray( const IVAS_REND_AudioBuffer buffer, @@ -241,6 +280,38 @@ static void copyBufferToCLDFBarray( return; } + +static void accumulateCLDFBArrayToBuffer( + float re[MAX_OUTPUT_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float im[MAX_OUTPUT_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + IVAS_REND_AudioBuffer *buffer ) +{ + uint32_t smplIdx, slotIdx; + uint32_t numCldfbSamples, num_bands; + uint32_t chnlIdx; + float *writePtr; + + assert( ( buffer->config.is_cldfb == 1 ) && "for time domain input call copyBufferTo2dArray()" ); + writePtr = buffer->data; + numCldfbSamples = ( (uint32_t) buffer->config.numSamplesPerChannel ) >> 1; + num_bands = numCldfbSamples / CLDFB_NO_COL_MAX; + for ( chnlIdx = 0; chnlIdx < (uint32_t) buffer->config.numChannels; ++chnlIdx ) + { + for ( slotIdx = 0; slotIdx < CLDFB_NO_COL_MAX; ++slotIdx ) + { + for ( smplIdx = 0; smplIdx < num_bands; ++smplIdx ) + { + *writePtr++ += re[chnlIdx][slotIdx][smplIdx]; + } + for ( smplIdx = 0; smplIdx < num_bands; ++smplIdx ) + { + *writePtr++ += im[chnlIdx][slotIdx][smplIdx]; + } + } + } + + return; +} #endif static void copyBufferTo2dArray( @@ -372,6 +443,10 @@ static AUDIO_CONFIG rendAudioConfigToIvasAudioConfig( // VE2AT: similar is defin return AUDIO_CONFIG_BINAURAL; case IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM: return AUDIO_CONFIG_BINAURAL_ROOM; +#ifdef SPLIT_REND_WITH_HEAD_ROT + case IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB: + return AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB; +#endif case IVAS_REND_AUDIO_CONFIG_MASA1: return AUDIO_CONFIG_MASA1; case IVAS_REND_AUDIO_CONFIG_MASA2: @@ -401,6 +476,10 @@ static ivas_error validateOutputAudioConfig( case IVAS_REND_AUDIO_CONFIG_HOA3: case IVAS_REND_AUDIO_CONFIG_BINAURAL: case IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM: +#ifdef SPLIT_REND_WITH_HEAD_ROT + case IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB: + case IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM: +#endif return IVAS_ERR_OK; default: break; @@ -453,6 +532,10 @@ ivas_error getAudioConfigNumChannels( case IVAS_REND_AUDIO_CONFIG_STEREO: case IVAS_REND_AUDIO_CONFIG_BINAURAL: case IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM: +#ifdef SPLIT_REND_WITH_HEAD_ROT + case IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB: + case IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM: +#endif case IVAS_REND_AUDIO_CONFIG_MASA2: *numChannels = 2; break; @@ -498,6 +581,10 @@ AUDIO_CONFIG getIvasAudioConfigFromRendAudioConfig( return AUDIO_CONFIG_BINAURAL; case IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM: return AUDIO_CONFIG_BINAURAL_ROOM; +#ifdef SPLIT_REND_WITH_HEAD_ROT + case IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB: + return AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB; +#endif case IVAS_REND_AUDIO_CONFIG_5_1: return AUDIO_CONFIG_5_1; case IVAS_REND_AUDIO_CONFIG_7_1: @@ -889,10 +976,7 @@ static void initHeadRotation( hIvasRend->headRotData.headPositions[i] = quaternionInit(); } #ifdef SPLIT_REND_WITH_HEAD_ROT - for ( i = 0; i < RENDERER_HEAD_POSITIONS_PER_FRAME; ++i ) - { - hIvasRend->headRotData.headPositionsPostRend[i] = quaternionInit(); - } + hIvasRend->headRotData.sr_pose_pred_axis = DEFAULT_AXIS; #endif return; @@ -974,7 +1058,7 @@ static rendering_context getRendCtx( ctx.pEfapOutWrapper = &hIvasRend->efapOutWrapper; ctx.pHeadRotData = &hIvasRend->headRotData; #ifdef SPLIT_REND_WITH_HEAD_ROT - ctx.pSplitRendMode = &hIvasRend->splitRendMode; + ctx.hhRendererConfig = &hIvasRend->hRendererConfig; #endif return ctx; @@ -997,7 +1081,15 @@ static CREND_WRAPPER defaultCrendWrapper( { CREND_WRAPPER w; +#ifdef SPLIT_REND_WITH_HEAD_ROT + int16_t i; + for ( i = 0; i < MAX_HEAD_ROT_POSES; i++ ) + { + w.hCrend[i] = NULL; + } +#else w.hCrend = NULL; +#endif w.hHrtfCrend = NULL; w.binaural_latency_ns = 0; @@ -1038,7 +1130,12 @@ static ivas_error setRendInputActiveIsm( IVAS_REND_AUDIO_CONFIG_7_1_4, outConfig, hRendCfg, - *rendCtx.pOutSampleRate ); + *rendCtx.pOutSampleRate +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + 0 +#endif + ); } if ( error != IVAS_ERR_OK ) { @@ -1058,10 +1155,17 @@ static void clearInputIsm( initRendInputBase( &inputIsm->base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, rendCtx ); /* Free input's internal handles */ +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( inputIsm->crendWrapper.hCrend[0] != NULL ) + { + ivas_rend_closeCrend( &inputIsm->crendWrapper, 0 ); + } +#else if ( inputIsm->crendWrapper.hCrend != NULL ) { ivas_rend_closeCrend( &inputIsm->crendWrapper ); } +#endif if ( inputIsm->tdRendWrapper.hBinRendererTd != NULL ) { ivas_td_binaural_close( &inputIsm->tdRendWrapper.hBinRendererTd ); @@ -1571,10 +1675,17 @@ static ivas_error initMcBinauralRendering( ivas_td_binaural_close( &inputMc->tdRendWrapper.hBinRendererTd ); inputMc->tdRendWrapper.hHrtfTD = NULL; } +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( inputMc->crendWrapper.hCrend[0] != NULL ) + { + ivas_rend_closeCrend( &inputMc->crendWrapper, 0 ); + } +#else if ( inputMc->crendWrapper.hCrend != NULL ) { ivas_rend_closeCrend( &inputMc->crendWrapper ); } +#endif outSampleRate = *inputMc->base.ctx.pOutSampleRate; @@ -1612,7 +1723,12 @@ static ivas_error initMcBinauralRendering( ( inConfig == IVAS_REND_AUDIO_CONFIG_LS_CUSTOM ) ? IVAS_REND_AUDIO_CONFIG_7_1_4 : inConfig, outConfig, hRendCfg, - outSampleRate ) ) != IVAS_ERR_OK ) + outSampleRate +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + 0 +#endif + ) ) != IVAS_ERR_OK ) { return error; } @@ -1729,10 +1845,17 @@ static void clearInputMc( { efap_free_data( &inputMc->efapInWrapper.hEfap ); } +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( inputMc->crendWrapper.hCrend[0] != NULL ) + { + ivas_rend_closeCrend( &inputMc->crendWrapper, 0 ); + } +#else if ( inputMc->crendWrapper.hCrend != NULL ) { ivas_rend_closeCrend( &inputMc->crendWrapper ); } +#endif if ( inputMc->tdRendWrapper.hBinRendererTd != NULL ) { ivas_td_binaural_close( &inputMc->tdRendWrapper.hBinRendererTd ); @@ -1830,6 +1953,43 @@ static ivas_error initSbaPanGainsForSbaOut( return error; } +#ifdef SPLIT_REND_WITH_HEAD_ROT +static ivas_error +updateSplitPostRendPanGains( + input_split_post_rend *inputSplitPostRend, + const IVAS_REND_AudioConfig outConfig, + RENDER_CONFIG_DATA *hRendCfg ) +{ + ivas_error error; + rendering_context rendCtx; + int16_t numOutChannels; + getAudioConfigNumChannels( outConfig, &numOutChannels ); + + rendCtx = inputSplitPostRend->base.ctx; + ivas_renderSplitGetMultiBinPoseData( + &hRendCfg->split_rend_config, + &inputSplitPostRend->splitPostRendWrapper.multiBinPoseData, + rendCtx.pHeadRotData->sr_pose_pred_axis ); + + error = ivas_splitBinPostRendOpen( &inputSplitPostRend->splitPostRendWrapper.hBinHrSplitPostRend, + &inputSplitPostRend->splitPostRendWrapper.multiBinPoseData, + *rendCtx.pOutSampleRate, ( inputSplitPostRend->base.inConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) ? 1 : 0 ); + if ( error != IVAS_ERR_OK ) + { + return error; + } + if ( inputSplitPostRend->base.inConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) + { + error = ivas_splitBinLCLDDecOpen( &inputSplitPostRend->splitPostRendWrapper.hSplitBinLCLDDec, *rendCtx.pOutSampleRate, numOutChannels ); + if ( error != IVAS_ERR_OK ) + { + return error; + } + } + + return IVAS_ERR_OK; +} +#endif static ivas_error updateSbaPanGains( input_sba *inputSba, @@ -1857,24 +2017,70 @@ updateSbaPanGains( case IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL: switch ( outConfig ) { - case IVAS_REND_AUDIO_CONFIG_BINAURAL: #ifdef SPLIT_REND_WITH_HEAD_ROT - if ( ( *rendCtx.pSplitRendMode ) != SPLIT_REND_DISABLED ) + case IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB: + case IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM: + { + int16_t is_cldfb_in; + assert( inConfig == IVAS_REND_AUDIO_CONFIG_HOA3 && ( *rendCtx.pOutSampleRate == 48000 ) && "split binaural mode is currently supported with HOA3 input and 48k sampling rate only" ); + is_cldfb_in = 1; + ivas_renderSplitGetMultiBinPoseData( + &rendCtx.hhRendererConfig[0]->split_rend_config, + &inputSba->splitRendWrapper.multiBinPoseData, + rendCtx.pHeadRotData->sr_pose_pred_axis ); +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( hRendCfg->renderer_type_override != RENDER_TYPE_OVERRIDE_FASTCONV ) + + { + error = ivas_rend_openMultiBinCrend( &inputSba->crendWrapper, inConfig, outConfig, + &inputSba->splitRendWrapper.multiBinPoseData, + *rendCtx.pOutSampleRate ); + if ( error != IVAS_ERR_OK ) + { + return error; + } + is_cldfb_in = 0; + } + else +#endif + { + error = ivas_rend_openCldfbRend( &inputSba->cldfbRendWrapper, inConfig, outConfig, hRendCfg, + &inputSba->splitRendWrapper.multiBinPoseData, + *rendCtx.pOutSampleRate ); + if ( error != IVAS_ERR_OK ) + { + return error; + } + is_cldfb_in = 1; + } + error = ivas_split_renderer_open( &inputSba->splitRendWrapper, + &inputSba->base.ctx.hhRendererConfig[0]->split_rend_config, + *rendCtx.pOutSampleRate, is_cldfb_in, ( outConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ? 1 : 0 ); + break; + } +#endif + case IVAS_REND_AUDIO_CONFIG_BINAURAL: +#ifdef DEBUGGING + if ( hRendCfg->renderer_type_override == RENDER_TYPE_OVERRIDE_FASTCONV ) + { - if ( ( *rendCtx.pSplitRendMode ) != SPLIT_REND_POST ) + error = ivas_rend_openCldfbRend( &inputSba->cldfbRendWrapper, inConfig, outConfig, hRendCfg, + &inputSba->splitRendWrapper.multiBinPoseData, + *rendCtx.pOutSampleRate ); + if ( error != IVAS_ERR_OK ) { - error = ivas_rend_openCldfbRend( &inputSba->cldfbRendWrapper, inConfig, SPLIT_REND_PRE, hRendCfg, *rendCtx.pOutSampleRate ); - if ( error != IVAS_ERR_OK ) - { - return error; - } + return error; } - error = ivas_split_renderer_open( &inputSba->splitRendWrapper, *rendCtx.pOutSampleRate, *rendCtx.pSplitRendMode, 1 ); } else #endif { - error = ivas_rend_openCrend( &inputSba->crendWrapper, inConfig, outConfig, hRendCfg, *rendCtx.pOutSampleRate ); + error = ivas_rend_openCrend( &inputSba->crendWrapper, inConfig, outConfig, hRendCfg, *rendCtx.pOutSampleRate +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + 0 +#endif + ); } break; case IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM: @@ -1882,7 +2088,12 @@ updateSbaPanGains( { return error; } - error = ivas_rend_openCrend( &inputSba->crendWrapper, IVAS_REND_AUDIO_CONFIG_7_1_4, outConfig, hRendCfg, *rendCtx.pOutSampleRate ); + error = ivas_rend_openCrend( &inputSba->crendWrapper, IVAS_REND_AUDIO_CONFIG_7_1_4, outConfig, hRendCfg, *rendCtx.pOutSampleRate +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + 0 +#endif + ); break; default: return IVAS_ERR_INVALID_OUTPUT_FORMAT; @@ -1900,6 +2111,33 @@ updateSbaPanGains( return IVAS_ERR_OK; } +#ifdef SPLIT_REND_WITH_HEAD_ROT +static ivas_error setRendInputActiveSplitPostRend( + void *input, + const IVAS_REND_AudioConfig inConfig, + const IVAS_REND_InputId id, + RENDER_CONFIG_DATA *hRendCfg ) +{ + ivas_error error; + rendering_context rendCtx; + IVAS_REND_AudioConfig outConfig; + input_split_post_rend *inputSplitPostRend; + + inputSplitPostRend = (input_split_post_rend *) input; + rendCtx = inputSplitPostRend->base.ctx; + outConfig = *rendCtx.pOutConfig; + + initRendInputBase( &inputSplitPostRend->base, inConfig, id, rendCtx ); + + if ( ( error = updateSplitPostRendPanGains( inputSplitPostRend, outConfig, hRendCfg ) ) != IVAS_ERR_OK ) + { + return error; + } + + return error; +} +#endif + static ivas_error setRendInputActiveSba( void *input, const IVAS_REND_AudioConfig inConfig, @@ -1910,6 +2148,9 @@ static ivas_error setRendInputActiveSba( rendering_context rendCtx; IVAS_REND_AudioConfig outConfig; input_sba *inputSba; +#ifdef SPLIT_REND_WITH_HEAD_ROT + int16_t pos_idx; +#endif inputSba = (input_sba *) input; rendCtx = inputSba->base.ctx; @@ -1918,7 +2159,14 @@ static ivas_error setRendInputActiveSba( initRendInputBase( &inputSba->base, inConfig, id, rendCtx ); setZeroPanMatrix( inputSba->hoaDecMtx ); inputSba->crendWrapper = defaultCrendWrapper(); +#ifdef SPLIT_REND_WITH_HEAD_ROT + for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES; pos_idx++ ) + { + initRotGains( inputSba->rot_gains_prev[pos_idx] ); + } +#else initRotGains( inputSba->rot_gains_prev ); +#endif if ( ( error = updateSbaPanGains( inputSba, outConfig, hRendCfg ) ) != IVAS_ERR_OK ) { @@ -1928,20 +2176,54 @@ static ivas_error setRendInputActiveSba( return error; } +#ifdef SPLIT_REND_WITH_HEAD_ROT +static void clearInputSplitRend( + input_split_post_rend *inputSplitRend ) +{ + // rendering_context rendCtx; + + // rendCtx = inputSplitRend->base.ctx; + + if ( inputSplitRend->splitPostRendWrapper.hBinHrSplitPostRend != NULL ) + { + ivas_splitBinPostRendClose( &inputSplitRend->splitPostRendWrapper.hBinHrSplitPostRend ); + } + if ( inputSplitRend->splitPostRendWrapper.hSplitBinLCLDDec != NULL ) + { + ivas_splitBinLCLDDecClose( &inputSplitRend->splitPostRendWrapper.hSplitBinLCLDDec ); + } + + return; +} + +#endif static void clearInputSba( input_sba *inputSba ) { rendering_context rendCtx; +#ifdef SPLIT_REND_WITH_HEAD_ROT + int16_t pos_idx; +#endif rendCtx = inputSba->base.ctx; initRendInputBase( &inputSba->base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, rendCtx ); /* Free input's internal handles */ +#ifdef SPLIT_REND_WITH_HEAD_ROT + for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES; pos_idx++ ) + { + if ( inputSba->crendWrapper.hCrend[pos_idx] != NULL ) + { + ivas_rend_closeCrend( &inputSba->crendWrapper, pos_idx ); + } + } +#else if ( inputSba->crendWrapper.hCrend != NULL ) { ivas_rend_closeCrend( &inputSba->crendWrapper ); } +#endif #ifdef SPLIT_REND_WITH_HEAD_ROT if ( inputSba->cldfbRendWrapper.hCldfbRend != NULL ) { @@ -2119,7 +2401,11 @@ static ivas_error initMasaDummyDecForBinauralOut( input_masa *inputMasa, IVAS_RE decDummy->mc_mode = MC_MODE_NONE; /* Todo Nokia: This should be also refactored in such way that it is not checked if not in MC mode */ ivas_output_init( &( decDummy->hOutSetup ), output_config ); - if ( output_config == AUDIO_CONFIG_BINAURAL ) + if ( output_config == AUDIO_CONFIG_BINAURAL +#ifdef SPLIT_REND_WITH_HEAD_ROT + || output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB +#endif + ) { decDummy->renderer_type = RENDERER_BINAURAL_PARAMETRIC; } @@ -2378,17 +2664,15 @@ static void clearInputMasa( input_masa *inputMasa ) ivas_error IVAS_REND_Open( IVAS_REND_HANDLE *phIvasRend, const int32_t outputSampleRate, - const IVAS_REND_AudioConfig outConfig -#ifdef SPLIT_REND_WITH_HEAD_ROT - , - IVAS_SPLIT_REND_MODE splitRendMode -#endif -) + const IVAS_REND_AudioConfig outConfig ) { int16_t i; IVAS_REND_HANDLE hIvasRend; ivas_error error; int16_t numOutChannels; +#ifdef SPLIT_REND_WITH_HEAD_ROT + int16_t pos_idx; +#endif /*-----------------------------------------------------------------* * Validate function arguments @@ -2423,9 +2707,6 @@ ivas_error IVAS_REND_Open( #ifdef DEBUGGING hIvasRend->numClipping = 0; #endif -#ifdef SPLIT_REND_WITH_HEAD_ROT - hIvasRend->splitRendMode = splitRendMode; -#endif /* Initialize limiter */ if ( ( error = IVAS_REND_NumOutChannels( hIvasRend, &numOutChannels ) ) != IVAS_ERR_OK ) @@ -2444,20 +2725,42 @@ ivas_error IVAS_REND_Open( for ( i = 0; i < RENDERER_MAX_ISM_INPUTS; ++i ) { initRendInputBase( &hIvasRend->inputsIsm[i].base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, getRendCtx( hIvasRend ) ); +#ifdef SPLIT_REND_WITH_HEAD_ROT + /* why not use defaultCrendWrapper() ??*/ + for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES; pos_idx++ ) + { + hIvasRend->inputsIsm[i].crendWrapper.hCrend[pos_idx] = NULL; + } +#else hIvasRend->inputsIsm[i].crendWrapper.hCrend = NULL; +#endif hIvasRend->inputsIsm[i].tdRendWrapper.hBinRendererTd = NULL; } for ( i = 0; i < RENDERER_MAX_MC_INPUTS; ++i ) { initRendInputBase( &hIvasRend->inputsMc[i].base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, getRendCtx( hIvasRend ) ); hIvasRend->inputsMc[i].efapInWrapper.hEfap = NULL; +#ifdef SPLIT_REND_WITH_HEAD_ROT + for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES; pos_idx++ ) + { + hIvasRend->inputsMc[i].crendWrapper.hCrend[pos_idx] = NULL; + } +#else hIvasRend->inputsMc[i].crendWrapper.hCrend = NULL; +#endif hIvasRend->inputsMc[i].tdRendWrapper.hBinRendererTd = NULL; } for ( i = 0; i < RENDERER_MAX_SBA_INPUTS; ++i ) { initRendInputBase( &hIvasRend->inputsSba[i].base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, getRendCtx( hIvasRend ) ); +#ifdef SPLIT_REND_WITH_HEAD_ROT + for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES; pos_idx++ ) + { + hIvasRend->inputsSba[i].crendWrapper.hCrend[pos_idx] = NULL; + } +#else hIvasRend->inputsSba[i].crendWrapper.hCrend = NULL; +#endif #ifdef SPLIT_REND_WITH_HEAD_ROT hIvasRend->inputsSba[i].cldfbRendWrapper.hCldfbRend = NULL; ivas_init_split_rend_handles( &hIvasRend->inputsSba[i].splitRendWrapper ); @@ -2472,6 +2775,16 @@ ivas_error IVAS_REND_Open( hIvasRend->inputsMasa[i].decDummy = NULL; hIvasRend->inputsMasa[i].metadataHasBeenFed = false; } +#ifdef SPLIT_REND_WITH_HEAD_ROT + for ( i = 0; i < RENDERER_MAX_BIN_INPUTS; ++i ) + { + initRendInputBase( &hIvasRend->inputsSplitPost[i].base, + IVAS_REND_AUDIO_CONFIG_UNKNOWN, + 0, + getRendCtx( hIvasRend ) ); + ivas_init_split_post_rend_handles( &hIvasRend->inputsSplitPost[i].splitPostRendWrapper ); + } +#endif return IVAS_ERR_OK; } @@ -2699,6 +3012,15 @@ static ivas_error getInputById( } pInputBase = &hIvasRend->inputsMasa[inputIndex].base; break; +#ifdef SPLIT_REND_WITH_HEAD_ROT + case IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL: + if ( inputIndex > RENDERER_MAX_BIN_INPUTS ) + { + return IVAS_ERR_INVALID_INPUT_ID; + } + pInputBase = &hIvasRend->inputsSplitPost[inputIndex].base; + break; +#endif default: return IVAS_ERR_INVALID_INPUT_ID; } @@ -2764,6 +3086,15 @@ static ivas_error getConstInputById( } pInputBase = &hIvasRend->inputsMasa[inputIndex].base; break; +#ifdef SPLIT_REND_WITH_HEAD_ROT + case IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL: + if ( inputIndex > RENDERER_MAX_BIN_INPUTS ) + { + return IVAS_ERR_INVALID_INPUT_ID; + } + pInputBase = &hIvasRend->inputsSplitPost[inputIndex].base; + break; +#endif default: return IVAS_ERR_INVALID_INPUT_ID; } @@ -2868,6 +3199,14 @@ ivas_error IVAS_REND_AddInput( inputStructSize = sizeof( *hIvasRend->inputsMasa ); activateInput = setRendInputActiveMasa; break; +#ifdef SPLIT_REND_WITH_HEAD_ROT + case IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL: + maxNumInputsOfType = RENDERER_MAX_BIN_INPUTS; + inputsArray = hIvasRend->inputsSplitPost; + inputStructSize = sizeof( *hIvasRend->inputsSplitPost ); + activateInput = setRendInputActiveSplitPostRend; + break; +#endif default: return IVAS_ERR_INVALID_INPUT_FORMAT; } @@ -3065,6 +3404,11 @@ ivas_error IVAS_REND_RemoveInput( case IVAS_REND_AUDIO_CONFIG_TYPE_MASA: clearInputMasa( (input_masa *) inputBase ); break; +#ifdef SPLIT_REND_WITH_HEAD_ROT + case IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL: + clearInputSplitRend( (input_split_post_rend *) inputBase ); + break; +#endif default: return IVAS_ERR_INVALID_INPUT_FORMAT; } @@ -3151,26 +3495,49 @@ ivas_error IVAS_REND_GetDelay( if ( hIvasRend->inputsSba[i].base.inConfig != IVAS_REND_AUDIO_CONFIG_UNKNOWN ) { #ifdef SPLIT_REND_WITH_HEAD_ROT - if ( hIvasRend->inputsSba[i].splitRendWrapper.hBinHrSplitPostRend != NULL ) + if ( hIvasRend->inputsSba[i].splitRendWrapper.hBinHrSplitPreRend != NULL ) { - latency_ns = hIvasRend->inputsSba[i].cldfbRendWrapper.binaural_latency_ns; - latency_ns += IVAS_FB_DEC_DELAY_NS; +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( hIvasRend->hRendererConfig->renderer_type_override != RENDER_TYPE_OVERRIDE_FASTCONV ) + { + latency_ns = hIvasRend->inputsSba[i].crendWrapper.binaural_latency_ns; + } + else +#endif + { + latency_ns = hIvasRend->inputsSba[i].cldfbRendWrapper.binaural_latency_ns; + } *nSamples = max( *nSamples, NS2SA( *timeScale, latency_ns ) ); } else if ( hIvasRend->inputsSba[i].cldfbRendWrapper.hCldfbRend != NULL ) { - latency_ns = 0; + latency_ns = hIvasRend->inputsSba[i].cldfbRendWrapper.binaural_latency_ns; + latency_ns += IVAS_FB_DEC_DELAY_NS; *nSamples = max( *nSamples, NS2SA( *timeScale, latency_ns ) ); } + else #endif { latency_ns = hIvasRend->inputsSba[i].crendWrapper.binaural_latency_ns; +#ifdef ROTATE_CREND_IN_CLDFB_DOMAIN + latency_ns += IVAS_FB_DEC_DELAY_NS; +#endif *nSamples = max( *nSamples, NS2SA( *timeScale, latency_ns ) ); } } } - - for ( i = 0; i < RENDERER_MAX_MASA_INPUTS; i++ ) +#ifdef SPLIT_REND_WITH_HEAD_ROT + for ( i = 0; i < RENDERER_MAX_BIN_INPUTS; i++ ) + { + if ( hIvasRend->inputsSplitPost[i].base.inConfig != IVAS_REND_AUDIO_CONFIG_UNKNOWN ) + { + latency_ns = IVAS_FB_DEC_DELAY_NS; + *nSamples = max( *nSamples, NS2SA( *timeScale, latency_ns ) ); + } + } +#endif + + for ( i = 0; i < RENDERER_MAX_MASA_INPUTS; i++ ) { if ( hIvasRend->inputsMasa[i].base.inConfig != IVAS_REND_AUDIO_CONFIG_UNKNOWN ) { @@ -3347,6 +3714,24 @@ ivas_error IVAS_REND_InitConfig( IVAS_REND_HANDLE st, return IVAS_ERR_OK; } +#ifdef SPLIT_REND_WITH_HEAD_ROT +static int16_t is_SplitRend_BitRate( const int32_t splitRendBitRate ) +{ + int16_t j; + + j = 0; + while ( j < SIZE_SPLIT_REND_BRATE_TBL && splitRendBitRate != split_rend_brate_tbl[j] ) + { + j++; + } + if ( j >= SIZE_SPLIT_REND_BRATE_TBL ) + { + return 0; + } + return 1; +} +#endif + int16_t IVAS_REND_GetRenderConfig( IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS decoder handle */ const IVAS_RENDER_CONFIG_HANDLE hRCout /* o : Render configuration handle */ @@ -3360,7 +3745,7 @@ int16_t IVAS_REND_GetRenderConfig( } hRCin = hIvasRend->hRendererConfig; -#ifdef DEBUGGING +#if ( defined DEBUGGING ) || ( defined SPLIT_REND_WITH_HEAD_ROT ) switch ( hRCin->renderer_type_override ) { case RENDER_TYPE_OVERRIDE_CREND: @@ -3385,6 +3770,13 @@ int16_t IVAS_REND_GetRenderConfig( mvr2r( hRCin->roomAcoustics.pAcoustic_rt60, hRCout->room_acoustics.pAcoustic_rt60, CLDFB_NO_CHANNELS_MAX ); mvr2r( hRCin->roomAcoustics.pAcoustic_dsr, hRCout->room_acoustics.pAcoustic_dsr, CLDFB_NO_CHANNELS_MAX ); +#ifdef SPLIT_REND_WITH_HEAD_ROT + hRCout->split_rend_config.splitRendBitRate = SPLIT_REND_768k; + hRCout->split_rend_config.dof = 3; + hRCout->split_rend_config.hq_mode = 0; + hRCout->split_rend_config.codec_delay_ms = 0; +#endif + return IVAS_ERR_OK; } @@ -3402,7 +3794,7 @@ int16_t IVAS_REND_FeedRenderConfig( } hRenderConfig = hIvasRend->hRendererConfig; -#ifdef DEBUGGING +#if ( defined DEBUGGING ) || ( defined SPLIT_REND_WITH_HEAD_ROT ) hRenderConfig->renderer_type_override = RENDER_TYPE_OVERRIDE_NONE; if ( renderConfig.renderer_type_override == IVAS_RENDER_TYPE_OVERRIDE_FASTCONV ) { @@ -3423,16 +3815,22 @@ int16_t IVAS_REND_FeedRenderConfig( mvr2r( renderConfig.room_acoustics.pAcoustic_rt60, hRenderConfig->roomAcoustics.pAcoustic_rt60, CLDFB_NO_CHANNELS_MAX ); mvr2r( renderConfig.room_acoustics.pAcoustic_dsr, hRenderConfig->roomAcoustics.pAcoustic_dsr, CLDFB_NO_CHANNELS_MAX ); +#ifdef SPLIT_REND_WITH_HEAD_ROT + hRenderConfig->split_rend_config.splitRendBitRate = renderConfig.split_rend_config.splitRendBitRate; + hRenderConfig->split_rend_config.dof = renderConfig.split_rend_config.dof; + hRenderConfig->split_rend_config.hq_mode = renderConfig.split_rend_config.hq_mode; + hRenderConfig->split_rend_config.codec_delay_ms = renderConfig.split_rend_config.codec_delay_ms; +#endif + return IVAS_ERR_OK; } - ivas_error IVAS_REND_SetHeadRotation( IVAS_REND_HANDLE hIvasRend, const IVAS_QUATERNION headRot[RENDERER_HEAD_POSITIONS_PER_FRAME] #ifdef SPLIT_REND_WITH_HEAD_ROT , - const IVAS_SPLIT_REND_MODE splitRendMode + IVAS_SPLIT_REND_ROT_AXIS rot_axis #endif ) { @@ -3454,29 +3852,40 @@ ivas_error IVAS_REND_SetHeadRotation( if ( headRot == NULL ) { - hIvasRend->headRotData.headRotEnabled = 0; - } - else - { - hIvasRend->headRotData.headRotEnabled = 1; #ifdef SPLIT_REND_WITH_HEAD_ROT - if ( splitRendMode == SPLIT_REND_POST ) + if ( ( hIvasRend->outputConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) || + ( hIvasRend->outputConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ) { + hIvasRend->headRotData.headRotEnabled = 1; for ( i = 0; i < RENDERER_HEAD_POSITIONS_PER_FRAME; ++i ) { - hIvasRend->headRotData.headPositionsPostRend[i] = headRot[i]; + hIvasRend->headRotData.headPositions[i].w = -3.0f; + hIvasRend->headRotData.headPositions[i].x = 0.0f; + hIvasRend->headRotData.headPositions[i].y = 0.0f; + hIvasRend->headRotData.headPositions[i].z = 0.0f; } } else + { + hIvasRend->headRotData.headRotEnabled = 0; + } +#else + hIvasRend->headRotData.headRotEnabled = 0; #endif + } + else + { + hIvasRend->headRotData.headRotEnabled = 1; + for ( i = 0; i < RENDERER_HEAD_POSITIONS_PER_FRAME; ++i ) { - for ( i = 0; i < RENDERER_HEAD_POSITIONS_PER_FRAME; ++i ) - { - hIvasRend->headRotData.headPositions[i] = headRot[i]; - } + hIvasRend->headRotData.headPositions[i] = headRot[i]; } } +#ifdef SPLIT_REND_WITH_HEAD_ROT + hIvasRend->headRotData.sr_pose_pred_axis = rot_axis; +#endif + return IVAS_ERR_OK; } @@ -3678,6 +4087,92 @@ static ivas_error rotateFrameMc( return IVAS_ERR_OK; } +#ifdef ROTATE_CREND_IN_CLDFB_DOMAIN +static HANDLE_CLDFB_FILTER_BANK rotateFrameSbacldfb_cldfbAna[16]; +static HANDLE_CLDFB_FILTER_BANK rotateFrameSbacldfb_cldfbSyn[16]; +static ivas_error rotateFrameSbacldfb( + IVAS_REND_AudioBuffer inAudio, /* i : Input Audio buffer */ + IVAS_REND_AudioConfig inConfig, /* i : Input Audio config */ + const IVAS_REND_HeadRotData *headRotData, /* i : Head rotation data */ + rotation_gains gains_prev, /* i/o: Previous frame rotation gains */ + IVAS_REND_AudioBuffer outAudio /* o : Output Audio buffer */ +) +{ + float tmpCrendBuffer[16][960]; + int16_t ch_idx, slot_idx, num_cldfb_bands, num_chs; + float Cldfb_RealBuffer_Binaural[16][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer_Binaural[16][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + float Rmat_local[3][3]; + + num_chs = outAudio.config.numChannels; + if ( frame == 0 ) + { + for ( int16_t ch = 0; ch < num_chs; ch++ ) + { + openCldfb( &( rotateFrameSbacldfb_cldfbAna[ch] ), CLDFB_ANALYSIS, 48000, CLDFB_PROTOTYPE_5_00MS ); + openCldfb( &( rotateFrameSbacldfb_cldfbSyn[ch] ), CLDFB_SYNTHESIS, 48000, CLDFB_PROTOTYPE_5_00MS ); + } + } + + num_cldfb_bands = CLDFB_NO_CHANNELS_MAX; + + copyBufferTo2dArray( inAudio, tmpCrendBuffer ); + + for ( int16_t sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) + { + /* Implement CLDFB analysis */ + for ( ch_idx = 0; ch_idx < num_chs; ch_idx++ ) + { + for ( slot_idx = 0; slot_idx < MAX_PARAM_SPATIAL_SUBFRAMES; slot_idx++ ) + { + int16_t idx = sf * MAX_PARAM_SPATIAL_SUBFRAMES + slot_idx; + cldfbAnalysis_ts( &( tmpCrendBuffer[ch_idx][num_cldfb_bands * idx] ), + Cldfb_RealBuffer_Binaural[ch_idx][slot_idx], + Cldfb_ImagBuffer_Binaural[ch_idx][slot_idx], + num_cldfb_bands, + rotateFrameSbacldfb_cldfbAna[ch_idx] ); + } + } + + QuatToRotMat( headRotData->headPositions[sf], Rmat_local ); + rotateFrame_shd_cldfb( Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Rmat_local, num_chs, 3 ); + + /* Implement CLDFB synthesis */ + for ( ch_idx = 0; ch_idx < num_chs; ch_idx++ ) + { + float *RealBuffer[CLDFB_NO_COL_MAX]; + float *ImagBuffer[CLDFB_NO_COL_MAX]; + int16_t idx = sf * num_cldfb_bands * MAX_PARAM_SPATIAL_SUBFRAMES; + + for ( slot_idx = 0; slot_idx < MAX_PARAM_SPATIAL_SUBFRAMES; slot_idx++ ) + { + RealBuffer[slot_idx] = Cldfb_RealBuffer_Binaural[ch_idx][slot_idx]; + ImagBuffer[slot_idx] = Cldfb_ImagBuffer_Binaural[ch_idx][slot_idx]; + } + + cldfbSynthesis( RealBuffer, ImagBuffer, &( tmpCrendBuffer[ch_idx][idx] ), num_cldfb_bands * MAX_PARAM_SPATIAL_SUBFRAMES, rotateFrameSbacldfb_cldfbSyn[ch_idx] ); + } + } + + + { + int16_t smplIdx, chnlIdx; + float *writePtr; + + writePtr = outAudio.data; + for ( chnlIdx = 0; chnlIdx < outAudio.config.numChannels; ++chnlIdx ) + { + for ( smplIdx = 0; smplIdx < outAudio.config.numSamplesPerChannel; ++smplIdx ) + { + *writePtr++ = tmpCrendBuffer[chnlIdx][smplIdx]; + } + } + } + + return IVAS_ERR_OK; +} +#endif + static ivas_error rotateFrameSba( IVAS_REND_AudioBuffer inAudio, /* i : Input Audio buffer */ IVAS_REND_AudioConfig inConfig, /* i : Input Audio config */ @@ -3738,7 +4233,18 @@ static ivas_error rotateFrameSba( ( 1 - headRotData->crossfade[i] ) * gains_prev[n][m] * ( *readPtr ); } } +#ifdef FIX_376_SBA_ROTATE + /* write back the result */ + for ( n = m1; n < m2; n++ ) + { + writePtr = getSmplPtr( outAudio, n, subframe_idx * subframe_len + i ); + ( *writePtr ) = tmpRot[n - m1]; + } + m1 = m2; + m2 += 2 * ( l + 1 ) + 1; +#endif } +#ifndef FIX_376_SBA_ROTATE /* write back the result */ for ( n = m1; n < m2; n++ ) { @@ -3747,6 +4253,7 @@ static ivas_error rotateFrameSba( } m1 = m2; m2 += 2 * ( l + 1 ) + 1; +#endif } /*unoptimized code for reference (full matrix multiplication)*/ @@ -3897,7 +4404,12 @@ static ivas_error renderIsmToBinauralRoom( copyBufferTo2dArray( tmpMcBuffer, tmpCrendBuffer ); - ivas_rend_crendProcess( &ismInput->crendWrapper, IVAS_REND_AUDIO_CONFIG_7_1_4, IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM, tmpCrendBuffer, *ismInput->base.ctx.pOutSampleRate ); + ivas_rend_crendProcess( &ismInput->crendWrapper, IVAS_REND_AUDIO_CONFIG_7_1_4, IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM, tmpCrendBuffer, *ismInput->base.ctx.pOutSampleRate +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + 0 +#endif + ); accumulate2dArrayToBuffer( tmpCrendBuffer, &outAudio ); @@ -4170,7 +4682,12 @@ static ivas_error renderMcToBinaural( } /* call CREND */ - if ( ( error = ivas_rend_crendProcess( &mcInput->crendWrapper, mcInput->base.inConfig, outConfig, tmpRendBuffer, *mcInput->base.ctx.pOutSampleRate ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_rend_crendProcess( &mcInput->crendWrapper, mcInput->base.inConfig, outConfig, tmpRendBuffer, *mcInput->base.ctx.pOutSampleRate +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + 0 +#endif + ) ) != IVAS_ERR_OK ) { return error; } @@ -4222,7 +4739,12 @@ static ivas_error renderMcToBinauralRoom( } /* call CREND */ - if ( ( error = ivas_rend_crendProcess( &mcInput->crendWrapper, mcInput->base.inConfig, outConfig, tmpCrendBuffer, *mcInput->base.ctx.pOutSampleRate ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_rend_crendProcess( &mcInput->crendWrapper, mcInput->base.inConfig, outConfig, tmpCrendBuffer, *mcInput->base.ctx.pOutSampleRate +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + 0 +#endif + ) ) != IVAS_ERR_OK ) { return error; } @@ -4289,7 +4811,12 @@ static ivas_error renderMcCustomLsToBinauralRoom( copyBufferTo2dArray( tmpMcBuffer, tmpCrendBuffer ); /* call CREND */ - if ( ( error = ivas_rend_crendProcess( &mcInput->crendWrapper, IVAS_REND_AUDIO_CONFIG_7_1_4, outConfig, tmpCrendBuffer, *mcInput->base.ctx.pOutSampleRate ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_rend_crendProcess( &mcInput->crendWrapper, IVAS_REND_AUDIO_CONFIG_7_1_4, outConfig, tmpCrendBuffer, *mcInput->base.ctx.pOutSampleRate +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + 0 +#endif + ) ) != IVAS_ERR_OK ) { return error; } @@ -4481,37 +5008,164 @@ static ivas_error renderSbaToSba( return IVAS_ERR_OK; } + #ifdef SPLIT_REND_WITH_HEAD_ROT -static ivas_error renderMultiBinToSplitBinaural( - SPLIT_REND_WRAPPER *hSplitBin, - ivas_split_rend_bits_t *pBits, - float Cldfb_In_BinReal[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], - float Cldfb_In_BinImag[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], - const IVAS_REND_HeadRotData *pHeadRotData, - const int16_t max_bands, - float out[][L_FRAME48k] ) +static ivas_error renderSplitBinauralWithPostRot( + input_split_post_rend *splitBinInput, + IVAS_REND_AudioBuffer outAudio, + IVAS_REND_BitstreamBuffer *hBits ) { + float Cldfb_RealBuffer_Binaural[BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer_Binaural[BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; ivas_error error; - IVAS_QUATERNION QuaternionsPre[MAX_PARAM_SPATIAL_SUBFRAMES]; IVAS_QUATERNION QuaternionsPost[MAX_PARAM_SPATIAL_SUBFRAMES]; int16_t sf_idx; + ivas_split_rend_bits_t bits; + float tmpCrendBuffer[MAX_OUTPUT_CHANNELS][L_FRAME48k]; + const IVAS_REND_HeadRotData *pHeadRotData; + SPLIT_POST_REND_WRAPPER *hSplitBin; error = IVAS_ERR_OK; + pHeadRotData = splitBinInput->base.ctx.pHeadRotData; + hSplitBin = &splitBinInput->splitPostRendWrapper; + convertBitsBufferToInternalBitsBuff( *hBits, &bits ); + for ( sf_idx = 0; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ ) { - QuaternionsPre[sf_idx] = ivas_split_rend_get_sf_rot_data( pHeadRotData->headPositions, sf_idx ); - QuaternionsPost[sf_idx] = ivas_split_rend_get_sf_rot_data( pHeadRotData->headPositionsPostRend, sf_idx ); + QuaternionsPost[sf_idx] = ivas_split_rend_get_sf_rot_data( pHeadRotData->headPositions, sf_idx ); } - ivas_renderMultiBinToSplitBinaural( hSplitBin, pBits, Cldfb_In_BinReal, Cldfb_In_BinImag, QuaternionsPre, QuaternionsPost, max_bands, out ); + ivas_splitBinPostRendMdDec( + &bits, + hSplitBin->hBinHrSplitPostRend, + &hSplitBin->multiBinPoseData, +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + hSplitBin->hBinHrSplitPreRend, +#endif + MAX_SPLIT_REND_MD_BANDS ); + + if ( splitBinInput->base.inConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) + { + ivas_splitBinLCLDDecProcess( + hSplitBin->hSplitBinLCLDDec, + &bits, + Cldfb_RealBuffer_Binaural, + Cldfb_ImagBuffer_Binaural ); + } + else + { + copyBufferTo2dArray( splitBinInput->base.inputBuffer, tmpCrendBuffer ); + } + + ivas_rend_CldfbSplitPostRendProcess( + hSplitBin->hBinHrSplitPostRend, + &hSplitBin->multiBinPoseData, + QuaternionsPost, + Cldfb_RealBuffer_Binaural, + Cldfb_ImagBuffer_Binaural, + tmpCrendBuffer, + ( splitBinInput->base.inConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) ? 1 : 0 ); + + convertInternalBitsBuffToBitsBuffer( hBits, bits ); + accumulate2dArrayToBuffer( tmpCrendBuffer, &outAudio ); return error; } +#endif +#ifdef SPLIT_REND_WITH_HEAD_ROT +#ifdef SPLIT_REND_WITH_HEAD_ROT +static ivas_error renderSbaToMultiBinaural( + input_sba *sbaInput, + const IVAS_REND_AudioConfig outConfig, + float out[][L_FRAME48k] ) +{ + float tmpCrendBuffer[MAX_OUTPUT_CHANNELS][L_FRAME48k]; + int16_t i, pos_idx; + IVAS_REND_HeadRotData HeadRotDataLocal; + + ivas_error error; + IVAS_REND_AudioBuffer tmpRotBuffer; + MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData; + + wmops_sub_start( "renderSbaToMultiBinaural" ); + + HeadRotDataLocal = *sbaInput->base.ctx.pHeadRotData; + for ( i = 1; i < RENDERER_HEAD_POSITIONS_PER_FRAME; i++ ) + { + HeadRotDataLocal.headPositions[i] = HeadRotDataLocal.headPositions[0]; + } + + tmpRotBuffer = sbaInput->base.inputBuffer; + tmpRotBuffer.data = count_malloc( tmpRotBuffer.config.numSamplesPerChannel * tmpRotBuffer.config.numChannels * sizeof( float ) ); + + pMultiBinPoseData = &sbaInput->splitRendWrapper.multiBinPoseData; + for ( pos_idx = 0; pos_idx < pMultiBinPoseData->num_poses; pos_idx++ ) + { + IVAS_QUATERNION Quaternions_orig[RENDERER_HEAD_POSITIONS_PER_FRAME], Quaternions_abs; + for ( i = 0; i < RENDERER_HEAD_POSITIONS_PER_FRAME; i++ ) + { + Quaternions_orig[i] = HeadRotDataLocal.headPositions[i]; + Quaternions_abs.w = -3.0f; + Quat2EulerDegree( HeadRotDataLocal.headPositions[i], &Quaternions_abs.z, &Quaternions_abs.y, &Quaternions_abs.x ); /*order in Quat2Euler seems to be reversed ?*/ + + Quaternions_abs.x += pMultiBinPoseData->relative_head_poses[pos_idx][0]; + Quaternions_abs.y += pMultiBinPoseData->relative_head_poses[pos_idx][1]; + Quaternions_abs.z += pMultiBinPoseData->relative_head_poses[pos_idx][2]; + HeadRotDataLocal.headPositions[i] = Quaternions_abs; + } + + + /* copy input for in-place rotation */ + mvr2r( sbaInput->base.inputBuffer.data, tmpRotBuffer.data, + tmpRotBuffer.config.numChannels * tmpRotBuffer.config.numSamplesPerChannel ); + + rotateFrameSba( sbaInput->base.inputBuffer, + sbaInput->base.inConfig, + &HeadRotDataLocal, + sbaInput->rot_gains_prev[pos_idx], + tmpRotBuffer ); + + copyBufferTo2dArray( tmpRotBuffer, tmpCrendBuffer ); + + assert( sbaInput->crendWrapper.hCrend[0]->hReverb == NULL ); + /* call CREND */ + if ( ( error = ivas_rend_crendProcess( &sbaInput->crendWrapper, sbaInput->base.inConfig, outConfig, tmpCrendBuffer, *sbaInput->base.ctx.pOutSampleRate +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + pos_idx +#endif + ) ) != IVAS_ERR_OK ) + { + return error; + } + + for ( i = 0; i < RENDERER_HEAD_POSITIONS_PER_FRAME; i++ ) + { + HeadRotDataLocal.headPositions[i] = Quaternions_orig[i]; + } + + /* move to output */ + for ( i = 0; i < BINAURAL_CHANNELS; i++ ) + { + mvr2r( tmpCrendBuffer[i], out[pos_idx * BINAURAL_CHANNELS + i], tmpRotBuffer.config.numSamplesPerChannel ); + } + } + count_free( tmpRotBuffer.data ); + + wmops_sub_end(); + + return IVAS_ERR_OK; +} +#endif static ivas_error renderSbaToSplitBinaural( input_sba *sbaInput, - IVAS_REND_AudioBuffer outAudio ) +#ifdef SPLIT_REND_WITH_HEAD_ROT + const IVAS_REND_AudioConfig outConfig, +#endif + IVAS_REND_AudioBuffer outAudio, + IVAS_REND_BitstreamBuffer *hBits ) { float tmpCrendBuffer[MAX_OUTPUT_CHANNELS][L_FRAME48k]; ivas_error error; @@ -4525,37 +5179,65 @@ static ivas_error renderSbaToSplitBinaural( float Cldfb_ImagBuffer_Binaural[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; #endif ivas_split_rend_bits_t bits; + int16_t low_res_pre_rend_rot, max_band; + + + low_res_pre_rend_rot = 1; //( *sbaInput->base.ctx.pSplitRendBitRate == SPLIT_REND_768k ) ? 0 : 1; wmops_sub_start( "renderSbaToSplitBinaural" ); error = IVAS_ERR_OK; - copyBufferToCLDFBarray( sbaInput->base.inputBuffer, Cldfb_RealBuffer, Cldfb_ImagBuffer ); - ivas_rend_CldfbMultiBinRendProcess( - sbaInput->cldfbRendWrapper.hCldfbRend, - sbaInput->base.ctx.pHeadRotData, - Cldfb_RealBuffer, - Cldfb_ImagBuffer, - Cldfb_RealBuffer_Binaural, - Cldfb_ImagBuffer_Binaural ); + ivas_renderSplitGetMultiBinPoseData( + &sbaInput->base.ctx.hhRendererConfig[0]->split_rend_config, + &sbaInput->splitRendWrapper.multiBinPoseData, + sbaInput->base.ctx.pHeadRotData->sr_pose_pred_axis ); +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( sbaInput->base.ctx.hhRendererConfig[0]->renderer_type_override != RENDER_TYPE_OVERRIDE_FASTCONV ) + { + renderSbaToMultiBinaural( + sbaInput, + outConfig, + tmpCrendBuffer ); + max_band = (int16_t) ( ( BINAURAL_MAXBANDS * ( *sbaInput->base.ctx.pOutSampleRate ) ) / 48000 ); + if ( outConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) + { + accumulate2dArrayToBuffer( tmpCrendBuffer, &outAudio ); + } + } + else +#endif + { + copyBufferToCLDFBarray( sbaInput->base.inputBuffer, Cldfb_RealBuffer, Cldfb_ImagBuffer ); + + ivas_rend_CldfbMultiBinRendProcess( + sbaInput->cldfbRendWrapper.hCldfbRend, + sbaInput->base.ctx.pHeadRotData, + &sbaInput->splitRendWrapper.multiBinPoseData, + Cldfb_RealBuffer, + Cldfb_ImagBuffer, + Cldfb_RealBuffer_Binaural, + Cldfb_ImagBuffer_Binaural, + low_res_pre_rend_rot ); + max_band = sbaInput->cldfbRendWrapper.hCldfbRend->max_band; + } /*SPLIT pre rendering MD and CLDFB coding*/ - ivas_split_rend_bitstream_init( &bits, - outAudio.config.numChannels * outAudio.config.numSamplesPerChannel * sizeof( float ), - (uint8_t *) outAudio.data ); - - renderMultiBinToSplitBinaural( &sbaInput->splitRendWrapper, - &bits, - Cldfb_RealBuffer_Binaural, - Cldfb_ImagBuffer_Binaural, - sbaInput->base.ctx.pHeadRotData, - sbaInput->cldfbRendWrapper.hCldfbRend->max_band, - tmpCrendBuffer ); - - // TEMP zero out - set_zero( outAudio.data, outAudio.config.numChannels * outAudio.config.numSamplesPerChannel ); - accumulate2dArrayToBuffer( tmpCrendBuffer, &outAudio ); + convertBitsBufferToInternalBitsBuff( *hBits, &bits ); + + ivas_renderMultiBinToSplitBinaural( &sbaInput->splitRendWrapper, + sbaInput->base.ctx.pHeadRotData->headPositions, + sbaInput->base.ctx.hhRendererConfig[0]->split_rend_config.splitRendBitRate, + &bits, + Cldfb_RealBuffer_Binaural, + Cldfb_ImagBuffer_Binaural, + max_band, + tmpCrendBuffer, + low_res_pre_rend_rot, + ( outConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ? 1 : 0 ); + + convertInternalBitsBuffToBitsBuffer( hBits, bits ); wmops_sub_end(); @@ -4575,36 +5257,81 @@ static ivas_error renderSbaToBinaural( wmops_sub_start( "renderSbaToBinaural" ); - /* apply rotation */ - if ( sbaInput->base.ctx.pHeadRotData->headRotEnabled ) +#ifdef DEBUGGING + if ( sbaInput->base.ctx.hhRendererConfig[0]->renderer_type_override == RENDER_TYPE_OVERRIDE_FASTCONV ) { - tmpRotBuffer = sbaInput->base.inputBuffer; - tmpRotBuffer.data = count_malloc( tmpRotBuffer.config.numSamplesPerChannel * tmpRotBuffer.config.numChannels * sizeof( float ) ); - /* copy input for in-place rotation */ - mvr2r( sbaInput->base.inputBuffer.data, tmpRotBuffer.data, - tmpRotBuffer.config.numChannels * tmpRotBuffer.config.numSamplesPerChannel ); + float Cldfb_RealBuffer[MAX_OUTPUT_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer[MAX_OUTPUT_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_RealBuffer_Binaural[1][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer_Binaural[1][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; - rotateFrameSba( sbaInput->base.inputBuffer, - sbaInput->base.inConfig, - sbaInput->base.ctx.pHeadRotData, - sbaInput->rot_gains_prev, - tmpRotBuffer ); + copyBufferToCLDFBarray( sbaInput->base.inputBuffer, Cldfb_RealBuffer, Cldfb_ImagBuffer ); - copyBufferTo2dArray( tmpRotBuffer, tmpCrendBuffer ); - count_free( tmpRotBuffer.data ); + ivas_rend_CldfbMultiBinRendProcess( + sbaInput->cldfbRendWrapper.hCldfbRend, + sbaInput->base.ctx.pHeadRotData, + &sbaInput->splitRendWrapper.multiBinPoseData, + Cldfb_RealBuffer, + Cldfb_ImagBuffer, + Cldfb_RealBuffer_Binaural, + Cldfb_ImagBuffer_Binaural, + 0 ); + + accumulateCLDFBArrayToBuffer( Cldfb_RealBuffer_Binaural[0], Cldfb_ImagBuffer_Binaural[0], &outAudio ); } else - { - copyBufferTo2dArray( sbaInput->base.inputBuffer, tmpCrendBuffer ); - } - /* call CREND */ - if ( ( error = ivas_rend_crendProcess( &sbaInput->crendWrapper, sbaInput->base.inConfig, outConfig, tmpCrendBuffer, *sbaInput->base.ctx.pOutSampleRate ) ) != IVAS_ERR_OK ) +#endif { - return error; - } + /* apply rotation */ + if ( sbaInput->base.ctx.pHeadRotData->headRotEnabled ) + { + tmpRotBuffer = sbaInput->base.inputBuffer; + tmpRotBuffer.data = count_malloc( tmpRotBuffer.config.numSamplesPerChannel * tmpRotBuffer.config.numChannels * sizeof( float ) ); + /* copy input for in-place rotation */ + mvr2r( sbaInput->base.inputBuffer.data, tmpRotBuffer.data, + tmpRotBuffer.config.numChannels * tmpRotBuffer.config.numSamplesPerChannel ); + +#ifdef ROTATE_CREND_IN_CLDFB_DOMAIN + rotateFrameSbacldfb( sbaInput->base.inputBuffer, + sbaInput->base.inConfig, + sbaInput->base.ctx.pHeadRotData, + sbaInput->rot_gains_prev[0], + tmpRotBuffer ); +#else + rotateFrameSba( sbaInput->base.inputBuffer, + sbaInput->base.inConfig, + sbaInput->base.ctx.pHeadRotData, +#ifdef SPLIT_REND_WITH_HEAD_ROT + sbaInput->rot_gains_prev[0], +#else + sbaInput->rot_gains_prev, +#endif + tmpRotBuffer ); +#endif - accumulate2dArrayToBuffer( tmpCrendBuffer, &outAudio ); + + copyBufferTo2dArray( tmpRotBuffer, tmpCrendBuffer ); + count_free( tmpRotBuffer.data ); + } + else + { + copyBufferTo2dArray( sbaInput->base.inputBuffer, tmpCrendBuffer ); + } + + /* call CREND */ + if ( ( error = ivas_rend_crendProcess( &sbaInput->crendWrapper, sbaInput->base.inConfig, outConfig, tmpCrendBuffer, *sbaInput->base.ctx.pOutSampleRate +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + 0 +#endif + ) ) != IVAS_ERR_OK ) + { + return error; + } + + accumulate2dArrayToBuffer( tmpCrendBuffer, &outAudio ); + } wmops_sub_end(); @@ -4640,7 +5367,13 @@ static ivas_error renderSbaToBinauralRoom( /* copy input for in-place rotation */ mvr2r( sbaInput->base.inputBuffer.data, tmpRotBuffer.data, tmpRotBuffer.config.numChannels * tmpRotBuffer.config.numSamplesPerChannel ); - rotateFrameSba( sbaInput->base.inputBuffer, sbaInput->base.inConfig, sbaInput->base.ctx.pHeadRotData, sbaInput->rot_gains_prev, tmpRotBuffer ); + rotateFrameSba( sbaInput->base.inputBuffer, sbaInput->base.inConfig, sbaInput->base.ctx.pHeadRotData, +#ifdef SPLIT_REND_WITH_HEAD_ROT + sbaInput->rot_gains_prev[0], +#else + sbaInput->rot_gains_prev, +#endif + tmpRotBuffer ); } /* intermediate rendering to 7_1_4 */ @@ -4659,7 +5392,12 @@ static ivas_error renderSbaToBinauralRoom( copyBufferTo2dArray( tmpMcBuffer, tmpCrendBuffer ); /* call CREND */ - if ( ( error = ivas_rend_crendProcess( &sbaInput->crendWrapper, IVAS_REND_AUDIO_CONFIG_7_1_4, outConfig, tmpCrendBuffer, *sbaInput->base.ctx.pOutSampleRate ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_rend_crendProcess( &sbaInput->crendWrapper, IVAS_REND_AUDIO_CONFIG_7_1_4, outConfig, tmpCrendBuffer, *sbaInput->base.ctx.pOutSampleRate +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + 0 +#endif + ) ) != IVAS_ERR_OK ) { return error; } @@ -4676,26 +5414,59 @@ static ivas_error renderSbaToBinauralRoom( return IVAS_ERR_OK; } +#ifdef SPLIT_REND_WITH_HEAD_ROT +static ivas_error renderInputSplitBin( + input_split_post_rend *splitBinInput, + const IVAS_REND_AudioConfig outConfig, + IVAS_REND_AudioBuffer outAudio, + IVAS_REND_BitstreamBuffer *hBits ) +{ + ivas_error error; + IVAS_REND_AudioBuffer inAudio; + + inAudio = splitBinInput->base.inputBuffer; + if ( splitBinInput->base.numNewSamplesPerChannel != outAudio.config.numSamplesPerChannel ) + { + /* Mismatch between the number of input samples vs number of requested output samples - currently not allowed */ + return IVAS_ERR_INVALID_BUFFER_SIZE; + } + + splitBinInput->base.numNewSamplesPerChannel = 0; + + /* Apply input gain to new audio */ + v_multc( inAudio.data, + splitBinInput->base.gain, + inAudio.data, + inAudio.config.numSamplesPerChannel * inAudio.config.numChannels ); + switch ( outConfig ) + { + case IVAS_REND_AUDIO_CONFIG_BINAURAL: + error = renderSplitBinauralWithPostRot( splitBinInput, outAudio, + hBits ); + break; + default: + return IVAS_ERR_INVALID_OUTPUT_FORMAT; + } + return error; +} +#endif static ivas_error renderInputSba( input_sba *sbaInput, const IVAS_REND_AudioConfig outConfig, - IVAS_REND_AudioBuffer outAudio ) + IVAS_REND_AudioBuffer outAudio +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + IVAS_REND_BitstreamBuffer *hBits +#endif +) { ivas_error error; IVAS_REND_AudioBuffer inAudio; -#ifdef SPLIT_REND_WITH_HEAD_ROT - int16_t cldfb2tdSampleFact; -#endif inAudio = sbaInput->base.inputBuffer; -#ifdef SPLIT_REND_WITH_HEAD_ROT - cldfb2tdSampleFact = ( inAudio.config.is_cldfb ) ? 2 : 1; - if ( sbaInput->base.numNewSamplesPerChannel != outAudio.config.numSamplesPerChannel * cldfb2tdSampleFact ) -#else if ( sbaInput->base.numNewSamplesPerChannel != outAudio.config.numSamplesPerChannel ) -#endif { /* Mismatch between the number of input samples vs number of requested output samples - currently not allowed */ return IVAS_ERR_INVALID_BUFFER_SIZE; @@ -4719,18 +5490,19 @@ static ivas_error renderInputSba( case IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL: switch ( outConfig ) { - case IVAS_REND_AUDIO_CONFIG_BINAURAL: #ifdef SPLIT_REND_WITH_HEAD_ROT - if ( ( *sbaInput->base.ctx.pSplitRendMode ) != SPLIT_REND_DISABLED ) - { - /*TODO : combine this with renderSbaToBinaural*/ - error = renderSbaToSplitBinaural( sbaInput, outAudio ); - } - else + case IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB: + case IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM: + error = renderSbaToSplitBinaural( sbaInput, +#ifdef SPLIT_REND_WITH_HEAD_ROT + outConfig, #endif - { - error = renderSbaToBinaural( sbaInput, outConfig, outAudio ); - } + outAudio, + hBits ); + break; +#endif + case IVAS_REND_AUDIO_CONFIG_BINAURAL: + error = renderSbaToBinaural( sbaInput, outConfig, outAudio ); break; case IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM: error = renderSbaToBinauralRoom( sbaInput, outConfig, outAudio ); @@ -4751,9 +5523,41 @@ static ivas_error renderInputSba( return IVAS_ERR_OK; } +#ifdef SPLIT_REND_WITH_HEAD_ROT +static ivas_error renderActiveInputsSplitBin( + IVAS_REND_HANDLE hIvasRend, + IVAS_REND_AudioBuffer outAudio, + IVAS_REND_BitstreamBuffer *hBits ) +{ + int16_t i; + input_split_post_rend *pCurrentInput; + ivas_error error; + + for ( i = 0, pCurrentInput = hIvasRend->inputsSplitPost; i < RENDERER_MAX_BIN_INPUTS; ++i, ++pCurrentInput ) + { + if ( pCurrentInput->base.inConfig == IVAS_REND_AUDIO_CONFIG_UNKNOWN ) + { + /* Skip inactive inputs */ + continue; + } + + if ( ( error = renderInputSplitBin( pCurrentInput, hIvasRend->outputConfig, outAudio, hBits ) ) != IVAS_ERR_OK ) + { + return error; + } + } + + return IVAS_ERR_OK; +} +#endif static ivas_error renderActiveInputsSba( IVAS_REND_HANDLE hIvasRend, - IVAS_REND_AudioBuffer outAudio ) + IVAS_REND_AudioBuffer outAudio +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + IVAS_REND_BitstreamBuffer *hBits +#endif +) { int16_t i; input_sba *pCurrentInput; @@ -4767,7 +5571,12 @@ static ivas_error renderActiveInputsSba( continue; } - if ( ( error = renderInputSba( pCurrentInput, hIvasRend->outputConfig, outAudio ) ) != IVAS_ERR_OK ) + if ( ( error = renderInputSba( pCurrentInput, hIvasRend->outputConfig, outAudio +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + hBits +#endif + ) ) != IVAS_ERR_OK ) { return error; } @@ -4900,7 +5709,8 @@ static ivas_error renderInputMasa( case IVAS_REND_AUDIO_CONFIG_BINAURAL: error = renderMasaToBinaural( masaInput, outAudio ); break; - /* ToDo */ + /* ToDo */ + // case IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB: // case IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM: // error = renderMasaToBinauralRoom( masaInput, outConfig, outAudio ); // break; @@ -4947,11 +5757,19 @@ static ivas_error renderActiveInputsMasa( } ivas_error IVAS_REND_GetSamples( - IVAS_REND_HANDLE hIvasRend, - IVAS_REND_AudioBuffer outAudio ) + IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ + IVAS_REND_AudioBuffer outAudio /* i/o: buffer for output audio */ +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + IVAS_REND_BitstreamBuffer *hBits /*i/o: buffer for input/output bitstream. Needed in split rendering mode*/ +#endif +) { ivas_error error; int16_t numOutChannels; +#ifdef SPLIT_REND_WITH_HEAD_ROT + int16_t cldfb2tdSampleFact; +#endif /*-----------------------------------------------------------------* * Validate function arguments @@ -4961,7 +5779,15 @@ ivas_error IVAS_REND_GetSamples( { return IVAS_ERR_UNEXPECTED_NULL_POINTER; } +#ifdef SPLIT_REND_WITH_HEAD_ROT + cldfb2tdSampleFact = ( outAudio.config.is_cldfb ) ? 2 : 1; +#endif +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( outAudio.config.numSamplesPerChannel <= 0 || ( MAX_BUFFER_LENGTH_PER_CHANNEL < outAudio.config.numSamplesPerChannel && outAudio.config.is_cldfb == 0 ) || + ( ( MAX_BUFFER_LENGTH_PER_CHANNEL * cldfb2tdSampleFact ) < outAudio.config.numSamplesPerChannel && outAudio.config.is_cldfb == 1 ) ) +#else if ( outAudio.config.numSamplesPerChannel <= 0 || MAX_BUFFER_LENGTH_PER_CHANNEL < outAudio.config.numSamplesPerChannel ) +#endif { return IVAS_ERR_INVALID_BUFFER_SIZE; } @@ -4969,8 +5795,14 @@ ivas_error IVAS_REND_GetSamples( { return IVAS_ERR_WRONG_NUM_CHANNELS; } + +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( getAudioConfigType( hIvasRend->outputConfig ) == IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL && + ( outAudio.config.numSamplesPerChannel * 1000 / cldfb2tdSampleFact ) != BINAURAL_RENDERING_FRAME_SIZE_MS * hIvasRend->sampleRateOut ) +#else if ( getAudioConfigType( hIvasRend->outputConfig ) == IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL && outAudio.config.numSamplesPerChannel * 1000 != BINAURAL_RENDERING_FRAME_SIZE_MS * hIvasRend->sampleRateOut ) +#endif { /* Binaural rendering requires specific frame size */ return IVAS_ERR_INVALID_BUFFER_SIZE; @@ -4995,7 +5827,12 @@ ivas_error IVAS_REND_GetSamples( { return error; } - if ( ( error = renderActiveInputsSba( hIvasRend, outAudio ) ) != IVAS_ERR_OK ) + if ( ( error = renderActiveInputsSba( hIvasRend, outAudio +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + hBits +#endif + ) ) != IVAS_ERR_OK ) { return error; } @@ -5003,11 +5840,30 @@ ivas_error IVAS_REND_GetSamples( { return error; } +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( ( error = renderActiveInputsSplitBin( hIvasRend, outAudio, hBits ) ) != IVAS_ERR_OK ) + { + return error; + } +#endif + + +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( outAudio.config.is_cldfb == 0 ) + { +#ifdef DEBUGGING + hIvasRend->numClipping += +#endif + limitRendererOutput( hIvasRend->hLimiter, outAudio.data, outAudio.config.numSamplesPerChannel, IVAS_LIMITER_THRESHOLD ); + } +#else #ifdef DEBUGGING hIvasRend->numClipping += #endif limitRendererOutput( hIvasRend->hLimiter, outAudio.data, outAudio.config.numSamplesPerChannel, IVAS_LIMITER_THRESHOLD ); +#endif + return IVAS_ERR_OK; } @@ -5050,6 +5906,12 @@ void IVAS_REND_Close( { clearInputMasa( &hIvasRend->inputsMasa[i] ); } +#ifdef SPLIT_REND_WITH_HEAD_ROT + for ( i = 0; i < RENDERER_MAX_BIN_INPUTS; ++i ) + { + clearInputSplitRend( &hIvasRend->inputsSplitPost[i] ); + } +#endif /* clear Config. Renderer */ ivas_render_config_close( &( hIvasRend->hRendererConfig ) ); diff --git a/lib_rend/lib_rend.h b/lib_rend/lib_rend.h index 498545a9c2..065c3c0584 100644 --- a/lib_rend/lib_rend.h +++ b/lib_rend/lib_rend.h @@ -46,6 +46,9 @@ #define RENDERER_MAX_MC_INPUTS 1 #define RENDERER_MAX_SBA_INPUTS 1 #define RENDERER_MAX_MASA_INPUTS 1 +#ifdef SPLIT_REND_WITH_HEAD_ROT +#define RENDERER_MAX_BIN_INPUTS 1 +#endif #define RENDERER_HEAD_POSITIONS_PER_FRAME 4 @@ -64,7 +67,6 @@ typedef struct float *data; } IVAS_REND_AudioBuffer; -#ifdef SPLIT_REND_WITH_HEAD_ROT typedef struct { int32_t bufLenInBytes; @@ -76,7 +78,6 @@ typedef struct IVAS_REND_BitstreamBufferConfig config; uint8_t *bits; } IVAS_REND_BitstreamBuffer; -#endif typedef struct { @@ -141,6 +142,10 @@ typedef enum IVAS_REND_AUDIO_CONFIG_BINAURAL = IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL << 8 | 0, IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM = IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL << 8 | 1, +#ifdef SPLIT_REND_WITH_HEAD_ROT + IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB = IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL << 8 | 2, + IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM = IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL << 8 | 3, +#endif IVAS_REND_AUDIO_CONFIG_MASA1 = IVAS_REND_AUDIO_CONFIG_TYPE_MASA << 8 | 0, IVAS_REND_AUDIO_CONFIG_MASA2 = IVAS_REND_AUDIO_CONFIG_TYPE_MASA << 8 | 1, @@ -167,10 +172,6 @@ ivas_error IVAS_REND_Open( IVAS_REND_HANDLE *phIvasRend, /* i/o: Pointer to renderer handle */ const int32_t outputSampleRate, /* i : output sampling rate */ const IVAS_REND_AudioConfig outConfig /* i : output audio config */ -#ifdef SPLIT_REND_WITH_HEAD_ROT - , - IVAS_SPLIT_REND_MODE splitRendMode /* i : split rendering mode */ -#endif ); /* Note: this will reset custom LFE routings set for any MC input */ @@ -275,13 +276,17 @@ ivas_error IVAS_REND_SetHeadRotation( const IVAS_QUATERNION headRot[RENDERER_HEAD_POSITIONS_PER_FRAME] /* i : head positions for next rendering call */ #ifdef SPLIT_REND_WITH_HEAD_ROT , - const IVAS_SPLIT_REND_MODE splitRendMode + IVAS_SPLIT_REND_ROT_AXIS rot_axis #endif ); ivas_error IVAS_REND_GetSamples( IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ IVAS_REND_AudioBuffer outAudio /* i/o: buffer for output audio */ +#ifdef SPLIT_REND_WITH_HEAD_ROT + , + IVAS_REND_BitstreamBuffer *hBits /*i/o: buffer for input/output bitstream. Needed in split rendering mode*/ +#endif ); /* Functions to be called after rendering */ diff --git a/lib_util/render_config_reader.c b/lib_util/render_config_reader.c index 27eed3bf14..14a24c5fd1 100644 --- a/lib_util/render_config_reader.c +++ b/lib_util/render_config_reader.c @@ -175,7 +175,7 @@ static void strip_spaces_upper( while ( pStr[read_idx] ) { - if ( !isspace( pStr[read_idx] ) && !iscntrl( pStr[read_idx] ) ) + if ( !isspace( (int32_t) pStr[read_idx] ) && !iscntrl( (int32_t) pStr[read_idx] ) ) { pStr[write_idx++] = pStr[read_idx]; } @@ -290,7 +290,7 @@ static ivas_error RenderConfigReader_checkValues( return IVAS_ERR_WRONG_PARAMS; } -#ifdef DEBUGGING +#if ( defined DEBUGGING ) || ( defined SPLIT_REND_WITH_HEAD_ROT ) /* Specific limits for Jot reverb */ if ( hRenderConfig->renderer_type_override == IVAS_RENDER_TYPE_OVERRIDE_CREND ) { @@ -499,7 +499,55 @@ ivas_error RenderConfigReader_read( fprintf( stderr, "Reverb config: number of bands changed but configuration vectors missing\n" ); } } +#ifdef SPLIT_REND_WITH_HEAD_ROT + else if ( strcmp( chapter, "SPLITREND" ) == 0 && strlen( pParams ) != 0 ) + { + params_idx = 0; + pValue = (char *) calloc( strlen( pParams ), sizeof( char ) ); + while ( sscanf( pParams + params_idx, "%64[^=]=%[^;];", item, pValue ) == 2 ) + { + params_idx += (int32_t) ( strlen( item ) + strlen( pValue ) + 2 ); + fprintf( stderr, " PARAM: %s -> %s\n", item, pValue ); + if ( strcmp( item, "CODECDELAY" ) == 0 ) + { + if ( !sscanf( pValue, "%hd", &hRenderConfig->split_rend_config.codec_delay_ms ) ) + { + errorHandler( item, ERROR_VALUE_INVALID ); + } + } + else if ( strcmp( item, "HQMODE" ) == 0 ) + { + if ( !sscanf( pValue, "%hd", &hRenderConfig->split_rend_config.hq_mode ) ) + { + errorHandler( item, ERROR_VALUE_INVALID ); + } + } + else if ( strcmp( item, "BITRATE" ) == 0 ) + { + if ( !sscanf( pValue, "%d", &hRenderConfig->split_rend_config.splitRendBitRate ) ) + { + errorHandler( item, ERROR_VALUE_INVALID ); + } + } + else if ( strcmp( item, "DOF" ) == 0 ) + { + if ( !sscanf( pValue, "%hd", &hRenderConfig->split_rend_config.dof ) ) + { + errorHandler( item, ERROR_VALUE_INVALID ); + } + } + #ifdef DEBUGGING + else + { + fprintf( stderr, "Unsupported configuration property %s\n", item ); + } +#endif + } + free( pValue ); + } +#endif +#if ( defined DEBUGGING ) || ( defined SPLIT_REND_WITH_HEAD_ROT ) else if ( strcmp( chapter, "GENERAL" ) == 0 && strlen( pParams ) != 0 ) { params_idx = 0; diff --git a/lib_util/split_render_file_read_write.c b/lib_util/split_render_file_read_write.c new file mode 100644 index 0000000000..78ef342bbf --- /dev/null +++ b/lib_util/split_render_file_read_write.c @@ -0,0 +1,254 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#include "split_render_file_read_write.h" +#include +#include +#include +#include +#include +#include "cmdl_tools.h" +#include "prot.h" +#include "ivas_cnst.h" + +/*------------------------------------------------------------------------------------------* + * PreProc Macros + *------------------------------------------------------------------------------------------*/ +#define SPLIT_RENDERER_FRAME_HEADER_LEN ( 12 ) + +/*------------------------------------------------------------------------------------------* + * Type definitions + *------------------------------------------------------------------------------------------*/ + +#ifdef SPLIT_REND_WITH_HEAD_ROT +struct SplitFileReadWrite +{ + FILE *file; + uint32_t delay_ns; +}; + + +/*-----------------------------------------------------------------------------------------* + * Function split_rend_reader_open() + * open in read mode + *-----------------------------------------------------------------------------------------*/ +ivas_error split_rend_reader_open( SplitFileReadWrite **hhSplitRendFileReadWrite, char *filename ) +{ + SplitFileReadWrite *hSplitRendFileReadWrite; + size_t header_len, h; + char header[SPLIT_RENDERER_FRAME_HEADER_LEN] = "MAIN_SPLITH"; + char header_read[SPLIT_RENDERER_FRAME_HEADER_LEN]; + + hSplitRendFileReadWrite = (SplitFileReadWrite *) count_malloc( sizeof( SplitFileReadWrite ) ); + hSplitRendFileReadWrite->file = fopen( filename, "rb" ); + if ( hSplitRendFileReadWrite->file == NULL ) + { + fprintf( stderr, "Could not open split rend metadata file %s\n", filename ); + exit( -1 ); + } + + header_len = strlen( header ); + + /*read frame header*/ + for ( h = 0; h < header_len; h++ ) + { + if ( fread( &header_read[h], sizeof( char ), 1, hSplitRendFileReadWrite->file ) != 1 ) + { + return IVAS_ERR_FAILED_FILE_READ; + } + } + if ( strncmp( header_read, header, header_len ) ) + { + fprintf( stderr, "Error split rend bitstream main header mismatch\n" ); + return IVAS_ERR_FAILED_FILE_READ; + } + + fread( &hSplitRendFileReadWrite->delay_ns, sizeof( uint32_t ), 1, hSplitRendFileReadWrite->file ); + + *hhSplitRendFileReadWrite = hSplitRendFileReadWrite; + return IVAS_ERR_OK; +} + +/*-----------------------------------------------------------------------------------------* + * Function split_rend_writer_open() + * open in write mode + *-----------------------------------------------------------------------------------------*/ +ivas_error split_rend_writer_open( SplitFileReadWrite **hhSplitRendFileReadWrite, char *filename, int16_t delayNumSamples, int32_t delayTimeScale ) +{ + SplitFileReadWrite *hSplitRendFileReadWrite; + size_t header_len, h; + char header[SPLIT_RENDERER_FRAME_HEADER_LEN] = "MAIN_SPLITH"; + + hSplitRendFileReadWrite = (SplitFileReadWrite *) count_malloc( sizeof( SplitFileReadWrite ) ); + hSplitRendFileReadWrite->file = fopen( filename, "wb" ); + if ( hSplitRendFileReadWrite->file == NULL ) + { + fprintf( stderr, "Could not open split rend metadata file %s\n", filename ); + exit( -1 ); + } + + header_len = strlen( header ); + + /*read frame header*/ + for ( h = 0; h < header_len; h++ ) + { + if ( fwrite( &header[h], sizeof( char ), 1, hSplitRendFileReadWrite->file ) != 1 ) + { + return IVAS_ERR_END_OF_FILE; + } + } + hSplitRendFileReadWrite->delay_ns = (int32_t) ( (float) delayNumSamples * 1000000000.0f / (float) delayTimeScale ); + fwrite( &hSplitRendFileReadWrite->delay_ns, sizeof( int32_t ), 1, hSplitRendFileReadWrite->file ); + + *hhSplitRendFileReadWrite = hSplitRendFileReadWrite; + return IVAS_ERR_OK; +} + +ivas_error split_rend_reader_writer_close( SplitFileReadWrite **hhSplitRendFileReadWrite ) +{ + if ( ( *hhSplitRendFileReadWrite ) != NULL ) + { + if ( ( *hhSplitRendFileReadWrite )->file != NULL ) + { + fclose( ( *hhSplitRendFileReadWrite )->file ); + ( *hhSplitRendFileReadWrite )->file = NULL; + } + count_free( *hhSplitRendFileReadWrite ); + *hhSplitRendFileReadWrite = NULL; + } + return IVAS_ERR_OK; +} + +ivas_error split_rend_write_bitstream_to_file( SplitFileReadWrite *hSplitRendFileReadWrite, uint8_t *bits, int32_t *bits_read, int32_t *bits_written ) +{ + char header[SPLIT_RENDERER_FRAME_HEADER_LEN] = "SPLIT_FRAME"; + size_t header_len, i, num_bytes; + + if ( hSplitRendFileReadWrite == NULL ) + { + return IVAS_ERR_FAILED_FILE_READ; + } + + if ( hSplitRendFileReadWrite->file == NULL ) + { + return IVAS_ERR_FAILED_FILE_WRITE; + } + + header_len = strlen( header ); + + /*write frame header*/ + for ( i = 0; i < header_len; i++ ) + { + if ( fwrite( &header[i], sizeof( char ), 1, hSplitRendFileReadWrite->file ) != 1 ) + { + return IVAS_ERR_FAILED_FILE_WRITE; + } + } + + /*write num bytes*/ + if ( fwrite( bits_written, sizeof( int32_t ), 1, hSplitRendFileReadWrite->file ) != 1 ) + { + return IVAS_ERR_FAILED_FILE_WRITE; + } + + num_bytes = ( *bits_written + 7 ) >> 3; + if ( fwrite( bits, sizeof( uint8_t ), num_bytes, hSplitRendFileReadWrite->file ) != num_bytes ) + { + return IVAS_ERR_FAILED_FILE_WRITE; + } + + *bits_read = 0; + *bits_written = 0; + + return IVAS_ERR_OK; +} + +ivas_error split_rend_read_bits_from_file( SplitFileReadWrite *hSplitRendFileReadWrite, uint8_t *bits, int32_t *bits_read, int32_t *bits_written ) +{ + char header[SPLIT_RENDERER_FRAME_HEADER_LEN] = "SPLIT_FRAME"; + char header_read[SPLIT_RENDERER_FRAME_HEADER_LEN]; + size_t header_len, i, num_bytes, bit_len; + + if ( hSplitRendFileReadWrite == NULL ) + { + return IVAS_ERR_FAILED_FILE_READ; + } + + if ( hSplitRendFileReadWrite->file == NULL ) + { + return IVAS_ERR_FAILED_FILE_READ; + } + + header_len = strlen( header ); + + /*write frame header*/ + for ( i = 0; i < header_len; i++ ) + { + if ( fread( &header_read[i], sizeof( char ), 1, hSplitRendFileReadWrite->file ) != 1 ) + { + return IVAS_ERR_END_OF_FILE; + } + } + if ( strncmp( header_read, header, header_len ) ) + { + fprintf( stderr, "Error bitstream frame header mismatch\n" ); + return IVAS_ERR_FAILED_FILE_READ; + } + + /*write num bytes*/ + if ( fread( &bit_len, sizeof( int32_t ), 1, hSplitRendFileReadWrite->file ) != 1 ) + { + return IVAS_ERR_FAILED_FILE_READ; + } + num_bytes = ( bit_len + 7 ) >> 3; + + if ( fread( bits, sizeof( uint8_t ), num_bytes, hSplitRendFileReadWrite->file ) != num_bytes ) + { + return IVAS_ERR_FAILED_FILE_READ; + } + + *bits_read = 0; + *bits_written = bit_len; + + return IVAS_ERR_OK; +} + +ivas_error split_rend_read_pre_rend_delay_ns( SplitFileReadWrite *hSplitRendFileReadWrite, uint32_t *delay_ns ) +{ + if ( hSplitRendFileReadWrite == NULL ) + { + return IVAS_ERR_FAILED_FILE_READ; + } + *delay_ns = hSplitRendFileReadWrite->delay_ns; + return IVAS_ERR_OK; +} +#endif diff --git a/lib_util/split_render_file_read_write.h b/lib_util/split_render_file_read_write.h new file mode 100644 index 0000000000..d98bc4b936 --- /dev/null +++ b/lib_util/split_render_file_read_write.h @@ -0,0 +1,61 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef SPLIT_RENDER_FILE_READ_WRITE_H +#define SPLIT_RENDER_FILE_READ_WRITE_H + +#include "common_api_types.h" +#include "ivas_error.h" + + +typedef struct SplitFileReadWrite SplitFileReadWrite; + +/* Allocates and initializes a a split renderer reader instance */ +ivas_error split_rend_reader_open( SplitFileReadWrite **hhSplitRendFileReadWrite, char *filename ); + + +/* Allocates and initializes a a split renderer writer instance */ +ivas_error split_rend_writer_open( SplitFileReadWrite **hhSplitRendFileReadWrite, char *filename, int16_t delayNumSamples, int32_t delayTimeScale ); + +/* Closes the split renderer reader/writer and deallocates memory */ +ivas_error split_rend_reader_writer_close( SplitFileReadWrite **hhSplitRendFileReadWrite ); + +/*write split rend coded bitstream to file*/ +ivas_error split_rend_write_bitstream_to_file( SplitFileReadWrite *hSplitRendFileReadWrite, uint8_t *bits, int32_t *bits_read, int32_t *bits_written ); + +/*read split rend coded bits from file*/ +ivas_error split_rend_read_bits_from_file( SplitFileReadWrite *hSplitRendFileReadWrite, uint8_t *bits, int32_t *bits_read, int32_t *bits_written ); + +/*read split pre rend delay*/ +ivas_error split_rend_read_pre_rend_delay_ns( SplitFileReadWrite *hSplitRendFileReadWrite, uint32_t *delay_ns ); + +#endif -- GitLab From 1612045f4232d92e95eac99e8ca909c3623800a8 Mon Sep 17 00:00:00 2001 From: rtyag Date: Fri, 24 Mar 2023 14:42:01 +1100 Subject: [PATCH 10/31] disable reverb in renderer config file as it is enabled by default if config file present --- .../renderer_configs/split_renderer_config_384_3dof.txt | 3 +++ .../renderer_configs/split_renderer_config_384_3dof_hq.txt | 3 +++ .../renderer_configs/split_renderer_config_512_2dof.txt | 3 +++ .../renderer_configs/split_renderer_config_768_1dof.txt | 3 +++ .../renderer_configs/split_renderer_config_fc_384_3dof.txt | 3 +++ .../renderer_configs/split_renderer_config_fc_384_3dof_hq.txt | 3 +++ .../renderer_configs/split_renderer_config_fc_512_2dof.txt | 3 +++ .../renderer_configs/split_renderer_config_fc_768_1dof.txt | 3 +++ 8 files changed, 24 insertions(+) diff --git a/Workspace_msvc/renderer_configs/split_renderer_config_384_3dof.txt b/Workspace_msvc/renderer_configs/split_renderer_config_384_3dof.txt index a3f6373d69..84f70f6d8a 100644 --- a/Workspace_msvc/renderer_configs/split_renderer_config_384_3dof.txt +++ b/Workspace_msvc/renderer_configs/split_renderer_config_384_3dof.txt @@ -5,3 +5,6 @@ HQMODE = 0; [GENERAL] RENDERER = CREND; + +[ROOMACOUSTICS] +REVERB = FALSE; diff --git a/Workspace_msvc/renderer_configs/split_renderer_config_384_3dof_hq.txt b/Workspace_msvc/renderer_configs/split_renderer_config_384_3dof_hq.txt index 3103a24b50..520ba5b8ae 100644 --- a/Workspace_msvc/renderer_configs/split_renderer_config_384_3dof_hq.txt +++ b/Workspace_msvc/renderer_configs/split_renderer_config_384_3dof_hq.txt @@ -5,3 +5,6 @@ HQMODE = 1; [GENERAL] RENDERER = CREND; + +[ROOMACOUSTICS] +REVERB = FALSE; diff --git a/Workspace_msvc/renderer_configs/split_renderer_config_512_2dof.txt b/Workspace_msvc/renderer_configs/split_renderer_config_512_2dof.txt index ef74dca52d..1a718cab03 100644 --- a/Workspace_msvc/renderer_configs/split_renderer_config_512_2dof.txt +++ b/Workspace_msvc/renderer_configs/split_renderer_config_512_2dof.txt @@ -5,3 +5,6 @@ HQMODE = 0; [GENERAL] RENDERER = CREND; + +[ROOMACOUSTICS] +REVERB = FALSE; diff --git a/Workspace_msvc/renderer_configs/split_renderer_config_768_1dof.txt b/Workspace_msvc/renderer_configs/split_renderer_config_768_1dof.txt index f1d2ed8168..31d94203cc 100644 --- a/Workspace_msvc/renderer_configs/split_renderer_config_768_1dof.txt +++ b/Workspace_msvc/renderer_configs/split_renderer_config_768_1dof.txt @@ -5,3 +5,6 @@ HQMODE = 0; [GENERAL] RENDERER = CREND; + +[ROOMACOUSTICS] +REVERB = FALSE; diff --git a/Workspace_msvc/renderer_configs/split_renderer_config_fc_384_3dof.txt b/Workspace_msvc/renderer_configs/split_renderer_config_fc_384_3dof.txt index ef12d462c9..5fbf7f7276 100644 --- a/Workspace_msvc/renderer_configs/split_renderer_config_fc_384_3dof.txt +++ b/Workspace_msvc/renderer_configs/split_renderer_config_fc_384_3dof.txt @@ -5,3 +5,6 @@ HQMODE = 0; [GENERAL] RENDERER = FASTCONV; + +[ROOMACOUSTICS] +REVERB = FALSE; diff --git a/Workspace_msvc/renderer_configs/split_renderer_config_fc_384_3dof_hq.txt b/Workspace_msvc/renderer_configs/split_renderer_config_fc_384_3dof_hq.txt index 56b6e2494f..881f462661 100644 --- a/Workspace_msvc/renderer_configs/split_renderer_config_fc_384_3dof_hq.txt +++ b/Workspace_msvc/renderer_configs/split_renderer_config_fc_384_3dof_hq.txt @@ -5,3 +5,6 @@ HQMODE = 1; [GENERAL] RENDERER = FASTCONV; + +[ROOMACOUSTICS] +REVERB = FALSE; \ No newline at end of file diff --git a/Workspace_msvc/renderer_configs/split_renderer_config_fc_512_2dof.txt b/Workspace_msvc/renderer_configs/split_renderer_config_fc_512_2dof.txt index 6dfcbbf0f8..3178a67e32 100644 --- a/Workspace_msvc/renderer_configs/split_renderer_config_fc_512_2dof.txt +++ b/Workspace_msvc/renderer_configs/split_renderer_config_fc_512_2dof.txt @@ -5,3 +5,6 @@ HQMODE = 0; [GENERAL] RENDERER = FASTCONV; + +[ROOMACOUSTICS] +REVERB = FALSE; diff --git a/Workspace_msvc/renderer_configs/split_renderer_config_fc_768_1dof.txt b/Workspace_msvc/renderer_configs/split_renderer_config_fc_768_1dof.txt index 2c7a780f5c..bd448d16b3 100644 --- a/Workspace_msvc/renderer_configs/split_renderer_config_fc_768_1dof.txt +++ b/Workspace_msvc/renderer_configs/split_renderer_config_fc_768_1dof.txt @@ -5,3 +5,6 @@ HQMODE = 0; [GENERAL] RENDERER = FASTCONV; + +[ROOMACOUSTICS] +REVERB = FALSE; -- GitLab From a71af78ca3325f42b2da355adecc936e3044cae2 Mon Sep 17 00:00:00 2001 From: rtyag Date: Tue, 4 Apr 2023 20:09:58 +1000 Subject: [PATCH 11/31] fix for 64 bit compiler in bitstream read from file function --- lib_util/split_render_file_read_write.c | 1 + 1 file changed, 1 insertion(+) diff --git a/lib_util/split_render_file_read_write.c b/lib_util/split_render_file_read_write.c index 78ef342bbf..23e60d58c9 100644 --- a/lib_util/split_render_file_read_write.c +++ b/lib_util/split_render_file_read_write.c @@ -198,6 +198,7 @@ ivas_error split_rend_read_bits_from_file( SplitFileReadWrite *hSplitRendFileRea char header_read[SPLIT_RENDERER_FRAME_HEADER_LEN]; size_t header_len, i, num_bytes, bit_len; + bit_len = 0; if ( hSplitRendFileReadWrite == NULL ) { return IVAS_ERR_FAILED_FILE_READ; -- GitLab From 7443af46d0f1249d8c66b0e4bf6778c8eb7ba36b Mon Sep 17 00:00:00 2001 From: rtyag Date: Mon, 1 May 2023 22:45:22 +1000 Subject: [PATCH 12/31] fix for compilation errors when SPLIT_REND_WITH_HEAD_ROT is disabled --- apps/renderer.c | 8 +++++--- lib_rend/ivas_CQMFDecoder.c | 4 +++- lib_rend/ivas_CQMFDecoder.h | 7 +++++-- lib_rend/ivas_CQMFEncoder.c | 5 +++-- lib_rend/ivas_CQMFEncoder.h | 5 +++-- lib_rend/ivas_CQMFHuff.c | 4 +++- lib_rend/ivas_MSPred.c | 4 +++- lib_rend/ivas_NoiseGen.c | 4 +++- lib_rend/ivas_PerceptualModel.c | 4 +++- lib_rend/ivas_PredDecoder.c | 4 +++- lib_rend/ivas_PredDecoder.h | 5 ++++- lib_rend/ivas_PredEncoder.c | 4 +++- lib_rend/ivas_PredEncoder.h | 5 ++++- lib_rend/ivas_Tables.c | 3 +++ lib_rend/ivas_cldfb_codec_bitstream.c | 7 ++++--- lib_rend/ivas_cldfb_codec_bitstream.h | 5 +++++ lib_rend/lib_rend.c | 4 ++-- 17 files changed, 59 insertions(+), 23 deletions(-) diff --git a/apps/renderer.c b/apps/renderer.c index c52579c745..155ac16d9b 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -420,8 +420,9 @@ static int16_t getTotalNumInChannels( IVAS_REND_InputId mcIds[RENDERER_MAX_MC_INPUTS], IVAS_REND_InputId ismIds[RENDERER_MAX_ISM_INPUTS], IVAS_REND_InputId sbaIds[RENDERER_MAX_SBA_INPUTS], - IVAS_REND_InputId masaIds[RENDERER_MAX_MASA_INPUTS], + IVAS_REND_InputId masaIds[RENDERER_MAX_MASA_INPUTS] #ifdef SPLIT_REND_WITH_HEAD_ROT + , IVAS_REND_InputId splitBinIds[RENDERER_MAX_BIN_INPUTS] #endif ) @@ -1240,6 +1241,7 @@ int main( outBuffer.config.numSamplesPerChannel = (int16_t) CLDFBframeSize_smpls; } #else + inBuffer.config.numSamplesPerChannel = (int16_t) frameSize_smpls; inFloatBuffer = malloc( inBufferSize * sizeof( float ) ); outFloatBuffer = malloc( outBufferSize * sizeof( float ) ); outBuffer.config.numSamplesPerChannel = (int16_t) frameSize_smpls; @@ -1402,11 +1404,11 @@ int main( } else { - error = IVAS_REND_SetHeadRotation( hIvasRend, NULL, NULL + error = IVAS_REND_SetHeadRotation( hIvasRend, NULL, NULL #ifdef SPLIT_REND_WITH_HEAD_ROT , DEFAULT_AXIS -#endif +#endif ); if ( ( error != IVAS_ERR_OK ) && ( error != IVAS_ERR_INVALID_OUTPUT_FORMAT ) ) // VE: TBC { diff --git a/lib_rend/ivas_CQMFDecoder.c b/lib_rend/ivas_CQMFDecoder.c index 0e3d27f67e..c2980fa6c3 100644 --- a/lib_rend/ivas_CQMFDecoder.c +++ b/lib_rend/ivas_CQMFDecoder.c @@ -36,6 +36,8 @@ Nations Convention on Contracts on the International Sales of Goods. *******************************************************************************************************/ #include "ivas_CQMFDecoder.h" +#include "options.h" +#ifdef SPLIT_REND_WITH_HEAD_ROT #include "ivas_CQMFHuff.h" #include "ivas_NoiseGen.h" @@ -43,7 +45,6 @@ Nations Convention on Contracts on the International Sales of Goods. #include "ivas_RMSEnvDeltaHuff.h" #include "ivas_Tables.h" #include "ivas_cldfb_codec_bitstream.h" -#include "options.h" #include "prot.h" #include #include @@ -1372,3 +1373,4 @@ static void ComputeAllocation( const int32_t iChannels, } } } +#endif diff --git a/lib_rend/ivas_CQMFDecoder.h b/lib_rend/ivas_CQMFDecoder.h index a68c2451fb..f331ed20d3 100644 --- a/lib_rend/ivas_CQMFDecoder.h +++ b/lib_rend/ivas_CQMFDecoder.h @@ -37,6 +37,10 @@ extern "C" { #endif + +#include "options.h" +#ifdef SPLIT_REND_WITH_HEAD_ROT + #include "lib_rend.h" #define DECODER_ERROR_NONE ( 0 ) #define DECODER_ERROR_FS_NOT_SUPPORTED ( -1 ) @@ -56,9 +60,8 @@ extern "C" ivas_split_rend_bits_t *pBits, float ***pppfCQMFReal, float ***pppfCQMFImag ); - +#endif #ifdef __cplusplus } #endif - #endif /* _CQMF_DECODER_H_ */ diff --git a/lib_rend/ivas_CQMFEncoder.c b/lib_rend/ivas_CQMFEncoder.c index 076805eddd..892eb92012 100644 --- a/lib_rend/ivas_CQMFEncoder.c +++ b/lib_rend/ivas_CQMFEncoder.c @@ -31,13 +31,13 @@ *******************************************************************************************************/ #include "ivas_CQMFEncoder.h" - +#include "options.h" +#ifdef SPLIT_REND_WITH_HEAD_ROT #include #include #include #include #include "ivas_Tables.h" -#include "options.h" #include "prot.h" #include "ivas_RMSEnvGrouping.h" #include "ivas_PerceptualModel.h" @@ -2047,3 +2047,4 @@ static int32_t ComputeAllocation( const int32_t iChannels, return iBitsUsed; } +#endif \ No newline at end of file diff --git a/lib_rend/ivas_CQMFEncoder.h b/lib_rend/ivas_CQMFEncoder.h index 3466eae6b4..e78aa4614d 100644 --- a/lib_rend/ivas_CQMFEncoder.h +++ b/lib_rend/ivas_CQMFEncoder.h @@ -37,6 +37,8 @@ extern "C" { #endif +#include "options.h" +#ifdef SPLIT_REND_WITH_HEAD_ROT #include "lib_rend.h" #define ENCODER_ERROR_NONE ( 0 ) #define ENCODER_ERROR_FS_NOT_SUPPORTED ( -1 ) @@ -61,9 +63,8 @@ extern "C" const int32_t available_bits, ivas_split_rend_bits_t *pBits ); int32_t GetNumGroups( CQMFEncoder *psCQMFEncoder ); - +#endif #ifdef __cplusplus } #endif - #endif /* _CQMF_ENCODER_H_ */ diff --git a/lib_rend/ivas_CQMFHuff.c b/lib_rend/ivas_CQMFHuff.c index 4aca93fc65..af4d4d11ee 100644 --- a/lib_rend/ivas_CQMFHuff.c +++ b/lib_rend/ivas_CQMFHuff.c @@ -31,6 +31,8 @@ *******************************************************************************************************/ #include "ivas_CQMFHuff.h" +#include "options.h" +#ifdef SPLIT_REND_WITH_HEAD_ROT #include "ivas_prot_rend.h" #include "wmc_auto.h" @@ -4121,5 +4123,5 @@ const int32_t (*c_apaiDemodTables[ALLOC_TABLE_SIZE])[2] = { #endif - +#endif /* clang-format on */ diff --git a/lib_rend/ivas_MSPred.c b/lib_rend/ivas_MSPred.c index 0a3e6e8e3c..4cecace732 100644 --- a/lib_rend/ivas_MSPred.c +++ b/lib_rend/ivas_MSPred.c @@ -31,11 +31,12 @@ *******************************************************************************************************/ #include "ivas_MSPred.h" +#include "options.h" +#ifdef SPLIT_REND_WITH_HEAD_ROT #include "ivas_Tables.h" #include "ivas_RMSEnvDeltaHuff.h" #include #include -#include "options.h" #include "prot.h" #include "ivas_prot_rend.h" #include "wmc_auto.h" @@ -356,3 +357,4 @@ void writeMSPred( int32_t *phaseQuant, int32_t *predQuant, int32_t MSMode, int32 } fprintf( fid, "\n" ); } +#endif \ No newline at end of file diff --git a/lib_rend/ivas_NoiseGen.c b/lib_rend/ivas_NoiseGen.c index 66efe7873d..39d8b9c177 100644 --- a/lib_rend/ivas_NoiseGen.c +++ b/lib_rend/ivas_NoiseGen.c @@ -31,10 +31,11 @@ *******************************************************************************************************/ #include "ivas_NoiseGen.h" +#include "options.h" +#ifdef SPLIT_REND_WITH_HEAD_ROT #include #include #include -#include "options.h" #include "prot.h" #include "ivas_prot_rend.h" #include "wmc_auto.h" @@ -81,3 +82,4 @@ void DeleteNoiseGen( NoiseGen *psNoiseGen ) } extern float GetNoise( NoiseGen *psNoiseGen ); +#endif \ No newline at end of file diff --git a/lib_rend/ivas_PerceptualModel.c b/lib_rend/ivas_PerceptualModel.c index 8ba92a1409..efa63b4247 100644 --- a/lib_rend/ivas_PerceptualModel.c +++ b/lib_rend/ivas_PerceptualModel.c @@ -31,8 +31,9 @@ *******************************************************************************************************/ #include "ivas_PerceptualModel.h" -#include "ivas_Tables.h" #include "options.h" +#ifdef SPLIT_REND_WITH_HEAD_ROT +#include "ivas_Tables.h" #include "prot.h" #include "ivas_prot_rend.h" #include @@ -314,3 +315,4 @@ void PerceptualModelStereo( const int32_t iMaxQuantBands, piSMR1[n] = PERCEPTUAL_MODEL_SCALE * piRMSEnvelope1[n] + c_aiBandwidthAdjust48[n] - piSMR1[n]; } } +#endif \ No newline at end of file diff --git a/lib_rend/ivas_PredDecoder.c b/lib_rend/ivas_PredDecoder.c index 0185ad74a1..aa15db6509 100644 --- a/lib_rend/ivas_PredDecoder.c +++ b/lib_rend/ivas_PredDecoder.c @@ -31,10 +31,11 @@ *******************************************************************************************************/ #include "ivas_PredDecoder.h" +#include "options.h" +#ifdef SPLIT_REND_WITH_HEAD_ROT #include #include #include -#include "options.h" #include "prot.h" #include "ivas_prot_rend.h" #include "ivas_Tables.h" @@ -258,3 +259,4 @@ void ApplyInversePredictros( PredictionDecoder *psPredictionDecoder, } } } +#endif \ No newline at end of file diff --git a/lib_rend/ivas_PredDecoder.h b/lib_rend/ivas_PredDecoder.h index 435c4f2238..47f986bc7d 100644 --- a/lib_rend/ivas_PredDecoder.h +++ b/lib_rend/ivas_PredDecoder.h @@ -38,6 +38,9 @@ extern "C" { #endif +#include "options.h" +#ifdef SPLIT_REND_WITH_HEAD_ROT + #include "ivas_cldfb_codec_bitstream.h" // typedef struct PREDICTION_DECODER PredictionDecoder; @@ -76,7 +79,7 @@ extern "C" float ***pppfReal, float ***pppfImag ); - +#endif #ifdef __cplusplus } #endif diff --git a/lib_rend/ivas_PredEncoder.c b/lib_rend/ivas_PredEncoder.c index 7d21f0e257..1dd0725466 100644 --- a/lib_rend/ivas_PredEncoder.c +++ b/lib_rend/ivas_PredEncoder.c @@ -31,12 +31,13 @@ *******************************************************************************************************/ #include "ivas_PredEncoder.h" +#include "options.h" +#ifdef SPLIT_REND_WITH_HEAD_ROT #include #include #include #include "ivas_Tables.h" #include "ivas_PredTables.h" -#include "options.h" #include "prot.h" #include "ivas_prot_rend.h" #include "ivas_cldfb_codec_bitstream.h" @@ -475,3 +476,4 @@ int32_t WritePredictors( PredictionEncoder *psPredictionEncoder, return iBitsWritten; } +#endif \ No newline at end of file diff --git a/lib_rend/ivas_PredEncoder.h b/lib_rend/ivas_PredEncoder.h index 5ebbe7b48d..e74c61d76b 100644 --- a/lib_rend/ivas_PredEncoder.h +++ b/lib_rend/ivas_PredEncoder.h @@ -38,6 +38,9 @@ extern "C" { #endif +#include "options.h" +#ifdef SPLIT_REND_WITH_HEAD_ROT + #include "ivas_cldfb_codec_bitstream.h" typedef struct PREDICTION_ENCODER @@ -80,7 +83,7 @@ extern "C" int32_t WritePredictors( PredictionEncoder *psPredictionEncoder, ivas_split_rend_bits_t *pBits ); - +#endif #ifdef __cplusplus } #endif diff --git a/lib_rend/ivas_Tables.c b/lib_rend/ivas_Tables.c index 8d23ee756a..534aff5254 100644 --- a/lib_rend/ivas_Tables.c +++ b/lib_rend/ivas_Tables.c @@ -31,6 +31,8 @@ *******************************************************************************************************/ #include "ivas_Tables.h" +#include "options.h" +#ifdef SPLIT_REND_WITH_HEAD_ROT #include "ivas_prot_rend.h" #include "wmc_auto.h" @@ -194,4 +196,5 @@ const int32_t c_aiHuffmanSize[ALLOC_TABLE_SIZE] = { 729, 729, 28, 29, 32, 37, 39, 46, 55, 65, 77, 91, 109, 129, 153, 181, }; +#endif /* clang-format on */ diff --git a/lib_rend/ivas_cldfb_codec_bitstream.c b/lib_rend/ivas_cldfb_codec_bitstream.c index eb82a4a6f7..d12cb39d61 100644 --- a/lib_rend/ivas_cldfb_codec_bitstream.c +++ b/lib_rend/ivas_cldfb_codec_bitstream.c @@ -29,15 +29,15 @@ the United Nations Convention on Contracts on the International Sales of Goods. *******************************************************************************************************/ - #include "ivas_cldfb_codec_bitstream.h" - +#include "options.h" +#ifdef SPLIT_REND_WITH_HEAD_ROT #include #include -#include "options.h" #include "prot.h" #include "wmc_auto.h" + #define MAX_BUFFER 1024 static const uint32_t MASKS[] = { @@ -305,3 +305,4 @@ int32_t BSGetError( Bitstream *psBitstream ) { return psBitstream->iError; } +#endif \ No newline at end of file diff --git a/lib_rend/ivas_cldfb_codec_bitstream.h b/lib_rend/ivas_cldfb_codec_bitstream.h index 07ceb79fb8..a058b901ee 100644 --- a/lib_rend/ivas_cldfb_codec_bitstream.h +++ b/lib_rend/ivas_cldfb_codec_bitstream.h @@ -44,6 +44,10 @@ extern "C" #endif #include "lib_rend.h" #include "ivas_prot_rend.h" +#include "options.h" + +#ifdef SPLIT_REND_WITH_HEAD_ROT + enum { BS_READ, @@ -93,6 +97,7 @@ extern "C" int32_t BSGetAvailableBytes( Bitstream *psBitstream ); int32_t BSGetError( Bitstream *psBitstream ); +#endif #ifdef __cplusplus } diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 91184e353f..5376b18126 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -2367,7 +2367,7 @@ updateSbaPanGains( } #endif case IVAS_REND_AUDIO_CONFIG_BINAURAL: -#ifdef DEBUGGING +#if defined DEBUGGING && defined SPLIT_REND_WITH_HEAD_ROT if ( hRendCfg->renderer_type_override == RENDER_TYPE_OVERRIDE_FASTCONV ) { @@ -5948,7 +5948,7 @@ static ivas_error renderSbaToBinaural( push_wmops( "renderSbaToBinaural" ); -#ifdef DEBUGGING +#if defined DEBUGGING && defined SPLIT_REND_WITH_HEAD_ROT if ( sbaInput->base.ctx.hhRendererConfig[0]->renderer_type_override == RENDER_TYPE_OVERRIDE_FASTCONV ) { float Cldfb_RealBuffer[MAX_OUTPUT_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; -- GitLab From dc15a6cd11338788882f9215bad136d171f7f2a8 Mon Sep 17 00:00:00 2001 From: rtyag Date: Mon, 1 May 2023 23:15:26 +1000 Subject: [PATCH 13/31] fix for JBM tests --- apps/decoder.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/decoder.c b/apps/decoder.c index 711706c9b3..575a696452 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -2241,6 +2241,10 @@ static ivas_error decodeVoIP( /* Once good frame decoded, catch up */ if ( decodedGoodFrame ) { +#ifdef SPLIT_REND_WITH_HEAD_ROT + + SplitFileReadWrite *hSplitRendFileReadWrite = NULL; +#endif error = initOnFirstGoodFrame( hIvasDec, arg, @@ -2257,7 +2261,7 @@ static ivas_error decodeVoIP( &numObj #ifdef SPLIT_REND_WITH_HEAD_ROT , - NULL + &hSplitRendFileReadWrite #endif ); if ( error != IVAS_ERR_OK ) -- GitLab From 26e59ff1b9c690b449d44c8e2e8ede8b52518dc2 Mon Sep 17 00:00:00 2001 From: rtyag Date: Mon, 1 May 2023 23:23:13 +1000 Subject: [PATCH 14/31] fix for uninitialized PLC file path --- apps/renderer.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/renderer.c b/apps/renderer.c index 155ac16d9b..9f9f6f1ea8 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -2193,6 +2193,9 @@ static CmdlnArgs defaultArgs( clearString( args.headRotationFilePath ); #ifdef SPLIT_REND_WITH_HEAD_ROT clearString( args.outMetadataFilePath ); +#endif +#ifdef SPLIT_REND_PLC + clearString( args.splitRendBFIFilePath ); #endif clearString( args.referenceVectorFilePath ); clearString( args.referenceRotationFilePath ); -- GitLab From 27af0e05f07a31dfd87b6adc8423bb98865f979d Mon Sep 17 00:00:00 2001 From: rtyag Date: Tue, 2 May 2023 10:34:21 +1000 Subject: [PATCH 15/31] clang format fixes --- lib_com/delay_comp.c | 10 +- lib_dec/ivas_binRenderer_internal.c | 2 +- lib_rend/ivas_CQMFEncoder.c | 2 +- lib_rend/ivas_CQMFHuff.h | 299 +++++++++++++------------- lib_rend/ivas_MSPred.c | 2 +- lib_rend/ivas_NoiseGen.c | 2 +- lib_rend/ivas_PerceptualModel.c | 2 +- lib_rend/ivas_PerceptualModel.h | 26 +-- lib_rend/ivas_PredDecoder.c | 2 +- lib_rend/ivas_PredEncoder.c | 2 +- lib_rend/ivas_PredTables.h | 12 +- lib_rend/ivas_RMSEnvDeltaHuff.c | 2 +- lib_rend/ivas_RMSEnvDeltaHuff.h | 8 +- lib_rend/ivas_cldfb_codec_bitstream.c | 3 +- lib_rend/ivas_splitRendererPLC.c | 2 +- lib_rend/ivas_splitRendererPost.c | 2 +- lib_rend/ivas_splitRendererPre.c | 2 +- lib_util/split_rend_bfi_file_reader.c | 9 +- lib_util/split_rend_bfi_file_reader.h | 5 +- 19 files changed, 196 insertions(+), 198 deletions(-) diff --git a/lib_com/delay_comp.c b/lib_com/delay_comp.c index 6a70eaa8b2..bc5a1784f1 100644 --- a/lib_com/delay_comp.c +++ b/lib_com/delay_comp.c @@ -106,11 +106,11 @@ int32_t get_delay( if ( output_config != AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) #endif { - if ( hCldfb != NULL ) - { - /* compensate for filterbank delay */ - delay += IVAS_FB_DEC_DELAY_NS; - } + if ( hCldfb != NULL ) + { + /* compensate for filterbank delay */ + delay += IVAS_FB_DEC_DELAY_NS; + } } diff --git a/lib_dec/ivas_binRenderer_internal.c b/lib_dec/ivas_binRenderer_internal.c index f13cc5bae7..c7cf76137a 100644 --- a/lib_dec/ivas_binRenderer_internal.c +++ b/lib_dec/ivas_binRenderer_internal.c @@ -1534,4 +1534,4 @@ void ivas_rend_CldfbMultiBinRendProcess( return; } -#endif \ No newline at end of file +#endif diff --git a/lib_rend/ivas_CQMFEncoder.c b/lib_rend/ivas_CQMFEncoder.c index 892eb92012..a933b2f7cb 100644 --- a/lib_rend/ivas_CQMFEncoder.c +++ b/lib_rend/ivas_CQMFEncoder.c @@ -2047,4 +2047,4 @@ static int32_t ComputeAllocation( const int32_t iChannels, return iBitsUsed; } -#endif \ No newline at end of file +#endif diff --git a/lib_rend/ivas_CQMFHuff.h b/lib_rend/ivas_CQMFHuff.h index 3e6eebaba4..bf28158bea 100644 --- a/lib_rend/ivas_CQMFHuff.h +++ b/lib_rend/ivas_CQMFHuff.h @@ -39,308 +39,309 @@ extern "C" #endif #include "ivas_Tables.h" +#include // For NULL +#include -//#define USE_DEMOD_TABLES + //#define USE_DEMOD_TABLES #ifndef HUFF_READ_SIZE -#define HUFF_READ_SIZE (4) +#define HUFF_READ_SIZE ( 4 ) #endif #ifndef HUFF_DEC_TABLE_SIZE -#define HUFF_DEC_TABLE_SIZE (16) +#define HUFF_DEC_TABLE_SIZE ( 16 ) #endif -#include // For NULL -#include -extern const uint32_t c_aauiCQMFHuffEnc1[16][2]; -extern const uint32_t c_aauiCQMFHuffDec1[3][16]; + extern const uint32_t c_aauiCQMFHuffEnc1[16][2]; + + extern const uint32_t c_aauiCQMFHuffDec1[3][16]; -extern const uint32_t c_aauiCQMFHuffEnc2[16][2]; + extern const uint32_t c_aauiCQMFHuffEnc2[16][2]; -extern const uint32_t c_aauiCQMFHuffDec2[3][16]; + extern const uint32_t c_aauiCQMFHuffDec2[3][16]; -extern const uint32_t c_aauiCQMFHuffEnc3[25][2]; + extern const uint32_t c_aauiCQMFHuffEnc3[25][2]; -extern const uint32_t c_aauiCQMFHuffDec3[10][16]; + extern const uint32_t c_aauiCQMFHuffDec3[10][16]; -extern const uint32_t c_aauiCQMFHuffEnc4[36][2]; + extern const uint32_t c_aauiCQMFHuffEnc4[36][2]; -extern const uint32_t c_aauiCQMFHuffDec4[5][16]; + extern const uint32_t c_aauiCQMFHuffDec4[5][16]; -extern const uint32_t c_aauiCQMFHuffEnc5[36][2]; + extern const uint32_t c_aauiCQMFHuffEnc5[36][2]; -extern const uint32_t c_aauiCQMFHuffDec5[10][16]; + extern const uint32_t c_aauiCQMFHuffDec5[10][16]; -extern const uint32_t c_aauiCQMFHuffEnc6[49][2]; + extern const uint32_t c_aauiCQMFHuffEnc6[49][2]; -extern const uint32_t c_aauiCQMFHuffDec6[7][16]; + extern const uint32_t c_aauiCQMFHuffDec6[7][16]; -extern const uint32_t c_aauiCQMFHuffEnc7[64][2]; + extern const uint32_t c_aauiCQMFHuffEnc7[64][2]; -extern const uint32_t c_aauiCQMFHuffDec7[25][16]; + extern const uint32_t c_aauiCQMFHuffDec7[25][16]; -extern const uint32_t c_aauiCQMFHuffEnc8[81][2]; + extern const uint32_t c_aauiCQMFHuffEnc8[81][2]; -extern const uint32_t c_aauiCQMFHuffDec8[16][16]; + extern const uint32_t c_aauiCQMFHuffDec8[16][16]; -extern const uint32_t c_aauiCQMFHuffEnc9[100][2]; + extern const uint32_t c_aauiCQMFHuffEnc9[100][2]; -extern const uint32_t c_aauiCQMFHuffDec9[22][16]; + extern const uint32_t c_aauiCQMFHuffDec9[22][16]; -extern const uint32_t c_aauiCQMFHuffEnc10[169][2]; + extern const uint32_t c_aauiCQMFHuffEnc10[169][2]; -extern const uint32_t c_aauiCQMFHuffDec10[45][16]; + extern const uint32_t c_aauiCQMFHuffDec10[45][16]; -extern const uint32_t c_aauiCQMFHuffEnc11[196][2]; + extern const uint32_t c_aauiCQMFHuffEnc11[196][2]; -extern const uint32_t c_aauiCQMFHuffDec11[50][16]; + extern const uint32_t c_aauiCQMFHuffDec11[50][16]; -extern const uint32_t c_aauiCQMFHuffEnc12[289][2]; + extern const uint32_t c_aauiCQMFHuffEnc12[289][2]; -extern const uint32_t c_aauiCQMFHuffDec12[76][16]; + extern const uint32_t c_aauiCQMFHuffDec12[76][16]; -extern const uint32_t c_aauiCQMFHuffEnc13[324][2]; + extern const uint32_t c_aauiCQMFHuffEnc13[324][2]; -extern const uint32_t c_aauiCQMFHuffDec13[89][16]; + extern const uint32_t c_aauiCQMFHuffDec13[89][16]; -extern const uint32_t c_aauiCQMFHuffEnc14[400][2]; + extern const uint32_t c_aauiCQMFHuffEnc14[400][2]; -extern const uint32_t c_aauiCQMFHuffDec14[53][16]; + extern const uint32_t c_aauiCQMFHuffDec14[53][16]; -extern const uint32_t c_aauiCQMFHuffEnc15[576][2]; + extern const uint32_t c_aauiCQMFHuffEnc15[576][2]; -extern const uint32_t c_aauiCQMFHuffDec15[73][16]; + extern const uint32_t c_aauiCQMFHuffDec15[73][16]; -extern const uint32_t c_aauiCQMFHuffEnc16[729][2]; + extern const uint32_t c_aauiCQMFHuffEnc16[729][2]; -extern const uint32_t c_aauiCQMFHuffDec16[85][16]; + extern const uint32_t c_aauiCQMFHuffDec16[85][16]; -extern const uint32_t c_aauiCQMFHuffEnc17[729][2]; + extern const uint32_t c_aauiCQMFHuffEnc17[729][2]; -extern const uint32_t c_aauiCQMFHuffDec17[93][16]; + extern const uint32_t c_aauiCQMFHuffDec17[93][16]; -extern const uint32_t c_aauiCQMFHuffEnc18[28][2]; + extern const uint32_t c_aauiCQMFHuffEnc18[28][2]; -extern const uint32_t c_aauiCQMFHuffDec18[6][16]; + extern const uint32_t c_aauiCQMFHuffDec18[6][16]; -extern const uint32_t c_aauiCQMFHuffEnc19[29][2]; + extern const uint32_t c_aauiCQMFHuffEnc19[29][2]; -extern const uint32_t c_aauiCQMFHuffDec19[6][16]; + extern const uint32_t c_aauiCQMFHuffDec19[6][16]; -extern const uint32_t c_aauiCQMFHuffEnc20[32][2]; + extern const uint32_t c_aauiCQMFHuffEnc20[32][2]; -extern const uint32_t c_aauiCQMFHuffDec20[6][16]; + extern const uint32_t c_aauiCQMFHuffDec20[6][16]; -extern const uint32_t c_aauiCQMFHuffEnc21[37][2]; + extern const uint32_t c_aauiCQMFHuffEnc21[37][2]; -extern const uint32_t c_aauiCQMFHuffDec21[7][16]; + extern const uint32_t c_aauiCQMFHuffDec21[7][16]; -extern const uint32_t c_aauiCQMFHuffEnc22[39][2]; + extern const uint32_t c_aauiCQMFHuffEnc22[39][2]; -extern const uint32_t c_aauiCQMFHuffDec22[9][16]; + extern const uint32_t c_aauiCQMFHuffDec22[9][16]; -extern const uint32_t c_aauiCQMFHuffEnc23[46][2]; + extern const uint32_t c_aauiCQMFHuffEnc23[46][2]; -extern const uint32_t c_aauiCQMFHuffDec23[12][16]; + extern const uint32_t c_aauiCQMFHuffDec23[12][16]; -extern const uint32_t c_aauiCQMFHuffEnc24[55][2]; + extern const uint32_t c_aauiCQMFHuffEnc24[55][2]; -extern const uint32_t c_aauiCQMFHuffDec24[17][16]; + extern const uint32_t c_aauiCQMFHuffDec24[17][16]; -extern const uint32_t c_aauiCQMFHuffEnc25[65][2]; + extern const uint32_t c_aauiCQMFHuffEnc25[65][2]; -extern const uint32_t c_aauiCQMFHuffDec25[19][16]; + extern const uint32_t c_aauiCQMFHuffDec25[19][16]; -extern const uint32_t c_aauiCQMFHuffEnc26[77][2]; + extern const uint32_t c_aauiCQMFHuffEnc26[77][2]; -extern const uint32_t c_aauiCQMFHuffDec26[26][16]; + extern const uint32_t c_aauiCQMFHuffDec26[26][16]; -extern const uint32_t c_aauiCQMFHuffEnc27[91][2]; + extern const uint32_t c_aauiCQMFHuffEnc27[91][2]; -extern const uint32_t c_aauiCQMFHuffDec27[28][16]; + extern const uint32_t c_aauiCQMFHuffDec27[28][16]; -extern const uint32_t c_aauiCQMFHuffEnc28[109][2]; + extern const uint32_t c_aauiCQMFHuffEnc28[109][2]; -extern const uint32_t c_aauiCQMFHuffDec28[30][16]; + extern const uint32_t c_aauiCQMFHuffDec28[30][16]; -extern const uint32_t c_aauiCQMFHuffEnc29[129][2]; + extern const uint32_t c_aauiCQMFHuffEnc29[129][2]; -extern const uint32_t c_aauiCQMFHuffDec29[34][16]; + extern const uint32_t c_aauiCQMFHuffDec29[34][16]; -extern const uint32_t c_aauiCQMFHuffEnc30[153][2]; + extern const uint32_t c_aauiCQMFHuffEnc30[153][2]; -extern const uint32_t c_aauiCQMFHuffDec30[39][16]; + extern const uint32_t c_aauiCQMFHuffDec30[39][16]; -extern const uint32_t c_aauiCQMFHuffEnc31[181][2]; + extern const uint32_t c_aauiCQMFHuffEnc31[181][2]; -extern const uint32_t c_aauiCQMFHuffDec31[43][16]; + extern const uint32_t c_aauiCQMFHuffDec31[43][16]; -extern const uint32_t c_aauiCQMFHuffEnc33[16][2]; + extern const uint32_t c_aauiCQMFHuffEnc33[16][2]; -extern const uint32_t c_aauiCQMFHuffDec33[2][16]; + extern const uint32_t c_aauiCQMFHuffDec33[2][16]; -extern const uint32_t c_aauiCQMFHuffEnc34[16][2]; + extern const uint32_t c_aauiCQMFHuffEnc34[16][2]; -extern const uint32_t c_aauiCQMFHuffDec34[2][16]; + extern const uint32_t c_aauiCQMFHuffDec34[2][16]; -extern const uint32_t c_aauiCQMFHuffEnc35[25][2]; + extern const uint32_t c_aauiCQMFHuffEnc35[25][2]; -extern const uint32_t c_aauiCQMFHuffDec35[9][16]; + extern const uint32_t c_aauiCQMFHuffDec35[9][16]; -extern const uint32_t c_aauiCQMFHuffEnc36[36][2]; + extern const uint32_t c_aauiCQMFHuffEnc36[36][2]; -extern const uint32_t c_aauiCQMFHuffDec36[7][16]; + extern const uint32_t c_aauiCQMFHuffDec36[7][16]; -extern const uint32_t c_aauiCQMFHuffEnc37[36][2]; + extern const uint32_t c_aauiCQMFHuffEnc37[36][2]; -extern const uint32_t c_aauiCQMFHuffDec37[4][16]; + extern const uint32_t c_aauiCQMFHuffDec37[4][16]; -extern const uint32_t c_aauiCQMFHuffEnc38[49][2]; + extern const uint32_t c_aauiCQMFHuffEnc38[49][2]; -extern const uint32_t c_aauiCQMFHuffDec38[22][16]; + extern const uint32_t c_aauiCQMFHuffDec38[22][16]; -extern const uint32_t c_aauiCQMFHuffEnc39[64][2]; + extern const uint32_t c_aauiCQMFHuffEnc39[64][2]; -extern const uint32_t c_aauiCQMFHuffDec39[12][16]; + extern const uint32_t c_aauiCQMFHuffDec39[12][16]; -extern const uint32_t c_aauiCQMFHuffEnc40[81][2]; + extern const uint32_t c_aauiCQMFHuffEnc40[81][2]; -extern const uint32_t c_aauiCQMFHuffDec40[36][16]; + extern const uint32_t c_aauiCQMFHuffDec40[36][16]; -extern const uint32_t c_aauiCQMFHuffEnc41[100][2]; + extern const uint32_t c_aauiCQMFHuffEnc41[100][2]; -extern const uint32_t c_aauiCQMFHuffDec41[16][16]; + extern const uint32_t c_aauiCQMFHuffDec41[16][16]; -extern const uint32_t c_aauiCQMFHuffEnc42[169][2]; + extern const uint32_t c_aauiCQMFHuffEnc42[169][2]; -extern const uint32_t c_aauiCQMFHuffDec42[28][16]; + extern const uint32_t c_aauiCQMFHuffDec42[28][16]; -extern const uint32_t c_aauiCQMFHuffEnc43[196][2]; + extern const uint32_t c_aauiCQMFHuffEnc43[196][2]; -extern const uint32_t c_aauiCQMFHuffDec43[32][16]; + extern const uint32_t c_aauiCQMFHuffDec43[32][16]; -extern const uint32_t c_aauiCQMFHuffEnc44[289][2]; + extern const uint32_t c_aauiCQMFHuffEnc44[289][2]; -extern const uint32_t c_aauiCQMFHuffDec44[27][16]; + extern const uint32_t c_aauiCQMFHuffDec44[27][16]; -extern const uint32_t c_aauiCQMFHuffEnc45[324][2]; + extern const uint32_t c_aauiCQMFHuffEnc45[324][2]; -extern const uint32_t c_aauiCQMFHuffDec45[50][16]; + extern const uint32_t c_aauiCQMFHuffDec45[50][16]; -extern const uint32_t c_aauiCQMFHuffEnc46[400][2]; + extern const uint32_t c_aauiCQMFHuffEnc46[400][2]; -extern const uint32_t c_aauiCQMFHuffDec46[61][16]; + extern const uint32_t c_aauiCQMFHuffDec46[61][16]; -extern const uint32_t c_aauiCQMFHuffEnc47[576][2]; + extern const uint32_t c_aauiCQMFHuffEnc47[576][2]; -extern const uint32_t c_aauiCQMFHuffDec47[87][16]; + extern const uint32_t c_aauiCQMFHuffDec47[87][16]; -extern const uint32_t c_aauiCQMFHuffEnc48[729][2]; + extern const uint32_t c_aauiCQMFHuffEnc48[729][2]; -extern const uint32_t c_aauiCQMFHuffDec48[110][16]; + extern const uint32_t c_aauiCQMFHuffDec48[110][16]; -extern const uint32_t c_aauiCQMFHuffEnc49[729][2]; + extern const uint32_t c_aauiCQMFHuffEnc49[729][2]; -extern const uint32_t c_aauiCQMFHuffDec49[113][16]; + extern const uint32_t c_aauiCQMFHuffDec49[113][16]; -extern const uint32_t c_aauiCQMFHuffEnc50[28][2]; + extern const uint32_t c_aauiCQMFHuffEnc50[28][2]; -extern const uint32_t c_aauiCQMFHuffDec50[6][16]; + extern const uint32_t c_aauiCQMFHuffDec50[6][16]; -extern const uint32_t c_aauiCQMFHuffEnc51[29][2]; + extern const uint32_t c_aauiCQMFHuffEnc51[29][2]; -extern const uint32_t c_aauiCQMFHuffDec51[6][16]; + extern const uint32_t c_aauiCQMFHuffDec51[6][16]; -extern const uint32_t c_aauiCQMFHuffEnc52[32][2]; + extern const uint32_t c_aauiCQMFHuffEnc52[32][2]; -extern const uint32_t c_aauiCQMFHuffDec52[7][16]; + extern const uint32_t c_aauiCQMFHuffDec52[7][16]; -extern const uint32_t c_aauiCQMFHuffEnc53[37][2]; + extern const uint32_t c_aauiCQMFHuffEnc53[37][2]; -extern const uint32_t c_aauiCQMFHuffDec53[9][16]; + extern const uint32_t c_aauiCQMFHuffDec53[9][16]; -extern const uint32_t c_aauiCQMFHuffEnc54[39][2]; + extern const uint32_t c_aauiCQMFHuffEnc54[39][2]; -extern const uint32_t c_aauiCQMFHuffDec54[9][16]; + extern const uint32_t c_aauiCQMFHuffDec54[9][16]; -extern const uint32_t c_aauiCQMFHuffEnc55[46][2]; + extern const uint32_t c_aauiCQMFHuffEnc55[46][2]; -extern const uint32_t c_aauiCQMFHuffDec55[10][16]; + extern const uint32_t c_aauiCQMFHuffDec55[10][16]; -extern const uint32_t c_aauiCQMFHuffEnc56[55][2]; + extern const uint32_t c_aauiCQMFHuffEnc56[55][2]; -extern const uint32_t c_aauiCQMFHuffDec56[12][16]; + extern const uint32_t c_aauiCQMFHuffDec56[12][16]; -extern const uint32_t c_aauiCQMFHuffEnc57[65][2]; + extern const uint32_t c_aauiCQMFHuffEnc57[65][2]; -extern const uint32_t c_aauiCQMFHuffDec57[14][16]; + extern const uint32_t c_aauiCQMFHuffDec57[14][16]; -extern const uint32_t c_aauiCQMFHuffEnc58[77][2]; + extern const uint32_t c_aauiCQMFHuffEnc58[77][2]; -extern const uint32_t c_aauiCQMFHuffDec58[17][16]; + extern const uint32_t c_aauiCQMFHuffDec58[17][16]; -extern const uint32_t c_aauiCQMFHuffEnc59[91][2]; + extern const uint32_t c_aauiCQMFHuffEnc59[91][2]; -extern const uint32_t c_aauiCQMFHuffDec59[20][16]; + extern const uint32_t c_aauiCQMFHuffDec59[20][16]; -extern const uint32_t c_aauiCQMFHuffEnc60[109][2]; + extern const uint32_t c_aauiCQMFHuffEnc60[109][2]; -extern const uint32_t c_aauiCQMFHuffDec60[24][16]; + extern const uint32_t c_aauiCQMFHuffDec60[24][16]; -extern const uint32_t c_aauiCQMFHuffEnc61[129][2]; + extern const uint32_t c_aauiCQMFHuffEnc61[129][2]; -extern const uint32_t c_aauiCQMFHuffDec61[33][16]; + extern const uint32_t c_aauiCQMFHuffDec61[33][16]; -extern const uint32_t c_aauiCQMFHuffEnc62[153][2]; + extern const uint32_t c_aauiCQMFHuffEnc62[153][2]; -extern const uint32_t c_aauiCQMFHuffDec62[41][16]; + extern const uint32_t c_aauiCQMFHuffDec62[41][16]; -extern const uint32_t c_aauiCQMFHuffEnc63[181][2]; + extern const uint32_t c_aauiCQMFHuffEnc63[181][2]; -extern const uint32_t c_aauiCQMFHuffDec63[39][16]; + extern const uint32_t c_aauiCQMFHuffDec63[39][16]; -extern const uint32_t (*c_apauiHuffEncTabels[2 * ALLOC_TABLE_SIZE])[2]; + extern const uint32_t ( *c_apauiHuffEncTabels[2 * ALLOC_TABLE_SIZE] )[2]; -extern const uint32_t (*c_apauiHuffDecTables[2 * ALLOC_TABLE_SIZE])[HUFF_DEC_TABLE_SIZE]; + extern const uint32_t ( *c_apauiHuffDecTables[2 * ALLOC_TABLE_SIZE] )[HUFF_DEC_TABLE_SIZE]; #ifdef USE_DEMOD_TABLES -extern const int32_t c_aaiHuffDemod1[16][2]; + extern const int32_t c_aaiHuffDemod1[16][2]; -extern const int32_t c_aaiHuffDemod2[16][2]; + extern const int32_t c_aaiHuffDemod2[16][2]; -extern const int32_t c_aaiHuffDemod3[25][2]; + extern const int32_t c_aaiHuffDemod3[25][2]; -extern const int32_t c_aaiHuffDemod4[36][2]; + extern const int32_t c_aaiHuffDemod4[36][2]; -extern const int32_t c_aaiHuffDemod5[36][2]; + extern const int32_t c_aaiHuffDemod5[36][2]; -extern const int32_t c_aaiHuffDemod6[49][2]; + extern const int32_t c_aaiHuffDemod6[49][2]; -extern const int32_t c_aaiHuffDemod7[64][2]; + extern const int32_t c_aaiHuffDemod7[64][2]; -extern const int32_t c_aaiHuffDemod8[81][2]; + extern const int32_t c_aaiHuffDemod8[81][2]; -extern const int32_t c_aaiHuffDemod9[100][2]; + extern const int32_t c_aaiHuffDemod9[100][2]; -extern const int32_t c_aaiHuffDemod10[169][2]; + extern const int32_t c_aaiHuffDemod10[169][2]; -extern const int32_t c_aaiHuffDemod11[196][2]; + extern const int32_t c_aaiHuffDemod11[196][2]; -extern const int32_t c_aaiHuffDemod12[289][2]; + extern const int32_t c_aaiHuffDemod12[289][2]; -extern const int32_t c_aaiHuffDemod13[324][2]; + extern const int32_t c_aaiHuffDemod13[324][2]; -extern const int32_t c_aaiHuffDemod14[400][2]; + extern const int32_t c_aaiHuffDemod14[400][2]; -extern const int32_t c_aaiHuffDemod15[576][2]; + extern const int32_t c_aaiHuffDemod15[576][2]; -extern const int32_t c_aaiHuffDemod16[729][2]; + extern const int32_t c_aaiHuffDemod16[729][2]; -extern const int32_t c_aaiHuffDemod17[729][2]; + extern const int32_t c_aaiHuffDemod17[729][2]; -extern const int32_t (*c_apaiDemodTables[ALLOC_TABLE_SIZE])[2]; + extern const int32_t ( *c_apaiDemodTables[ALLOC_TABLE_SIZE] )[2]; #endif #ifdef __cplusplus diff --git a/lib_rend/ivas_MSPred.c b/lib_rend/ivas_MSPred.c index 4cecace732..3694f07510 100644 --- a/lib_rend/ivas_MSPred.c +++ b/lib_rend/ivas_MSPred.c @@ -357,4 +357,4 @@ void writeMSPred( int32_t *phaseQuant, int32_t *predQuant, int32_t MSMode, int32 } fprintf( fid, "\n" ); } -#endif \ No newline at end of file +#endif diff --git a/lib_rend/ivas_NoiseGen.c b/lib_rend/ivas_NoiseGen.c index 39d8b9c177..44a794b69a 100644 --- a/lib_rend/ivas_NoiseGen.c +++ b/lib_rend/ivas_NoiseGen.c @@ -82,4 +82,4 @@ void DeleteNoiseGen( NoiseGen *psNoiseGen ) } extern float GetNoise( NoiseGen *psNoiseGen ); -#endif \ No newline at end of file +#endif diff --git a/lib_rend/ivas_PerceptualModel.c b/lib_rend/ivas_PerceptualModel.c index efa63b4247..67adf974a0 100644 --- a/lib_rend/ivas_PerceptualModel.c +++ b/lib_rend/ivas_PerceptualModel.c @@ -315,4 +315,4 @@ void PerceptualModelStereo( const int32_t iMaxQuantBands, piSMR1[n] = PERCEPTUAL_MODEL_SCALE * piRMSEnvelope1[n] + c_aiBandwidthAdjust48[n] - piSMR1[n]; } } -#endif \ No newline at end of file +#endif diff --git a/lib_rend/ivas_PerceptualModel.h b/lib_rend/ivas_PerceptualModel.h index 2d3346183f..da8afca756 100644 --- a/lib_rend/ivas_PerceptualModel.h +++ b/lib_rend/ivas_PerceptualModel.h @@ -38,19 +38,19 @@ extern "C" { #endif #include -void PerceptualModel(const int32_t iMaxQuantBands, - const int32_t *piRMSEnvelope, - int32_t *piExcitation, - int32_t *piSMR); - -void PerceptualModelStereo(const int32_t iMaxQuantBands, - const int32_t *piMSFlags, - const int32_t *piRMSEnvelope0, - const int32_t *piRMSEnvelope1, - int32_t *piExcitation0, - int32_t *piExcitation1, - int32_t *piSMR0, - int32_t *piSMR1); + void PerceptualModel( const int32_t iMaxQuantBands, + const int32_t *piRMSEnvelope, + int32_t *piExcitation, + int32_t *piSMR ); + + void PerceptualModelStereo( const int32_t iMaxQuantBands, + const int32_t *piMSFlags, + const int32_t *piRMSEnvelope0, + const int32_t *piRMSEnvelope1, + int32_t *piExcitation0, + int32_t *piExcitation1, + int32_t *piSMR0, + int32_t *piSMR1 ); #ifdef __cplusplus } diff --git a/lib_rend/ivas_PredDecoder.c b/lib_rend/ivas_PredDecoder.c index aa15db6509..3bab1b9056 100644 --- a/lib_rend/ivas_PredDecoder.c +++ b/lib_rend/ivas_PredDecoder.c @@ -259,4 +259,4 @@ void ApplyInversePredictros( PredictionDecoder *psPredictionDecoder, } } } -#endif \ No newline at end of file +#endif diff --git a/lib_rend/ivas_PredEncoder.c b/lib_rend/ivas_PredEncoder.c index 1dd0725466..56bbca0f73 100644 --- a/lib_rend/ivas_PredEncoder.c +++ b/lib_rend/ivas_PredEncoder.c @@ -476,4 +476,4 @@ int32_t WritePredictors( PredictionEncoder *psPredictionEncoder, return iBitsWritten; } -#endif \ No newline at end of file +#endif diff --git a/lib_rend/ivas_PredTables.h b/lib_rend/ivas_PredTables.h index ee9caf425a..71bdf21437 100644 --- a/lib_rend/ivas_PredTables.h +++ b/lib_rend/ivas_PredTables.h @@ -39,12 +39,12 @@ extern "C" #endif -#define PRED_QUNAT_FILTER_MAG_BITS (3) -#define PRED_QUANT_FILTER_PHASE_BITS (5) -#define PRED_QUANT_FILTER_MAG_MIN (0) -#define PRED_QUANT_FILTER_MAG_MAX (7) -#define PRED_QUANT_FILTER_PHASE_MIN (-16) -#define PRED_QUANT_FILTER_PHASE_MAX (15) +#define PRED_QUNAT_FILTER_MAG_BITS ( 3 ) +#define PRED_QUANT_FILTER_PHASE_BITS ( 5 ) +#define PRED_QUANT_FILTER_MAG_MIN ( 0 ) +#define PRED_QUANT_FILTER_MAG_MAX ( 7 ) +#define PRED_QUANT_FILTER_PHASE_MIN ( -16 ) +#define PRED_QUANT_FILTER_PHASE_MAX ( 15 ) #ifdef __cplusplus } diff --git a/lib_rend/ivas_RMSEnvDeltaHuff.c b/lib_rend/ivas_RMSEnvDeltaHuff.c index ac746d5382..0f613a8f47 100644 --- a/lib_rend/ivas_RMSEnvDeltaHuff.c +++ b/lib_rend/ivas_RMSEnvDeltaHuff.c @@ -63,4 +63,4 @@ const uint32_t c_aaiRMSEnvHuffDec[13][HUFF_DEC_TABLE_SIZE] = {0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00010006, 0x00010006, 0x00010007, 0x00010007, 0x00010008, 0x00010008, 0x00010009, 0x00010009, 0x0001000a, 0x0001000a, }, {0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x00010036, 0x00010036, 0x00010037, 0x00010037, 0x00010038, 0x00010038, 0x00010039, 0x00010039, }, }; -/* clang-format on */ \ No newline at end of file +/* clang-format on */ diff --git a/lib_rend/ivas_RMSEnvDeltaHuff.h b/lib_rend/ivas_RMSEnvDeltaHuff.h index 13120d100e..25d2fc625e 100644 --- a/lib_rend/ivas_RMSEnvDeltaHuff.h +++ b/lib_rend/ivas_RMSEnvDeltaHuff.h @@ -39,16 +39,16 @@ extern "C" #endif #ifndef HUFF_READ_SIZE -#define HUFF_READ_SIZE (4) +#define HUFF_READ_SIZE ( 4 ) #endif #ifndef HUFF_DEC_TABLE_SIZE -#define HUFF_DEC_TABLE_SIZE (16) +#define HUFF_DEC_TABLE_SIZE ( 16 ) #endif #include -extern const uint32_t c_aaiRMSEnvHuffEnc[64][2]; + extern const uint32_t c_aaiRMSEnvHuffEnc[64][2]; -extern const uint32_t c_aaiRMSEnvHuffDec[13][HUFF_DEC_TABLE_SIZE]; + extern const uint32_t c_aaiRMSEnvHuffDec[13][HUFF_DEC_TABLE_SIZE]; #ifdef __cplusplus } diff --git a/lib_rend/ivas_cldfb_codec_bitstream.c b/lib_rend/ivas_cldfb_codec_bitstream.c index d12cb39d61..7e8950ab28 100644 --- a/lib_rend/ivas_cldfb_codec_bitstream.c +++ b/lib_rend/ivas_cldfb_codec_bitstream.c @@ -37,7 +37,6 @@ #include "prot.h" #include "wmc_auto.h" - #define MAX_BUFFER 1024 static const uint32_t MASKS[] = { @@ -305,4 +304,4 @@ int32_t BSGetError( Bitstream *psBitstream ) { return psBitstream->iError; } -#endif \ No newline at end of file +#endif diff --git a/lib_rend/ivas_splitRendererPLC.c b/lib_rend/ivas_splitRendererPLC.c index 76e14be4f5..eafc5617dd 100644 --- a/lib_rend/ivas_splitRendererPLC.c +++ b/lib_rend/ivas_splitRendererPLC.c @@ -489,4 +489,4 @@ void ivas_splitBinRendPLC( return; } -#endif \ No newline at end of file +#endif diff --git a/lib_rend/ivas_splitRendererPost.c b/lib_rend/ivas_splitRendererPost.c index 88345ad673..3b22d644ce 100644 --- a/lib_rend/ivas_splitRendererPost.c +++ b/lib_rend/ivas_splitRendererPost.c @@ -1849,4 +1849,4 @@ void ivas_init_split_post_rend_handles( SPLIT_POST_REND_WRAPPER *hSplitRendWrapp #endif return; } -#endif \ No newline at end of file +#endif diff --git a/lib_rend/ivas_splitRendererPre.c b/lib_rend/ivas_splitRendererPre.c index b4b303600d..f498128c91 100644 --- a/lib_rend/ivas_splitRendererPre.c +++ b/lib_rend/ivas_splitRendererPre.c @@ -1814,4 +1814,4 @@ ivas_error ivas_renderMultiBinToSplitBinaural( } return error; } -#endif \ No newline at end of file +#endif diff --git a/lib_util/split_rend_bfi_file_reader.c b/lib_util/split_rend_bfi_file_reader.c index 3851d83718..2c1fe4e3b8 100644 --- a/lib_util/split_rend_bfi_file_reader.c +++ b/lib_util/split_rend_bfi_file_reader.c @@ -54,7 +54,7 @@ struct SplitRendBFIFileReader *-----------------------------------------------------------------------*/ ivas_error SplitRendBFIFileReader_open( - char *bfiFilePath, /* i : frame loss file name */ + char *bfiFilePath, /* i : frame loss file name */ SplitRendBFIFileReader **SplitRendBFIReader /* o : SplitRendBFIFileReader handle */ ) { @@ -99,16 +99,15 @@ ivas_error SplitRendBFIFileReader_open( ivas_error SplitRendBFIFileReading( SplitRendBFIFileReader *SplitRendBFIReader, /* i/o: SplitRendBFIFileReader handle */ - int16_t *bfi -) + int16_t *bfi ) { - if ( SplitRendBFIReader->txtfile ? 1 != fscanf( SplitRendBFIReader->bfiFile, "%hd", bfi ) : 1 != fread(bfi,sizeof(*bfi),1,SplitRendBFIReader->bfiFile)) + if ( SplitRendBFIReader->txtfile ? 1 != fscanf( SplitRendBFIReader->bfiFile, "%hd", bfi ) : 1 != fread( bfi, sizeof( *bfi ), 1, SplitRendBFIReader->bfiFile ) ) { if ( feof( SplitRendBFIReader->bfiFile ) ) { rewind( SplitRendBFIReader->bfiFile ); SplitRendBFIReader->fileRewind = true; - return SplitRendBFIFileReading( SplitRendBFIReader, bfi); + return SplitRendBFIFileReading( SplitRendBFIReader, bfi ); } return IVAS_ERR_FAILED_FILE_PARSE; } diff --git a/lib_util/split_rend_bfi_file_reader.h b/lib_util/split_rend_bfi_file_reader.h index 655c4fe800..97df1c7fbb 100644 --- a/lib_util/split_rend_bfi_file_reader.h +++ b/lib_util/split_rend_bfi_file_reader.h @@ -40,14 +40,13 @@ typedef struct SplitRendBFIFileReader SplitRendBFIFileReader; ivas_error SplitRendBFIFileReader_open( - char *trajFilePath, /* i : head rotation trajectory file name */ + char *trajFilePath, /* i : head rotation trajectory file name */ SplitRendBFIFileReader **SplitRendBFIReader /* o : SplitRendBFIFileReader handle */ ); ivas_error SplitRendBFIFileReading( SplitRendBFIFileReader *SplitRendBFIReader, /* i/o: SplitRendBFIFileReader handle */ - int16_t *bfi -); + int16_t *bfi ); void SplitRendBFIFileReader_close( SplitRendBFIFileReader **SplitRendBFIReader /* i/o: SplitRendBFIFileReader handle */ -- GitLab From ecd7c7884a3ec8c931ee255644217004a458d472 Mon Sep 17 00:00:00 2001 From: rtyag Date: Wed, 3 May 2023 11:32:03 +1000 Subject: [PATCH 16/31] renderer static memory optimization --- lib_com/options.h | 3 + lib_rend/lib_rend.c | 227 ++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 212 insertions(+), 18 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index a27d4ddace..c93d72823d 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -201,6 +201,9 @@ #define OPTIMIZE_DPCM_QUANT #define SPLIT_REND_PLC /*CLDFB CODEC SWITCHES -- END*/ + +#define REND_STATIC_MEM_OPT + #endif /* ################## End DEVELOPMENT switches ######################### */ diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 5376b18126..7ec283f674 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -115,7 +115,9 @@ typedef struct IVAS_REND_AudioConfig inConfig; IVAS_REND_InputId id; IVAS_REND_AudioBuffer inputBuffer; +#ifndef REND_STATIC_MEM_OPT float bufferData[MAX_BUFFER_LENGTH]; +#endif float gain; /* Linear, not in dB */ rendering_context ctx; int32_t numNewSamplesPerChannel; /* Used to keep track how much new audio was fed before rendering current frame */ @@ -130,6 +132,9 @@ typedef struct CREND_WRAPPER_HANDLE crendWrapper; REVERB_HANDLE hReverb; rotation_matrix rot_mat_prev; +#ifdef REND_STATIC_MEM_OPT + float *bufferData; +#endif } input_ism; typedef struct @@ -157,6 +162,9 @@ typedef struct REVERB_HANDLE hReverb; rotation_gains rot_gains_prev; lfe_routing lfeRouting; +#ifdef REND_STATIC_MEM_OPT + float *bufferData; +#endif } input_mc; typedef struct @@ -173,6 +181,10 @@ typedef struct #else rotation_gains rot_gains_prev; #endif + +#ifdef REND_STATIC_MEM_OPT + float *bufferData; +#endif } input_sba; #ifdef SPLIT_REND_WITH_HEAD_ROT @@ -180,6 +192,9 @@ typedef struct { input_base base; SPLIT_POST_REND_WRAPPER splitPostRendWrapper; +#ifdef REND_STATIC_MEM_OPT + float *bufferData; +#endif } input_split_post_rend; #endif @@ -193,6 +208,9 @@ typedef struct DecoderDummy *decDummy; MASA_METADATA_FRAME masaMetadata; bool metadataHasBeenFed; +#ifdef REND_STATIC_MEM_OPT + float *bufferData; +#endif } input_masa; struct IVAS_REND @@ -231,6 +249,30 @@ struct IVAS_REND * Local functions *-------------------------------------------------------------------*/ +#ifdef REND_STATIC_MEM_OPT +static ivas_error allocateInputBaseBufferData( float **data, const int16_t data_size ) +{ + *data = (float *) malloc( data_size * sizeof( float ) ); + if ( *data == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for input base buffer data" ); + } + + return IVAS_ERR_OK; +} + +static void freeInputBaseBufferData( float **data ) +{ + if ( *data != NULL ) + { + free( *data ); + *data = NULL; + } + + return; +} +#endif + static IVAS_QUATERNION quaternionInit( void ) { @@ -1134,7 +1176,13 @@ static void initRendInputBase( input_base *inputBase, const IVAS_REND_AudioConfig inConfig, const IVAS_REND_InputId id, - const rendering_context rendCtx ) + const rendering_context rendCtx +#ifdef REND_STATIC_MEM_OPT + , + float *dataBuf, + const int16_t dataBufSize +#endif +) { inputBase->inConfig = inConfig; inputBase->id = id; @@ -1144,10 +1192,17 @@ static void initRendInputBase( inputBase->inputBuffer.config.numSamplesPerChannel = 0; inputBase->inputBuffer.config.numChannels = 0; +#ifndef REND_STATIC_MEM_OPT inputBase->inputBuffer.data = inputBase->bufferData; set_zero( inputBase->bufferData, MAX_BUFFER_LENGTH ); - +#else + inputBase->inputBuffer.data = dataBuf; + if ( inputBase->inputBuffer.data != NULL ) + { + set_zero( inputBase->inputBuffer.data, dataBufSize ); + } +#endif return; } @@ -1255,7 +1310,18 @@ static ivas_error setRendInputActiveIsm( return IVAS_ERR_IO_CONFIG_PAIR_NOT_SUPPORTED; } - initRendInputBase( &inputIsm->base, inConfig, id, rendCtx ); +#ifdef REND_STATIC_MEM_OPT + if ( ( error = allocateInputBaseBufferData( &inputIsm->bufferData, MAX_BUFFER_LENGTH ) ) != IVAS_ERR_OK ) + { + return error; + } +#endif + initRendInputBase( &inputIsm->base, inConfig, id, rendCtx +#ifdef REND_STATIC_MEM_OPT + , + inputIsm->bufferData, MAX_BUFFER_LENGTH +#endif + ); inputIsm->currentPos = defaultObjectPosition(); inputIsm->previousPos = defaultObjectPosition(); @@ -1311,7 +1377,15 @@ static void clearInputIsm( rendCtx = inputIsm->base.ctx; - initRendInputBase( &inputIsm->base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, rendCtx ); +#ifdef REND_STATIC_MEM_OPT + freeInputBaseBufferData( &inputIsm->base.inputBuffer.data ); +#endif + initRendInputBase( &inputIsm->base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, rendCtx +#ifdef REND_STATIC_MEM_OPT + , + NULL, 0 +#endif + ); /* Free input's internal handles */ @@ -2114,7 +2188,18 @@ static ivas_error setRendInputActiveMc( return IVAS_ERR_IO_CONFIG_PAIR_NOT_SUPPORTED; } - initRendInputBase( &inputMc->base, inConfig, id, rendCtx ); +#ifdef REND_STATIC_MEM_OPT + if ( ( error = allocateInputBaseBufferData( &inputMc->bufferData, MAX_BUFFER_LENGTH ) ) != IVAS_ERR_OK ) + { + return error; + } +#endif + initRendInputBase( &inputMc->base, inConfig, id, rendCtx +#ifdef REND_STATIC_MEM_OPT + , + inputMc->bufferData, MAX_BUFFER_LENGTH +#endif + ); setZeroPanMatrix( inputMc->panGains ); inputMc->customLsInput = defaultCustomLs(); inputMc->tdRendWrapper = defaultTdRendWrapper(); @@ -2146,7 +2231,15 @@ static void clearInputMc( rendCtx = inputMc->base.ctx; - initRendInputBase( &inputMc->base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, rendCtx ); +#ifdef REND_STATIC_MEM_OPT + freeInputBaseBufferData( &inputMc->bufferData ); +#endif + initRendInputBase( &inputMc->base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, rendCtx +#ifdef REND_STATIC_MEM_OPT + , + NULL, 0 +#endif + ); /* Free input's internal handles */ if ( inputMc->efapInWrapper.hEfap != NULL ) @@ -2445,7 +2538,18 @@ static ivas_error setRendInputActiveSplitPostRend( rendCtx = inputSplitPostRend->base.ctx; outConfig = *rendCtx.pOutConfig; - initRendInputBase( &inputSplitPostRend->base, inConfig, id, rendCtx ); +#ifdef REND_STATIC_MEM_OPT + if ( ( error = allocateInputBaseBufferData( &inputSplitPostRend->bufferData, MAX_BUFFER_LENGTH ) ) != IVAS_ERR_OK ) + { + return error; + } +#endif + initRendInputBase( &inputSplitPostRend->base, inConfig, id, rendCtx +#ifdef REND_STATIC_MEM_OPT + , + inputSplitPostRend->bufferData, MAX_BUFFER_LENGTH +#endif + ); if ( ( error = updateSplitPostRendPanGains( inputSplitPostRend, outConfig, hRendCfg ) ) != IVAS_ERR_OK ) { @@ -2479,7 +2583,18 @@ static ivas_error setRendInputActiveSba( return IVAS_ERR_IO_CONFIG_PAIR_NOT_SUPPORTED; } - initRendInputBase( &inputSba->base, inConfig, id, rendCtx ); +#ifdef REND_STATIC_MEM_OPT + if ( ( error = allocateInputBaseBufferData( &inputSba->bufferData, MAX_BUFFER_LENGTH ) ) != IVAS_ERR_OK ) + { + return error; + } +#endif + initRendInputBase( &inputSba->base, inConfig, id, rendCtx +#ifdef REND_STATIC_MEM_OPT + , + inputSba->bufferData, MAX_BUFFER_LENGTH +#endif + ); setZeroPanMatrix( inputSba->hoaDecMtx ); #ifdef SPLIT_REND_WITH_HEAD_ROT inputSba->crendWrapper = NULL; @@ -2504,10 +2619,19 @@ static ivas_error setRendInputActiveSba( static void clearInputSplitRend( input_split_post_rend *inputSplitRend ) { - // rendering_context rendCtx; + rendering_context rendCtx; - // rendCtx = inputSplitRend->base.ctx; + rendCtx = inputSplitRend->base.ctx; +#ifdef REND_STATIC_MEM_OPT + freeInputBaseBufferData( &inputSplitRend->bufferData ); +#endif + initRendInputBase( &inputSplitRend->base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, rendCtx +#ifdef REND_STATIC_MEM_OPT + , + NULL, 0 +#endif + ); if ( inputSplitRend->splitPostRendWrapper.hBinHrSplitPostRend != NULL ) { ivas_splitBinPostRendClose( &inputSplitRend->splitPostRendWrapper.hBinHrSplitPostRend ); @@ -2528,7 +2652,15 @@ static void clearInputSba( rendCtx = inputSba->base.ctx; - initRendInputBase( &inputSba->base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, rendCtx ); +#ifdef REND_STATIC_MEM_OPT + freeInputBaseBufferData( &inputSba->bufferData ); +#endif + initRendInputBase( &inputSba->base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, rendCtx +#ifdef REND_STATIC_MEM_OPT + , + NULL, 0 +#endif + ); /* Free input's internal handles */ #ifdef SPLIT_REND_WITH_HEAD_ROT @@ -2895,7 +3027,18 @@ static ivas_error setRendInputActiveMasa( return IVAS_ERR_IO_CONFIG_PAIR_NOT_SUPPORTED; } - initRendInputBase( &inputMasa->base, inConfig, id, rendCtx ); +#ifdef REND_STATIC_MEM_OPT + if ( ( error = allocateInputBaseBufferData( &inputMasa->bufferData, MAX_BUFFER_LENGTH ) ) != IVAS_ERR_OK ) + { + return error; + } +#endif + initRendInputBase( &inputMasa->base, inConfig, id, rendCtx +#ifdef REND_STATIC_MEM_OPT + , + inputMasa->bufferData, MAX_BUFFER_LENGTH +#endif + ); if ( ( error = getAudioConfigNumChannels( inConfig, &numInChannels ) ) != IVAS_ERR_OK ) { @@ -2988,7 +3131,15 @@ static void clearInputMasa( rendCtx = inputMasa->base.ctx; - initRendInputBase( &inputMasa->base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, rendCtx ); +#ifdef REND_STATIC_MEM_OPT + freeInputBaseBufferData( &inputMasa->bufferData ); +#endif + initRendInputBase( &inputMasa->base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, rendCtx +#ifdef REND_STATIC_MEM_OPT + , + NULL, 0 +#endif + ); freeDecoderDummy( &inputMasa->decDummy ); return; @@ -3063,37 +3214,69 @@ ivas_error IVAS_REND_Open( /* Initialize inputs */ for ( i = 0; i < RENDERER_MAX_ISM_INPUTS; ++i ) { - initRendInputBase( &hIvasRend->inputsIsm[i].base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, getRendCtx( hIvasRend ) ); + initRendInputBase( &hIvasRend->inputsIsm[i].base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, getRendCtx( hIvasRend ) +#ifdef REND_STATIC_MEM_OPT + , + NULL, 0 +#endif + ); hIvasRend->inputsIsm[i].crendWrapper = NULL; hIvasRend->inputsIsm[i].hReverb = NULL; hIvasRend->inputsIsm[i].tdRendWrapper.hBinRendererTd = NULL; +#ifdef REND_STATIC_MEM_OPT + hIvasRend->inputsIsm[i].bufferData = NULL; +#endif } for ( i = 0; i < RENDERER_MAX_MC_INPUTS; ++i ) { - initRendInputBase( &hIvasRend->inputsMc[i].base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, getRendCtx( hIvasRend ) ); + initRendInputBase( &hIvasRend->inputsMc[i].base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, getRendCtx( hIvasRend ) +#ifdef REND_STATIC_MEM_OPT + , + NULL, 0 +#endif + ); hIvasRend->inputsMc[i].efapInWrapper.hEfap = NULL; hIvasRend->inputsMc[i].crendWrapper = NULL; hIvasRend->inputsMc[i].hReverb = NULL; hIvasRend->inputsMc[i].tdRendWrapper.hBinRendererTd = NULL; +#ifdef REND_STATIC_MEM_OPT + hIvasRend->inputsMc[i].bufferData = NULL; +#endif } for ( i = 0; i < RENDERER_MAX_SBA_INPUTS; ++i ) { - initRendInputBase( &hIvasRend->inputsSba[i].base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, getRendCtx( hIvasRend ) ); + initRendInputBase( &hIvasRend->inputsSba[i].base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, getRendCtx( hIvasRend ) +#ifdef REND_STATIC_MEM_OPT + , + NULL, 0 +#endif + ); hIvasRend->inputsSba[i].crendWrapper = NULL; #ifdef SPLIT_REND_WITH_HEAD_ROT hIvasRend->inputsSba[i].cldfbRendWrapper.hCldfbRend = NULL; hIvasRend->inputsSba[i].cldfbRendWrapper.hHrtfFastConv = NULL; ivas_init_split_rend_handles( &hIvasRend->inputsSba[i].splitRendWrapper ); +#endif +#ifdef REND_STATIC_MEM_OPT + hIvasRend->inputsSba[i].bufferData = NULL; #endif } for ( i = 0; i < RENDERER_MAX_MASA_INPUTS; ++i ) { - initRendInputBase( &hIvasRend->inputsMasa[i].base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, getRendCtx( hIvasRend ) ); + initRendInputBase( &hIvasRend->inputsMasa[i].base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, getRendCtx( hIvasRend ) +#ifdef REND_STATIC_MEM_OPT + , + NULL, 0 +#endif + ); hIvasRend->inputsMasa[i].decDummy = NULL; hIvasRend->inputsMasa[i].metadataHasBeenFed = false; +#ifdef REND_STATIC_MEM_OPT + hIvasRend->inputsMasa[i].bufferData = NULL; +#endif } #ifdef SPLIT_REND_WITH_HEAD_ROT for ( i = 0; i < RENDERER_MAX_BIN_INPUTS; ++i ) @@ -3101,10 +3284,18 @@ ivas_error IVAS_REND_Open( initRendInputBase( &hIvasRend->inputsSplitPost[i].base, IVAS_REND_AUDIO_CONFIG_UNKNOWN, 0, - getRendCtx( hIvasRend ) ); + getRendCtx( hIvasRend ) +#ifdef REND_STATIC_MEM_OPT + , + NULL, 0 +#endif + ); ivas_init_split_post_rend_handles( &hIvasRend->inputsSplitPost[i].splitPostRendWrapper ); #ifdef SPLIT_REND_PLC hIvasRend->splitRendBFI = 0; +#endif +#ifdef REND_STATIC_MEM_OPT + hIvasRend->inputsSplitPost[i].bufferData = NULL; #endif } #endif -- GitLab From 0d0f0325ff4db419d22965596ed57a4d32321368 Mon Sep 17 00:00:00 2001 From: rtyag Date: Wed, 3 May 2023 15:17:44 +1000 Subject: [PATCH 17/31] euler to quat fix --- lib_com/options.h | 1 + lib_rend/ivas_rotation.c | 22 ++++++++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index c93d72823d..ed3b91621d 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -203,6 +203,7 @@ /*CLDFB CODEC SWITCHES -- END*/ #define REND_STATIC_MEM_OPT +#define EUALER2QUAT_FIX #endif diff --git a/lib_rend/ivas_rotation.c b/lib_rend/ivas_rotation.c index 2f3c3cee3e..80e7d5c23e 100644 --- a/lib_rend/ivas_rotation.c +++ b/lib_rend/ivas_rotation.c @@ -192,7 +192,6 @@ void QuatToRotMat( * * Calculate corresponding Quaternion from Euler angles in radians *------------------------------------------------------------------------*/ - void Euler2Quat( const float yaw, /* i : yaw (x) */ const float pitch, /* i : pitch (y) */ @@ -203,14 +202,24 @@ void Euler2Quat( float cr = cosf( roll * 0.5f ); float sr = sinf( roll * 0.5f ); float cp = cosf( pitch * 0.5f ); +#ifdef EUALER2QUAT_FIX + float sp = sinf( pitch * 0.5f ); +#else float sp = sinf( -pitch * 0.5f ); +#endif float cy = cosf( yaw * 0.5f ); float sy = sinf( yaw * 0.5f ); - +#ifdef EUALER2QUAT_FIX + quat->w = cr * cp * cy + sr * sp * sy; + quat->x = sr * cp * cy - cr * sp * sy; + quat->y = sr * cp * sy + cr * sp * cy; + quat->z = cr * cp * sy - sr * sp * cy; +#else quat->w = cr * cp * cy - sr * sp * sy; quat->x = sr * cp * cy + cr * sp * sy; quat->y = cr * sp * cy - sr * cp * sy; quat->z = cr * cp * sy + sr * sp * cy; +#endif return; } @@ -231,8 +240,17 @@ void Quat2EulerDegree( { if ( quat.w != -3.0 ) { +#ifdef EUALER2QUAT_FIX + float p; +#endif *yaw = atan2f( 2 * ( quat.w * quat.x + quat.y * quat.z ), 1 - 2 * ( quat.x * quat.x + quat.y * quat.y ) ); +#ifdef EUALER2QUAT_FIX + p = 2 * ( quat.w * quat.y - quat.z * quat.x ); + p = max( -1.0f, min( 1.0f, p ) ); + *pitch = asinf( p ); +#else *pitch = asinf( 2 * ( quat.w * quat.y - quat.z * quat.x ) ); +#endif *roll = atan2f( 2 * ( quat.w * quat.z + quat.x * quat.y ), 1 - 2 * ( quat.y * quat.y + quat.z * quat.z ) ); *yaw *= _180_OVER_PI; *pitch *= _180_OVER_PI; -- GitLab From 8a3be442bc6489a3c727df3f0e96ecd733035b33 Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Wed, 3 May 2023 16:00:49 +0530 Subject: [PATCH 18/31] ROM to RAM conversion --- lib_com/options.h | 2 + lib_rend/ivas_CQMFDecoder.c | 314 +++++++++++++++++++++++++++++++++++- lib_rend/ivas_CQMFHuff.c | 191 +++++++++++++++------- lib_rend/ivas_CQMFHuff.h | 131 ++++++++++++++- lib_rend/ivas_Tables.h | 4 +- 5 files changed, 579 insertions(+), 63 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index ed3b91621d..488c81999d 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -205,6 +205,8 @@ #define REND_STATIC_MEM_OPT #define EUALER2QUAT_FIX +#define ROM_TO_RAM /*switch to convert CQMF decoder tables to RAM*/ + #endif /* ################## End DEVELOPMENT switches ######################### */ diff --git a/lib_rend/ivas_CQMFDecoder.c b/lib_rend/ivas_CQMFDecoder.c index c2980fa6c3..16e6afc614 100644 --- a/lib_rend/ivas_CQMFDecoder.c +++ b/lib_rend/ivas_CQMFDecoder.c @@ -57,6 +57,23 @@ Nations Convention on Contracts on the International Sales of Goods. #include "ivas_prot_rend.h" #include "wmc_auto.h" +#ifdef ROM_TO_RAM +typedef struct TableNode +{ + struct TableNode **ppoNextTable; + struct TableNode *poOrderedNext; + + int32_t *piCodeIndex; + int32_t *piDifference; + int32_t *piLength; +} TableNode; +typedef struct TableList +{ + TableNode *poOrderedTop; + TableNode *poOrderedBottom; + +} TableList; +#endif struct CQMF_DECODER { int32_t iSampleRate; @@ -68,6 +85,11 @@ struct CQMF_DECODER int32_t iMSMode; int32_t *piMSFlags; +#ifdef ROM_TO_RAM + TableList *ptable_list; + uint32_t ( *c_apauiHuffDecTable_RAM[2 * ALLOC_TABLE_SIZE] )[HUFF_DEC_TABLE_SIZE]; + uint32_t num_decode_table[2 * ALLOC_TABLE_SIZE]; +#endif #ifdef ENABLE_MS_PRED int32_t piMSPredCoefs[MAX_BANDS]; int32_t piLRPhaseDiffs[MAX_BANDS]; @@ -99,11 +121,250 @@ struct CQMF_DECODER int32_t iLastError; }; +#ifdef ROM_TO_RAM +static void CreateDecodeTable( CQMFDecoder *psCQMFDecoder, int32_t num, const uint32_t ( *ppuiEncTable )[2], int32_t iSize, int32_t iReadLength, uint32_t *iTables ); +static TableNode *CreateTableList( int32_t iReadLength ); +static void DeleteTableList( TableList *ptable_list, int32_t iReadLength, int32_t iTables ); +static TableNode *GetNextTable( int32_t iIndex, TableList *table_list, TableNode *poParent, int32_t iReadLength, uint32_t *iTablesCreated ); +static void AddcodeTableList( TableList *ptable_list, int32_t iLength, int32_t iCode, int32_t iCodeIndex, int32_t iReadLength, uint32_t *iTables ); +static void CompleteTables( CQMFDecoder *psCQMFDecoder, int32_t n, TableList *ptable_list, int32_t iReadLength, int32_t iTablesCreated ); + +static TableNode *CreateTableList( int32_t iReadLength ) +{ + int32_t n; + int32_t iMaxTables; + TableNode *ptable_top; + iMaxTables = 1 << iReadLength; + ptable_top = (TableNode *) malloc( sizeof( TableNode ) ); + ptable_top->ppoNextTable = + (TableNode **) malloc( iMaxTables * sizeof( TableNode * ) ); + ptable_top->piCodeIndex = (int32_t *) malloc( iMaxTables * sizeof( int32_t ) ); + ptable_top->piDifference = (int32_t *) malloc( iMaxTables * sizeof( int32_t ) ); + ptable_top->piLength = (int32_t *) malloc( iMaxTables * sizeof( int32_t ) ); + for ( n = 0; n < iMaxTables; n++ ) + { + ptable_top->ppoNextTable[n] = NULL; + ptable_top->piCodeIndex[n] = 0xffff; + ptable_top->piDifference[n] = 0; + ptable_top->piLength[n] = 0; + } + + return ptable_top; +} +static void DeleteTableList( TableList *ptable_list, int32_t iReadLength, int32_t iTables ) +{ + + TableNode *node; + int32_t iMaxTables; + node = ptable_list->poOrderedTop; + + + iMaxTables = 1 << iReadLength; + while ( ( iTables ) ) + { + + TableNode *node1 = node; + node = node1->poOrderedNext; + if ( node1->piCodeIndex != NULL ) + { + free( node1->piCodeIndex ); + } + if ( node1->piLength != NULL ) + { + free( node1->piLength ); + } + if ( node1->piDifference != NULL ) + { + free( node1->piDifference ); + } + if ( node1->ppoNextTable != NULL ) + { + free( node1->ppoNextTable ); + } + if ( node1 != NULL ) + { + free( node1 ); + } + iTables--; + } + if ( ptable_list != NULL ) + { + free( ptable_list ); + } +} +static TableNode *GetNextTable( int32_t iIndex, TableList *table_list, TableNode *poParent, int32_t iReadLength, uint32_t *iTablesCreated ) +{ + TableNode *poNextNode; + + if ( poParent->ppoNextTable[iIndex] == NULL ) + { + poNextNode = CreateTableList( iReadLength ); + poParent->ppoNextTable[iIndex] = poNextNode; + poParent->piDifference[iIndex] = + *iTablesCreated; // this is a link to the next table rather than the + // difference + table_list->poOrderedBottom->poOrderedNext = poNextNode; + table_list->poOrderedBottom = poNextNode; + + ( *iTablesCreated )++; + } + else + { + poNextNode = poParent->ppoNextTable[iIndex]; + } + + return poNextNode; +} +static void CompleteTables( CQMFDecoder *psCQMFDecoder, int32_t n, TableList *ptable_list, int32_t iReadLength, int32_t iTablesCreated ) +{ + + int32_t iMaxTables; + int32_t j; + TableNode *poNode; + + iMaxTables = 1 << iReadLength; + psCQMFDecoder->c_apauiHuffDecTable_RAM[n] = + malloc( iTablesCreated * iMaxTables * sizeof( uint32_t * ) ); + + poNode = ptable_list->poOrderedTop; + for ( j = 0; j < iTablesCreated; j++ ) + { + int32_t k; + if ( poNode != NULL ) + { + for ( k = 0; k < iMaxTables; k++ ) + { + uint32_t uiCode; + uiCode = poNode->piDifference[k]; + uiCode <<= 16; + uiCode |= poNode->piCodeIndex[k]; + psCQMFDecoder->c_apauiHuffDecTable_RAM[n][j][k] = uiCode; + } + } + poNode = poNode->poOrderedNext; + } +} +static void AddcodeTableList( TableList *ptable_list, int32_t iLength, int32_t iCode, int32_t iCodeIndex, int32_t iReadLength, uint32_t *iTables ) +{ + int32_t iDifference; + int32_t iMask; + int32_t iCurrentLength; + int32_t iIndex; + int32_t iCodeLow; + int32_t iCodeHigh; + + TableNode *poNode; + poNode = ptable_list->poOrderedTop; + iMask = ( 1 << iReadLength ) - 1; + iCurrentLength = iLength; + while ( iCurrentLength > iReadLength ) + { + iDifference = iCurrentLength - iReadLength; + iIndex = iCode >> iDifference; + iIndex &= iMask; + poNode = GetNextTable( iIndex, ptable_list, poNode, iReadLength, iTables ); + iCurrentLength -= iReadLength; + } + + iMask = ( 1 << iCurrentLength ) - 1; + iDifference = iReadLength - iCurrentLength; + iCodeLow = ( iCode & iMask ) << iDifference; + iMask = ( 1 << iDifference ) - 1; + iCodeHigh = iCodeLow | iMask; + for ( iIndex = iCodeLow; iIndex <= iCodeHigh; iIndex++ ) + { + poNode->piCodeIndex[iIndex] = iCodeIndex; + poNode->piDifference[iIndex] = iDifference; + poNode->piLength[iIndex] = iLength; + } +} + +static void CreateDecodeTable( CQMFDecoder *psCQMFDecoder, int32_t num, const uint32_t ( *ppuiEncTable )[2], int32_t iSize, int32_t iReadLength, uint32_t *iTables ) +{ + int32_t n; + int32_t iMaxTables; + uint32_t **ppsort_enc_table; + TableList *ptable_list; + ptable_list = (TableList *) malloc( sizeof( TableList ) ); + iMaxTables = 1 << iReadLength; + + ppsort_enc_table = (uint32_t **) malloc( iSize * sizeof( int32_t * ) ); + for ( n = 0; n < iSize; n++ ) + { + ppsort_enc_table[n] = (uint32_t *) malloc( 3 * sizeof( int32_t ) ); + ppsort_enc_table[n][0] = ppuiEncTable[n][0]; + ppsort_enc_table[n][1] = ppuiEncTable[n][1]; + ppsort_enc_table[n][2] = (uint32_t) n; + } + + for ( n = 0; n < iSize; n++ ) + { + uint32_t iMin; + int32_t iMinIndex; + int32_t k; + + iMin = ppsort_enc_table[n][0]; + iMinIndex = n; + for ( k = n; k < iSize; k++ ) + { + if ( ppsort_enc_table[k][0] < iMin ) + { + iMin = ppsort_enc_table[k][0]; + iMinIndex = k; + } + } + + if ( iMinIndex != n ) + { + uint32_t uiLength; + uint32_t uiCode; + uint32_t uiCodeIndex; + + uiLength = ppsort_enc_table[n][0]; + uiCode = ppsort_enc_table[n][1]; + uiCodeIndex = ppsort_enc_table[n][2]; + + ppsort_enc_table[n][0] = ppsort_enc_table[iMinIndex][0]; + ppsort_enc_table[n][1] = ppsort_enc_table[iMinIndex][1]; + ppsort_enc_table[n][2] = ppsort_enc_table[iMinIndex][2]; + + ppsort_enc_table[iMinIndex][0] = uiLength; + ppsort_enc_table[iMinIndex][1] = uiCode; + ppsort_enc_table[iMinIndex][2] = uiCodeIndex; + } + } + ptable_list->poOrderedTop = CreateTableList( iReadLength ); + ptable_list->poOrderedBottom = ptable_list->poOrderedTop; + for ( n = 0; n < iSize; n++ ) + { + int32_t iLength; + int32_t iCode; + int32_t iCodeIndex; + + iLength = ppsort_enc_table[n][0]; + iCode = ppsort_enc_table[n][1]; + iCodeIndex = ppsort_enc_table[n][2]; + AddcodeTableList( ptable_list, iLength, iCode, iCodeIndex, iReadLength, + iTables ); + } + + CompleteTables( psCQMFDecoder, num, ptable_list, iReadLength, *iTables ); + DeleteTableList( ptable_list, iReadLength, *iTables ); + for ( n = 0; n < iSize; n++ ) + { + free( ppsort_enc_table[n] ); + } + free( ppsort_enc_table ); +} +#endif CQMFDecoder *CreateCQMFDecoder( const int32_t iSampleRate, const int32_t iChannels ) { int32_t n; +#ifdef ROM_TO_RAM + int32_t read_length; +#endif CQMFDecoder *psCQMFDecoder = NULL; assert( iSampleRate == 48000 ); // Fix @@ -203,7 +464,22 @@ CQMFDecoder *CreateCQMFDecoder( const int32_t iSampleRate, (int32_t *) malloc( CQMF_BANDS * sizeof( int32_t ) ); } } +#ifdef ROM_TO_RAM + read_length = READ_LENGTH; + for ( n = 0; n < ALLOC_TABLE_SIZE * 2; n++ ) + { + psCQMFDecoder->num_decode_table[n] = 1; // initialising the value to 1 + if ( c_apauiHuffEncTabels[n] != NULL ) + { + CreateDecodeTable( psCQMFDecoder, n, c_apauiHuffEncTabels[n], num_row_aauiCQMFHuff[n], read_length, &psCQMFDecoder->num_decode_table[n] ); + } + else + { + psCQMFDecoder->c_apauiHuffDecTable_RAM[n] = NULL; + } + } +#endif psCQMFDecoder->psPredictionDecoder = CreatePredictionDecoder( iChannels, psCQMFDecoder->iNumBlocks ); // psCQMFDecoder->pReadBuff = @@ -377,6 +653,19 @@ void DeleteCQMFDecoder( CQMFDecoder *psCQMFDecoder ) //{ // free( psCQMFDecoder->pReadBuff ); // } +#ifdef ROM_TO_RAM + for ( uint32_t n = 0; n < ALLOC_TABLE_SIZE * 2; n++ ) + { + if ( psCQMFDecoder->num_decode_table[n] > 1 ) + { + + if ( psCQMFDecoder->c_apauiHuffDecTable_RAM[n] != NULL ) + { + free( psCQMFDecoder->c_apauiHuffDecTable_RAM[n] ); + } + } + } +#endif DeletePredictionDecoder( psCQMFDecoder->psPredictionDecoder ); @@ -445,9 +734,13 @@ static int32_t ReadRMSEnvelope( const int32_t iChannels, ivas_split_rend_bits_t *pBits ); static int32_t ReadAllocInformation( int32_t *piAllocOffset, ivas_split_rend_bits_t *pBits ); - +#ifdef ROM_TO_RAM +static int32_t +ReadCQMFData( const int32_t iNumGroups, const int32_t *piGroupLengths, const int32_t iNumBands, const int32_t *piBandwidths, const int32_t *piPredEnable, int32_t **ppiAlloc, int32_t **ppiSignReal, int32_t **ppiSignImag, int32_t **ppiQReal, int32_t **ppiQImag, ivas_split_rend_bits_t *pBits, uint32_t ( *c_apauiHuffDecTables[2 * ALLOC_TABLE_SIZE] )[HUFF_DEC_TABLE_SIZE] ); +#else static int32_t ReadCQMFData( const int32_t iNumGroups, const int32_t *piGroupLengths, const int32_t iNumBands, const int32_t *piBandwidths, const int32_t *piPredEnable, int32_t **ppiAlloc, int32_t **ppiSignReal, int32_t **ppiSignImag, int32_t **ppiQReal, int32_t **ppiQImag, ivas_split_rend_bits_t *pBits ); +#endif static void ComputeAllocation( const int32_t iChannels, const int32_t *piNumGroups, @@ -487,12 +780,14 @@ int32_t DecodeFrame( CQMFDecoder *psCQMFDecoder, psCQMFDecoder->iChannels, psCQMFDecoder->iNumBlocks, &psCQMFDecoder->iCommonGrouping, psCQMFDecoder->piNumGroups, psCQMFDecoder->ppiGroupLengths, - pBits ); + pBits + ); iBitsRead += ReadRMSEnvelope( psCQMFDecoder->iChannels, (const int32_t *) psCQMFDecoder->piNumGroups, psCQMFDecoder->iNumBands, psCQMFDecoder->pppiRMSEnvelope, - pBits ); + pBits + ); #ifdef ENABLE_PMOD_ADJUST iBitsRead += @@ -549,7 +844,12 @@ int32_t DecodeFrame( CQMFDecoder *psCQMFDecoder, psCQMFDecoder->pppiAlloc[n], psCQMFDecoder->pppiCQMFSignReal[n], psCQMFDecoder->pppiCQMFSignImag[n], psCQMFDecoder->pppiQCQMFReal[n], psCQMFDecoder->pppiQCQMFImag[n], - pBits ); + pBits +#ifdef ROM_TO_RAM + , + psCQMFDecoder->c_apauiHuffDecTable_RAM +#endif + ); } for ( n = 0; n < psCQMFDecoder->iChannels; n++ ) @@ -1216,9 +1516,13 @@ static int32_t ReadAllocInformation( int32_t *piAllocOffset, return iBitsRead; } - +#ifdef ROM_TO_RAM +static int32_t +ReadCQMFData( const int32_t iNumGroups, const int32_t *piGroupLengths, const int32_t iNumBands, const int32_t *piBandwidths, const int32_t *piPredEnable, int32_t **ppiAlloc, int32_t **ppiSignReal, int32_t **ppiSignImag, int32_t **ppiQReal, int32_t **ppiQImag, ivas_split_rend_bits_t *pBits, uint32_t ( *c_apauiHuffDecTables[2 * ALLOC_TABLE_SIZE] )[HUFF_DEC_TABLE_SIZE] ) +#else static int32_t ReadCQMFData( const int32_t iNumGroups, const int32_t *piGroupLengths, const int32_t iNumBands, const int32_t *piBandwidths, const int32_t *piPredEnable, int32_t **ppiAlloc, int32_t **ppiSignReal, int32_t **ppiSignImag, int32_t **ppiQReal, int32_t **ppiQImag, ivas_split_rend_bits_t *pBits ) +#endif { int32_t n; int32_t iBitsRead; diff --git a/lib_rend/ivas_CQMFHuff.c b/lib_rend/ivas_CQMFHuff.c index af4d4d11ee..a5344b9db1 100644 --- a/lib_rend/ivas_CQMFHuff.c +++ b/lib_rend/ivas_CQMFHuff.c @@ -43,12 +43,14 @@ const uint32_t c_aauiCQMFHuffEnc1[16][2] = {0x0006, 0x0001}, {0x0008, 0x0001}, {0x000b, 0x0002}, {0x000b, 0x0003}, {0x000b, 0x0004}, {0x000b, 0x0005}, {0x000b, 0x0006}, {0x000b, 0x0007}, }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec1[3][16] = { {0x0001ffff, 0x00000005, 0x00010001, 0x00010001, 0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, {0x0002ffff, 0x00000009, 0x00010006, 0x00010006, 0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, }, {0x00010003, 0x00010003, 0x00010007, 0x00010007, 0x0001000a, 0x0001000a, 0x0001000b, 0x0001000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, }, }; +#endif const uint32_t c_aauiCQMFHuffEnc2[16][2] = { @@ -56,12 +58,14 @@ const uint32_t c_aauiCQMFHuffEnc2[16][2] = {0x0006, 0x0001}, {0x0008, 0x0001}, {0x0009, 0x0001}, {0x000c, 0x0002}, {0x000c, 0x0003}, {0x000c, 0x0004}, {0x000c, 0x0005}, {0x000b, 0x0003}, }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec2[3][16] = { {0x0001ffff, 0x00000005, 0x00010001, 0x00010001, 0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, {0x0002ffff, 0x00000009, 0x00010006, 0x00010006, 0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, }, {0x00000003, 0x00000007, 0x0000000b, 0x0000000c, 0x0000000d, 0x0000000e, 0x0001000f, 0x0001000f, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, }, }; +#endif const uint32_t c_aauiCQMFHuffEnc3[25][2] = { @@ -72,6 +76,7 @@ const uint32_t c_aauiCQMFHuffEnc3[25][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec3[10][16] = { {0x0001ffff, 0x00000006, 0x00010001, 0x00010001, 0x00020005, 0x00020005, 0x00020005, 0x00020005, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, @@ -85,7 +90,7 @@ const uint32_t c_aauiCQMFHuffDec3[10][16] = {0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, }, {0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc4[36][2] = { {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000b, 0x0001}, {0x0010, 0x0000}, {0x0010, 0x0001}, {0x0002, 0x0001}, {0x0004, 0x0001}, @@ -96,6 +101,7 @@ const uint32_t c_aauiCQMFHuffEnc4[36][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec4[5][16] = { {0x0001ffff, 0x00000007, 0x00010001, 0x00010001, 0x00020006, 0x00020006, 0x00020006, 0x00020006, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, @@ -104,7 +110,7 @@ const uint32_t c_aauiCQMFHuffDec4[5][16] = {0x0000001f, 0x00000020, 0x00010021, 0x00010021, 0x00010022, 0x00010022, 0x00010023, 0x00010023, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, 0x00020014, 0x00020014, 0x00020014, 0x00020014, }, {0x00000004, 0x00000005, 0x0000000a, 0x0000000b, 0x00000010, 0x00000011, 0x00000015, 0x00000016, 0x00000017, 0x00000018, 0x00000019, 0x0000001a, 0x0000001b, 0x0000001c, 0x0000001d, 0x0000001e, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc5[36][2] = { {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000a, 0x0001}, {0x000f, 0x0003}, {0x0012, 0x0000}, {0x0002, 0x0001}, {0x0004, 0x0001}, @@ -115,6 +121,7 @@ const uint32_t c_aauiCQMFHuffEnc5[36][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec5[10][16] = { {0x0001ffff, 0x00000007, 0x00010001, 0x00010001, 0x00020006, 0x00020006, 0x00020006, 0x00020006, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, @@ -128,7 +135,7 @@ const uint32_t c_aauiCQMFHuffDec5[10][16] = {0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, }, {0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc6[49][2] = { {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000a, 0x0001}, {0x0010, 0x0003}, {0x0014, 0x0000}, {0x0014, 0x0001}, {0x0002, 0x0001}, @@ -141,6 +148,7 @@ const uint32_t c_aauiCQMFHuffEnc6[49][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec6[7][16] = { {0x0001ffff, 0x00000008, 0x00010001, 0x00010001, 0x00020007, 0x00020007, 0x00020007, 0x00020007, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, @@ -151,7 +159,7 @@ const uint32_t c_aauiCQMFHuffDec6[7][16] = {0x00000027, 0x00000028, 0x00000029, 0x0000002a, 0x0000002b, 0x0000002c, 0x0000002d, 0x0000002e, 0x0000002f, 0x00000030, 0x00010024, 0x00010024, 0x00020012, 0x00020012, 0x00020012, 0x00020012, }, {0x00000005, 0x00000006, 0x0000000c, 0x0000000d, 0x00000013, 0x00000014, 0x00000019, 0x0000001a, 0x0000001b, 0x0000001f, 0x00000020, 0x00000021, 0x00000022, 0x00000023, 0x00000025, 0x00000026, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc7[64][2] = { {0x0002, 0x0001}, {0x0002, 0x0002}, {0x0005, 0x0001}, {0x0009, 0x0001}, {0x000f, 0x0002}, {0x0015, 0x0000}, {0x0015, 0x0001}, {0x0015, 0x0002}, @@ -164,6 +172,7 @@ const uint32_t c_aauiCQMFHuffEnc7[64][2] = {0x0015, 0x001a}, {0x0015, 0x001b}, {0x0015, 0x001c}, {0x0015, 0x001d}, {0x0015, 0x001e}, {0x0015, 0x001f}, {0x0015, 0x0020}, {0x0015, 0x0021}, }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec7[25][16] = { {0x0001ffff, 0x0002ffff, 0x00010009, 0x00010009, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00020008, 0x00020008, 0x00020008, 0x00020008, }, @@ -192,6 +201,7 @@ const uint32_t c_aauiCQMFHuffDec7[25][16] = {0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, }, {0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, }, }; +#endif const uint32_t c_aauiCQMFHuffEnc8[81][2] = { @@ -209,6 +219,7 @@ const uint32_t c_aauiCQMFHuffEnc8[81][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec8[16][16] = { {0x0001ffff, 0x0002ffff, 0x00010001, 0x00010001, 0x00010009, 0x00010009, 0x0001000a, 0x0001000a, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, @@ -228,6 +239,7 @@ const uint32_t c_aauiCQMFHuffDec8[16][16] = {0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x00010040, 0x00010040, 0x00010041, 0x00010041, 0x00010042, 0x00010042, 0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, }, {0x00010046, 0x00010046, 0x00010047, 0x00010047, 0x00010048, 0x00010048, 0x00010049, 0x00010049, 0x0001004a, 0x0001004a, 0x0001004b, 0x0001004b, 0x0001004c, 0x0001004c, 0x0001004d, 0x0001004d, }, }; +#endif const uint32_t c_aauiCQMFHuffEnc9[100][2] = { @@ -247,6 +259,7 @@ const uint32_t c_aauiCQMFHuffEnc9[100][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec9[22][16] = { {0x0001ffff, 0x0002ffff, 0x00010001, 0x00010001, 0x0001000a, 0x0001000a, 0x0001000b, 0x0001000b, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, @@ -272,6 +285,7 @@ const uint32_t c_aauiCQMFHuffDec9[22][16] = {0x00010053, 0x00010053, 0x00010054, 0x00010054, 0x00010055, 0x00010055, 0x00010056, 0x00010056, 0x00010057, 0x00010057, 0x00010058, 0x00010058, 0x00010059, 0x00010059, 0x0001005a, 0x0001005a, }, {0x0001005b, 0x0001005b, 0x0001005c, 0x0001005c, 0x0001005d, 0x0001005d, 0x0001005e, 0x0001005e, 0x0001005f, 0x0001005f, 0x00010060, 0x00010060, 0x00010061, 0x00010061, 0x00010062, 0x00010062, }, }; +#endif const uint32_t c_aauiCQMFHuffEnc10[169][2] = { @@ -300,6 +314,7 @@ const uint32_t c_aauiCQMFHuffEnc10[169][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec10[45][16] = { {0x0002ffff, 0x0001ffff, 0x00000001, 0x0000000d, 0x0000000f, 0x0000001b, 0x0001000e, 0x0001000e, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, @@ -348,6 +363,7 @@ const uint32_t c_aauiCQMFHuffDec10[45][16] = {0x0002009e, 0x0002009e, 0x0002009e, 0x0002009e, 0x0002009f, 0x0002009f, 0x0002009f, 0x0002009f, 0x000200a0, 0x000200a0, 0x000200a0, 0x000200a0, 0x000200a1, 0x000200a1, 0x000200a1, 0x000200a1, }, {0x000200a2, 0x000200a2, 0x000200a2, 0x000200a2, 0x000200a3, 0x000200a3, 0x000200a3, 0x000200a3, 0x000200a4, 0x000200a4, 0x000200a4, 0x000200a4, 0x000200a5, 0x000200a5, 0x000200a5, 0x000200a5, }, }; +#endif const uint32_t c_aauiCQMFHuffEnc11[196][2] = { @@ -379,6 +395,7 @@ const uint32_t c_aauiCQMFHuffEnc11[196][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec11[50][16] = { {0x0003ffff, 0x0001ffff, 0x0002ffff, 0x00000001, 0x0000000e, 0x0000001d, 0x0001000f, 0x0001000f, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, @@ -432,6 +449,7 @@ const uint32_t c_aauiCQMFHuffDec11[50][16] = {0x000200ba, 0x000200ba, 0x000200ba, 0x000200ba, 0x000200bb, 0x000200bb, 0x000200bb, 0x000200bb, 0x000200bc, 0x000200bc, 0x000200bc, 0x000200bc, 0x000200bd, 0x000200bd, 0x000200bd, 0x000200bd, }, {0x000200be, 0x000200be, 0x000200be, 0x000200be, 0x000200bf, 0x000200bf, 0x000200bf, 0x000200bf, 0x000200c0, 0x000200c0, 0x000200c0, 0x000200c0, 0x000200c1, 0x000200c1, 0x000200c1, 0x000200c1, }, }; +#endif const uint32_t c_aauiCQMFHuffEnc12[289][2] = { @@ -475,6 +493,7 @@ const uint32_t c_aauiCQMFHuffEnc12[289][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec12[76][16] = { {0x0003ffff, 0x0004ffff, 0x0001ffff, 0x0002ffff, 0x00000001, 0x00000011, 0x00000012, 0x00000023, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, @@ -554,7 +573,7 @@ const uint32_t c_aauiCQMFHuffDec12[76][16] = {0x00020117, 0x00020117, 0x00020117, 0x00020117, 0x00020118, 0x00020118, 0x00020118, 0x00020118, 0x00020119, 0x00020119, 0x00020119, 0x00020119, 0x0002011a, 0x0002011a, 0x0002011a, 0x0002011a, }, {0x0002011b, 0x0002011b, 0x0002011b, 0x0002011b, 0x0002011c, 0x0002011c, 0x0002011c, 0x0002011c, 0x0002011d, 0x0002011d, 0x0002011d, 0x0002011d, 0x0002011e, 0x0002011e, 0x0002011e, 0x0002011e, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc13[324][2] = { {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0005, 0x0005}, {0x0005, 0x0006}, {0x0006, 0x0004}, {0x0008, 0x0005}, {0x000a, 0x0005}, {0x000c, 0x0007}, @@ -601,6 +620,7 @@ const uint32_t c_aauiCQMFHuffEnc13[324][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec13[89][16] = { {0x0006ffff, 0x0005ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x00000000, 0x00000001, 0x00000012, 0x00000014, 0x00000015, 0x00000025, 0x00000026, 0x00000037, 0x00010013, 0x00010013, }, @@ -693,7 +713,7 @@ const uint32_t c_aauiCQMFHuffDec13[89][16] = {0x000300d6, 0x000300d6, 0x000300d6, 0x000300d6, 0x000300d6, 0x000300d6, 0x000300d6, 0x000300d6, 0x000300d7, 0x000300d7, 0x000300d7, 0x000300d7, 0x000300d7, 0x000300d7, 0x000300d7, 0x000300d7, }, {0x000300d8, 0x000300d8, 0x000300d8, 0x000300d8, 0x000300d8, 0x000300d8, 0x000300d8, 0x000300d8, 0x000300d9, 0x000300d9, 0x000300d9, 0x000300d9, 0x000300d9, 0x000300d9, 0x000300d9, 0x000300d9, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc14[400][2] = { {0x0005, 0x0007}, {0x0004, 0x0009}, {0x0005, 0x0008}, {0x0005, 0x0009}, {0x0006, 0x0006}, {0x0007, 0x0006}, {0x0009, 0x0007}, {0x000b, 0x0008}, @@ -748,6 +768,7 @@ const uint32_t c_aauiCQMFHuffEnc14[400][2] = {0x0014, 0x00fc}, {0x0014, 0x00fd}, {0x0014, 0x00fe}, {0x0014, 0x00ff}, {0x0014, 0x0100}, {0x0014, 0x0101}, {0x0014, 0x0102}, {0x0014, 0x0103}, }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec14[53][16] = { {0x0009ffff, 0x0007ffff, 0x0008ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x00000001, 0x00000014, 0x00000015, 0x00000016, 0x00000029, 0x0000002a, 0x0000003d, }, @@ -804,7 +825,7 @@ const uint32_t c_aauiCQMFHuffDec14[53][16] = {0x0000016c, 0x0000016d, 0x0000016e, 0x0000016f, 0x00000170, 0x00000171, 0x00000172, 0x00000173, 0x00000174, 0x00000175, 0x00000176, 0x00000177, 0x00000178, 0x00000179, 0x0000017a, 0x0000017b, }, {0x0000017c, 0x0000017d, 0x0000017e, 0x0000017f, 0x00000180, 0x00000181, 0x00000182, 0x00000183, 0x00000184, 0x00000185, 0x00000186, 0x00000187, 0x00000188, 0x00000189, 0x0000018a, 0x0000018b, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc15[576][2] = { {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0005, 0x000c}, {0x0006, 0x0009}, {0x0006, 0x000a}, {0x0007, 0x0008}, {0x0008, 0x0009}, {0x0009, 0x0008}, @@ -881,6 +902,7 @@ const uint32_t c_aauiCQMFHuffEnc15[576][2] = {0x0014, 0x0191}, {0x0014, 0x0192}, {0x0014, 0x0193}, {0x0014, 0x0194}, {0x0014, 0x0195}, {0x0014, 0x0196}, {0x0014, 0x0197}, {0x0013, 0x00db}, }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec15[73][16] = { {0x000cffff, 0x000bffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x0002ffff, 0x0001ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x00000019, 0x0000001a, 0x00000031, 0x00000032, }, @@ -957,6 +979,7 @@ const uint32_t c_aauiCQMFHuffDec15[73][16] = {0x00000217, 0x00000218, 0x00000219, 0x0000021a, 0x0000021b, 0x0000021c, 0x0000021d, 0x0000021e, 0x0000021f, 0x00000220, 0x00000221, 0x00000222, 0x00000223, 0x00000224, 0x00000225, 0x00000226, }, {0x00000227, 0x00000228, 0x00000229, 0x0000022a, 0x0000022b, 0x0000022c, 0x0000022d, 0x0000022e, 0x0000022f, 0x00000230, 0x00000231, 0x00000232, 0x00000233, 0x00000234, 0x00000235, 0x00000236, }, }; +#endif const uint32_t c_aauiCQMFHuffEnc16[729][2] = { @@ -1055,6 +1078,7 @@ const uint32_t c_aauiCQMFHuffEnc16[729][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec16[85][16] = { {0x000fffff, 0x000dffff, 0x000effff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0000001c, }, @@ -1143,6 +1167,7 @@ const uint32_t c_aauiCQMFHuffDec16[85][16] = {0x000002b2, 0x000002b3, 0x000002b4, 0x000002b5, 0x000002b6, 0x000002b7, 0x000002b8, 0x000002b9, 0x000002ba, 0x000002bb, 0x000002bc, 0x000002bd, 0x000002be, 0x000002bf, 0x000002c0, 0x000002c1, }, {0x000002c2, 0x000002c3, 0x000002c4, 0x000002c5, 0x000002c6, 0x000002c7, 0x000002c8, 0x000002c9, 0x000002ca, 0x000002cb, 0x000002cc, 0x000002cd, 0x000002ce, 0x000002cf, 0x000002d0, 0x000002d1, }, }; +#endif const uint32_t c_aauiCQMFHuffEnc17[729][2] = { @@ -1241,6 +1266,7 @@ const uint32_t c_aauiCQMFHuffEnc17[729][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec17[93][16] = { {0x0010ffff, 0x000dffff, 0x000effff, 0x000fffff, 0x0006ffff, 0x0005ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, }, @@ -1337,6 +1363,7 @@ const uint32_t c_aauiCQMFHuffDec17[93][16] = {0x0000028e, 0x0000028f, 0x00000290, 0x00000291, 0x00000292, 0x00000293, 0x00000294, 0x00000295, 0x00000296, 0x00000297, 0x00000298, 0x00000299, 0x0000029a, 0x0000029b, 0x0000029c, 0x0000029d, }, {0x0000029e, 0x0000029f, 0x000002a0, 0x000002a1, 0x000002a2, 0x000002a3, 0x000002a4, 0x000002a5, 0x000002a6, 0x000002a7, 0x000002a8, 0x000002a9, 0x000002aa, 0x000002ab, 0x000002ac, 0x000002ad, }, }; +#endif const uint32_t c_aauiCQMFHuffEnc18[28][2] = { @@ -1347,6 +1374,7 @@ const uint32_t c_aauiCQMFHuffEnc18[28][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec18[6][16] = { {0x0001ffff, 0x00000000, 0x00000007, 0x00000008, 0x00010001, 0x00010001, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00010004, 0x00010004, 0x00010005, 0x00010005, 0x00010006, 0x00010006, }, @@ -1356,7 +1384,7 @@ const uint32_t c_aauiCQMFHuffDec18[6][16] = {0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, }, {0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x00020015, 0x00020015, 0x00020015, 0x00020015, 0x00020016, 0x00020016, 0x00020016, 0x00020016, 0x00020017, 0x00020017, 0x00020017, 0x00020017, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc19[29][2] = { {0x0004, 0x0002}, {0x0003, 0x0003}, {0x0003, 0x0004}, {0x0003, 0x0005}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0003}, {0x0004, 0x0004}, @@ -1366,6 +1394,7 @@ const uint32_t c_aauiCQMFHuffEnc19[29][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec19[6][16] = { {0x0001ffff, 0x0002ffff, 0x00000000, 0x00000006, 0x00000007, 0x00000008, 0x00010001, 0x00010001, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00010004, 0x00010004, 0x00010005, 0x00010005, }, @@ -1375,7 +1404,7 @@ const uint32_t c_aauiCQMFHuffDec19[6][16] = {0x0005ffff, 0x00000016, 0x00010015, 0x00010015, 0x00020014, 0x00020014, 0x00020014, 0x00020014, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, }, {0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x0001001a, 0x0001001a, 0x0001001b, 0x0001001b, 0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc20[32][2] = { {0x0004, 0x0002}, {0x0003, 0x0005}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0003}, {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0004, 0x0006}, @@ -1384,6 +1413,7 @@ const uint32_t c_aauiCQMFHuffEnc20[32][2] = {0x000f, 0x0001}, {0x0010, 0x0001}, {0x0011, 0x0001}, {0x0014, 0x0000}, {0x0014, 0x0001}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec20[6][16] = { {0x0002ffff, 0x0001ffff, 0x00000000, 0x00000004, 0x00000005, 0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x0000000a, 0x00010001, 0x00010001, 0x00010002, 0x00010002, 0x00010003, 0x00010003, }, @@ -1393,7 +1423,7 @@ const uint32_t c_aauiCQMFHuffDec20[6][16] = {0x0005ffff, 0x00000019, 0x00010018, 0x00010018, 0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, }, {0x0000001b, 0x0000001c, 0x0001001d, 0x0001001d, 0x0001001e, 0x0001001e, 0x0001001f, 0x0001001f, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc21[37][2] = { {0x0005, 0x0002}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0003}, {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0004, 0x0006}, {0x0004, 0x0007}, @@ -1404,6 +1434,7 @@ const uint32_t c_aauiCQMFHuffEnc21[37][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec21[7][16] = { {0x0003ffff, 0x0001ffff, 0x0002ffff, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x00010001, 0x00010001, 0x00010002, 0x00010002, }, @@ -1414,7 +1445,7 @@ const uint32_t c_aauiCQMFHuffDec21[7][16] = {0x0006ffff, 0x0000001e, 0x0001001d, 0x0001001d, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, }, {0x00000020, 0x00000021, 0x00010022, 0x00010022, 0x00010023, 0x00010023, 0x00010024, 0x00010024, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc22[39][2] = { {0x0005, 0x0002}, {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0004, 0x0008}, {0x0004, 0x0009}, {0x0004, 0x000a}, @@ -1425,6 +1456,7 @@ const uint32_t c_aauiCQMFHuffEnc22[39][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec22[9][16] = { {0x0004ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0000000c, }, @@ -1437,7 +1469,7 @@ const uint32_t c_aauiCQMFHuffDec22[9][16] = {0x0008ffff, 0x00000025, 0x00010022, 0x00010022, 0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020023, 0x00020023, 0x00020023, 0x00020023, }, {0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc23[46][2] = { {0x0005, 0x0003}, {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0004, 0x0008}, {0x0004, 0x0009}, {0x0004, 0x000a}, {0x0004, 0x000b}, {0x0004, 0x000c}, @@ -1449,6 +1481,7 @@ const uint32_t c_aauiCQMFHuffEnc23[46][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec23[12][16] = { {0x0006ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x0000000a, }, @@ -1464,7 +1497,7 @@ const uint32_t c_aauiCQMFHuffDec23[12][16] = {0x000bffff, 0x0000002a, 0x00010029, 0x00010029, 0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00020027, 0x00020027, 0x00020027, 0x00020027, 0x00020028, 0x00020028, 0x00020028, 0x00020028, }, {0x0002002b, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc24[55][2] = { {0x0005, 0x0004}, {0x0004, 0x0009}, {0x0004, 0x000a}, {0x0004, 0x000b}, {0x0004, 0x000c}, {0x0004, 0x000d}, {0x0004, 0x000e}, {0x0004, 0x000f}, @@ -1477,6 +1510,7 @@ const uint32_t c_aauiCQMFHuffEnc24[55][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec24[17][16] = { {0x0008ffff, 0x0009ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, }, @@ -1497,7 +1531,7 @@ const uint32_t c_aauiCQMFHuffDec24[17][16] = {0x0010ffff, 0x00000032, 0x0001002f, 0x0001002f, 0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, }, {0x00010034, 0x00010034, 0x00010036, 0x00010036, 0x00020035, 0x00020035, 0x00020035, 0x00020035, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc25[65][2] = { {0x0005, 0x0005}, {0x0004, 0x000c}, {0x0004, 0x000d}, {0x0004, 0x000e}, {0x0005, 0x0006}, {0x0004, 0x000f}, {0x0005, 0x0007}, {0x0005, 0x0008}, @@ -1512,6 +1546,7 @@ const uint32_t c_aauiCQMFHuffEnc25[65][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec25[19][16] = { {0x000cffff, 0x000bffff, 0x0002ffff, 0x0001ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x00000001, 0x00000002, 0x00000003, 0x00000005, }, @@ -1534,7 +1569,7 @@ const uint32_t c_aauiCQMFHuffDec25[19][16] = {0x0012ffff, 0x00000038, 0x0000003a, 0x0000003b, 0x0000003c, 0x0000003d, 0x00010035, 0x00010035, 0x00010037, 0x00010037, 0x00010039, 0x00010039, 0x00020033, 0x00020033, 0x00020033, 0x00020033, }, {0x0002003f, 0x0002003f, 0x0002003f, 0x0002003f, 0x00020040, 0x00020040, 0x00020040, 0x00020040, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc26[77][2] = { {0x0006, 0x0004}, {0x0005, 0x0007}, {0x0005, 0x0008}, {0x0005, 0x0009}, {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0005, 0x000c}, {0x0005, 0x000d}, @@ -1550,6 +1585,7 @@ const uint32_t c_aauiCQMFHuffEnc26[77][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec26[26][16] = { {0x0010ffff, 0x000effff, 0x000fffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000dffff, }, @@ -1579,7 +1615,7 @@ const uint32_t c_aauiCQMFHuffDec26[26][16] = {0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, }, {0x0001004b, 0x0001004b, 0x0001004c, 0x0001004c, 0x00020046, 0x00020046, 0x00020046, 0x00020046, 0x00020048, 0x00020048, 0x00020048, 0x00020048, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc27[91][2] = { {0x0006, 0x0006}, {0x0005, 0x000b}, {0x0005, 0x000c}, {0x0005, 0x000d}, {0x0005, 0x000e}, {0x0005, 0x000f}, {0x0005, 0x0010}, {0x0005, 0x0011}, @@ -1597,6 +1633,7 @@ const uint32_t c_aauiCQMFHuffEnc27[91][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec27[28][16] = { {0x0010ffff, 0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, }, @@ -1628,7 +1665,7 @@ const uint32_t c_aauiCQMFHuffDec27[28][16] = {0x0002004f, 0x0002004f, 0x0002004f, 0x0002004f, 0x00020052, 0x00020052, 0x00020052, 0x00020052, 0x00020053, 0x00020053, 0x00020053, 0x00020053, 0x00020056, 0x00020056, 0x00020056, 0x00020056, }, {0x00020057, 0x00020057, 0x00020057, 0x00020057, 0x00020058, 0x00020058, 0x00020058, 0x00020058, 0x00020059, 0x00020059, 0x00020059, 0x00020059, 0x0002005a, 0x0002005a, 0x0002005a, 0x0002005a, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc28[109][2] = { {0x0006, 0x0008}, {0x0005, 0x0010}, {0x0005, 0x0011}, {0x0005, 0x0012}, {0x0005, 0x0013}, {0x0005, 0x0014}, {0x0005, 0x0015}, {0x0005, 0x0016}, @@ -1648,6 +1685,7 @@ const uint32_t c_aauiCQMFHuffEnc28[109][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec28[30][16] = { {0x000fffff, 0x0010ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000dffff, 0x000effff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, }, @@ -1681,7 +1719,7 @@ const uint32_t c_aauiCQMFHuffDec28[30][16] = {0x00020065, 0x00020065, 0x00020065, 0x00020065, 0x00020066, 0x00020066, 0x00020066, 0x00020066, 0x00020067, 0x00020067, 0x00020067, 0x00020067, 0x00020068, 0x00020068, 0x00020068, 0x00020068, }, {0x00020069, 0x00020069, 0x00020069, 0x00020069, 0x0002006a, 0x0002006a, 0x0002006a, 0x0002006a, 0x0002006b, 0x0002006b, 0x0002006b, 0x0002006b, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006c, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc29[129][2] = { {0x0006, 0x0009}, {0x0005, 0x0019}, {0x0006, 0x000a}, {0x0005, 0x001a}, {0x0005, 0x001b}, {0x0005, 0x001c}, {0x0006, 0x000b}, {0x0005, 0x001d}, @@ -1704,6 +1742,7 @@ const uint32_t c_aauiCQMFHuffEnc29[129][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec29[34][16] = { {0x000fffff, 0x0010ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000dffff, 0x000effff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, }, @@ -1741,7 +1780,7 @@ const uint32_t c_aauiCQMFHuffDec29[34][16] = {0x00020075, 0x00020075, 0x00020075, 0x00020075, 0x00020076, 0x00020076, 0x00020076, 0x00020076, 0x00020077, 0x00020077, 0x00020077, 0x00020077, 0x00020078, 0x00020078, 0x00020078, 0x00020078, }, {0x00020079, 0x00020079, 0x00020079, 0x00020079, 0x0002007b, 0x0002007b, 0x0002007b, 0x0002007b, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007d, 0x0002007d, 0x0002007d, 0x0002007d, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc30[153][2] = { {0x0007, 0x0009}, {0x0006, 0x000e}, {0x0006, 0x000f}, {0x0006, 0x0010}, {0x0006, 0x0011}, {0x0006, 0x0012}, {0x0006, 0x0013}, {0x0006, 0x0014}, @@ -1767,6 +1806,7 @@ const uint32_t c_aauiCQMFHuffEnc30[153][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec30[39][16] = { {0x0010ffff, 0x000effff, 0x000fffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000dffff, }, @@ -1809,7 +1849,7 @@ const uint32_t c_aauiCQMFHuffDec30[39][16] = {0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030095, 0x00030095, 0x00030095, 0x00030095, 0x00030095, 0x00030095, 0x00030095, 0x00030095, }, {0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030097, 0x00030097, 0x00030097, 0x00030097, 0x00030097, 0x00030097, 0x00030097, 0x00030097, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc31[181][2] = { {0x0007, 0x000b}, {0x0006, 0x0015}, {0x0006, 0x0016}, {0x0006, 0x0017}, {0x0006, 0x0018}, {0x0006, 0x0019}, {0x0006, 0x001a}, {0x0006, 0x001b}, @@ -1838,6 +1878,7 @@ const uint32_t c_aauiCQMFHuffEnc31[181][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec31[43][16] = { {0x0010ffff, 0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, }, @@ -1884,31 +1925,33 @@ const uint32_t c_aauiCQMFHuffDec31[43][16] = {0x000200ad, 0x000200ad, 0x000200ad, 0x000200ad, 0x000200ae, 0x000200ae, 0x000200ae, 0x000200ae, 0x000200af, 0x000200af, 0x000200af, 0x000200af, 0x000200b0, 0x000200b0, 0x000200b0, 0x000200b0, }, {0x000200b1, 0x000200b1, 0x000200b1, 0x000200b1, 0x000200b2, 0x000200b2, 0x000200b2, 0x000200b2, 0x000200b3, 0x000200b3, 0x000200b3, 0x000200b3, 0x000200b4, 0x000200b4, 0x000200b4, 0x000200b4, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc33[16][2] = { {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0008, 0x0000}, {0x0008, 0x0001}, {0x0002, 0x0001}, {0x0004, 0x0001}, {0x0008, 0x0002}, {0x0008, 0x0003}, {0x0008, 0x0004}, {0x0008, 0x0005}, {0x0008, 0x0006}, {0x0008, 0x0007}, {0x0007, 0x0004}, {0x0007, 0x0005}, {0x0007, 0x0006}, {0x0007, 0x0007}, }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec33[2][16] = { {0x0001ffff, 0x00000005, 0x00010001, 0x00010001, 0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, {0x00000002, 0x00000003, 0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc34[16][2] = { {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0008, 0x0000}, {0x0008, 0x0001}, {0x0002, 0x0001}, {0x0004, 0x0001}, {0x0008, 0x0002}, {0x0008, 0x0003}, {0x0008, 0x0004}, {0x0008, 0x0005}, {0x0008, 0x0006}, {0x0008, 0x0007}, {0x0007, 0x0004}, {0x0007, 0x0005}, {0x0007, 0x0006}, {0x0007, 0x0007}, }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec34[2][16] = { {0x0001ffff, 0x00000005, 0x00010001, 0x00010001, 0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, {0x00000002, 0x00000003, 0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc35[25][2] = { {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0007, 0x0006}, {0x0009, 0x0000}, {0x0009, 0x0001}, {0x0002, 0x0001}, {0x0004, 0x0001}, {0x0009, 0x0002}, @@ -1918,6 +1961,7 @@ const uint32_t c_aauiCQMFHuffEnc35[25][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec35[9][16] = { {0x0001ffff, 0x00000006, 0x00010001, 0x00010001, 0x00020005, 0x00020005, 0x00020005, 0x00020005, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, @@ -1930,7 +1974,7 @@ const uint32_t c_aauiCQMFHuffDec35[9][16] = {0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, }, {0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc36[36][2] = { {0x0001, 0x0001}, {0x0002, 0x0001}, {0x0006, 0x0002}, {0x000b, 0x0000}, {0x000b, 0x0001}, {0x000b, 0x0002}, {0x0003, 0x0001}, {0x0004, 0x0001}, @@ -1941,6 +1985,7 @@ const uint32_t c_aauiCQMFHuffEnc36[36][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec36[7][16] = { {0x0001ffff, 0x00000007, 0x00010006, 0x00010006, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, @@ -1951,7 +1996,7 @@ const uint32_t c_aauiCQMFHuffDec36[7][16] = {0x00010010, 0x00010010, 0x00010011, 0x00010011, 0x00010012, 0x00010012, 0x00010013, 0x00010013, 0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, }, {0x00010003, 0x00010003, 0x00010004, 0x00010004, 0x00010005, 0x00010005, 0x00010009, 0x00010009, 0x0001000a, 0x0001000a, 0x0001000b, 0x0001000b, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc37[36][2] = { {0x0001, 0x0001}, {0x0002, 0x0001}, {0x0006, 0x0001}, {0x000c, 0x0000}, {0x000c, 0x0001}, {0x000c, 0x0002}, {0x0003, 0x0001}, {0x0004, 0x0001}, @@ -1962,6 +2007,7 @@ const uint32_t c_aauiCQMFHuffEnc37[36][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec37[4][16] = { {0x0001ffff, 0x00000007, 0x00010006, 0x00010006, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, @@ -1969,7 +2015,7 @@ const uint32_t c_aauiCQMFHuffDec37[4][16] = {0x00000019, 0x0000001a, 0x0000001b, 0x0000001c, 0x0000001d, 0x0000001e, 0x0000001f, 0x00000020, 0x00000021, 0x00000022, 0x00010023, 0x00010023, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, }, {0x00000003, 0x00000004, 0x00000005, 0x00000009, 0x0000000a, 0x0000000b, 0x0000000f, 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000014, 0x00000015, 0x00000016, 0x00000017, 0x00000018, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc38[49][2] = { {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000c, 0x0012}, {0x000d, 0x0000}, {0x000d, 0x0001}, {0x000d, 0x0002}, {0x0002, 0x0001}, @@ -1982,6 +2028,7 @@ const uint32_t c_aauiCQMFHuffEnc38[49][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec38[22][16] = { {0x0001ffff, 0x00000008, 0x00010001, 0x00010001, 0x00020007, 0x00020007, 0x00020007, 0x00020007, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, @@ -2007,7 +2054,7 @@ const uint32_t c_aauiCQMFHuffDec38[22][16] = {0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, }, {0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc39[64][2] = { {0x0001, 0x0001}, {0x0002, 0x0001}, {0x0006, 0x0001}, {0x000a, 0x0002}, {0x000f, 0x0000}, {0x000f, 0x0001}, {0x000f, 0x0002}, {0x000f, 0x0003}, @@ -2020,6 +2067,7 @@ const uint32_t c_aauiCQMFHuffEnc39[64][2] = {0x000f, 0x0029}, {0x000e, 0x0015}, {0x000e, 0x0016}, {0x000e, 0x0017}, {0x000e, 0x0018}, {0x000e, 0x0019}, {0x000e, 0x001a}, {0x000e, 0x001b}, }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec39[12][16] = { {0x0001ffff, 0x00000009, 0x00010008, 0x00010008, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, @@ -2035,7 +2083,7 @@ const uint32_t c_aauiCQMFHuffDec39[12][16] = {0x00010027, 0x00010027, 0x00010028, 0x00010028, 0x00010029, 0x00010029, 0x0001002a, 0x0001002a, 0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, 0x0001002e, 0x0001002e, }, {0x0001002f, 0x0001002f, 0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x00010036, 0x00010036, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc40[81][2] = { {0x0001, 0x0001}, {0x0002, 0x0001}, {0x0006, 0x0001}, {0x000b, 0x0002}, {0x000f, 0x0011}, {0x0011, 0x0000}, {0x0011, 0x0001}, {0x0011, 0x0002}, @@ -2051,7 +2099,7 @@ const uint32_t c_aauiCQMFHuffEnc40[81][2] = {0x0010, 0x0021}, }; - +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec40[36][16] = { {0x0001ffff, 0x0000000a, 0x00010009, 0x00010009, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, @@ -2091,7 +2139,7 @@ const uint32_t c_aauiCQMFHuffDec40[36][16] = {0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, }, {0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc41[100][2] = { {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000b, 0x0001}, {0x0011, 0x0014}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, @@ -2110,6 +2158,7 @@ const uint32_t c_aauiCQMFHuffEnc41[100][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec41[16][16] = { {0x0001ffff, 0x0000000b, 0x00010001, 0x00010001, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, @@ -2129,7 +2178,7 @@ const uint32_t c_aauiCQMFHuffDec41[16][16] = {0x0001004e, 0x0001004e, 0x0001004f, 0x0001004f, 0x00010050, 0x00010050, 0x00010051, 0x00010051, 0x00010052, 0x00010052, 0x00010053, 0x00010053, 0x00010054, 0x00010054, 0x00010055, 0x00010055, }, {0x00010056, 0x00010056, 0x00010057, 0x00010057, 0x00010058, 0x00010058, 0x00010059, 0x00010059, 0x0001005a, 0x0001005a, 0x0001005b, 0x0001005b, 0x0001005c, 0x0001005c, 0x0001005d, 0x0001005d, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc42[169][2] = { {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x0009, 0x0001}, {0x000e, 0x0006}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, @@ -2157,6 +2206,7 @@ const uint32_t c_aauiCQMFHuffEnc42[169][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec42[28][16] = { {0x0001ffff, 0x0002ffff, 0x00010001, 0x00010001, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, @@ -2188,7 +2238,7 @@ const uint32_t c_aauiCQMFHuffDec42[28][16] = {0x00010093, 0x00010093, 0x00010094, 0x00010094, 0x00010095, 0x00010095, 0x00010096, 0x00010096, 0x00010097, 0x00010097, 0x00010098, 0x00010098, 0x00010099, 0x00010099, 0x0001009a, 0x0001009a, }, {0x0001009b, 0x0001009b, 0x0001009c, 0x0001009c, 0x0001009d, 0x0001009d, 0x0001009e, 0x0001009e, 0x0001009f, 0x0001009f, 0x000100a0, 0x000100a0, 0x000100a1, 0x000100a1, 0x000100a2, 0x000100a2, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc43[196][2] = { {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x0009, 0x0002}, {0x000c, 0x0003}, {0x0010, 0x0017}, {0x0013, 0x0000}, {0x0013, 0x0001}, @@ -2219,6 +2269,7 @@ const uint32_t c_aauiCQMFHuffEnc43[196][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec43[32][16] = { {0x0001ffff, 0x0002ffff, 0x00010001, 0x00010001, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, @@ -2254,7 +2305,7 @@ const uint32_t c_aauiCQMFHuffDec43[32][16] = {0x000100b4, 0x000100b4, 0x000100b5, 0x000100b5, 0x000100b6, 0x000100b6, 0x000100b7, 0x000100b7, 0x000100b8, 0x000100b8, 0x000100b9, 0x000100b9, 0x000100ba, 0x000100ba, 0x000100bb, 0x000100bb, }, {0x000100bc, 0x000100bc, 0x000100bd, 0x000100bd, 0x000100be, 0x000100be, 0x000100bf, 0x000100bf, 0x000100c0, 0x000100c0, 0x000100c1, 0x000100c1, 0x000100c2, 0x000100c2, 0x000100c3, 0x000100c3, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc44[289][2] = { {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0002}, {0x0008, 0x0002}, {0x000b, 0x0002}, {0x000f, 0x000a}, {0x0011, 0x0022}, {0x0014, 0x0000}, @@ -2297,6 +2348,7 @@ const uint32_t c_aauiCQMFHuffEnc44[289][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec44[27][16] = { {0x0002ffff, 0x0001ffff, 0x00010001, 0x00010001, 0x00010011, 0x00010011, 0x00010012, 0x00010012, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, @@ -2327,7 +2379,7 @@ const uint32_t c_aauiCQMFHuffDec44[27][16] = {0x000000fa, 0x000000fb, 0x000000fc, 0x000000fd, 0x000000fe, 0x000000ff, 0x00000100, 0x00000101, 0x00000102, 0x00000103, 0x00000104, 0x00000105, 0x00000106, 0x00000107, 0x00000108, 0x00000109, }, {0x0000010a, 0x0000010b, 0x0000010c, 0x0000010d, 0x0000010e, 0x0000010f, 0x00000110, 0x00000111, 0x00000112, 0x00000113, 0x00000114, 0x00000115, 0x00000116, 0x00000117, 0x00000118, 0x00000119, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc45[324][2] = { {0x0002, 0x0002}, {0x0003, 0x0002}, {0x0005, 0x0003}, {0x0007, 0x0002}, {0x0009, 0x0003}, {0x000c, 0x0005}, {0x0010, 0x0025}, {0x0012, 0x0088}, @@ -2374,6 +2426,7 @@ const uint32_t c_aauiCQMFHuffEnc45[324][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec45[50][16] = { {0x0003ffff, 0x0001ffff, 0x0002ffff, 0x00000025, 0x00010001, 0x00010001, 0x00010013, 0x00010013, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020012, 0x00020012, 0x00020012, 0x00020012, }, @@ -2427,7 +2480,7 @@ const uint32_t c_aauiCQMFHuffDec45[50][16] = {0x00010134, 0x00010134, 0x00010135, 0x00010135, 0x00010136, 0x00010136, 0x00010137, 0x00010137, 0x00010138, 0x00010138, 0x00010139, 0x00010139, 0x0001013a, 0x0001013a, 0x0001013b, 0x0001013b, }, {0x0001013c, 0x0001013c, 0x0001013d, 0x0001013d, 0x0001013e, 0x0001013e, 0x0001013f, 0x0001013f, 0x00010140, 0x00010140, 0x00010141, 0x00010141, 0x00010142, 0x00010142, 0x00010143, 0x00010143, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc46[400][2] = { {0x0002, 0x0002}, {0x0003, 0x0002}, {0x0005, 0x0003}, {0x0007, 0x0004}, {0x0009, 0x0005}, {0x000b, 0x0006}, {0x000d, 0x000a}, {0x000f, 0x0018}, @@ -2482,6 +2535,7 @@ const uint32_t c_aauiCQMFHuffEnc46[400][2] = {0x0013, 0x0147}, {0x0013, 0x0148}, {0x0013, 0x0149}, {0x0013, 0x014a}, {0x0013, 0x014b}, {0x0012, 0x00ab}, {0x0012, 0x00ac}, {0x0012, 0x00ad}, }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec46[61][16] = { {0x0004ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x00010001, 0x00010001, 0x00010015, 0x00010015, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020014, 0x00020014, 0x00020014, 0x00020014, }, @@ -2546,7 +2600,7 @@ const uint32_t c_aauiCQMFHuffDec46[61][16] = {0x00010179, 0x00010179, 0x0001017a, 0x0001017a, 0x0001017b, 0x0001017b, 0x0001017c, 0x0001017c, 0x0001017d, 0x0001017d, 0x0001017e, 0x0001017e, 0x0001017f, 0x0001017f, 0x00010180, 0x00010180, }, {0x00010181, 0x00010181, 0x00010182, 0x00010182, 0x00010183, 0x00010183, 0x00010184, 0x00010184, 0x00010185, 0x00010185, 0x00010186, 0x00010186, 0x00010187, 0x00010187, 0x00010188, 0x00010188, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc47[576][2] = { {0x0002, 0x0003}, {0x0003, 0x0003}, {0x0005, 0x0005}, {0x0006, 0x0004}, {0x0008, 0x0006}, {0x000a, 0x0007}, {0x000c, 0x000b}, {0x000d, 0x000d}, @@ -2623,6 +2677,7 @@ const uint32_t c_aauiCQMFHuffEnc47[576][2] = {0x0013, 0x01e5}, {0x0013, 0x01e6}, {0x0013, 0x01e7}, {0x0013, 0x01e8}, {0x0013, 0x01e9}, {0x0013, 0x01ea}, {0x0013, 0x01eb}, {0x0012, 0x00fd}, }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec47[87][16] = { {0x0004ffff, 0x0003ffff, 0x0001ffff, 0x0002ffff, 0x0000001a, 0x00000031, 0x00010001, 0x00010001, 0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x00020000, 0x00020000, 0x00020000, 0x00020000, }, @@ -2713,7 +2768,7 @@ const uint32_t c_aauiCQMFHuffDec47[87][16] = {0x0001022b, 0x0001022b, 0x0001022c, 0x0001022c, 0x0001022d, 0x0001022d, 0x0001022e, 0x0001022e, 0x0001022f, 0x0001022f, 0x00010230, 0x00010230, 0x00010231, 0x00010231, 0x00010232, 0x00010232, }, {0x00010233, 0x00010233, 0x00010234, 0x00010234, 0x00010235, 0x00010235, 0x00010236, 0x00010236, 0x00010237, 0x00010237, 0x00010238, 0x00010238, 0x00010239, 0x00010239, 0x0001023a, 0x0001023a, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc48[729][2] = { {0x0002, 0x0003}, {0x0003, 0x0003}, {0x0005, 0x0006}, {0x0006, 0x0006}, {0x0008, 0x0006}, {0x0009, 0x0007}, {0x000b, 0x000b}, {0x000c, 0x000d}, @@ -2811,6 +2866,7 @@ const uint32_t c_aauiCQMFHuffEnc48[729][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec48[110][16] = { {0x0005ffff, 0x0003ffff, 0x0004ffff, 0x0001ffff, 0x0002ffff, 0x00000037, 0x00010001, 0x00010001, 0x0001001b, 0x0001001b, 0x0001001c, 0x0001001c, 0x00020000, 0x00020000, 0x00020000, 0x00020000, }, @@ -2924,7 +2980,7 @@ const uint32_t c_aauiCQMFHuffDec48[110][16] = {0x000102c4, 0x000102c4, 0x000102c5, 0x000102c5, 0x000102c6, 0x000102c6, 0x000102c7, 0x000102c7, 0x000102c8, 0x000102c8, 0x000102c9, 0x000102c9, 0x000102ca, 0x000102ca, 0x000102cb, 0x000102cb, }, {0x000102cc, 0x000102cc, 0x000102cd, 0x000102cd, 0x000102ce, 0x000102ce, 0x000102cf, 0x000102cf, 0x000102d0, 0x000102d0, 0x000102d1, 0x000102d1, 0x000102d2, 0x000102d2, 0x000102d3, 0x000102d3, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc49[729][2] = { {0x0002, 0x0003}, {0x0003, 0x0003}, {0x0005, 0x0007}, {0x0007, 0x000a}, {0x0008, 0x0009}, {0x0008, 0x000a}, {0x0009, 0x0009}, {0x000b, 0x000d}, @@ -3022,6 +3078,7 @@ const uint32_t c_aauiCQMFHuffEnc49[729][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec49[113][16] = { {0x0006ffff, 0x0005ffff, 0x0004ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x00010001, 0x00010001, 0x0001001b, 0x0001001b, 0x0001001c, 0x0001001c, 0x00020000, 0x00020000, 0x00020000, 0x00020000, }, @@ -3138,7 +3195,7 @@ const uint32_t c_aauiCQMFHuffDec49[113][16] = {0x000102c5, 0x000102c5, 0x000102c6, 0x000102c6, 0x000102c7, 0x000102c7, 0x000102c8, 0x000102c8, 0x000102c9, 0x000102c9, 0x000102ca, 0x000102ca, 0x000102cb, 0x000102cb, 0x000102cc, 0x000102cc, }, {0x000102cd, 0x000102cd, 0x000102ce, 0x000102ce, 0x000102cf, 0x000102cf, 0x000102d0, 0x000102d0, 0x000102d1, 0x000102d1, 0x000102d2, 0x000102d2, 0x000102d3, 0x000102d3, 0x000102d4, 0x000102d4, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc50[28][2] = { {0x0002, 0x0001}, {0x0002, 0x0002}, {0x0002, 0x0003}, {0x0003, 0x0001}, {0x0004, 0x0001}, {0x0005, 0x0001}, {0x0006, 0x0001}, {0x0007, 0x0001}, @@ -3148,6 +3205,7 @@ const uint32_t c_aauiCQMFHuffEnc50[28][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec50[6][16] = { {0x0001ffff, 0x00000004, 0x00010003, 0x00010003, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00020002, 0x00020002, 0x00020002, 0x00020002, }, @@ -3157,7 +3215,7 @@ const uint32_t c_aauiCQMFHuffDec50[6][16] = {0x0001001a, 0x0001001a, 0x0001001b, 0x0001001b, 0x00020011, 0x00020011, 0x00020011, 0x00020011, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, }, {0x00010012, 0x00010012, 0x00010013, 0x00010013, 0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010019, 0x00010019, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc51[29][2] = { {0x0002, 0x0002}, {0x0002, 0x0003}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0004, 0x0001}, {0x0004, 0x0002}, {0x0004, 0x0003}, {0x0005, 0x0001}, @@ -3167,6 +3225,7 @@ const uint32_t c_aauiCQMFHuffEnc51[29][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec51[6][16] = { {0x0001ffff, 0x00000004, 0x00000005, 0x00000006, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020001, 0x00020001, 0x00020001, 0x00020001, }, @@ -3176,7 +3235,7 @@ const uint32_t c_aauiCQMFHuffDec51[6][16] = {0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00020013, 0x00020013, 0x00020013, 0x00020013, 0x00020014, 0x00020014, 0x00020014, 0x00020014, }, {0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc52[32][2] = { {0x0002, 0x0002}, {0x0002, 0x0003}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0004, 0x0002}, {0x0004, 0x0003}, {0x0005, 0x0001}, {0x0005, 0x0002}, @@ -3185,6 +3244,7 @@ const uint32_t c_aauiCQMFHuffEnc52[32][2] = {0x0013, 0x0003}, {0x0014, 0x0001}, {0x0014, 0x0002}, {0x0014, 0x0003}, {0x0014, 0x0004}, {0x0014, 0x0005}, {0x0013, 0x0004}, {0x0013, 0x0005}, }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec52[7][16] = { {0x0001ffff, 0x0002ffff, 0x00000004, 0x00000005, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020001, 0x00020001, 0x00020001, 0x00020001, }, @@ -3195,7 +3255,7 @@ const uint32_t c_aauiCQMFHuffDec52[7][16] = {0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, }, {0x00000017, 0x00000019, 0x0000001a, 0x0000001b, 0x0000001c, 0x0000001d, 0x00010018, 0x00010018, 0x0001001e, 0x0001001e, 0x0001001f, 0x0001001f, 0x00020016, 0x00020016, 0x00020016, 0x00020016, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc53[37][2] = { {0x0002, 0x0002}, {0x0002, 0x0003}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0004, 0x0002}, {0x0004, 0x0003}, {0x0005, 0x0002}, {0x0005, 0x0003}, @@ -3206,6 +3266,7 @@ const uint32_t c_aauiCQMFHuffEnc53[37][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec53[9][16] = { {0x0002ffff, 0x0001ffff, 0x00000004, 0x00000005, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020001, 0x00020001, 0x00020001, 0x00020001, }, @@ -3218,7 +3279,7 @@ const uint32_t c_aauiCQMFHuffDec53[9][16] = {0x0001001c, 0x0001001c, 0x0001001d, 0x0001001d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x00020020, 0x00020020, 0x00020020, 0x00020020, }, {0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x00020023, 0x00020023, 0x00020023, 0x00020023, 0x00020024, 0x00020024, 0x00020024, 0x00020024, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc54[39][2] = { {0x0002, 0x0002}, {0x0002, 0x0003}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0004, 0x0003}, {0x0005, 0x0003}, {0x0005, 0x0004}, {0x0005, 0x0005}, @@ -3229,6 +3290,7 @@ const uint32_t c_aauiCQMFHuffEnc54[39][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec54[9][16] = { {0x0003ffff, 0x0001ffff, 0x0002ffff, 0x00000004, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020001, 0x00020001, 0x00020001, 0x00020001, }, @@ -3241,7 +3303,7 @@ const uint32_t c_aauiCQMFHuffDec54[9][16] = {0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, }, {0x00010023, 0x00010023, 0x00010024, 0x00010024, 0x00010025, 0x00010025, 0x00010026, 0x00010026, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc55[46][2] = { {0x0003, 0x0003}, {0x0002, 0x0003}, {0x0003, 0x0004}, {0x0003, 0x0005}, {0x0004, 0x0003}, {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0005, 0x0003}, @@ -3253,6 +3315,7 @@ const uint32_t c_aauiCQMFHuffEnc55[46][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec55[10][16] = { {0x0003ffff, 0x0001ffff, 0x0002ffff, 0x00000004, 0x00000005, 0x00000006, 0x00010000, 0x00010000, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00020001, 0x00020001, 0x00020001, 0x00020001, }, @@ -3266,7 +3329,7 @@ const uint32_t c_aauiCQMFHuffDec55[10][16] = {0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00020027, 0x00020027, 0x00020027, 0x00020027, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, }, {0x00010028, 0x00010028, 0x00010029, 0x00010029, 0x0001002a, 0x0001002a, 0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, 0x00020025, 0x00020025, 0x00020025, 0x00020025, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc56[55][2] = { {0x0003, 0x0003}, {0x0002, 0x0003}, {0x0003, 0x0004}, {0x0003, 0x0005}, {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0005, 0x0003}, {0x0005, 0x0004}, @@ -3279,6 +3342,7 @@ const uint32_t c_aauiCQMFHuffEnc56[55][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec56[12][16] = { {0x0004ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x00000004, 0x00000005, 0x00010000, 0x00010000, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00020001, 0x00020001, 0x00020001, 0x00020001, }, @@ -3294,7 +3358,7 @@ const uint32_t c_aauiCQMFHuffDec56[12][16] = {0x00010035, 0x00010035, 0x00010036, 0x00010036, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002d, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, }, {0x0001002b, 0x0001002b, 0x0001002e, 0x0001002e, 0x0001002f, 0x0001002f, 0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc57[65][2] = { {0x0003, 0x0004}, {0x0002, 0x0003}, {0x0003, 0x0005}, {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0005, 0x0004}, @@ -3309,6 +3373,7 @@ const uint32_t c_aauiCQMFHuffEnc57[65][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec57[14][16] = { {0x0004ffff, 0x0003ffff, 0x0001ffff, 0x0002ffff, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00010000, 0x00010000, 0x00010002, 0x00010002, 0x00020001, 0x00020001, 0x00020001, 0x00020001, }, @@ -3326,7 +3391,7 @@ const uint32_t c_aauiCQMFHuffDec57[14][16] = {0x0001003b, 0x0001003b, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, 0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x00010040, 0x00010040, 0x00020033, 0x00020033, 0x00020033, 0x00020033, }, {0x0001002f, 0x0001002f, 0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x00010038, 0x00010038, 0x00010039, 0x00010039, 0x0001003a, 0x0001003a, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc58[77][2] = { {0x0004, 0x0005}, {0x0003, 0x0005}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0004, 0x0008}, {0x0004, 0x0009}, @@ -3342,6 +3407,7 @@ const uint32_t c_aauiCQMFHuffEnc58[77][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec58[17][16] = { {0x0005ffff, 0x0004ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x00000000, 0x00000004, 0x00000005, 0x00000006, 0x00000007, 0x00010001, 0x00010001, 0x00010002, 0x00010002, 0x00010003, 0x00010003, }, @@ -3362,7 +3428,7 @@ const uint32_t c_aauiCQMFHuffDec58[17][16] = {0x00020047, 0x00020047, 0x00020047, 0x00020047, 0x00020048, 0x00020048, 0x00020048, 0x00020048, 0x00020049, 0x00020049, 0x00020049, 0x00020049, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, }, {0x00010038, 0x00010038, 0x00010039, 0x00010039, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, 0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x00010041, 0x00010041, 0x00010042, 0x00010042, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc59[91][2] = { {0x0003, 0x0005}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0004, 0x0008}, {0x0004, 0x0009}, {0x0005, 0x0006}, @@ -3380,6 +3446,7 @@ const uint32_t c_aauiCQMFHuffEnc59[91][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec59[20][16] = { {0x0006ffff, 0x0004ffff, 0x0005ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00010000, 0x00010000, 0x00010001, 0x00010001, 0x00010002, 0x00010002, }, @@ -3403,7 +3470,7 @@ const uint32_t c_aauiCQMFHuffDec59[20][16] = {0x00010048, 0x00010048, 0x00010049, 0x00010049, 0x0001004a, 0x0001004a, 0x0001004b, 0x0001004b, 0x0001004c, 0x0001004c, 0x0001004d, 0x0001004d, 0x0001004e, 0x0001004e, 0x0001004f, 0x0001004f, }, {0x00010050, 0x00010050, 0x00010051, 0x00010051, 0x00010052, 0x00010052, 0x00010053, 0x00010053, 0x00010054, 0x00010054, 0x00010055, 0x00010055, 0x00010056, 0x00010056, 0x00010057, 0x00010057, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc60[109][2] = { {0x0004, 0x0007}, {0x0002, 0x0003}, {0x0003, 0x0005}, {0x0004, 0x0008}, {0x0004, 0x0009}, {0x0005, 0x0007}, {0x0005, 0x0008}, {0x0005, 0x0009}, @@ -3423,6 +3490,7 @@ const uint32_t c_aauiCQMFHuffEnc60[109][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec60[24][16] = { {0x0007ffff, 0x0005ffff, 0x0006ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x00000000, 0x00000003, 0x00000004, 0x00010002, 0x00010002, 0x00020001, 0x00020001, 0x00020001, 0x00020001, }, @@ -3450,7 +3518,7 @@ const uint32_t c_aauiCQMFHuffDec60[24][16] = {0x0001005a, 0x0001005a, 0x0001005b, 0x0001005b, 0x0001005c, 0x0001005c, 0x0001005d, 0x0001005d, 0x0001005e, 0x0001005e, 0x0001005f, 0x0001005f, 0x00010060, 0x00010060, 0x00010061, 0x00010061, }, {0x00010062, 0x00010062, 0x00010063, 0x00010063, 0x00010064, 0x00010064, 0x00010065, 0x00010065, 0x00010066, 0x00010066, 0x00010067, 0x00010067, 0x00010068, 0x00010068, 0x00010069, 0x00010069, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc61[129][2] = { {0x0004, 0x0008}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0009}, {0x0004, 0x000a}, {0x0004, 0x000b}, {0x0005, 0x0008}, {0x0005, 0x0009}, @@ -3473,6 +3541,7 @@ const uint32_t c_aauiCQMFHuffEnc61[129][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec61[33][16] = { {0x0008ffff, 0x0007ffff, 0x0005ffff, 0x0006ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x00000000, 0x00000003, 0x00000004, 0x00000005, 0x00010001, 0x00010001, 0x00010002, 0x00010002, }, @@ -3509,7 +3578,7 @@ const uint32_t c_aauiCQMFHuffDec61[33][16] = {0x00020077, 0x00020077, 0x00020077, 0x00020077, 0x00020078, 0x00020078, 0x00020078, 0x00020078, 0x00020079, 0x00020079, 0x00020079, 0x00020079, 0x0002007a, 0x0002007a, 0x0002007a, 0x0002007a, }, {0x0002007b, 0x0002007b, 0x0002007b, 0x0002007b, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007d, 0x0002007d, 0x0002007d, 0x0002007d, 0x0002007e, 0x0002007e, 0x0002007e, 0x0002007e, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc62[153][2] = { {0x0004, 0x0009}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x000a}, {0x0004, 0x000b}, {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0005, 0x000c}, @@ -3535,6 +3604,7 @@ const uint32_t c_aauiCQMFHuffEnc62[153][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec62[41][16] = { {0x0009ffff, 0x0008ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x00000000, 0x00000003, 0x00000004, 0x00010001, 0x00010001, 0x00010002, 0x00010002, }, @@ -3579,7 +3649,7 @@ const uint32_t c_aauiCQMFHuffDec62[41][16] = {0x0002008e, 0x0002008e, 0x0002008e, 0x0002008e, 0x0002008f, 0x0002008f, 0x0002008f, 0x0002008f, 0x00020090, 0x00020090, 0x00020090, 0x00020090, 0x00020091, 0x00020091, 0x00020091, 0x00020091, }, {0x00020092, 0x00020092, 0x00020092, 0x00020092, 0x00020093, 0x00020093, 0x00020093, 0x00020093, 0x00020094, 0x00020094, 0x00020094, 0x00020094, 0x00020095, 0x00020095, 0x00020095, 0x00020095, }, }; - +#endif const uint32_t c_aauiCQMFHuffEnc63[181][2] = { {0x0004, 0x0008}, {0x0003, 0x0005}, {0x0002, 0x0003}, {0x0004, 0x0009}, {0x0005, 0x000c}, {0x0005, 0x000d}, {0x0005, 0x000e}, {0x0005, 0x000f}, @@ -3608,6 +3678,7 @@ const uint32_t c_aauiCQMFHuffEnc63[181][2] = }; +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec63[39][16] = { {0x0008ffff, 0x0006ffff, 0x0007ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0001ffff, 0x0002ffff, 0x00000000, 0x00000003, 0x00010001, 0x00010001, 0x00020002, 0x00020002, 0x00020002, 0x00020002, }, @@ -3650,7 +3721,7 @@ const uint32_t c_aauiCQMFHuffDec63[39][16] = {0x00000091, 0x00000092, 0x00000093, 0x00000094, 0x00000095, 0x00000096, 0x00000097, 0x00000098, 0x00000099, 0x0000009a, 0x0000009b, 0x0000009c, 0x0000009d, 0x0000009e, 0x0000009f, 0x000000a0, }, {0x00000075, 0x00000079, 0x0000007f, 0x00000081, 0x00000082, 0x00000083, 0x00000085, 0x00000087, 0x00000088, 0x00000089, 0x0000008a, 0x0000008b, 0x0000008c, 0x0000008d, 0x0000008e, 0x00000090, }, }; - +#endif const uint32_t (*c_apauiHuffEncTabels[2 * ALLOC_TABLE_SIZE])[2] = { NULL, c_aauiCQMFHuffEnc1, @@ -3717,7 +3788,7 @@ const uint32_t (*c_apauiHuffEncTabels[2 * ALLOC_TABLE_SIZE])[2] = { c_aauiCQMFHuffEnc62, c_aauiCQMFHuffEnc63, }; - +#ifndef ROM_TO_RAM const uint32_t (*c_apauiHuffDecTables[2 * ALLOC_TABLE_SIZE])[HUFF_DEC_TABLE_SIZE] = { NULL, c_aauiCQMFHuffDec1, @@ -3784,7 +3855,17 @@ const uint32_t (*c_apauiHuffDecTables[2 * ALLOC_TABLE_SIZE])[HUFF_DEC_TABLE_SIZE c_aauiCQMFHuffDec62, c_aauiCQMFHuffDec63, }; - +#else +const uint32_t num_row_aauiCQMFHuff[2 * ALLOC_TABLE_SIZE] = +{ 0, 16, 16, 25, 36, 36, 49, 64, 81, 100, + 169, 196, 289, 324, 400, 576, 729, 729, 28, 29, + 32, 37, 39, 46, 55, 65, 77, 91, 109, 129, + 153, 181, 0, 16, 16, 25, 36, 36, 49, 64, 81, + 100, 169, 196, 289, 324, 400, 576, 729, 729, 28, + 29, 32, 37, 39, 46, 55, 65, 77, 91, 109, + 129, 153, 181 +}; +#endif #ifdef USE_DEMOD_TABLES const int32_t c_aaiHuffDemod1[16][2] = { 0,0,0,1,0,2,0,3,1,0,1,1,1,2,1,3,2,0,2,1,2,2,2,3,3,0,3,1,3,2,3,3, diff --git a/lib_rend/ivas_CQMFHuff.h b/lib_rend/ivas_CQMFHuff.h index bf28158bea..a4c28a3bac 100644 --- a/lib_rend/ivas_CQMFHuff.h +++ b/lib_rend/ivas_CQMFHuff.h @@ -38,6 +38,7 @@ extern "C" { #endif +#include "options.h" #include "ivas_Tables.h" #include // For NULL #include @@ -55,256 +56,382 @@ extern "C" extern const uint32_t c_aauiCQMFHuffEnc1[16][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec1[3][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc2[16][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec2[3][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc3[25][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec3[10][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc4[36][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec4[5][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc5[36][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec5[10][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc6[49][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec6[7][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc7[64][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec7[25][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc8[81][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec8[16][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc9[100][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec9[22][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc10[169][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec10[45][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc11[196][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec11[50][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc12[289][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec12[76][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc13[324][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec13[89][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc14[400][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec14[53][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc15[576][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec15[73][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc16[729][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec16[85][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc17[729][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec17[93][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc18[28][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec18[6][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc19[29][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec19[6][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc20[32][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec20[6][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc21[37][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec21[7][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc22[39][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec22[9][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc23[46][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec23[12][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc24[55][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec24[17][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc25[65][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec25[19][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc26[77][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec26[26][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc27[91][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec27[28][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc28[109][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec28[30][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc29[129][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec29[34][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc30[153][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec30[39][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc31[181][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec31[43][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc33[16][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec33[2][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc34[16][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec34[2][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc35[25][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec35[9][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc36[36][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec36[7][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc37[36][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec37[4][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc38[49][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec38[22][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc39[64][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec39[12][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc40[81][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec40[36][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc41[100][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec41[16][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc42[169][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec42[28][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc43[196][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec43[32][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc44[289][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec44[27][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc45[324][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec45[50][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc46[400][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec46[61][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc47[576][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec47[87][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc48[729][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec48[110][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc49[729][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec49[113][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc50[28][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec50[6][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc51[29][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec51[6][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc52[32][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec52[7][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc53[37][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec53[9][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc54[39][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec54[9][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc55[46][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec55[10][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc56[55][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec56[12][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc57[65][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec57[14][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc58[77][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec58[17][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc59[91][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec59[20][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc60[109][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec60[24][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc61[129][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec61[33][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc62[153][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec62[41][16]; +#endif extern const uint32_t c_aauiCQMFHuffEnc63[181][2]; +#ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffDec63[39][16]; - +#endif extern const uint32_t ( *c_apauiHuffEncTabels[2 * ALLOC_TABLE_SIZE] )[2]; - +#ifndef ROM_TO_RAM extern const uint32_t ( *c_apauiHuffDecTables[2 * ALLOC_TABLE_SIZE] )[HUFF_DEC_TABLE_SIZE]; +#else +extern const uint32_t num_row_aauiCQMFHuff[2 * ALLOC_TABLE_SIZE]; +#endif #ifdef USE_DEMOD_TABLES extern const int32_t c_aaiHuffDemod1[16][2]; diff --git a/lib_rend/ivas_Tables.h b/lib_rend/ivas_Tables.h index 676ecd43d0..61abfb30c9 100644 --- a/lib_rend/ivas_Tables.h +++ b/lib_rend/ivas_Tables.h @@ -75,7 +75,9 @@ extern "C" #define MIN_ALLOC_OFFSET ( -128 ) #define MAX_ALLOC_OFFSET ( 127 ) - +#ifdef ROM_TO_RAM +#define READ_LENGTH ( 4 ) +#endif #define ALLOC_TABLE_SIZE ( 32 ) -- GitLab From a035b93b9e2f9d1999385d4c6f7d0198e7a4475e Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Wed, 3 May 2023 17:38:34 +0530 Subject: [PATCH 19/31] pipeline_fixes_set-1 --- lib_rend/ivas_CQMFDecoder.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/lib_rend/ivas_CQMFDecoder.c b/lib_rend/ivas_CQMFDecoder.c index 16e6afc614..44f1cbeb9d 100644 --- a/lib_rend/ivas_CQMFDecoder.c +++ b/lib_rend/ivas_CQMFDecoder.c @@ -124,7 +124,7 @@ struct CQMF_DECODER #ifdef ROM_TO_RAM static void CreateDecodeTable( CQMFDecoder *psCQMFDecoder, int32_t num, const uint32_t ( *ppuiEncTable )[2], int32_t iSize, int32_t iReadLength, uint32_t *iTables ); static TableNode *CreateTableList( int32_t iReadLength ); -static void DeleteTableList( TableList *ptable_list, int32_t iReadLength, int32_t iTables ); +static void DeleteTableList( TableList *ptable_list, int32_t iTables ); static TableNode *GetNextTable( int32_t iIndex, TableList *table_list, TableNode *poParent, int32_t iReadLength, uint32_t *iTablesCreated ); static void AddcodeTableList( TableList *ptable_list, int32_t iLength, int32_t iCode, int32_t iCodeIndex, int32_t iReadLength, uint32_t *iTables ); static void CompleteTables( CQMFDecoder *psCQMFDecoder, int32_t n, TableList *ptable_list, int32_t iReadLength, int32_t iTablesCreated ); @@ -151,15 +151,15 @@ static TableNode *CreateTableList( int32_t iReadLength ) return ptable_top; } -static void DeleteTableList( TableList *ptable_list, int32_t iReadLength, int32_t iTables ) +static void DeleteTableList( TableList *ptable_list, int32_t iTables ) { TableNode *node; - int32_t iMaxTables; + //int32_t iMaxTables; node = ptable_list->poOrderedTop; - iMaxTables = 1 << iReadLength; + //iMaxTables = 1 << iReadLength; while ( ( iTables ) ) { @@ -282,11 +282,11 @@ static void AddcodeTableList( TableList *ptable_list, int32_t iLength, int32_t i static void CreateDecodeTable( CQMFDecoder *psCQMFDecoder, int32_t num, const uint32_t ( *ppuiEncTable )[2], int32_t iSize, int32_t iReadLength, uint32_t *iTables ) { int32_t n; - int32_t iMaxTables; + //int32_t iMaxTables; uint32_t **ppsort_enc_table; TableList *ptable_list; ptable_list = (TableList *) malloc( sizeof( TableList ) ); - iMaxTables = 1 << iReadLength; + //iMaxTables = 1 << iReadLength; ppsort_enc_table = (uint32_t **) malloc( iSize * sizeof( int32_t * ) ); for ( n = 0; n < iSize; n++ ) @@ -350,7 +350,7 @@ static void CreateDecodeTable( CQMFDecoder *psCQMFDecoder, int32_t num, const ui } CompleteTables( psCQMFDecoder, num, ptable_list, iReadLength, *iTables ); - DeleteTableList( ptable_list, iReadLength, *iTables ); + DeleteTableList( ptable_list, *iTables ); for ( n = 0; n < iSize; n++ ) { free( ppsort_enc_table[n] ); @@ -780,14 +780,12 @@ int32_t DecodeFrame( CQMFDecoder *psCQMFDecoder, psCQMFDecoder->iChannels, psCQMFDecoder->iNumBlocks, &psCQMFDecoder->iCommonGrouping, psCQMFDecoder->piNumGroups, psCQMFDecoder->ppiGroupLengths, - pBits - ); + pBits ); iBitsRead += ReadRMSEnvelope( psCQMFDecoder->iChannels, (const int32_t *) psCQMFDecoder->piNumGroups, psCQMFDecoder->iNumBands, psCQMFDecoder->pppiRMSEnvelope, - pBits - ); + pBits ); #ifdef ENABLE_PMOD_ADJUST iBitsRead += @@ -1558,10 +1556,14 @@ ReadCQMFData( const int32_t iNumGroups, const int32_t *piGroupLengths, const int #ifdef USE_DEMOD_TABLES const int32_t( *paiDemodTable )[2] = NULL; #endif - +#ifdef ROM_TO_RAM + pauiHuffmanTable = (const uint32_t( * )[HUFF_DEC_TABLE_SIZE]) c_apauiHuffDecTables[iAlloc]; + pauiHuffmanTableDPCM = (const uint32_t( * )[HUFF_DEC_TABLE_SIZE]) c_apauiHuffDecTables[ALLOC_TABLE_SIZE + iAlloc]; +#else pauiHuffmanTable = c_apauiHuffDecTables[iAlloc]; pauiHuffmanTableDPCM = c_apauiHuffDecTables[ALLOC_TABLE_SIZE + iAlloc]; +#endif #ifdef USE_DEMOD_TABLES paiDemodTable = c_apaiDemodTables[iAlloc]; #endif -- GitLab From a2b85f9b716b447eee56754f29a783a67bdbb9d8 Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Wed, 3 May 2023 18:08:57 +0530 Subject: [PATCH 20/31] clean up & clang format fixes --- lib_rend/ivas_CQMFDecoder.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/lib_rend/ivas_CQMFDecoder.c b/lib_rend/ivas_CQMFDecoder.c index 44f1cbeb9d..9981f84932 100644 --- a/lib_rend/ivas_CQMFDecoder.c +++ b/lib_rend/ivas_CQMFDecoder.c @@ -155,11 +155,8 @@ static void DeleteTableList( TableList *ptable_list, int32_t iTables ) { TableNode *node; - //int32_t iMaxTables; node = ptable_list->poOrderedTop; - - //iMaxTables = 1 << iReadLength; while ( ( iTables ) ) { @@ -282,11 +279,9 @@ static void AddcodeTableList( TableList *ptable_list, int32_t iLength, int32_t i static void CreateDecodeTable( CQMFDecoder *psCQMFDecoder, int32_t num, const uint32_t ( *ppuiEncTable )[2], int32_t iSize, int32_t iReadLength, uint32_t *iTables ) { int32_t n; - //int32_t iMaxTables; uint32_t **ppsort_enc_table; TableList *ptable_list; ptable_list = (TableList *) malloc( sizeof( TableList ) ); - //iMaxTables = 1 << iReadLength; ppsort_enc_table = (uint32_t **) malloc( iSize * sizeof( int32_t * ) ); for ( n = 0; n < iSize; n++ ) -- GitLab From fbbb2c2470f669ba6f46156260030ece45e9d2c4 Mon Sep 17 00:00:00 2001 From: rtyag Date: Thu, 4 May 2023 10:25:24 +1000 Subject: [PATCH 21/31] SBA rotation BE optimization, FOA, HOA2 fix with crend --- lib_com/options.h | 3 ++- lib_dec/lib_dec.c | 2 ++ lib_rend/lib_rend.c | 53 ++++++++++++++++++++++++++++++++++----------- 3 files changed, 44 insertions(+), 14 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 488c81999d..1c5d43770d 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -203,7 +203,8 @@ /*CLDFB CODEC SWITCHES -- END*/ #define REND_STATIC_MEM_OPT -#define EUALER2QUAT_FIX +//#define EUALER2QUAT_FIX +#define SBA_CREND_ROT_OPT #define ROM_TO_RAM /*switch to convert CQMF decoder tables to RAM*/ diff --git a/lib_dec/lib_dec.c b/lib_dec/lib_dec.c index 3b30033565..5b58da5874 100644 --- a/lib_dec/lib_dec.c +++ b/lib_dec/lib_dec.c @@ -948,9 +948,11 @@ ivas_error IVAS_DEC_FeedHeadTrackData( { /* check for Euler angle signaling */ #ifdef SPLIT_REND_WITH_HEAD_ROT +#ifndef EUALER2QUAT_FIX /* TODO: temp change until Euler2Quat() is fixed*/ if ( ( hIvasDec->st_ivas->hDecoderConfig->output_config != AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) && ( hIvasDec->st_ivas->hDecoderConfig->output_config != AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ) +#endif #endif { if ( orientation[i].w == -3.0f ) diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 7ec283f674..1f1be0b7b0 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -2422,37 +2422,41 @@ updateSbaPanGains( case IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM: { int16_t is_cldfb_in; - assert( inConfig == IVAS_REND_AUDIO_CONFIG_HOA3 && ( *rendCtx.pOutSampleRate == 48000 ) && "split binaural mode is currently supported with HOA3 input and 48k sampling rate only" ); + is_cldfb_in = 1; ivas_renderSplitGetMultiBinPoseData( &rendCtx.hhRendererConfig[0]->split_rend_config, &inputSba->splitRendWrapper.multiBinPoseData, rendCtx.pHeadRotData->sr_pose_pred_axis ); -#ifdef SPLIT_REND_WITH_HEAD_ROT - if ( hRendCfg->renderer_type_override != RENDER_TYPE_OVERRIDE_FASTCONV ) +#if defined DEBUGGING && defined SPLIT_REND_WITH_HEAD_ROT + if ( hRendCfg->renderer_type_override == RENDER_TYPE_OVERRIDE_FASTCONV ) { - error = ivas_rend_openMultiBinCrend( &inputSba->crendWrapper, inConfig, outConfig, - &inputSba->splitRendWrapper.multiBinPoseData, - *rendCtx.pOutSampleRate ); + assert( inConfig == IVAS_REND_AUDIO_CONFIG_HOA3 && ( *rendCtx.pOutSampleRate == 48000 ) && "split binaural fast conv mode is currently supported with HOA3 input and 48k sampling rate only" ); + error = ivas_rend_openCldfbRend( &inputSba->cldfbRendWrapper, inConfig, outConfig, hRendCfg, + &inputSba->splitRendWrapper.multiBinPoseData, + *rendCtx.pOutSampleRate ); if ( error != IVAS_ERR_OK ) { return error; } - is_cldfb_in = 0; + is_cldfb_in = 1; } + else #endif { - error = ivas_rend_openCldfbRend( &inputSba->cldfbRendWrapper, inConfig, outConfig, hRendCfg, - &inputSba->splitRendWrapper.multiBinPoseData, - *rendCtx.pOutSampleRate ); + assert( ( *rendCtx.pOutSampleRate == 48000 ) && "split binaural crend mode is currently supported with 48k sampling rate only" ); + error = ivas_rend_openMultiBinCrend( &inputSba->crendWrapper, inConfig, outConfig, + &inputSba->splitRendWrapper.multiBinPoseData, + *rendCtx.pOutSampleRate ); if ( error != IVAS_ERR_OK ) { return error; } - is_cldfb_in = 1; + is_cldfb_in = 0; } + error = ivas_split_renderer_open( &inputSba->splitRendWrapper, &inputSba->base.ctx.hhRendererConfig[0]->split_rend_config, *rendCtx.pOutSampleRate, is_cldfb_in, ( outConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ? 1 : 0 ); @@ -2539,7 +2543,7 @@ static ivas_error setRendInputActiveSplitPostRend( outConfig = *rendCtx.pOutConfig; #ifdef REND_STATIC_MEM_OPT - if ( ( error = allocateInputBaseBufferData( &inputSplitPostRend->bufferData, MAX_BUFFER_LENGTH ) ) != IVAS_ERR_OK ) + if ( ( error = allocateInputBaseBufferData( &inputSplitPostRend->bufferData, MAX_BUFFER_LENGTH_PER_CHANNEL * BINAURAL_CHANNELS ) ) != IVAS_ERR_OK ) { return error; } @@ -2547,7 +2551,7 @@ static ivas_error setRendInputActiveSplitPostRend( initRendInputBase( &inputSplitPostRend->base, inConfig, id, rendCtx #ifdef REND_STATIC_MEM_OPT , - inputSplitPostRend->bufferData, MAX_BUFFER_LENGTH + inputSplitPostRend->bufferData, MAX_BUFFER_LENGTH_PER_CHANNEL * BINAURAL_CHANNELS #endif ); @@ -4539,7 +4543,11 @@ ivas_error IVAS_REND_SetHeadRotation( ( hIvasRend->inputsSplitPost[0].base.inConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) || ( hIvasRend->inputsSplitPost[0].base.inConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ) { +#ifndef EUALER2QUAT_FIX rotQuat = headRot[i]; /* TODO: temp change until Euler2Quat() is fixed*/ +#else + Euler2Quat( deg2rad( headRot[i].x ), deg2rad( headRot[i].y ), deg2rad( headRot[i].z ), &rotQuat ); +#endif } else #endif @@ -4949,11 +4957,19 @@ static ivas_error rotateFrameSba( int16_t m1, m2; int16_t shd_rot_max_order; int16_t subframe_idx, subframe_len; +#ifdef SBA_CREND_ROT_OPT + float *writePtr; +#else float *readPtr, *writePtr; +#endif rotation_matrix Rmat; float tmpRot[2 * HEADROT_ORDER + 1]; rotation_gains gains; ivas_error error; +#ifdef SBA_CREND_ROT_OPT + int16_t idx; + float val, cf, oneminuscf; +#endif push_wmops( "rotateFrameSba" ); @@ -4980,6 +4996,11 @@ static ivas_error rotateFrameSba( for ( i = 0; i < subframe_len; i++ ) { +#ifdef SBA_CREND_ROT_OPT + idx = subframe_idx * subframe_len + i; + cf = headRotData->crossfade[i]; + oneminuscf = 1 - cf; +#endif /* As the rotation matrix becomes block diagonal in a SH basis, we can*/ /* apply each angular-momentum block individually to save complexity. */ @@ -4995,10 +5016,16 @@ static ivas_error rotateFrameSba( for ( m = m1; m < m2; m++ ) { +#ifdef SBA_CREND_ROT_OPT + val = inAudio.data[m * inAudio.config.numSamplesPerChannel + idx]; + /* crossfade with previous rotation gains */ + tmpRot[n - m1] += ( cf * gains[n][m] * val + oneminuscf * gains_prev[n][m] * val ); +#else readPtr = getSmplPtr( inAudio, m, subframe_idx * subframe_len + i ); /* crossfade with previous rotation gains */ tmpRot[n - m1] += headRotData->crossfade[i] * gains[n][m] * ( *readPtr ) + ( 1 - headRotData->crossfade[i] ) * gains_prev[n][m] * ( *readPtr ); +#endif } } /* write back the result */ -- GitLab From 29e1af81f39cb993ce083a95f2b213e7e1fca976 Mon Sep 17 00:00:00 2001 From: rtyag Date: Thu, 4 May 2023 10:28:24 +1000 Subject: [PATCH 22/31] enable EUALER2QUAT_FIX --- lib_com/options.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_com/options.h b/lib_com/options.h index 1c5d43770d..dec3063de3 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -203,7 +203,7 @@ /*CLDFB CODEC SWITCHES -- END*/ #define REND_STATIC_MEM_OPT -//#define EUALER2QUAT_FIX +#define EUALER2QUAT_FIX #define SBA_CREND_ROT_OPT #define ROM_TO_RAM /*switch to convert CQMF decoder tables to RAM*/ -- GitLab From ef8dc8e6aa277e07a79d92736b42ef7812465ef0 Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Thu, 4 May 2023 14:54:08 +0530 Subject: [PATCH 23/31] moved the tables to ivas_lcld_tables.c --- Workspace_msvc/lib_rend.vcxproj | 5 +- lib_rend/ivas_CQMFDecoder.c | 16 +- lib_rend/ivas_CQMFEncoder.c | 45 +- lib_rend/ivas_MSPred.c | 3 +- lib_rend/ivas_PerceptualModel.c | 114 +-- lib_rend/ivas_PerceptualModel.h | 59 -- lib_rend/ivas_PredDecoder.c | 2 +- lib_rend/ivas_PredEncoder.c | 2 +- lib_rend/ivas_RMSEnvDeltaHuff.c | 66 -- lib_rend/ivas_RMSEnvDeltaHuff.h | 57 -- lib_rend/ivas_RMSEnvGrouping.c | 3 +- lib_rend/ivas_Tables.c | 200 ----- lib_rend/ivas_Tables.h | 128 --- .../{ivas_CQMFHuff.c => ivas_lcld_tables.c} | 750 +++++++++++++++--- .../{ivas_CQMFHuff.h => ivas_lcld_tables.h} | 389 +++++---- 15 files changed, 947 insertions(+), 892 deletions(-) delete mode 100644 lib_rend/ivas_PerceptualModel.h delete mode 100644 lib_rend/ivas_RMSEnvDeltaHuff.c delete mode 100644 lib_rend/ivas_RMSEnvDeltaHuff.h delete mode 100644 lib_rend/ivas_Tables.c delete mode 100644 lib_rend/ivas_Tables.h rename lib_rend/{ivas_CQMFHuff.c => ivas_lcld_tables.c} (96%) rename lib_rend/{ivas_CQMFHuff.h => ivas_lcld_tables.h} (60%) diff --git a/Workspace_msvc/lib_rend.vcxproj b/Workspace_msvc/lib_rend.vcxproj index 0488574583..423c250c03 100644 --- a/Workspace_msvc/lib_rend.vcxproj +++ b/Workspace_msvc/lib_rend.vcxproj @@ -199,20 +199,18 @@ + - - - @@ -245,6 +243,7 @@ + diff --git a/lib_rend/ivas_CQMFDecoder.c b/lib_rend/ivas_CQMFDecoder.c index 9981f84932..5a5888fa09 100644 --- a/lib_rend/ivas_CQMFDecoder.c +++ b/lib_rend/ivas_CQMFDecoder.c @@ -39,11 +39,8 @@ Nations Convention on Contracts on the International Sales of Goods. #include "options.h" #ifdef SPLIT_REND_WITH_HEAD_ROT -#include "ivas_CQMFHuff.h" #include "ivas_NoiseGen.h" -#include "ivas_PerceptualModel.h" -#include "ivas_RMSEnvDeltaHuff.h" -#include "ivas_Tables.h" +#include "ivas_lcld_tables.h" #include "ivas_cldfb_codec_bitstream.h" #include "prot.h" #include @@ -122,7 +119,7 @@ struct CQMF_DECODER int32_t iLastError; }; #ifdef ROM_TO_RAM -static void CreateDecodeTable( CQMFDecoder *psCQMFDecoder, int32_t num, const uint32_t ( *ppuiEncTable )[2], int32_t iSize, int32_t iReadLength, uint32_t *iTables ); +static void CreateDecodeTable( CQMFDecoder *psCQMFDecoder, int32_t num, const uint16_t ( *ppuiEncTable )[2], int32_t iSize, int32_t iReadLength, uint32_t *iTables ); static TableNode *CreateTableList( int32_t iReadLength ); static void DeleteTableList( TableList *ptable_list, int32_t iTables ); static TableNode *GetNextTable( int32_t iIndex, TableList *table_list, TableNode *poParent, int32_t iReadLength, uint32_t *iTablesCreated ); @@ -276,7 +273,7 @@ static void AddcodeTableList( TableList *ptable_list, int32_t iLength, int32_t i } } -static void CreateDecodeTable( CQMFDecoder *psCQMFDecoder, int32_t num, const uint32_t ( *ppuiEncTable )[2], int32_t iSize, int32_t iReadLength, uint32_t *iTables ) +static void CreateDecodeTable( CQMFDecoder *psCQMFDecoder, int32_t num, const uint16_t ( *ppuiEncTable )[2], int32_t iSize, int32_t iReadLength, uint32_t *iTables ) { int32_t n; uint32_t **ppsort_enc_table; @@ -288,8 +285,8 @@ static void CreateDecodeTable( CQMFDecoder *psCQMFDecoder, int32_t num, const ui { ppsort_enc_table[n] = (uint32_t *) malloc( 3 * sizeof( int32_t ) ); - ppsort_enc_table[n][0] = ppuiEncTable[n][0]; - ppsort_enc_table[n][1] = ppuiEncTable[n][1]; + ppsort_enc_table[n][0] = (uint32_t)ppuiEncTable[n][0]; + ppsort_enc_table[n][1] = (uint32_t)ppuiEncTable[n][1]; ppsort_enc_table[n][2] = (uint32_t) n; } @@ -1556,8 +1553,7 @@ ReadCQMFData( const int32_t iNumGroups, const int32_t *piGroupLengths, const int pauiHuffmanTableDPCM = (const uint32_t( * )[HUFF_DEC_TABLE_SIZE]) c_apauiHuffDecTables[ALLOC_TABLE_SIZE + iAlloc]; #else pauiHuffmanTable = c_apauiHuffDecTables[iAlloc]; - pauiHuffmanTableDPCM = - c_apauiHuffDecTables[ALLOC_TABLE_SIZE + iAlloc]; + pauiHuffmanTableDPCM = c_apauiHuffDecTables[ALLOC_TABLE_SIZE + iAlloc]; #endif #ifdef USE_DEMOD_TABLES paiDemodTable = c_apaiDemodTables[iAlloc]; diff --git a/lib_rend/ivas_CQMFEncoder.c b/lib_rend/ivas_CQMFEncoder.c index a933b2f7cb..05c992516e 100644 --- a/lib_rend/ivas_CQMFEncoder.c +++ b/lib_rend/ivas_CQMFEncoder.c @@ -37,12 +37,9 @@ #include #include #include -#include "ivas_Tables.h" +#include "ivas_lcld_tables.h" #include "prot.h" #include "ivas_RMSEnvGrouping.h" -#include "ivas_PerceptualModel.h" -#include "ivas_RMSEnvDeltaHuff.h" -#include "ivas_CQMFHuff.h" #include "ivas_cldfb_codec_bitstream.h" #include "ivas_prot_rend.h" #ifdef ENABLE_MS_PRED @@ -1081,12 +1078,12 @@ static void QuantizeSpectrumDPCM_Opt( const int32_t iNumGroups, fVal = ppfReal[iBlockOffset][iFBOffset] + fPredReal; if ( fVal > 0.0 ) { - iQuantValue = (int32_t) ( fSCFGain * fVal + 0.5 ); + iQuantValue = ( int32_t )( fSCFGain * fVal + 0.5 ); ppiSignReal[iBlockOffset][iFBOffset] = 0; } else { - iQuantValue = (int32_t) ( -fSCFGain * fVal + 0.5 ); + iQuantValue = ( int32_t )( -fSCFGain * fVal + 0.5 ); ppiSignReal[iBlockOffset][iFBOffset] = 1; } iQuantValue = ( iQuantValue < iMaxQuantVal ) ? iQuantValue : iMaxQuantVal; @@ -1096,12 +1093,12 @@ static void QuantizeSpectrumDPCM_Opt( const int32_t iNumGroups, fVal = ppfImag[iBlockOffset][iFBOffset] + fPredImag; if ( fVal > 0.0 ) { - iQuantValue = (int32_t) ( fSCFGain * fVal + 0.5 ); + iQuantValue = ( int32_t )( fSCFGain * fVal + 0.5 ); ppiSignImag[iBlockOffset][iFBOffset] = 0; } else { - iQuantValue = (int32_t) ( -fSCFGain * fVal + 0.5 ); + iQuantValue = ( int32_t )( -fSCFGain * fVal + 0.5 ); ppiSignImag[iBlockOffset][iFBOffset] = 1; } @@ -1139,12 +1136,12 @@ static void QuantizeSpectrumDPCM_Opt( const int32_t iNumGroups, fVal = ppfReal[iBlockOffset][iFBOffset]; if ( fVal > 0.0 ) { - iQuantValue = (int32_t) ( fSCFGain * fVal + 0.5 ); + iQuantValue = ( int32_t )( fSCFGain * fVal + 0.5 ); ppiSignReal[iBlockOffset][iFBOffset] = 0; } else { - iQuantValue = (int32_t) ( -fSCFGain * fVal + 0.5 ); + iQuantValue = ( int32_t )( -fSCFGain * fVal + 0.5 ); ppiSignReal[iBlockOffset][iFBOffset] = 1; } iQuantValue = ( iQuantValue < iMaxQuantVal ) ? iQuantValue : iMaxQuantVal; @@ -1154,12 +1151,12 @@ static void QuantizeSpectrumDPCM_Opt( const int32_t iNumGroups, fVal = ppfImag[iBlockOffset][iFBOffset]; if ( fVal > 0.0 ) { - iQuantValue = (int32_t) ( fSCFGain * fVal + 0.5 ); + iQuantValue = ( int32_t )( fSCFGain * fVal + 0.5 ); ppiSignImag[iBlockOffset][iFBOffset] = 0; } else { - iQuantValue = (int32_t) ( -fSCFGain * fVal + 0.5 ); + iQuantValue = ( int32_t )( -fSCFGain * fVal + 0.5 ); ppiSignImag[iBlockOffset][iFBOffset] = 1; } iQuantValue = ( iQuantValue < iMaxQuantVal ) ? iQuantValue : iMaxQuantVal; @@ -1241,12 +1238,12 @@ static void QuantizeSpectrumDPCM( const int32_t iNumGroups, fVal = ppfReal[iBlockOffset][iFBOffset] + fPredReal; if ( fVal > 0.0 ) { - iQuantValue = (int32_t) ( fSCFGain * fVal + 0.5 ); + iQuantValue = ( int32_t )( fSCFGain * fVal + 0.5 ); ppiSignReal[iBlockOffset][iFBOffset] = 0; } else { - iQuantValue = (int32_t) ( -fSCFGain * fVal + 0.5 ); + iQuantValue = ( int32_t )( -fSCFGain * fVal + 0.5 ); ppiSignReal[iBlockOffset][iFBOffset] = 1; } #ifdef _DEBUG_VERBOSE @@ -1264,12 +1261,12 @@ static void QuantizeSpectrumDPCM( const int32_t iNumGroups, fVal = ppfImag[iBlockOffset][iFBOffset] + fPredImag; if ( fVal > 0.0 ) { - iQuantValue = (int32_t) ( fSCFGain * fVal + 0.5 ); + iQuantValue = ( int32_t )( fSCFGain * fVal + 0.5 ); ppiSignImag[iBlockOffset][iFBOffset] = 0; } else { - iQuantValue = (int32_t) ( -fSCFGain * fVal + 0.5 ); + iQuantValue = ( int32_t )( -fSCFGain * fVal + 0.5 ); ppiSignImag[iBlockOffset][iFBOffset] = 1; } @@ -1357,9 +1354,13 @@ static int32_t CountCQMFBits( const int32_t iNumGroups, if ( iAlloc > 0 ) { +#ifndef ROM_TO_RAM const uint32_t( *pauiHuffmanTable )[2] = NULL; const uint32_t( *pauiHuffmanTableDPCM )[2] = NULL; - +#else + const uint16_t( *pauiHuffmanTable )[2] = NULL; + const uint16_t( *pauiHuffmanTableDPCM )[2] = NULL; +#endif // pauiHuffmanTable = GetHuffEncTable(iAlloc); pauiHuffmanTable = c_apauiHuffEncTabels[iAlloc]; pauiHuffmanTableDPCM = c_apauiHuffEncTabels[ALLOC_TABLE_SIZE + iAlloc]; @@ -1805,9 +1806,13 @@ static int32_t WriteCQMFData( const int32_t iNumGroups, if ( iAlloc > 0 ) { - const uint32_t( *pauiHuffmanTable )[2] = NULL; - const uint32_t( *pauiHuffmanTableDPCM )[2] = NULL; - +#ifndef ROM_TO_RAM + const uint32_t(*pauiHuffmanTable)[2] = NULL; + const uint32_t(*pauiHuffmanTableDPCM)[2] = NULL; +#else + const uint16_t(*pauiHuffmanTable)[2] = NULL; + const uint16_t(*pauiHuffmanTableDPCM)[2] = NULL; +#endif // pauiHuffmanTable = GetHuffEncTable(iAlloc); pauiHuffmanTable = c_apauiHuffEncTabels[iAlloc]; pauiHuffmanTableDPCM = c_apauiHuffEncTabels[ALLOC_TABLE_SIZE + iAlloc]; diff --git a/lib_rend/ivas_MSPred.c b/lib_rend/ivas_MSPred.c index 3694f07510..cec626c3aa 100644 --- a/lib_rend/ivas_MSPred.c +++ b/lib_rend/ivas_MSPred.c @@ -33,8 +33,7 @@ #include "ivas_MSPred.h" #include "options.h" #ifdef SPLIT_REND_WITH_HEAD_ROT -#include "ivas_Tables.h" -#include "ivas_RMSEnvDeltaHuff.h" +#include "ivas_lcld_tables.h" #include #include #include "prot.h" diff --git a/lib_rend/ivas_PerceptualModel.c b/lib_rend/ivas_PerceptualModel.c index 67adf974a0..2f0072ee97 100644 --- a/lib_rend/ivas_PerceptualModel.c +++ b/lib_rend/ivas_PerceptualModel.c @@ -29,11 +29,9 @@ the United Nations Convention on Contracts on the International Sales of Goods. *******************************************************************************************************/ - -#include "ivas_PerceptualModel.h" #include "options.h" #ifdef SPLIT_REND_WITH_HEAD_ROT -#include "ivas_Tables.h" +#include "ivas_lcld_tables.h" #include "prot.h" #include "ivas_prot_rend.h" #include @@ -41,43 +39,6 @@ /* clang-format off */ -#define LOG_ADD_TABLE_LENGTH (512) - -/*TODO : rtyag : move this to tables.c*/ -const int32_t c_aiLogAddTable[LOG_ADD_TABLE_LENGTH] = { - 0x40, 0x40, 0x3F, 0x3F, 0x3E, 0x3E, 0x3D, 0x3D, 0x3C, 0x3C, 0x3B, 0x3B, 0x3A, 0x3A, 0x39, 0x39, - 0x38, 0x38, 0x37, 0x37, 0x37, 0x36, 0x36, 0x35, 0x35, 0x34, 0x34, 0x33, 0x33, 0x33, 0x32, 0x32, - 0x31, 0x31, 0x31, 0x30, 0x30, 0x2F, 0x2F, 0x2F, 0x2E, 0x2E, 0x2D, 0x2D, 0x2D, 0x2C, 0x2C, 0x2B, - 0x2B, 0x2B, 0x2A, 0x2A, 0x2A, 0x29, 0x29, 0x29, 0x28, 0x28, 0x27, 0x27, 0x27, 0x26, 0x26, 0x26, - 0x25, 0x25, 0x25, 0x24, 0x24, 0x24, 0x23, 0x23, 0x23, 0x23, 0x22, 0x22, 0x22, 0x21, 0x21, 0x21, - 0x20, 0x20, 0x20, 0x20, 0x1F, 0x1F, 0x1F, 0x1E, 0x1E, 0x1E, 0x1E, 0x1D, 0x1D, 0x1D, 0x1C, 0x1C, - 0x1C, 0x1C, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x1A, 0x1A, 0x19, 0x19, 0x19, 0x19, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x17, 0x17, 0x17, 0x17, 0x16, 0x16, 0x16, 0x16, 0x16, 0x15, 0x15, 0x15, 0x15, - 0x15, 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x12, 0x12, 0x12, 0x12, - 0x12, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0F, 0x0F, 0x0F, - 0x0F, 0x0F, 0x0F, 0x0F, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, - 0x0D, 0x0D, 0x0D, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, - 0x0B, 0x0B, 0x0B, 0x0B, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x09, 0x09, - 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, - 0x07, 0x07, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; static inline int32_t LogAdd(int32_t iVal1,int32_t iVal2) { @@ -97,79 +58,6 @@ static inline int32_t LogAdd(int32_t iVal1,int32_t iVal2) return iRetVal; } -#define PERCEPTUAL_MODEL_SCALE (64) - -#define PERCEPTUAL_MODEL_SCALE_SHIFT (6) - -#define PERCEPTUAL_MODEL_ALPHA_SCALE (614) - -#define PERCEPTUAL_MODEL_ALPHA_INV_SCALE (6827) - -#define PERCEPTUAL_MODEL_ALPHA_SHIFT (11) - -#define PERCEPTUAL_MODEL_SLGAIN_SHIFT (8)//(4) - -const int32_t c_aiBandwidthAdjust48[MAX_BANDS_48] = { - 0,0,0,0,0,0,0,0,0,0,0,64,64,64,64,64, - 101,101,128,165,165,180,213,}; - -const int32_t c_aiAbsoluteThresh48[MAX_BANDS_48] = { - -1787,-1787,-1787,-1787,-1787,-1787,-1787,-1787,-1782,-1761,-1737,-1679,-1638,-1613,-1590,-1568, - -1516,-1459,-1395,-1289,-671,-409,-401,}; - - -#if PERCEPTUAL_MODEL_SLGAIN_SHIFT == 4 -const int32_t c_aiDefaultTheta48[MAX_BANDS_48] = { - 7,7,6,5,5,4,4,4,4,4,4,4,4,4,4,4, - 4,4,4,4,4,4,4, -}; -#elif PERCEPTUAL_MODEL_SLGAIN_SHIFT == 8 -const int32_t c_aiDefaultTheta48[MAX_BANDS_48] = { - 112,112,96,80,80,64,64,64,64,64,64,64,64,64,64,64, - 64,64,64,64,64,64,64, -}; -#endif - -const int32_t c_aaiSpreadFunction48[MAX_BANDS_48*MAX_BANDS_48] = { - 0,-1561,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552, - -2552,-2552,-2552,-2552,-2552,-2552,-2552,-289,-4,-1234,-2295,-2552,-2552,-2552,-2552,-2552, - -2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-569,-229, - -8,-905,-1705,-2324,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552, - -2552,-2552,-2552,-2552,-2552,-789,-445,-173,-16,-656,-1271,-1765,-2172,-2520,-2552,-2552, - -2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-961,-616,-340,-136, - -28,-488,-976,-1382,-1729,-2032,-2305,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552, - -2552,-2552,-2552,-1088,-743,-465,-257,-148,-31,-371,-769,-1114,-1417,-1689,-2054,-2483, - -2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-1198,-852,-574,-364,-209,-148, - -42,-300,-635,-936,-1207,-1572,-2000,-2376,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552, - -2552,-1293,-948,-669,-458,-301,-183,-145,-56,-258,-547,-816,-1179,-1606,-1982,-2311, - -2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-1375,-1029,-750,-539,-381,-260,-180,-142, - -68,-231,-487,-846,-1272,-1647,-1976,-2261,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-1444, - -1099,-820,-608,-449,-328,-233,-194,-138,-77,-213,-555,-978,-1352,-1681,-1966,-2268, - -2552,-2552,-2552,-2552,-2552,-2552,-1501,-1155,-876,-665,-505,-383,-287,-210,-193,-130, - -79,-298,-711,-1083,-1411,-1696,-1997,-2288,-2550,-2552,-2552,-2552,-2552,-1567,-1221,-942, - -730,-570,-448,-351,-272,-206,-189,-151,-72,-349,-713,-1039,-1324,-1625,-1915,-2177, - -2448,-2552,-2552,-2552,-1650,-1304,-1025,-813,-653,-530,-432,-352,-285,-227,-177,-163, - -69,-297,-613,-895,-1195,-1485,-1746,-2017,-2238,-2401,-2545,-1727,-1381,-1102,-890,-730, - -607,-509,-428,-360,-301,-249,-180,-153,-72,-257,-527,-824,-1112,-1373,-1643,-1865, - -2028,-2171,-1798,-1452,-1173,-960,-800,-677,-579,-498,-430,-370,-317,-246,-192,-145, - -76,-224,-505,-790,-1050,-1320,-1540,-1703,-1847,-1860,-1514,-1234,-1022,-862,-738,-640, - -559,-490,-430,-377,-306,-224,-197,-136,-81,-242,-515,-771,-1040,-1260,-1422,-1566, - -1923,-1577,-1297,-1085,-925,-801,-703,-621,-553,-492,-439,-367,-284,-213,-198,-144, - -83,-235,-479,-744,-963,-1125,-1268,-1986,-1640,-1360,-1148,-988,-864,-766,-684,-615, - -555,-501,-429,-345,-273,-211,-204,-146,-89,-216,-465,-680,-841,-984,-2043,-1697, - -1417,-1205,-1044,-921,-822,-741,-672,-611,-557,-485,-401,-328,-264,-211,-205,-140, - -93,-227,-430,-588,-729,-2104,-1758,-1479,-1266,-1106,-982,-884,-802,-733,-673,-619, - -546,-461,-388,-324,-269,-212,-211,-151,-100,-195,-336,-472,-2163,-1817,-1537,-1324, - -1164,-1040,-942,-860,-791,-731,-676,-604,-519,-445,-380,-325,-268,-226,-219,-147, - -114,-167,-280,-2203,-1857,-1577,-1365,-1205,-1081,-982,-901,-831,-771,-717,-644,-559, - -485,-420,-364,-306,-252,-239,-206,-132,-122,-163,-2224,-1878,-1598,-1386,-1225,-1102, - -1003,-921,-852,-792,-737,-665,-580,-505,-441,-385,-326,-271,-222,-224,-176,-121,-114, -}; - - -/* clang-format on */ - - void PerceptualModel( const int32_t iMaxQuantBands, const int32_t *piRMSEnvelope, int32_t *piExcitation, diff --git a/lib_rend/ivas_PerceptualModel.h b/lib_rend/ivas_PerceptualModel.h deleted file mode 100644 index da8afca756..0000000000 --- a/lib_rend/ivas_PerceptualModel.h +++ /dev/null @@ -1,59 +0,0 @@ -/****************************************************************************************************** - - (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. - - This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. - -*******************************************************************************************************/ - -#ifndef _IVAS_PERCEPTUAL_MODEL_H_ -#define _IVAS_PERCEPTUAL_MODEL_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif -#include - void PerceptualModel( const int32_t iMaxQuantBands, - const int32_t *piRMSEnvelope, - int32_t *piExcitation, - int32_t *piSMR ); - - void PerceptualModelStereo( const int32_t iMaxQuantBands, - const int32_t *piMSFlags, - const int32_t *piRMSEnvelope0, - const int32_t *piRMSEnvelope1, - int32_t *piExcitation0, - int32_t *piExcitation1, - int32_t *piSMR0, - int32_t *piSMR1 ); - -#ifdef __cplusplus -} -#endif - -#endif /* _PERCEPTUAL_MODEL_H_ */ diff --git a/lib_rend/ivas_PredDecoder.c b/lib_rend/ivas_PredDecoder.c index 3bab1b9056..0105abedb5 100644 --- a/lib_rend/ivas_PredDecoder.c +++ b/lib_rend/ivas_PredDecoder.c @@ -38,7 +38,7 @@ #include #include "prot.h" #include "ivas_prot_rend.h" -#include "ivas_Tables.h" +#include "ivas_lcld_tables.h" #include "ivas_PredTables.h" #include "ivas_cldfb_codec_bitstream.h" #include "wmc_auto.h" diff --git a/lib_rend/ivas_PredEncoder.c b/lib_rend/ivas_PredEncoder.c index 56bbca0f73..e982cf7eed 100644 --- a/lib_rend/ivas_PredEncoder.c +++ b/lib_rend/ivas_PredEncoder.c @@ -36,7 +36,7 @@ #include #include #include -#include "ivas_Tables.h" +#include "ivas_lcld_tables.h" #include "ivas_PredTables.h" #include "prot.h" #include "ivas_prot_rend.h" diff --git a/lib_rend/ivas_RMSEnvDeltaHuff.c b/lib_rend/ivas_RMSEnvDeltaHuff.c deleted file mode 100644 index 0f613a8f47..0000000000 --- a/lib_rend/ivas_RMSEnvDeltaHuff.c +++ /dev/null @@ -1,66 +0,0 @@ -/****************************************************************************************************** - - (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. - - This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. - -*******************************************************************************************************/ - -#include "ivas_RMSEnvDeltaHuff.h" -#include "ivas_prot_rend.h" -#include "wmc_auto.h" - -/* clang-format off */ -const uint32_t c_aaiRMSEnvHuffEnc[64][2] = -{ - {0x0014, 0x0000}, {0x0014, 0x0001}, {0x0014, 0x0002}, {0x0014, 0x0003}, {0x0014, 0x0004}, {0x0014, 0x0005}, {0x0013, 0x0003}, {0x0013, 0x0004}, - {0x0013, 0x0005}, {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0012, 0x000b}, {0x000d, 0x0002}, {0x000e, 0x0001}, {0x000e, 0x0002}, {0x000d, 0x0003}, - {0x000b, 0x0002}, {0x000a, 0x0003}, {0x000a, 0x0004}, {0x000a, 0x0005}, {0x0009, 0x0004}, {0x0009, 0x0005}, {0x0009, 0x0006}, {0x0008, 0x0005}, - {0x0008, 0x0006}, {0x0007, 0x0004}, {0x0006, 0x0003}, {0x0006, 0x0004}, {0x0005, 0x0003}, {0x0004, 0x0002}, {0x0003, 0x0002}, {0x0002, 0x0002}, - {0x0002, 0x0003}, {0x0003, 0x0003}, {0x0004, 0x0003}, {0x0006, 0x0005}, {0x0007, 0x0005}, {0x0008, 0x0007}, {0x0009, 0x0007}, {0x0009, 0x0008}, - {0x0009, 0x0009}, {0x000a, 0x0006}, {0x000a, 0x0007}, {0x000b, 0x0003}, {0x000c, 0x0002}, {0x000c, 0x0003}, {0x000b, 0x0004}, {0x000b, 0x0005}, - {0x000e, 0x0003}, {0x0010, 0x0003}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0013, 0x000c}, {0x0013, 0x000d}, - {0x0013, 0x000e}, {0x0013, 0x000f}, {0x0013, 0x0010}, {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0013, 0x0014}, {0x0013, 0x0015}, -}; - -const uint32_t c_aaiRMSEnvHuffDec[13][HUFF_DEC_TABLE_SIZE] = -{ - {0x0002ffff, 0x0001ffff, 0x0000001d, 0x00000022, 0x0001001e, 0x0001001e, 0x00010021, 0x00010021, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x00020020, 0x00020020, 0x00020020, 0x00020020, }, - {0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x00020023, 0x00020023, 0x00020023, 0x00020023, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, }, - {0x0006ffff, 0x0007ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x00000017, 0x00000018, 0x00000025, 0x00010019, 0x00010019, 0x00010024, 0x00010024, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, }, - {0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, }, - {0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, }, - {0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, }, - {0x0009ffff, 0x0008ffff, 0x0000002c, 0x0000002d, 0x00010010, 0x00010010, 0x0001002b, 0x0001002b, 0x0001002e, 0x0001002e, 0x0001002f, 0x0001002f, 0x00020011, 0x00020011, 0x00020011, 0x00020011, }, - {0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00020013, 0x00020013, 0x00020013, 0x00020013, 0x00020029, 0x00020029, 0x00020029, 0x00020029, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, }, - {0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, - {0x000bffff, 0x000cffff, 0x000affff, 0x00000031, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x00020030, 0x00020030, 0x00020030, 0x00020030, }, - {0x0001003a, 0x0001003a, 0x0001003b, 0x0001003b, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, 0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, }, - {0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00010006, 0x00010006, 0x00010007, 0x00010007, 0x00010008, 0x00010008, 0x00010009, 0x00010009, 0x0001000a, 0x0001000a, }, - {0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x00010036, 0x00010036, 0x00010037, 0x00010037, 0x00010038, 0x00010038, 0x00010039, 0x00010039, }, -}; -/* clang-format on */ diff --git a/lib_rend/ivas_RMSEnvDeltaHuff.h b/lib_rend/ivas_RMSEnvDeltaHuff.h deleted file mode 100644 index 25d2fc625e..0000000000 --- a/lib_rend/ivas_RMSEnvDeltaHuff.h +++ /dev/null @@ -1,57 +0,0 @@ -/****************************************************************************************************** - - (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. - - This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. - -*******************************************************************************************************/ - -#ifndef _IVAS_RMS_ENV_DELTA_HUFF_H_ -#define _IVAS_RMS_ENV_DELTA_HUFF_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#ifndef HUFF_READ_SIZE -#define HUFF_READ_SIZE ( 4 ) -#endif - -#ifndef HUFF_DEC_TABLE_SIZE -#define HUFF_DEC_TABLE_SIZE ( 16 ) -#endif -#include - extern const uint32_t c_aaiRMSEnvHuffEnc[64][2]; - - extern const uint32_t c_aaiRMSEnvHuffDec[13][HUFF_DEC_TABLE_SIZE]; - -#ifdef __cplusplus -} -#endif - -#endif /* _RMS_ENV_DELTA_HUFF_H_ */ diff --git a/lib_rend/ivas_RMSEnvGrouping.c b/lib_rend/ivas_RMSEnvGrouping.c index 64dfe46c84..f5e18c3c1c 100644 --- a/lib_rend/ivas_RMSEnvGrouping.c +++ b/lib_rend/ivas_RMSEnvGrouping.c @@ -41,8 +41,7 @@ #include "options.h" #include "prot.h" #include "ivas_prot_rend.h" -#include "ivas_Tables.h" -#include "ivas_RMSEnvDeltaHuff.h" // To compute RMS transmission cost +#include "ivas_lcld_tables.h" #include "wmc_auto.h" diff --git a/lib_rend/ivas_Tables.c b/lib_rend/ivas_Tables.c deleted file mode 100644 index 534aff5254..0000000000 --- a/lib_rend/ivas_Tables.c +++ /dev/null @@ -1,200 +0,0 @@ -/****************************************************************************************************** - - (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. - - This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. - -*******************************************************************************************************/ - -#include "ivas_Tables.h" -#include "options.h" -#ifdef SPLIT_REND_WITH_HEAD_ROT -#include "ivas_prot_rend.h" -#include "wmc_auto.h" - -/* clang-format off */ -const float c_afRotRealImagSimple[SIMPLE_PHASE_MAX_VAL+1][2] = { - {1.0f, 0.0f}, /* zero */ - {0.0f, 1.0f}, /* pi/2 */ - {-1.0f, 0.0f}, /* pi */ - {0.0f, -1.0f}, /* 3*pi/2 */ -}; - -/* phi = (-12:12)'/12 *pi; tmp = [cos(phi),sin(phi)]; tmp = tmp';sprintf('{%.8ff, %.8ff},\n',tmp(:)) */ -const float c_afRotRealImag[PHASE_MAX_VAL - PHASE_MIN_VAL + 1][2] = { - {-1.00000000f, -0.00000000f}, - {-0.96592583f, -0.25881905f}, - {-0.86602540f, -0.50000000f}, - {-0.70710678f, -0.70710678f}, - {-0.50000000f, -0.86602540f}, - {-0.25881905f, -0.96592583f}, - {0.00000000f, -1.00000000f}, - {0.25881905f, -0.96592583f}, - {0.50000000f, -0.86602540f}, - {0.70710678f, -0.70710678f}, - {0.86602540f, -0.50000000f}, - {0.96592583f, -0.25881905f}, - {1.00000000f, 0.00000000f}, - {0.96592583f, 0.25881905f}, - {0.86602540f, 0.50000000f}, - {0.70710678f, 0.70710678f}, - {0.50000000f, 0.86602540f}, - {0.25881905f, 0.96592583f}, - {0.00000000f, 1.00000000f}, - {-0.25881905f, 0.96592583f}, - {-0.50000000f, 0.86602540f}, - {-0.70710678f, 0.70710678f}, - {-0.86602540f, 0.50000000f}, - {-0.96592583f, 0.25881905f}, - {-1.00000000f, 0.00000000f} -}; - -/* Move this to perceptual model ? */ -const int32_t c_aiBandwidths48[MAX_BANDS_48] = { - 1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,4,6,6,7,10, -}; - - -const float c_afScaleFactor[ALLOC_TABLE_SIZE] = { - 0.0f, - 0.353553390593f, - 0.420448207627f, - 0.500000000000f, - 0.594603557501f, - 0.707106781187f, - 0.840896415254f, - 1.000000000000f, - 1.189207115003f, - 1.414213562373f, - 1.681792830507f, - 2.000000000000f, - 2.378414230005f, - 2.828427124746f, - 3.363585661015f, - 4.0f, - 4.756828460011f, - 5.656854249492f, - 6.727171322030f, - 8.0f, - 9.513656920022f, - 11.31370849898f, - 13.45434264406f, - 16.00000000000f, - 19.02731384004f, - 22.62741699797f, - 26.90868528812f, - 32.000000000000000f, - 38.054627680087073f, - 45.254833995939038f, - 53.817370576237735f, - 64.000000000000000f, -}; - -const float c_afInvScaleFactor[ALLOC_TABLE_SIZE] = { - 0.0f, - 2.367513562373095f, - 2.046407115002721f, - 1.775900000000000f, - 1.536446415253715f, - 1.323056781186548f, - 1.132903557501360f, - 0.965800000000000f, - 0.821348207626857f, - 0.695103390593274f, - 0.587801778750680f, - 0.495800000000000f, - 0.418124103813429f, - 0.352176695296637f, - 0.296200889375340f, - 0.249400000000000f, - 0.209812051906714f, - 0.176538347648318f, - 0.148525444687670f, - 0.124900000000000f, - 0.105056025953357f, - 0.088388347648318f, - 0.074325444687670f, - 0.062500000000000f, - 0.052556025953357f, - 0.044194173824159f, - 0.037162722343835f, - 0.031250000000000f, - 0.026278012976679f, - 0.022097086912080f, - 0.018581361171918f, - 0.015625000000000f, -}; - -const float c_afRMSEnvReconstructTable[ENV_RECONSTRUCT_TABLE_SIZE] = { - 2.32830644e-10f, 3.29272254e-10f, 4.65661287e-10f, 6.58544508e-10f, 9.31322575e-10f, 1.31708902e-09f, 1.86264515e-09f, 2.63417803e-09f, - 3.72529030e-09f, 5.26835606e-09f, 7.45058060e-09f, 1.05367121e-08f, 1.49011612e-08f, 2.10734243e-08f, 2.98023224e-08f, 4.21468485e-08f, - 5.96046448e-08f, 8.42936970e-08f, 1.19209290e-07f, 1.68587394e-07f, 2.38418579e-07f, 3.37174788e-07f, 4.76837158e-07f, 6.74349576e-07f, - 9.53674316e-07f, 1.34869915e-06f, 1.90734863e-06f, 2.69739830e-06f, 3.81469727e-06f, 5.39479661e-06f, 7.62939453e-06f, 1.07895932e-05f, - 1.52587891e-05f, 2.15791864e-05f, 3.05175781e-05f, 4.31583729e-05f, 6.10351562e-05f, 8.63167458e-05f, 1.22070312e-04f, 1.72633492e-04f, - 2.44140625e-04f, 3.45266983e-04f, 4.88281250e-04f, 6.90533966e-04f, 9.76562500e-04f, 1.38106793e-03f, 1.95312500e-03f, 2.76213586e-03f, - 3.90625000e-03f, 5.52427173e-03f, 7.81250000e-03f, 1.10485435e-02f, 1.56250000e-02f, 2.20970869e-02f, 3.12500000e-02f, 4.41941738e-02f, - 6.25000000e-02f, 8.83883476e-02f, 1.25000000e-01f, 1.76776695e-01f, 2.50000000e-01f, 3.53553391e-01f, 5.00000000e-01f, 7.07106781e-01f, - 1.00000000e+00f, 1.41421356e+00f, 2.00000000e+00f, 2.82842712e+00f, 4.00000000e+00f, 5.65685425e+00f, 8.00000000e+00f, 1.13137085e+01f, - 1.60000000e+01f, 2.26274170e+01f, 3.20000000e+01f, 4.52548340e+01f, 6.40000000e+01f, 9.05096680e+01f, 1.28000000e+02f, 1.81019336e+02f, - 2.56000000e+02f, 3.62038672e+02f, 5.12000000e+02f, 7.24077344e+02f, 1.02400000e+03f, 1.44815469e+03f, 2.04800000e+03f, 2.89630938e+03f, - 4.09600000e+03f, 5.79261875e+03f, 8.19200000e+03f, 1.15852375e+04f, 1.63840000e+04f, 2.31704750e+04f, 3.27680000e+04f, 4.63409500e+04f, - 6.55360000e+04f, 9.26819000e+04f, 1.31072000e+05f, 1.85363800e+05f, 2.62144000e+05f, 3.70727600e+05f, 5.24288000e+05f, 7.41455200e+05f, - 1.04857600e+06f, 1.48291040e+06f, 2.09715200e+06f, 2.96582080e+06f, 4.19430400e+06f, 5.93164160e+06f, 8.38860800e+06f, 1.18632832e+07f, - 1.67772160e+07f, 2.37265664e+07f, 3.35544320e+07f, 4.74531328e+07f, 6.71088640e+07f, 9.49062656e+07f, 1.34217728e+08f, 1.89812531e+08f, - 2.68435456e+08f, 3.79625062e+08f, 5.36870912e+08f, 7.59250125e+08f, 1.07374182e+09f, 1.51850025e+09f, 2.14748365e+09f, 3.03700050e+09f, - 4.29496730e+09f, -}; - -const int32_t c_aiQuantMaxValues[ALLOC_TABLE_SIZE] = { - 0, 3, 3, 4, 5, 5, 6, 7, - 8, 9, 12, 13, 16, 17, 19, 23, - 26, 26, 27, 28, 31, 36, 38, 45, - 54, 64, 76, 90, 108, 128, 152, 180, -}; - -const int32_t c_aiHuffmanDim[ALLOC_TABLE_SIZE] = { - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, -}; - -const int32_t c_aiHuffmanMod[ALLOC_TABLE_SIZE] = { - 0, 4, 4, 5, 6, 6, 7, 8, - 9, 10, 13, 14, 17, 18, 20, 24, - 27, 27, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, -}; - -const int32_t c_aiHuffmanSize[ALLOC_TABLE_SIZE] = { - 1, 16, 16, 25, 36, 36, 49, 64, - 81, 100, 169, 196, 289, 324, 400, 576, - 729, 729, 28, 29, 32, 37, 39, 46, - 55, 65, 77, 91, 109, 129, 153, 181, -}; -#endif -/* clang-format on */ diff --git a/lib_rend/ivas_Tables.h b/lib_rend/ivas_Tables.h deleted file mode 100644 index 61abfb30c9..0000000000 --- a/lib_rend/ivas_Tables.h +++ /dev/null @@ -1,128 +0,0 @@ -/****************************************************************************************************** - - (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. - - This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. - -*******************************************************************************************************/ - -#ifndef _IVAS_TABLES_H_ -#define _IVAS_TABLES_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif -#include -#ifndef M_PI - -#define M_PI 3.14159265358979323846264338327950288f - -#endif - -#define CQMF_BLOCKS_PER_FRAME ( 16 ) -#define CQMF_MAX_BLOCKS_PER_FRAME ( 16 ) -#define CQMF_BANDS ( 60 ) - -#define MAX_BANDS ( 23 ) -#define MAX_BANDS_48 ( 23 ) - - extern const int32_t c_aiBandwidths48[MAX_BANDS_48]; // move this - - -#define ENV_MIN ( -64 ) -#define ENV_MAX ( 64 ) - -#define ENV0_BITS ( 7 ) - -#define ENV_DELTA_MIN ( -32 ) -#define ENV_DELTA_MAX ( 31 ) - -#define ENV_RECONSTRUCT_TABLE_SIZE ( 129 ) - -#define ENV_RECONSTRUCT_TABLE_CENTER ( 64 ) - -#define MIN_ALLOC ( 0 ) -#define MAX_ALLOC ( 31 ) - -#define ALLOC_OFFSET_SCALE ( 8 ) - -#define ALLOC_OFFSET_BITS ( 8 ) - -#define MIN_ALLOC_OFFSET ( -128 ) -#define MAX_ALLOC_OFFSET ( 127 ) -#ifdef ROM_TO_RAM -#define READ_LENGTH ( 4 ) -#endif - -#define ALLOC_TABLE_SIZE ( 32 ) - -#ifndef _PI_ -#define _PI_ ( 3.14159265358979f ) -#endif -#define PRED_MAX_VAL ( 12 ) -#define PRED_MIN_VAL ( -PRED_MAX_VAL ) -#define PRED_QUANT_FACTOR ( (float) PRED_MAX_VAL ) -#define PRED_BAND0_BITS ( 5 ) - -#define PHASE_MAX_VAL ( 12 ) -#define PHASE_MIN_VAL ( -PHASE_MAX_VAL ) -#define PHASE_QUANT_FACTOR ( (float) PHASE_MAX_VAL / _PI_ ) -#define PHASE_DIFF_DIM ( 2 ) -#define PHASE_BAND0_BITS ( 5 ) - -#define SIMPLE_PHASE_MAX_VAL ( 3 ) -#define SIMPLE_PHASE_MIN_VAL ( 0 ) -#define SIMPLE_PHASE_BITS ( 2 ) -#define SIMPLE_PHASE_QUANT_FACTOR ( 2.0f / _PI_ ) - -#define TON_QUOTA_ABS_THRESHOLD ( 8.0f ) -#define TON_QUOTA_INC_THRESHOLD ( 4.0f ) - - extern const float c_afRotRealImag[PRED_MAX_VAL - PRED_MIN_VAL + 1][2]; - extern const float c_afRotRealImagSimple[SIMPLE_PHASE_MAX_VAL + 1][2]; - extern const int32_t c_aiDefaultTheta48[MAX_BANDS_48]; - - extern const float c_afScaleFactor[ALLOC_TABLE_SIZE]; - - extern const float c_afInvScaleFactor[ALLOC_TABLE_SIZE]; - - extern const float c_afRMSEnvReconstructTable[ENV_RECONSTRUCT_TABLE_SIZE]; - - extern const int32_t c_aiQuantMaxValues[ALLOC_TABLE_SIZE]; - - extern const int32_t c_aiHuffmanDim[ALLOC_TABLE_SIZE]; - - extern const int32_t c_aiHuffmanMod[ALLOC_TABLE_SIZE]; - - extern const int32_t c_aiHuffmanSize[ALLOC_TABLE_SIZE]; - -#ifdef __cplusplus -} -#endif - -#endif /* _TABLES_H_ */ diff --git a/lib_rend/ivas_CQMFHuff.c b/lib_rend/ivas_lcld_tables.c similarity index 96% rename from lib_rend/ivas_CQMFHuff.c rename to lib_rend/ivas_lcld_tables.c index a5344b9db1..7afb33a184 100644 --- a/lib_rend/ivas_CQMFHuff.c +++ b/lib_rend/ivas_lcld_tables.c @@ -30,14 +30,209 @@ *******************************************************************************************************/ -#include "ivas_CQMFHuff.h" +#include "ivas_lcld_tables.h" #include "options.h" #ifdef SPLIT_REND_WITH_HEAD_ROT #include "ivas_prot_rend.h" #include "wmc_auto.h" +#include +#include "prot.h" /* clang-format off */ +const float c_afRotRealImagSimple[SIMPLE_PHASE_MAX_VAL + 1][2] = { + {1.0f, 0.0f}, /* zero */ + {0.0f, 1.0f}, /* pi/2 */ + {-1.0f, 0.0f}, /* pi */ + {0.0f, -1.0f}, /* 3*pi/2 */ +}; + +/* phi = (-12:12)'/12 *pi; tmp = [cos(phi),sin(phi)]; tmp = tmp';sprintf('{%.8ff, %.8ff},\n',tmp(:)) */ +const float c_afRotRealImag[PHASE_MAX_VAL - PHASE_MIN_VAL + 1][2] = { + {-1.00000000f, -0.00000000f}, + {-0.96592583f, -0.25881905f}, + {-0.86602540f, -0.50000000f}, + {-0.70710678f, -0.70710678f}, + {-0.50000000f, -0.86602540f}, + {-0.25881905f, -0.96592583f}, + {0.00000000f, -1.00000000f}, + {0.25881905f, -0.96592583f}, + {0.50000000f, -0.86602540f}, + {0.70710678f, -0.70710678f}, + {0.86602540f, -0.50000000f}, + {0.96592583f, -0.25881905f}, + {1.00000000f, 0.00000000f}, + {0.96592583f, 0.25881905f}, + {0.86602540f, 0.50000000f}, + {0.70710678f, 0.70710678f}, + {0.50000000f, 0.86602540f}, + {0.25881905f, 0.96592583f}, + {0.00000000f, 1.00000000f}, + {-0.25881905f, 0.96592583f}, + {-0.50000000f, 0.86602540f}, + {-0.70710678f, 0.70710678f}, + {-0.86602540f, 0.50000000f}, + {-0.96592583f, 0.25881905f}, + {-1.00000000f, 0.00000000f} +}; + +/* Move this to perceptual model ? */ +const int32_t c_aiBandwidths48[MAX_BANDS_48] = { + 1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,4,6,6,7,10, +}; + + +const float c_afScaleFactor[ALLOC_TABLE_SIZE] = { + 0.0f, + 0.353553390593f, + 0.420448207627f, + 0.500000000000f, + 0.594603557501f, + 0.707106781187f, + 0.840896415254f, + 1.000000000000f, + 1.189207115003f, + 1.414213562373f, + 1.681792830507f, + 2.000000000000f, + 2.378414230005f, + 2.828427124746f, + 3.363585661015f, + 4.0f, + 4.756828460011f, + 5.656854249492f, + 6.727171322030f, + 8.0f, + 9.513656920022f, + 11.31370849898f, + 13.45434264406f, + 16.00000000000f, + 19.02731384004f, + 22.62741699797f, + 26.90868528812f, + 32.000000000000000f, + 38.054627680087073f, + 45.254833995939038f, + 53.817370576237735f, + 64.000000000000000f, +}; + +const float c_afInvScaleFactor[ALLOC_TABLE_SIZE] = { + 0.0f, + 2.367513562373095f, + 2.046407115002721f, + 1.775900000000000f, + 1.536446415253715f, + 1.323056781186548f, + 1.132903557501360f, + 0.965800000000000f, + 0.821348207626857f, + 0.695103390593274f, + 0.587801778750680f, + 0.495800000000000f, + 0.418124103813429f, + 0.352176695296637f, + 0.296200889375340f, + 0.249400000000000f, + 0.209812051906714f, + 0.176538347648318f, + 0.148525444687670f, + 0.124900000000000f, + 0.105056025953357f, + 0.088388347648318f, + 0.074325444687670f, + 0.062500000000000f, + 0.052556025953357f, + 0.044194173824159f, + 0.037162722343835f, + 0.031250000000000f, + 0.026278012976679f, + 0.022097086912080f, + 0.018581361171918f, + 0.015625000000000f, +}; + +const float c_afRMSEnvReconstructTable[ENV_RECONSTRUCT_TABLE_SIZE] = { + 2.32830644e-10f, 3.29272254e-10f, 4.65661287e-10f, 6.58544508e-10f, 9.31322575e-10f, 1.31708902e-09f, 1.86264515e-09f, 2.63417803e-09f, + 3.72529030e-09f, 5.26835606e-09f, 7.45058060e-09f, 1.05367121e-08f, 1.49011612e-08f, 2.10734243e-08f, 2.98023224e-08f, 4.21468485e-08f, + 5.96046448e-08f, 8.42936970e-08f, 1.19209290e-07f, 1.68587394e-07f, 2.38418579e-07f, 3.37174788e-07f, 4.76837158e-07f, 6.74349576e-07f, + 9.53674316e-07f, 1.34869915e-06f, 1.90734863e-06f, 2.69739830e-06f, 3.81469727e-06f, 5.39479661e-06f, 7.62939453e-06f, 1.07895932e-05f, + 1.52587891e-05f, 2.15791864e-05f, 3.05175781e-05f, 4.31583729e-05f, 6.10351562e-05f, 8.63167458e-05f, 1.22070312e-04f, 1.72633492e-04f, + 2.44140625e-04f, 3.45266983e-04f, 4.88281250e-04f, 6.90533966e-04f, 9.76562500e-04f, 1.38106793e-03f, 1.95312500e-03f, 2.76213586e-03f, + 3.90625000e-03f, 5.52427173e-03f, 7.81250000e-03f, 1.10485435e-02f, 1.56250000e-02f, 2.20970869e-02f, 3.12500000e-02f, 4.41941738e-02f, + 6.25000000e-02f, 8.83883476e-02f, 1.25000000e-01f, 1.76776695e-01f, 2.50000000e-01f, 3.53553391e-01f, 5.00000000e-01f, 7.07106781e-01f, + 1.00000000e+00f, 1.41421356e+00f, 2.00000000e+00f, 2.82842712e+00f, 4.00000000e+00f, 5.65685425e+00f, 8.00000000e+00f, 1.13137085e+01f, + 1.60000000e+01f, 2.26274170e+01f, 3.20000000e+01f, 4.52548340e+01f, 6.40000000e+01f, 9.05096680e+01f, 1.28000000e+02f, 1.81019336e+02f, + 2.56000000e+02f, 3.62038672e+02f, 5.12000000e+02f, 7.24077344e+02f, 1.02400000e+03f, 1.44815469e+03f, 2.04800000e+03f, 2.89630938e+03f, + 4.09600000e+03f, 5.79261875e+03f, 8.19200000e+03f, 1.15852375e+04f, 1.63840000e+04f, 2.31704750e+04f, 3.27680000e+04f, 4.63409500e+04f, + 6.55360000e+04f, 9.26819000e+04f, 1.31072000e+05f, 1.85363800e+05f, 2.62144000e+05f, 3.70727600e+05f, 5.24288000e+05f, 7.41455200e+05f, + 1.04857600e+06f, 1.48291040e+06f, 2.09715200e+06f, 2.96582080e+06f, 4.19430400e+06f, 5.93164160e+06f, 8.38860800e+06f, 1.18632832e+07f, + 1.67772160e+07f, 2.37265664e+07f, 3.35544320e+07f, 4.74531328e+07f, 6.71088640e+07f, 9.49062656e+07f, 1.34217728e+08f, 1.89812531e+08f, + 2.68435456e+08f, 3.79625062e+08f, 5.36870912e+08f, 7.59250125e+08f, 1.07374182e+09f, 1.51850025e+09f, 2.14748365e+09f, 3.03700050e+09f, + 4.29496730e+09f, +}; + +const int32_t c_aiQuantMaxValues[ALLOC_TABLE_SIZE] = { + 0, 3, 3, 4, 5, 5, 6, 7, + 8, 9, 12, 13, 16, 17, 19, 23, + 26, 26, 27, 28, 31, 36, 38, 45, + 54, 64, 76, 90, 108, 128, 152, 180, +}; + +const int32_t c_aiHuffmanDim[ALLOC_TABLE_SIZE] = { + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, +}; + +const int32_t c_aiHuffmanMod[ALLOC_TABLE_SIZE] = { + 0, 4, 4, 5, 6, 6, 7, 8, + 9, 10, 13, 14, 17, 18, 20, 24, + 27, 27, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, +}; + +const int32_t c_aiHuffmanSize[ALLOC_TABLE_SIZE] = { + 1, 16, 16, 25, 36, 36, 49, 64, + 81, 100, 169, 196, 289, 324, 400, 576, + 729, 729, 28, 29, 32, 37, 39, 46, + 55, 65, 77, 91, 109, 129, 153, 181, +}; + +const uint32_t c_aaiRMSEnvHuffEnc[64][2] = +{ + {0x0014, 0x0000}, {0x0014, 0x0001}, {0x0014, 0x0002}, {0x0014, 0x0003}, {0x0014, 0x0004}, {0x0014, 0x0005}, {0x0013, 0x0003}, {0x0013, 0x0004}, + {0x0013, 0x0005}, {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0012, 0x000b}, {0x000d, 0x0002}, {0x000e, 0x0001}, {0x000e, 0x0002}, {0x000d, 0x0003}, + {0x000b, 0x0002}, {0x000a, 0x0003}, {0x000a, 0x0004}, {0x000a, 0x0005}, {0x0009, 0x0004}, {0x0009, 0x0005}, {0x0009, 0x0006}, {0x0008, 0x0005}, + {0x0008, 0x0006}, {0x0007, 0x0004}, {0x0006, 0x0003}, {0x0006, 0x0004}, {0x0005, 0x0003}, {0x0004, 0x0002}, {0x0003, 0x0002}, {0x0002, 0x0002}, + {0x0002, 0x0003}, {0x0003, 0x0003}, {0x0004, 0x0003}, {0x0006, 0x0005}, {0x0007, 0x0005}, {0x0008, 0x0007}, {0x0009, 0x0007}, {0x0009, 0x0008}, + {0x0009, 0x0009}, {0x000a, 0x0006}, {0x000a, 0x0007}, {0x000b, 0x0003}, {0x000c, 0x0002}, {0x000c, 0x0003}, {0x000b, 0x0004}, {0x000b, 0x0005}, + {0x000e, 0x0003}, {0x0010, 0x0003}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0013, 0x000c}, {0x0013, 0x000d}, + {0x0013, 0x000e}, {0x0013, 0x000f}, {0x0013, 0x0010}, {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0013, 0x0014}, {0x0013, 0x0015}, +}; + +const uint32_t c_aaiRMSEnvHuffDec[13][HUFF_DEC_TABLE_SIZE] = +{ + {0x0002ffff, 0x0001ffff, 0x0000001d, 0x00000022, 0x0001001e, 0x0001001e, 0x00010021, 0x00010021, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x00020020, 0x00020020, 0x00020020, 0x00020020, }, + {0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x00020023, 0x00020023, 0x00020023, 0x00020023, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, }, + {0x0006ffff, 0x0007ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x00000017, 0x00000018, 0x00000025, 0x00010019, 0x00010019, 0x00010024, 0x00010024, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, }, + {0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, }, + {0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, }, + {0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, }, + {0x0009ffff, 0x0008ffff, 0x0000002c, 0x0000002d, 0x00010010, 0x00010010, 0x0001002b, 0x0001002b, 0x0001002e, 0x0001002e, 0x0001002f, 0x0001002f, 0x00020011, 0x00020011, 0x00020011, 0x00020011, }, + {0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00020013, 0x00020013, 0x00020013, 0x00020013, 0x00020029, 0x00020029, 0x00020029, 0x00020029, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, }, + {0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, + {0x000bffff, 0x000cffff, 0x000affff, 0x00000031, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x00020030, 0x00020030, 0x00020030, 0x00020030, }, + {0x0001003a, 0x0001003a, 0x0001003b, 0x0001003b, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, 0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, }, + {0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00010006, 0x00010006, 0x00010007, 0x00010007, 0x00010008, 0x00010008, 0x00010009, 0x00010009, 0x0001000a, 0x0001000a, }, + {0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x00010036, 0x00010036, 0x00010037, 0x00010037, 0x00010038, 0x00010038, 0x00010039, 0x00010039, }, +}; + +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc1[16][2] = +#else +const uint16_t c_aauiCQMFHuffEnc1[16][2] = +#endif { {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0005, 0x0001}, {0x000b, 0x0000}, {0x0002, 0x0001}, {0x0004, 0x0001}, {0x0007, 0x0001}, {0x000b, 0x0001}, {0x0006, 0x0001}, {0x0008, 0x0001}, {0x000b, 0x0002}, {0x000b, 0x0003}, {0x000b, 0x0004}, {0x000b, 0x0005}, {0x000b, 0x0006}, {0x000b, 0x0007}, @@ -50,9 +245,13 @@ const uint32_t c_aauiCQMFHuffDec1[3][16] = {0x0002ffff, 0x00000009, 0x00010006, 0x00010006, 0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, }, {0x00010003, 0x00010003, 0x00010007, 0x00010007, 0x0001000a, 0x0001000a, 0x0001000b, 0x0001000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, }, }; -#endif +#endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc2[16][2] = +#else +const uint16_t c_aauiCQMFHuffEnc2[16][2] = +#endif { {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0005, 0x0001}, {0x000c, 0x0000}, {0x0002, 0x0001}, {0x0004, 0x0001}, {0x0007, 0x0001}, {0x000c, 0x0001}, {0x0006, 0x0001}, {0x0008, 0x0001}, {0x0009, 0x0001}, {0x000c, 0x0002}, {0x000c, 0x0003}, {0x000c, 0x0004}, {0x000c, 0x0005}, {0x000b, 0x0003}, @@ -66,8 +265,11 @@ const uint32_t c_aauiCQMFHuffDec2[3][16] = {0x00000003, 0x00000007, 0x0000000b, 0x0000000c, 0x0000000d, 0x0000000e, 0x0001000f, 0x0001000f, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, }, }; #endif - +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc3[25][2] = +#else +const uint16_t c_aauiCQMFHuffEnc3[25][2] = +#endif { {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000d, 0x0000}, {0x000d, 0x0001}, {0x0002, 0x0001}, {0x0004, 0x0001}, {0x0007, 0x0001}, {0x000d, 0x0002}, {0x000d, 0x0003}, {0x0006, 0x0002}, {0x0006, 0x0003}, {0x0008, 0x0001}, {0x000d, 0x0004}, {0x000d, 0x0005}, {0x0009, 0x0001}, @@ -91,7 +293,12 @@ const uint32_t c_aauiCQMFHuffDec3[10][16] = {0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, }, }; #endif + +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc4[36][2] = +#else +const uint16_t c_aauiCQMFHuffEnc4[36][2] = +#endif { {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000b, 0x0001}, {0x0010, 0x0000}, {0x0010, 0x0001}, {0x0002, 0x0001}, {0x0004, 0x0001}, {0x0007, 0x0001}, {0x000a, 0x0001}, {0x0010, 0x0002}, {0x0010, 0x0003}, {0x0006, 0x0002}, {0x0006, 0x0003}, {0x0008, 0x0001}, {0x000e, 0x0006}, @@ -110,8 +317,13 @@ const uint32_t c_aauiCQMFHuffDec4[5][16] = {0x0000001f, 0x00000020, 0x00010021, 0x00010021, 0x00010022, 0x00010022, 0x00010023, 0x00010023, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, 0x00020014, 0x00020014, 0x00020014, 0x00020014, }, {0x00000004, 0x00000005, 0x0000000a, 0x0000000b, 0x00000010, 0x00000011, 0x00000015, 0x00000016, 0x00000017, 0x00000018, 0x00000019, 0x0000001a, 0x0000001b, 0x0000001c, 0x0000001d, 0x0000001e, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc5[36][2] = +#else +const uint16_t c_aauiCQMFHuffEnc5[36][2] = +#endif { {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000a, 0x0001}, {0x000f, 0x0003}, {0x0012, 0x0000}, {0x0002, 0x0001}, {0x0004, 0x0001}, {0x0007, 0x0001}, {0x000b, 0x0001}, {0x0011, 0x0008}, {0x0012, 0x0001}, {0x0006, 0x0002}, {0x0006, 0x0003}, {0x0008, 0x0001}, {0x000c, 0x0001}, @@ -135,8 +347,13 @@ const uint32_t c_aauiCQMFHuffDec5[10][16] = {0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, }, {0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc6[49][2] = +#else +const uint16_t c_aauiCQMFHuffEnc6[49][2] = +#endif { {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000a, 0x0001}, {0x0010, 0x0003}, {0x0014, 0x0000}, {0x0014, 0x0001}, {0x0002, 0x0001}, {0x0004, 0x0001}, {0x0007, 0x0001}, {0x000a, 0x0002}, {0x0010, 0x0004}, {0x0014, 0x0002}, {0x0014, 0x0003}, {0x0006, 0x0002}, {0x0006, 0x0003}, @@ -159,8 +376,13 @@ const uint32_t c_aauiCQMFHuffDec6[7][16] = {0x00000027, 0x00000028, 0x00000029, 0x0000002a, 0x0000002b, 0x0000002c, 0x0000002d, 0x0000002e, 0x0000002f, 0x00000030, 0x00010024, 0x00010024, 0x00020012, 0x00020012, 0x00020012, 0x00020012, }, {0x00000005, 0x00000006, 0x0000000c, 0x0000000d, 0x00000013, 0x00000014, 0x00000019, 0x0000001a, 0x0000001b, 0x0000001f, 0x00000020, 0x00000021, 0x00000022, 0x00000023, 0x00000025, 0x00000026, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc7[64][2] = +#else +const uint16_t c_aauiCQMFHuffEnc7[64][2] = +#endif { {0x0002, 0x0001}, {0x0002, 0x0002}, {0x0005, 0x0001}, {0x0009, 0x0001}, {0x000f, 0x0002}, {0x0015, 0x0000}, {0x0015, 0x0001}, {0x0015, 0x0002}, {0x0002, 0x0003}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x0009, 0x0002}, {0x000f, 0x0003}, {0x0014, 0x0011}, {0x0015, 0x0003}, {0x0015, 0x0004}, @@ -201,9 +423,13 @@ const uint32_t c_aauiCQMFHuffDec7[25][16] = {0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, }, {0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, }, }; -#endif +#endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc8[81][2] = +#else +const uint16_t c_aauiCQMFHuffEnc8[81][2] = +#endif { {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000a, 0x0001}, {0x000f, 0x0002}, {0x0014, 0x0008}, {0x0017, 0x0000}, {0x0017, 0x0001}, {0x0017, 0x0002}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0005, 0x0001}, {0x0009, 0x0001}, {0x000f, 0x0003}, {0x0012, 0x0004}, {0x0015, 0x000d}, @@ -239,9 +465,13 @@ const uint32_t c_aauiCQMFHuffDec8[16][16] = {0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x00010040, 0x00010040, 0x00010041, 0x00010041, 0x00010042, 0x00010042, 0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, }, {0x00010046, 0x00010046, 0x00010047, 0x00010047, 0x00010048, 0x00010048, 0x00010049, 0x00010049, 0x0001004a, 0x0001004a, 0x0001004b, 0x0001004b, 0x0001004c, 0x0001004c, 0x0001004d, 0x0001004d, }, }; -#endif +#endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc9[100][2] = +#else +const uint16_t c_aauiCQMFHuffEnc9[100][2] = +#endif { {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x0009, 0x0001}, {0x000d, 0x0002}, {0x0011, 0x0004}, {0x0014, 0x000a}, {0x0017, 0x0000}, {0x0017, 0x0001}, {0x0017, 0x0002}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0005, 0x0001}, {0x0009, 0x0002}, {0x000d, 0x0003}, {0x0010, 0x0004}, @@ -285,9 +515,13 @@ const uint32_t c_aauiCQMFHuffDec9[22][16] = {0x00010053, 0x00010053, 0x00010054, 0x00010054, 0x00010055, 0x00010055, 0x00010056, 0x00010056, 0x00010057, 0x00010057, 0x00010058, 0x00010058, 0x00010059, 0x00010059, 0x0001005a, 0x0001005a, }, {0x0001005b, 0x0001005b, 0x0001005c, 0x0001005c, 0x0001005d, 0x0001005d, 0x0001005e, 0x0001005e, 0x0001005f, 0x0001005f, 0x00010060, 0x00010060, 0x00010061, 0x00010061, 0x00010062, 0x00010062, }, }; -#endif +#endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc10[169][2] = +#else +const uint16_t c_aauiCQMFHuffEnc10[169][2] = +#endif { {0x0001, 0x0001}, {0x0004, 0x0002}, {0x0005, 0x0002}, {0x0007, 0x0002}, {0x000a, 0x0002}, {0x000e, 0x0004}, {0x0011, 0x0007}, {0x0013, 0x0012}, {0x0016, 0x0000}, {0x0016, 0x0001}, {0x0016, 0x0002}, {0x0016, 0x0003}, {0x0016, 0x0004}, {0x0004, 0x0003}, {0x0003, 0x0003}, {0x0004, 0x0004}, @@ -363,9 +597,13 @@ const uint32_t c_aauiCQMFHuffDec10[45][16] = {0x0002009e, 0x0002009e, 0x0002009e, 0x0002009e, 0x0002009f, 0x0002009f, 0x0002009f, 0x0002009f, 0x000200a0, 0x000200a0, 0x000200a0, 0x000200a0, 0x000200a1, 0x000200a1, 0x000200a1, 0x000200a1, }, {0x000200a2, 0x000200a2, 0x000200a2, 0x000200a2, 0x000200a3, 0x000200a3, 0x000200a3, 0x000200a3, 0x000200a4, 0x000200a4, 0x000200a4, 0x000200a4, 0x000200a5, 0x000200a5, 0x000200a5, 0x000200a5, }, }; -#endif +#endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc11[196][2] = +#else +const uint16_t c_aauiCQMFHuffEnc11[196][2] = +#endif { {0x0001, 0x0001}, {0x0004, 0x0003}, {0x0005, 0x0003}, {0x0007, 0x0002}, {0x0009, 0x0003}, {0x000c, 0x0004}, {0x000f, 0x0005}, {0x0012, 0x000d}, {0x0014, 0x001f}, {0x0016, 0x0000}, {0x0016, 0x0001}, {0x0016, 0x0002}, {0x0016, 0x0003}, {0x0016, 0x0004}, {0x0004, 0x0004}, {0x0003, 0x0003}, @@ -449,9 +687,13 @@ const uint32_t c_aauiCQMFHuffDec11[50][16] = {0x000200ba, 0x000200ba, 0x000200ba, 0x000200ba, 0x000200bb, 0x000200bb, 0x000200bb, 0x000200bb, 0x000200bc, 0x000200bc, 0x000200bc, 0x000200bc, 0x000200bd, 0x000200bd, 0x000200bd, 0x000200bd, }, {0x000200be, 0x000200be, 0x000200be, 0x000200be, 0x000200bf, 0x000200bf, 0x000200bf, 0x000200bf, 0x000200c0, 0x000200c0, 0x000200c0, 0x000200c0, 0x000200c1, 0x000200c1, 0x000200c1, 0x000200c1, }, }; -#endif +#endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc12[289][2] = +#else +const uint16_t c_aauiCQMFHuffEnc12[289][2] = +#endif { {0x0001, 0x0001}, {0x0004, 0x0004}, {0x0005, 0x0004}, {0x0007, 0x0004}, {0x0008, 0x0002}, {0x000b, 0x0004}, {0x000e, 0x0006}, {0x0010, 0x0009}, {0x0012, 0x0014}, {0x0013, 0x001f}, {0x0016, 0x0000}, {0x0016, 0x0001}, {0x0016, 0x0002}, {0x0016, 0x0003}, {0x0016, 0x0004}, {0x0016, 0x0005}, @@ -573,8 +815,13 @@ const uint32_t c_aauiCQMFHuffDec12[76][16] = {0x00020117, 0x00020117, 0x00020117, 0x00020117, 0x00020118, 0x00020118, 0x00020118, 0x00020118, 0x00020119, 0x00020119, 0x00020119, 0x00020119, 0x0002011a, 0x0002011a, 0x0002011a, 0x0002011a, }, {0x0002011b, 0x0002011b, 0x0002011b, 0x0002011b, 0x0002011c, 0x0002011c, 0x0002011c, 0x0002011c, 0x0002011d, 0x0002011d, 0x0002011d, 0x0002011d, 0x0002011e, 0x0002011e, 0x0002011e, 0x0002011e, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc13[324][2] = +#else +const uint16_t c_aauiCQMFHuffEnc13[324][2] = +#endif { {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0005, 0x0005}, {0x0005, 0x0006}, {0x0006, 0x0004}, {0x0008, 0x0005}, {0x000a, 0x0005}, {0x000c, 0x0007}, {0x000e, 0x000b}, {0x0010, 0x0011}, {0x0012, 0x002d}, {0x0015, 0x0000}, {0x0014, 0x0035}, {0x0015, 0x0001}, {0x0015, 0x0002}, {0x0015, 0x0003}, @@ -713,8 +960,13 @@ const uint32_t c_aauiCQMFHuffDec13[89][16] = {0x000300d6, 0x000300d6, 0x000300d6, 0x000300d6, 0x000300d6, 0x000300d6, 0x000300d6, 0x000300d6, 0x000300d7, 0x000300d7, 0x000300d7, 0x000300d7, 0x000300d7, 0x000300d7, 0x000300d7, 0x000300d7, }, {0x000300d8, 0x000300d8, 0x000300d8, 0x000300d8, 0x000300d8, 0x000300d8, 0x000300d8, 0x000300d8, 0x000300d9, 0x000300d9, 0x000300d9, 0x000300d9, 0x000300d9, 0x000300d9, 0x000300d9, 0x000300d9, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc14[400][2] = +#else +const uint16_t c_aauiCQMFHuffEnc14[400][2] = +#endif { {0x0005, 0x0007}, {0x0004, 0x0009}, {0x0005, 0x0008}, {0x0005, 0x0009}, {0x0006, 0x0006}, {0x0007, 0x0006}, {0x0009, 0x0007}, {0x000b, 0x0008}, {0x000d, 0x000c}, {0x000f, 0x0013}, {0x0010, 0x001b}, {0x0013, 0x0082}, {0x0013, 0x0083}, {0x0014, 0x0000}, {0x0014, 0x0001}, {0x0014, 0x0002}, @@ -825,8 +1077,13 @@ const uint32_t c_aauiCQMFHuffDec14[53][16] = {0x0000016c, 0x0000016d, 0x0000016e, 0x0000016f, 0x00000170, 0x00000171, 0x00000172, 0x00000173, 0x00000174, 0x00000175, 0x00000176, 0x00000177, 0x00000178, 0x00000179, 0x0000017a, 0x0000017b, }, {0x0000017c, 0x0000017d, 0x0000017e, 0x0000017f, 0x00000180, 0x00000181, 0x00000182, 0x00000183, 0x00000184, 0x00000185, 0x00000186, 0x00000187, 0x00000188, 0x00000189, 0x0000018a, 0x0000018b, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc15[576][2] = +#else +const uint16_t c_aauiCQMFHuffEnc15[576][2] = +#endif { {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0005, 0x000c}, {0x0006, 0x0009}, {0x0006, 0x000a}, {0x0007, 0x0008}, {0x0008, 0x0009}, {0x0009, 0x0008}, {0x000b, 0x000b}, {0x000d, 0x000e}, {0x000e, 0x0011}, {0x000f, 0x001a}, {0x0012, 0x006e}, {0x0014, 0x0000}, {0x0013, 0x00cc}, {0x0014, 0x0001}, @@ -979,9 +1236,13 @@ const uint32_t c_aauiCQMFHuffDec15[73][16] = {0x00000217, 0x00000218, 0x00000219, 0x0000021a, 0x0000021b, 0x0000021c, 0x0000021d, 0x0000021e, 0x0000021f, 0x00000220, 0x00000221, 0x00000222, 0x00000223, 0x00000224, 0x00000225, 0x00000226, }, {0x00000227, 0x00000228, 0x00000229, 0x0000022a, 0x0000022b, 0x0000022c, 0x0000022d, 0x0000022e, 0x0000022f, 0x00000230, 0x00000231, 0x00000232, 0x00000233, 0x00000234, 0x00000235, 0x00000236, }, }; -#endif +#endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc16[729][2] = +#else +const uint16_t c_aauiCQMFHuffEnc16[729][2] = +#endif { {0x0006, 0x000d}, {0x0005, 0x0010}, {0x0006, 0x000e}, {0x0006, 0x000f}, {0x0006, 0x0010}, {0x0007, 0x000a}, {0x0007, 0x000b}, {0x0008, 0x000a}, {0x0009, 0x000b}, {0x000b, 0x000d}, {0x000c, 0x000e}, {0x000e, 0x0016}, {0x0010, 0x002d}, {0x0011, 0x0051}, {0x0012, 0x008c}, {0x0014, 0x0000}, @@ -1167,9 +1428,13 @@ const uint32_t c_aauiCQMFHuffDec16[85][16] = {0x000002b2, 0x000002b3, 0x000002b4, 0x000002b5, 0x000002b6, 0x000002b7, 0x000002b8, 0x000002b9, 0x000002ba, 0x000002bb, 0x000002bc, 0x000002bd, 0x000002be, 0x000002bf, 0x000002c0, 0x000002c1, }, {0x000002c2, 0x000002c3, 0x000002c4, 0x000002c5, 0x000002c6, 0x000002c7, 0x000002c8, 0x000002c9, 0x000002ca, 0x000002cb, 0x000002cc, 0x000002cd, 0x000002ce, 0x000002cf, 0x000002d0, 0x000002d1, }, }; -#endif +#endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc17[729][2] = +#else +const uint16_t c_aauiCQMFHuffEnc17[729][2] = +#endif { {0x0006, 0x0012}, {0x0006, 0x0013}, {0x0006, 0x0014}, {0x0006, 0x0015}, {0x0007, 0x000f}, {0x0007, 0x0010}, {0x0007, 0x0011}, {0x0008, 0x000e}, {0x0008, 0x000f}, {0x0009, 0x000f}, {0x000a, 0x000f}, {0x000c, 0x0011}, {0x000d, 0x0014}, {0x000e, 0x0017}, {0x0010, 0x002d}, {0x0011, 0x004c}, @@ -1363,9 +1628,13 @@ const uint32_t c_aauiCQMFHuffDec17[93][16] = {0x0000028e, 0x0000028f, 0x00000290, 0x00000291, 0x00000292, 0x00000293, 0x00000294, 0x00000295, 0x00000296, 0x00000297, 0x00000298, 0x00000299, 0x0000029a, 0x0000029b, 0x0000029c, 0x0000029d, }, {0x0000029e, 0x0000029f, 0x000002a0, 0x000002a1, 0x000002a2, 0x000002a3, 0x000002a4, 0x000002a5, 0x000002a6, 0x000002a7, 0x000002a8, 0x000002a9, 0x000002aa, 0x000002ab, 0x000002ac, 0x000002ad, }, }; -#endif +#endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc18[28][2] = +#else +const uint16_t c_aauiCQMFHuffEnc18[28][2] = +#endif { {0x0004, 0x0001}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0003, 0x0004}, {0x0003, 0x0005}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0002}, {0x0004, 0x0003}, {0x0005, 0x0001}, {0x0006, 0x0001}, {0x0007, 0x0001}, {0x0008, 0x0001}, {0x0009, 0x0001}, {0x000a, 0x0001}, {0x000b, 0x0001}, @@ -1384,8 +1653,13 @@ const uint32_t c_aauiCQMFHuffDec18[6][16] = {0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, }, {0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x00020015, 0x00020015, 0x00020015, 0x00020015, 0x00020016, 0x00020016, 0x00020016, 0x00020016, 0x00020017, 0x00020017, 0x00020017, 0x00020017, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc19[29][2] = +#else +const uint16_t c_aauiCQMFHuffEnc19[29][2] = +#endif { {0x0004, 0x0002}, {0x0003, 0x0003}, {0x0003, 0x0004}, {0x0003, 0x0005}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0003}, {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0005, 0x0001}, {0x0005, 0x0002}, {0x0005, 0x0003}, {0x0006, 0x0001}, {0x0007, 0x0001}, {0x0008, 0x0001}, {0x0009, 0x0001}, @@ -1404,8 +1678,13 @@ const uint32_t c_aauiCQMFHuffDec19[6][16] = {0x0005ffff, 0x00000016, 0x00010015, 0x00010015, 0x00020014, 0x00020014, 0x00020014, 0x00020014, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, }, {0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x0001001a, 0x0001001a, 0x0001001b, 0x0001001b, 0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc20[32][2] = +#else +const uint16_t c_aauiCQMFHuffEnc20[32][2] = +#endif { {0x0004, 0x0002}, {0x0003, 0x0005}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0003}, {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0004, 0x0008}, {0x0004, 0x0009}, {0x0005, 0x0002}, {0x0005, 0x0003}, {0x0006, 0x0001}, {0x0006, 0x0002}, {0x0006, 0x0003}, @@ -1423,8 +1702,13 @@ const uint32_t c_aauiCQMFHuffDec20[6][16] = {0x0005ffff, 0x00000019, 0x00010018, 0x00010018, 0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, }, {0x0000001b, 0x0000001c, 0x0001001d, 0x0001001d, 0x0001001e, 0x0001001e, 0x0001001f, 0x0001001f, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc21[37][2] = +#else +const uint16_t c_aauiCQMFHuffEnc21[37][2] = +#endif { {0x0005, 0x0002}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0003}, {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0004, 0x0008}, {0x0004, 0x0009}, {0x0004, 0x000a}, {0x0004, 0x000b}, {0x0005, 0x0003}, {0x0005, 0x0004}, {0x0005, 0x0005}, {0x0006, 0x0002}, @@ -1445,8 +1729,13 @@ const uint32_t c_aauiCQMFHuffDec21[7][16] = {0x0006ffff, 0x0000001e, 0x0001001d, 0x0001001d, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, }, {0x00000020, 0x00000021, 0x00010022, 0x00010022, 0x00010023, 0x00010023, 0x00010024, 0x00010024, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc22[39][2] = +#else +const uint16_t c_aauiCQMFHuffEnc22[39][2] = +#endif { {0x0005, 0x0002}, {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0004, 0x0008}, {0x0004, 0x0009}, {0x0004, 0x000a}, {0x0004, 0x000b}, {0x0004, 0x000c}, {0x0004, 0x000d}, {0x0004, 0x000e}, {0x0004, 0x000f}, {0x0005, 0x0003}, {0x0005, 0x0004}, {0x0005, 0x0005}, @@ -1469,8 +1758,13 @@ const uint32_t c_aauiCQMFHuffDec22[9][16] = {0x0008ffff, 0x00000025, 0x00010022, 0x00010022, 0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020023, 0x00020023, 0x00020023, 0x00020023, }, {0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc23[46][2] = +#else +const uint16_t c_aauiCQMFHuffEnc23[46][2] = +#endif { {0x0005, 0x0003}, {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0004, 0x0008}, {0x0004, 0x0009}, {0x0004, 0x000a}, {0x0004, 0x000b}, {0x0004, 0x000c}, {0x0004, 0x000d}, {0x0004, 0x000e}, {0x0004, 0x000f}, {0x0005, 0x0004}, {0x0005, 0x0005}, {0x0005, 0x0006}, {0x0005, 0x0007}, {0x0005, 0x0008}, @@ -1497,8 +1791,13 @@ const uint32_t c_aauiCQMFHuffDec23[12][16] = {0x000bffff, 0x0000002a, 0x00010029, 0x00010029, 0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00020027, 0x00020027, 0x00020027, 0x00020027, 0x00020028, 0x00020028, 0x00020028, 0x00020028, }, {0x0002002b, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc24[55][2] = +#else +const uint16_t c_aauiCQMFHuffEnc24[55][2] = +#endif { {0x0005, 0x0004}, {0x0004, 0x0009}, {0x0004, 0x000a}, {0x0004, 0x000b}, {0x0004, 0x000c}, {0x0004, 0x000d}, {0x0004, 0x000e}, {0x0004, 0x000f}, {0x0005, 0x0005}, {0x0005, 0x0006}, {0x0005, 0x0007}, {0x0005, 0x0008}, {0x0005, 0x0009}, {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0005, 0x000c}, @@ -1531,8 +1830,13 @@ const uint32_t c_aauiCQMFHuffDec24[17][16] = {0x0010ffff, 0x00000032, 0x0001002f, 0x0001002f, 0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, }, {0x00010034, 0x00010034, 0x00010036, 0x00010036, 0x00020035, 0x00020035, 0x00020035, 0x00020035, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc25[65][2] = +#else +const uint16_t c_aauiCQMFHuffEnc25[65][2] = +#endif { {0x0005, 0x0005}, {0x0004, 0x000c}, {0x0004, 0x000d}, {0x0004, 0x000e}, {0x0005, 0x0006}, {0x0004, 0x000f}, {0x0005, 0x0007}, {0x0005, 0x0008}, {0x0005, 0x0009}, {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0005, 0x000c}, {0x0005, 0x000d}, {0x0005, 0x000e}, {0x0005, 0x000f}, {0x0005, 0x0010}, @@ -1569,8 +1873,13 @@ const uint32_t c_aauiCQMFHuffDec25[19][16] = {0x0012ffff, 0x00000038, 0x0000003a, 0x0000003b, 0x0000003c, 0x0000003d, 0x00010035, 0x00010035, 0x00010037, 0x00010037, 0x00010039, 0x00010039, 0x00020033, 0x00020033, 0x00020033, 0x00020033, }, {0x0002003f, 0x0002003f, 0x0002003f, 0x0002003f, 0x00020040, 0x00020040, 0x00020040, 0x00020040, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc26[77][2] = +#else +const uint16_t c_aauiCQMFHuffEnc26[77][2] = +#endif { {0x0006, 0x0004}, {0x0005, 0x0007}, {0x0005, 0x0008}, {0x0005, 0x0009}, {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0005, 0x000c}, {0x0005, 0x000d}, {0x0005, 0x000e}, {0x0005, 0x000f}, {0x0005, 0x0010}, {0x0005, 0x0011}, {0x0005, 0x0012}, {0x0005, 0x0013}, {0x0005, 0x0014}, {0x0005, 0x0015}, @@ -1615,8 +1924,13 @@ const uint32_t c_aauiCQMFHuffDec26[26][16] = {0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, }, {0x0001004b, 0x0001004b, 0x0001004c, 0x0001004c, 0x00020046, 0x00020046, 0x00020046, 0x00020046, 0x00020048, 0x00020048, 0x00020048, 0x00020048, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc27[91][2] = +#else +const uint16_t c_aauiCQMFHuffEnc27[91][2] = +#endif { {0x0006, 0x0006}, {0x0005, 0x000b}, {0x0005, 0x000c}, {0x0005, 0x000d}, {0x0005, 0x000e}, {0x0005, 0x000f}, {0x0005, 0x0010}, {0x0005, 0x0011}, {0x0005, 0x0012}, {0x0005, 0x0013}, {0x0005, 0x0014}, {0x0005, 0x0015}, {0x0005, 0x0016}, {0x0005, 0x0017}, {0x0005, 0x0018}, {0x0005, 0x0019}, @@ -1665,8 +1979,13 @@ const uint32_t c_aauiCQMFHuffDec27[28][16] = {0x0002004f, 0x0002004f, 0x0002004f, 0x0002004f, 0x00020052, 0x00020052, 0x00020052, 0x00020052, 0x00020053, 0x00020053, 0x00020053, 0x00020053, 0x00020056, 0x00020056, 0x00020056, 0x00020056, }, {0x00020057, 0x00020057, 0x00020057, 0x00020057, 0x00020058, 0x00020058, 0x00020058, 0x00020058, 0x00020059, 0x00020059, 0x00020059, 0x00020059, 0x0002005a, 0x0002005a, 0x0002005a, 0x0002005a, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc28[109][2] = +#else +const uint16_t c_aauiCQMFHuffEnc28[109][2] = +#endif { {0x0006, 0x0008}, {0x0005, 0x0010}, {0x0005, 0x0011}, {0x0005, 0x0012}, {0x0005, 0x0013}, {0x0005, 0x0014}, {0x0005, 0x0015}, {0x0005, 0x0016}, {0x0005, 0x0017}, {0x0005, 0x0018}, {0x0005, 0x0019}, {0x0005, 0x001a}, {0x0005, 0x001b}, {0x0005, 0x001c}, {0x0005, 0x001d}, {0x0005, 0x001e}, @@ -1719,8 +2038,13 @@ const uint32_t c_aauiCQMFHuffDec28[30][16] = {0x00020065, 0x00020065, 0x00020065, 0x00020065, 0x00020066, 0x00020066, 0x00020066, 0x00020066, 0x00020067, 0x00020067, 0x00020067, 0x00020067, 0x00020068, 0x00020068, 0x00020068, 0x00020068, }, {0x00020069, 0x00020069, 0x00020069, 0x00020069, 0x0002006a, 0x0002006a, 0x0002006a, 0x0002006a, 0x0002006b, 0x0002006b, 0x0002006b, 0x0002006b, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006c, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc29[129][2] = +#else +const uint16_t c_aauiCQMFHuffEnc29[129][2] = +#endif { {0x0006, 0x0009}, {0x0005, 0x0019}, {0x0006, 0x000a}, {0x0005, 0x001a}, {0x0005, 0x001b}, {0x0005, 0x001c}, {0x0006, 0x000b}, {0x0005, 0x001d}, {0x0005, 0x001e}, {0x0006, 0x000c}, {0x0006, 0x000d}, {0x0005, 0x001f}, {0x0006, 0x000e}, {0x0006, 0x000f}, {0x0006, 0x0010}, {0x0006, 0x0011}, @@ -1780,8 +2104,13 @@ const uint32_t c_aauiCQMFHuffDec29[34][16] = {0x00020075, 0x00020075, 0x00020075, 0x00020075, 0x00020076, 0x00020076, 0x00020076, 0x00020076, 0x00020077, 0x00020077, 0x00020077, 0x00020077, 0x00020078, 0x00020078, 0x00020078, 0x00020078, }, {0x00020079, 0x00020079, 0x00020079, 0x00020079, 0x0002007b, 0x0002007b, 0x0002007b, 0x0002007b, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007d, 0x0002007d, 0x0002007d, 0x0002007d, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc30[153][2] = +#else +const uint16_t c_aauiCQMFHuffEnc30[153][2] = +#endif { {0x0007, 0x0009}, {0x0006, 0x000e}, {0x0006, 0x000f}, {0x0006, 0x0010}, {0x0006, 0x0011}, {0x0006, 0x0012}, {0x0006, 0x0013}, {0x0006, 0x0014}, {0x0006, 0x0015}, {0x0006, 0x0016}, {0x0006, 0x0017}, {0x0006, 0x0018}, {0x0006, 0x0019}, {0x0006, 0x001a}, {0x0006, 0x001b}, {0x0006, 0x001c}, @@ -1849,8 +2178,13 @@ const uint32_t c_aauiCQMFHuffDec30[39][16] = {0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030095, 0x00030095, 0x00030095, 0x00030095, 0x00030095, 0x00030095, 0x00030095, 0x00030095, }, {0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030097, 0x00030097, 0x00030097, 0x00030097, 0x00030097, 0x00030097, 0x00030097, 0x00030097, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc31[181][2] = +#else +const uint16_t c_aauiCQMFHuffEnc31[181][2] = +#endif { {0x0007, 0x000b}, {0x0006, 0x0015}, {0x0006, 0x0016}, {0x0006, 0x0017}, {0x0006, 0x0018}, {0x0006, 0x0019}, {0x0006, 0x001a}, {0x0006, 0x001b}, {0x0006, 0x001c}, {0x0006, 0x001d}, {0x0006, 0x001e}, {0x0006, 0x001f}, {0x0006, 0x0020}, {0x0006, 0x0021}, {0x0006, 0x0022}, {0x0006, 0x0023}, @@ -1925,8 +2259,13 @@ const uint32_t c_aauiCQMFHuffDec31[43][16] = {0x000200ad, 0x000200ad, 0x000200ad, 0x000200ad, 0x000200ae, 0x000200ae, 0x000200ae, 0x000200ae, 0x000200af, 0x000200af, 0x000200af, 0x000200af, 0x000200b0, 0x000200b0, 0x000200b0, 0x000200b0, }, {0x000200b1, 0x000200b1, 0x000200b1, 0x000200b1, 0x000200b2, 0x000200b2, 0x000200b2, 0x000200b2, 0x000200b3, 0x000200b3, 0x000200b3, 0x000200b3, 0x000200b4, 0x000200b4, 0x000200b4, 0x000200b4, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc33[16][2] = +#else +const uint16_t c_aauiCQMFHuffEnc33[16][2] = +#endif { {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0008, 0x0000}, {0x0008, 0x0001}, {0x0002, 0x0001}, {0x0004, 0x0001}, {0x0008, 0x0002}, {0x0008, 0x0003}, {0x0008, 0x0004}, {0x0008, 0x0005}, {0x0008, 0x0006}, {0x0008, 0x0007}, {0x0007, 0x0004}, {0x0007, 0x0005}, {0x0007, 0x0006}, {0x0007, 0x0007}, @@ -1938,8 +2277,13 @@ const uint32_t c_aauiCQMFHuffDec33[2][16] = {0x0001ffff, 0x00000005, 0x00010001, 0x00010001, 0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, {0x00000002, 0x00000003, 0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc34[16][2] = +#else +const uint16_t c_aauiCQMFHuffEnc34[16][2] = +#endif { {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0008, 0x0000}, {0x0008, 0x0001}, {0x0002, 0x0001}, {0x0004, 0x0001}, {0x0008, 0x0002}, {0x0008, 0x0003}, {0x0008, 0x0004}, {0x0008, 0x0005}, {0x0008, 0x0006}, {0x0008, 0x0007}, {0x0007, 0x0004}, {0x0007, 0x0005}, {0x0007, 0x0006}, {0x0007, 0x0007}, @@ -1951,8 +2295,13 @@ const uint32_t c_aauiCQMFHuffDec34[2][16] = {0x0001ffff, 0x00000005, 0x00010001, 0x00010001, 0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, {0x00000002, 0x00000003, 0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc35[25][2] = +#else +const uint16_t c_aauiCQMFHuffEnc35[25][2] = +#endif { {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0007, 0x0006}, {0x0009, 0x0000}, {0x0009, 0x0001}, {0x0002, 0x0001}, {0x0004, 0x0001}, {0x0009, 0x0002}, {0x0009, 0x0003}, {0x0009, 0x0004}, {0x0007, 0x0007}, {0x0009, 0x0005}, {0x0009, 0x0006}, {0x0009, 0x0007}, {0x0009, 0x0008}, {0x0009, 0x0009}, @@ -1974,8 +2323,13 @@ const uint32_t c_aauiCQMFHuffDec35[9][16] = {0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, }, {0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc36[36][2] = +#else +const uint16_t c_aauiCQMFHuffEnc36[36][2] = +#endif { {0x0001, 0x0001}, {0x0002, 0x0001}, {0x0006, 0x0002}, {0x000b, 0x0000}, {0x000b, 0x0001}, {0x000b, 0x0002}, {0x0003, 0x0001}, {0x0004, 0x0001}, {0x0008, 0x0005}, {0x000b, 0x0003}, {0x000b, 0x0004}, {0x000b, 0x0005}, {0x0006, 0x0003}, {0x0007, 0x0003}, {0x000b, 0x0006}, {0x000b, 0x0007}, @@ -1996,8 +2350,13 @@ const uint32_t c_aauiCQMFHuffDec36[7][16] = {0x00010010, 0x00010010, 0x00010011, 0x00010011, 0x00010012, 0x00010012, 0x00010013, 0x00010013, 0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, }, {0x00010003, 0x00010003, 0x00010004, 0x00010004, 0x00010005, 0x00010005, 0x00010009, 0x00010009, 0x0001000a, 0x0001000a, 0x0001000b, 0x0001000b, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc37[36][2] = +#else +const uint16_t c_aauiCQMFHuffEnc37[36][2] = +#endif { {0x0001, 0x0001}, {0x0002, 0x0001}, {0x0006, 0x0001}, {0x000c, 0x0000}, {0x000c, 0x0001}, {0x000c, 0x0002}, {0x0003, 0x0001}, {0x0004, 0x0001}, {0x0006, 0x0002}, {0x000c, 0x0003}, {0x000c, 0x0004}, {0x000c, 0x0005}, {0x0006, 0x0003}, {0x0007, 0x0001}, {0x000a, 0x0007}, {0x000c, 0x0006}, @@ -2015,8 +2374,13 @@ const uint32_t c_aauiCQMFHuffDec37[4][16] = {0x00000019, 0x0000001a, 0x0000001b, 0x0000001c, 0x0000001d, 0x0000001e, 0x0000001f, 0x00000020, 0x00000021, 0x00000022, 0x00010023, 0x00010023, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, }, {0x00000003, 0x00000004, 0x00000005, 0x00000009, 0x0000000a, 0x0000000b, 0x0000000f, 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000014, 0x00000015, 0x00000016, 0x00000017, 0x00000018, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc38[49][2] = +#else +const uint16_t c_aauiCQMFHuffEnc38[49][2] = +#endif { {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000c, 0x0012}, {0x000d, 0x0000}, {0x000d, 0x0001}, {0x000d, 0x0002}, {0x0002, 0x0001}, {0x0004, 0x0001}, {0x0007, 0x0001}, {0x000b, 0x000a}, {0x000d, 0x0003}, {0x000d, 0x0004}, {0x000d, 0x0005}, {0x0006, 0x0002}, {0x0006, 0x0003}, @@ -2054,8 +2418,13 @@ const uint32_t c_aauiCQMFHuffDec38[22][16] = {0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, }, {0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc39[64][2] = +#else +const uint16_t c_aauiCQMFHuffEnc39[64][2] = +#endif { {0x0001, 0x0001}, {0x0002, 0x0001}, {0x0006, 0x0001}, {0x000a, 0x0002}, {0x000f, 0x0000}, {0x000f, 0x0001}, {0x000f, 0x0002}, {0x000f, 0x0003}, {0x0003, 0x0001}, {0x0004, 0x0001}, {0x0007, 0x0001}, {0x000a, 0x0003}, {0x000f, 0x0004}, {0x000f, 0x0005}, {0x000f, 0x0006}, {0x000f, 0x0007}, @@ -2083,8 +2452,13 @@ const uint32_t c_aauiCQMFHuffDec39[12][16] = {0x00010027, 0x00010027, 0x00010028, 0x00010028, 0x00010029, 0x00010029, 0x0001002a, 0x0001002a, 0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, 0x0001002e, 0x0001002e, }, {0x0001002f, 0x0001002f, 0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x00010036, 0x00010036, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc40[81][2] = +#else +const uint16_t c_aauiCQMFHuffEnc40[81][2] = +#endif { {0x0001, 0x0001}, {0x0002, 0x0001}, {0x0006, 0x0001}, {0x000b, 0x0002}, {0x000f, 0x0011}, {0x0011, 0x0000}, {0x0011, 0x0001}, {0x0011, 0x0002}, {0x0011, 0x0003}, {0x0003, 0x0001}, {0x0004, 0x0001}, {0x0007, 0x0001}, {0x000a, 0x0002}, {0x000e, 0x0009}, {0x0011, 0x0004}, {0x0011, 0x0005}, @@ -2099,6 +2473,7 @@ const uint32_t c_aauiCQMFHuffEnc40[81][2] = {0x0010, 0x0021}, }; + #ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec40[36][16] = { @@ -2139,8 +2514,13 @@ const uint32_t c_aauiCQMFHuffDec40[36][16] = {0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, }, {0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc41[100][2] = +#else +const uint16_t c_aauiCQMFHuffEnc41[100][2] = +#endif { {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000b, 0x0001}, {0x0011, 0x0014}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0002, 0x0001}, {0x0004, 0x0001}, {0x0007, 0x0001}, {0x000a, 0x0001}, {0x0010, 0x000b}, {0x0013, 0x0005}, @@ -2178,8 +2558,13 @@ const uint32_t c_aauiCQMFHuffDec41[16][16] = {0x0001004e, 0x0001004e, 0x0001004f, 0x0001004f, 0x00010050, 0x00010050, 0x00010051, 0x00010051, 0x00010052, 0x00010052, 0x00010053, 0x00010053, 0x00010054, 0x00010054, 0x00010055, 0x00010055, }, {0x00010056, 0x00010056, 0x00010057, 0x00010057, 0x00010058, 0x00010058, 0x00010059, 0x00010059, 0x0001005a, 0x0001005a, 0x0001005b, 0x0001005b, 0x0001005c, 0x0001005c, 0x0001005d, 0x0001005d, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc42[169][2] = +#else +const uint16_t c_aauiCQMFHuffEnc42[169][2] = +#endif { {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x0009, 0x0001}, {0x000e, 0x0006}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0005, 0x0001}, @@ -2238,8 +2623,13 @@ const uint32_t c_aauiCQMFHuffDec42[28][16] = {0x00010093, 0x00010093, 0x00010094, 0x00010094, 0x00010095, 0x00010095, 0x00010096, 0x00010096, 0x00010097, 0x00010097, 0x00010098, 0x00010098, 0x00010099, 0x00010099, 0x0001009a, 0x0001009a, }, {0x0001009b, 0x0001009b, 0x0001009c, 0x0001009c, 0x0001009d, 0x0001009d, 0x0001009e, 0x0001009e, 0x0001009f, 0x0001009f, 0x000100a0, 0x000100a0, 0x000100a1, 0x000100a1, 0x000100a2, 0x000100a2, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc43[196][2] = +#else +const uint16_t c_aauiCQMFHuffEnc43[196][2] = +#endif { {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x0009, 0x0002}, {0x000c, 0x0003}, {0x0010, 0x0017}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0003, 0x0002}, {0x0003, 0x0003}, @@ -2305,8 +2695,13 @@ const uint32_t c_aauiCQMFHuffDec43[32][16] = {0x000100b4, 0x000100b4, 0x000100b5, 0x000100b5, 0x000100b6, 0x000100b6, 0x000100b7, 0x000100b7, 0x000100b8, 0x000100b8, 0x000100b9, 0x000100b9, 0x000100ba, 0x000100ba, 0x000100bb, 0x000100bb, }, {0x000100bc, 0x000100bc, 0x000100bd, 0x000100bd, 0x000100be, 0x000100be, 0x000100bf, 0x000100bf, 0x000100c0, 0x000100c0, 0x000100c1, 0x000100c1, 0x000100c2, 0x000100c2, 0x000100c3, 0x000100c3, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc44[289][2] = +#else +const uint16_t c_aauiCQMFHuffEnc44[289][2] = +#endif { {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0002}, {0x0008, 0x0002}, {0x000b, 0x0002}, {0x000f, 0x000a}, {0x0011, 0x0022}, {0x0014, 0x0000}, {0x0014, 0x0001}, {0x0014, 0x0002}, {0x0014, 0x0003}, {0x0014, 0x0004}, {0x0014, 0x0005}, {0x0014, 0x0006}, {0x0014, 0x0007}, {0x0014, 0x0008}, @@ -2379,8 +2774,13 @@ const uint32_t c_aauiCQMFHuffDec44[27][16] = {0x000000fa, 0x000000fb, 0x000000fc, 0x000000fd, 0x000000fe, 0x000000ff, 0x00000100, 0x00000101, 0x00000102, 0x00000103, 0x00000104, 0x00000105, 0x00000106, 0x00000107, 0x00000108, 0x00000109, }, {0x0000010a, 0x0000010b, 0x0000010c, 0x0000010d, 0x0000010e, 0x0000010f, 0x00000110, 0x00000111, 0x00000112, 0x00000113, 0x00000114, 0x00000115, 0x00000116, 0x00000117, 0x00000118, 0x00000119, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc45[324][2] = +#else +const uint16_t c_aauiCQMFHuffEnc45[324][2] = +#endif { {0x0002, 0x0002}, {0x0003, 0x0002}, {0x0005, 0x0003}, {0x0007, 0x0002}, {0x0009, 0x0003}, {0x000c, 0x0005}, {0x0010, 0x0025}, {0x0012, 0x0088}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, {0x0013, 0x0006}, {0x0013, 0x0007}, @@ -2480,8 +2880,13 @@ const uint32_t c_aauiCQMFHuffDec45[50][16] = {0x00010134, 0x00010134, 0x00010135, 0x00010135, 0x00010136, 0x00010136, 0x00010137, 0x00010137, 0x00010138, 0x00010138, 0x00010139, 0x00010139, 0x0001013a, 0x0001013a, 0x0001013b, 0x0001013b, }, {0x0001013c, 0x0001013c, 0x0001013d, 0x0001013d, 0x0001013e, 0x0001013e, 0x0001013f, 0x0001013f, 0x00010140, 0x00010140, 0x00010141, 0x00010141, 0x00010142, 0x00010142, 0x00010143, 0x00010143, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc46[400][2] = +#else +const uint16_t c_aauiCQMFHuffEnc46[400][2] = +#endif { {0x0002, 0x0002}, {0x0003, 0x0002}, {0x0005, 0x0003}, {0x0007, 0x0004}, {0x0009, 0x0005}, {0x000b, 0x0006}, {0x000d, 0x000a}, {0x000f, 0x0018}, {0x0012, 0x00a6}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, {0x0013, 0x0006}, @@ -2600,8 +3005,13 @@ const uint32_t c_aauiCQMFHuffDec46[61][16] = {0x00010179, 0x00010179, 0x0001017a, 0x0001017a, 0x0001017b, 0x0001017b, 0x0001017c, 0x0001017c, 0x0001017d, 0x0001017d, 0x0001017e, 0x0001017e, 0x0001017f, 0x0001017f, 0x00010180, 0x00010180, }, {0x00010181, 0x00010181, 0x00010182, 0x00010182, 0x00010183, 0x00010183, 0x00010184, 0x00010184, 0x00010185, 0x00010185, 0x00010186, 0x00010186, 0x00010187, 0x00010187, 0x00010188, 0x00010188, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc47[576][2] = +#else +const uint16_t c_aauiCQMFHuffEnc47[576][2] = +#endif { {0x0002, 0x0003}, {0x0003, 0x0003}, {0x0005, 0x0005}, {0x0006, 0x0004}, {0x0008, 0x0006}, {0x000a, 0x0007}, {0x000c, 0x000b}, {0x000d, 0x000d}, {0x0010, 0x0041}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, {0x0013, 0x0006}, @@ -2768,8 +3178,13 @@ const uint32_t c_aauiCQMFHuffDec47[87][16] = {0x0001022b, 0x0001022b, 0x0001022c, 0x0001022c, 0x0001022d, 0x0001022d, 0x0001022e, 0x0001022e, 0x0001022f, 0x0001022f, 0x00010230, 0x00010230, 0x00010231, 0x00010231, 0x00010232, 0x00010232, }, {0x00010233, 0x00010233, 0x00010234, 0x00010234, 0x00010235, 0x00010235, 0x00010236, 0x00010236, 0x00010237, 0x00010237, 0x00010238, 0x00010238, 0x00010239, 0x00010239, 0x0001023a, 0x0001023a, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc48[729][2] = +#else +const uint16_t c_aauiCQMFHuffEnc48[729][2] = +#endif { {0x0002, 0x0003}, {0x0003, 0x0003}, {0x0005, 0x0006}, {0x0006, 0x0006}, {0x0008, 0x0006}, {0x0009, 0x0007}, {0x000b, 0x000b}, {0x000c, 0x000d}, {0x000f, 0x0030}, {0x0010, 0x0055}, {0x0012, 0x0136}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, @@ -2980,8 +3395,13 @@ const uint32_t c_aauiCQMFHuffDec48[110][16] = {0x000102c4, 0x000102c4, 0x000102c5, 0x000102c5, 0x000102c6, 0x000102c6, 0x000102c7, 0x000102c7, 0x000102c8, 0x000102c8, 0x000102c9, 0x000102c9, 0x000102ca, 0x000102ca, 0x000102cb, 0x000102cb, }, {0x000102cc, 0x000102cc, 0x000102cd, 0x000102cd, 0x000102ce, 0x000102ce, 0x000102cf, 0x000102cf, 0x000102d0, 0x000102d0, 0x000102d1, 0x000102d1, 0x000102d2, 0x000102d2, 0x000102d3, 0x000102d3, }, }; + #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc49[729][2] = +#else +const uint16_t c_aauiCQMFHuffEnc49[729][2] = +#endif { {0x0002, 0x0003}, {0x0003, 0x0003}, {0x0005, 0x0007}, {0x0007, 0x000a}, {0x0008, 0x0009}, {0x0008, 0x000a}, {0x0009, 0x0009}, {0x000b, 0x000d}, {0x000d, 0x0014}, {0x000d, 0x0015}, {0x0010, 0x0052}, {0x0011, 0x0098}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, @@ -3077,7 +3497,6 @@ const uint32_t c_aauiCQMFHuffEnc49[729][2] = {0x0013, 0x0253}, }; - #ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec49[113][16] = { @@ -3196,7 +3615,11 @@ const uint32_t c_aauiCQMFHuffDec49[113][16] = {0x000102cd, 0x000102cd, 0x000102ce, 0x000102ce, 0x000102cf, 0x000102cf, 0x000102d0, 0x000102d0, 0x000102d1, 0x000102d1, 0x000102d2, 0x000102d2, 0x000102d3, 0x000102d3, 0x000102d4, 0x000102d4, }, }; #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc50[28][2] = +#else +const uint16_t c_aauiCQMFHuffEnc50[28][2] = +#endif { {0x0002, 0x0001}, {0x0002, 0x0002}, {0x0002, 0x0003}, {0x0003, 0x0001}, {0x0004, 0x0001}, {0x0005, 0x0001}, {0x0006, 0x0001}, {0x0007, 0x0001}, {0x0008, 0x0001}, {0x0009, 0x0001}, {0x000a, 0x0001}, {0x000b, 0x0001}, {0x000c, 0x0001}, {0x000d, 0x0001}, {0x000e, 0x0001}, {0x000f, 0x0001}, @@ -3204,7 +3627,6 @@ const uint32_t c_aauiCQMFHuffEnc50[28][2] = {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, }; - #ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec50[6][16] = { @@ -3216,7 +3638,11 @@ const uint32_t c_aauiCQMFHuffDec50[6][16] = {0x00010012, 0x00010012, 0x00010013, 0x00010013, 0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010019, 0x00010019, }, }; #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc51[29][2] = +#else +const uint16_t c_aauiCQMFHuffEnc51[29][2] = +#endif { {0x0002, 0x0002}, {0x0002, 0x0003}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0004, 0x0001}, {0x0004, 0x0002}, {0x0004, 0x0003}, {0x0005, 0x0001}, {0x0006, 0x0001}, {0x0007, 0x0001}, {0x0008, 0x0001}, {0x0009, 0x0001}, {0x000a, 0x0001}, {0x000b, 0x0001}, {0x000c, 0x0001}, {0x000d, 0x0001}, @@ -3224,7 +3650,6 @@ const uint32_t c_aauiCQMFHuffEnc51[29][2] = {0x0013, 0x0003}, {0x0012, 0x0004}, {0x0012, 0x0005}, {0x0012, 0x0006}, {0x0012, 0x0007}, }; - #ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec51[6][16] = { @@ -3236,14 +3661,17 @@ const uint32_t c_aauiCQMFHuffDec51[6][16] = {0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, }, }; #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc52[32][2] = +#else +const uint16_t c_aauiCQMFHuffEnc52[32][2] = +#endif { {0x0002, 0x0002}, {0x0002, 0x0003}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0004, 0x0002}, {0x0004, 0x0003}, {0x0005, 0x0001}, {0x0005, 0x0002}, {0x0005, 0x0003}, {0x0006, 0x0001}, {0x0007, 0x0001}, {0x0008, 0x0001}, {0x0009, 0x0001}, {0x000a, 0x0001}, {0x000b, 0x0001}, {0x000c, 0x0001}, {0x000e, 0x0001}, {0x000e, 0x0002}, {0x000e, 0x0003}, {0x000f, 0x0001}, {0x0011, 0x0002}, {0x0011, 0x0003}, {0x0012, 0x0003}, {0x0014, 0x0000}, {0x0013, 0x0003}, {0x0014, 0x0001}, {0x0014, 0x0002}, {0x0014, 0x0003}, {0x0014, 0x0004}, {0x0014, 0x0005}, {0x0013, 0x0004}, {0x0013, 0x0005}, }; - #ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec52[7][16] = { @@ -3256,7 +3684,11 @@ const uint32_t c_aauiCQMFHuffDec52[7][16] = {0x00000017, 0x00000019, 0x0000001a, 0x0000001b, 0x0000001c, 0x0000001d, 0x00010018, 0x00010018, 0x0001001e, 0x0001001e, 0x0001001f, 0x0001001f, 0x00020016, 0x00020016, 0x00020016, 0x00020016, }, }; #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc53[37][2] = +#else +const uint16_t c_aauiCQMFHuffEnc53[37][2] = +#endif { {0x0002, 0x0002}, {0x0002, 0x0003}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0004, 0x0002}, {0x0004, 0x0003}, {0x0005, 0x0002}, {0x0005, 0x0003}, {0x0006, 0x0002}, {0x0006, 0x0003}, {0x0007, 0x0001}, {0x0007, 0x0002}, {0x0007, 0x0003}, {0x0008, 0x0001}, {0x0009, 0x0001}, {0x000b, 0x0002}, @@ -3265,7 +3697,6 @@ const uint32_t c_aauiCQMFHuffEnc53[37][2] = {0x0012, 0x0003}, {0x0012, 0x0004}, {0x0012, 0x0005}, {0x0012, 0x0006}, {0x0012, 0x0007}, }; - #ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec53[9][16] = { @@ -3280,7 +3711,11 @@ const uint32_t c_aauiCQMFHuffDec53[9][16] = {0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x00020023, 0x00020023, 0x00020023, 0x00020023, 0x00020024, 0x00020024, 0x00020024, 0x00020024, }, }; #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc54[39][2] = +#else +const uint16_t c_aauiCQMFHuffEnc54[39][2] = +#endif { {0x0002, 0x0002}, {0x0002, 0x0003}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0004, 0x0003}, {0x0005, 0x0003}, {0x0005, 0x0004}, {0x0005, 0x0005}, {0x0006, 0x0002}, {0x0006, 0x0003}, {0x0006, 0x0004}, {0x0006, 0x0005}, {0x0007, 0x0002}, {0x0007, 0x0003}, {0x0008, 0x0001}, {0x0008, 0x0002}, @@ -3289,7 +3724,6 @@ const uint32_t c_aauiCQMFHuffEnc54[39][2] = {0x0011, 0x0003}, {0x0012, 0x0002}, {0x0012, 0x0003}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, }; - #ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec54[9][16] = { @@ -3304,7 +3738,11 @@ const uint32_t c_aauiCQMFHuffDec54[9][16] = {0x00010023, 0x00010023, 0x00010024, 0x00010024, 0x00010025, 0x00010025, 0x00010026, 0x00010026, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, }, }; #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc55[46][2] = +#else +const uint16_t c_aauiCQMFHuffEnc55[46][2] = +#endif { {0x0003, 0x0003}, {0x0002, 0x0003}, {0x0003, 0x0004}, {0x0003, 0x0005}, {0x0004, 0x0003}, {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0005, 0x0003}, {0x0005, 0x0004}, {0x0005, 0x0005}, {0x0006, 0x0003}, {0x0006, 0x0004}, {0x0006, 0x0005}, {0x0007, 0x0002}, {0x0007, 0x0003}, {0x0007, 0x0004}, @@ -3314,7 +3752,6 @@ const uint32_t c_aauiCQMFHuffEnc55[46][2] = {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, }; - #ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec55[10][16] = { @@ -3330,7 +3767,11 @@ const uint32_t c_aauiCQMFHuffDec55[10][16] = {0x00010028, 0x00010028, 0x00010029, 0x00010029, 0x0001002a, 0x0001002a, 0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, 0x00020025, 0x00020025, 0x00020025, 0x00020025, }, }; #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc56[55][2] = +#else +const uint16_t c_aauiCQMFHuffEnc56[55][2] = +#endif { {0x0003, 0x0003}, {0x0002, 0x0003}, {0x0003, 0x0004}, {0x0003, 0x0005}, {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0005, 0x0003}, {0x0005, 0x0004}, {0x0005, 0x0005}, {0x0005, 0x0006}, {0x0005, 0x0007}, {0x0006, 0x0003}, {0x0006, 0x0004}, {0x0006, 0x0005}, {0x0007, 0x0003}, {0x0007, 0x0004}, @@ -3341,7 +3782,6 @@ const uint32_t c_aauiCQMFHuffEnc56[55][2] = {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, }; - #ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec56[12][16] = { @@ -3359,7 +3799,11 @@ const uint32_t c_aauiCQMFHuffDec56[12][16] = {0x0001002b, 0x0001002b, 0x0001002e, 0x0001002e, 0x0001002f, 0x0001002f, 0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, }, }; #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc57[65][2] = +#else +const uint16_t c_aauiCQMFHuffEnc57[65][2] = +#endif { {0x0003, 0x0004}, {0x0002, 0x0003}, {0x0003, 0x0005}, {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0005, 0x0004}, {0x0005, 0x0005}, {0x0005, 0x0006}, {0x0005, 0x0007}, {0x0006, 0x0004}, {0x0006, 0x0005}, {0x0006, 0x0006}, {0x0006, 0x0007}, {0x0007, 0x0003}, @@ -3372,7 +3816,6 @@ const uint32_t c_aauiCQMFHuffEnc57[65][2] = {0x0013, 0x000d}, }; - #ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec57[14][16] = { @@ -3392,7 +3835,11 @@ const uint32_t c_aauiCQMFHuffDec57[14][16] = {0x0001002f, 0x0001002f, 0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x00010038, 0x00010038, 0x00010039, 0x00010039, 0x0001003a, 0x0001003a, }, }; #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc58[77][2] = +#else +const uint16_t c_aauiCQMFHuffEnc58[77][2] = +#endif { {0x0004, 0x0005}, {0x0003, 0x0005}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0004, 0x0008}, {0x0004, 0x0009}, {0x0005, 0x0005}, {0x0005, 0x0006}, {0x0005, 0x0007}, {0x0005, 0x0008}, {0x0005, 0x0009}, {0x0006, 0x0004}, {0x0006, 0x0005}, {0x0006, 0x0006}, @@ -3406,7 +3853,6 @@ const uint32_t c_aauiCQMFHuffEnc58[77][2] = {0x0012, 0x0009}, {0x0012, 0x000a}, {0x0012, 0x000b}, {0x0012, 0x000c}, {0x0012, 0x000d}, }; - #ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec58[17][16] = { @@ -3429,7 +3875,11 @@ const uint32_t c_aauiCQMFHuffDec58[17][16] = {0x00010038, 0x00010038, 0x00010039, 0x00010039, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, 0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x00010041, 0x00010041, 0x00010042, 0x00010042, }, }; #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc59[91][2] = +#else +const uint16_t c_aauiCQMFHuffEnc59[91][2] = +#endif { {0x0003, 0x0005}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0004, 0x0008}, {0x0004, 0x0009}, {0x0005, 0x0006}, {0x0005, 0x0007}, {0x0005, 0x0008}, {0x0005, 0x0009}, {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0006, 0x0006}, {0x0006, 0x0007}, {0x0006, 0x0008}, @@ -3445,7 +3895,6 @@ const uint32_t c_aauiCQMFHuffEnc59[91][2] = {0x0013, 0x0018}, {0x0013, 0x0019}, {0x0012, 0x000f}, }; - #ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec59[20][16] = { @@ -3471,7 +3920,11 @@ const uint32_t c_aauiCQMFHuffDec59[20][16] = {0x00010050, 0x00010050, 0x00010051, 0x00010051, 0x00010052, 0x00010052, 0x00010053, 0x00010053, 0x00010054, 0x00010054, 0x00010055, 0x00010055, 0x00010056, 0x00010056, 0x00010057, 0x00010057, }, }; #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc60[109][2] = +#else +const uint16_t c_aauiCQMFHuffEnc60[109][2] = +#endif { {0x0004, 0x0007}, {0x0002, 0x0003}, {0x0003, 0x0005}, {0x0004, 0x0008}, {0x0004, 0x0009}, {0x0005, 0x0007}, {0x0005, 0x0008}, {0x0005, 0x0009}, {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0005, 0x000c}, {0x0005, 0x000d}, {0x0006, 0x0007}, {0x0006, 0x0008}, {0x0006, 0x0009}, {0x0006, 0x000a}, @@ -3489,7 +3942,6 @@ const uint32_t c_aauiCQMFHuffEnc60[109][2] = {0x0013, 0x001e}, {0x0013, 0x001f}, {0x0013, 0x0020}, {0x0013, 0x0021}, {0x0012, 0x0013}, }; - #ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec60[24][16] = { @@ -3519,7 +3971,11 @@ const uint32_t c_aauiCQMFHuffDec60[24][16] = {0x00010062, 0x00010062, 0x00010063, 0x00010063, 0x00010064, 0x00010064, 0x00010065, 0x00010065, 0x00010066, 0x00010066, 0x00010067, 0x00010067, 0x00010068, 0x00010068, 0x00010069, 0x00010069, }, }; #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc61[129][2] = +#else +const uint16_t c_aauiCQMFHuffEnc61[129][2] = +#endif { {0x0004, 0x0008}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0009}, {0x0004, 0x000a}, {0x0004, 0x000b}, {0x0005, 0x0008}, {0x0005, 0x0009}, {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0005, 0x000c}, {0x0005, 0x000d}, {0x0005, 0x000e}, {0x0005, 0x000f}, {0x0006, 0x0008}, {0x0006, 0x0009}, @@ -3540,7 +3996,6 @@ const uint32_t c_aauiCQMFHuffEnc61[129][2] = {0x0012, 0x0029}, }; - #ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec61[33][16] = { @@ -3579,7 +4034,11 @@ const uint32_t c_aauiCQMFHuffDec61[33][16] = {0x0002007b, 0x0002007b, 0x0002007b, 0x0002007b, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007d, 0x0002007d, 0x0002007d, 0x0002007d, 0x0002007e, 0x0002007e, 0x0002007e, 0x0002007e, }, }; #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc62[153][2] = +#else +const uint16_t c_aauiCQMFHuffEnc62[153][2] = +#endif { {0x0004, 0x0009}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x000a}, {0x0004, 0x000b}, {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0005, 0x000c}, {0x0005, 0x000d}, {0x0005, 0x000e}, {0x0005, 0x000f}, {0x0005, 0x0010}, {0x0005, 0x0011}, {0x0006, 0x000a}, {0x0006, 0x000b}, {0x0006, 0x000c}, @@ -3603,7 +4062,6 @@ const uint32_t c_aauiCQMFHuffEnc62[153][2] = {0x0011, 0x001d}, }; - #ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec62[41][16] = { @@ -3650,7 +4108,11 @@ const uint32_t c_aauiCQMFHuffDec62[41][16] = {0x00020092, 0x00020092, 0x00020092, 0x00020092, 0x00020093, 0x00020093, 0x00020093, 0x00020093, 0x00020094, 0x00020094, 0x00020094, 0x00020094, 0x00020095, 0x00020095, 0x00020095, 0x00020095, }, }; #endif +#ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffEnc63[181][2] = +#else +const uint16_t c_aauiCQMFHuffEnc63[181][2] = +#endif { {0x0004, 0x0008}, {0x0003, 0x0005}, {0x0002, 0x0003}, {0x0004, 0x0009}, {0x0005, 0x000c}, {0x0005, 0x000d}, {0x0005, 0x000e}, {0x0005, 0x000f}, {0x0006, 0x000c}, {0x0006, 0x000d}, {0x0006, 0x000e}, {0x0006, 0x000f}, {0x0006, 0x0010}, {0x0006, 0x0011}, {0x0006, 0x0012}, {0x0006, 0x0013}, @@ -3677,7 +4139,6 @@ const uint32_t c_aauiCQMFHuffEnc63[181][2] = {0x0013, 0x0023}, {0x0013, 0x0024}, {0x0013, 0x0025}, {0x0013, 0x0026}, {0x0013, 0x0027}, }; - #ifndef ROM_TO_RAM const uint32_t c_aauiCQMFHuffDec63[39][16] = { @@ -3722,74 +4183,80 @@ const uint32_t c_aauiCQMFHuffDec63[39][16] = {0x00000075, 0x00000079, 0x0000007f, 0x00000081, 0x00000082, 0x00000083, 0x00000085, 0x00000087, 0x00000088, 0x00000089, 0x0000008a, 0x0000008b, 0x0000008c, 0x0000008d, 0x0000008e, 0x00000090, }, }; #endif -const uint32_t (*c_apauiHuffEncTabels[2 * ALLOC_TABLE_SIZE])[2] = { - NULL, - c_aauiCQMFHuffEnc1, - c_aauiCQMFHuffEnc2, - c_aauiCQMFHuffEnc3, - c_aauiCQMFHuffEnc4, - c_aauiCQMFHuffEnc5, - c_aauiCQMFHuffEnc6, - c_aauiCQMFHuffEnc7, - c_aauiCQMFHuffEnc8, - c_aauiCQMFHuffEnc9, - c_aauiCQMFHuffEnc10, - c_aauiCQMFHuffEnc11, - c_aauiCQMFHuffEnc12, - c_aauiCQMFHuffEnc13, - c_aauiCQMFHuffEnc14, - c_aauiCQMFHuffEnc15, - c_aauiCQMFHuffEnc16, - c_aauiCQMFHuffEnc17, - c_aauiCQMFHuffEnc18, - c_aauiCQMFHuffEnc19, - c_aauiCQMFHuffEnc20, - c_aauiCQMFHuffEnc21, - c_aauiCQMFHuffEnc22, - c_aauiCQMFHuffEnc23, - c_aauiCQMFHuffEnc24, - c_aauiCQMFHuffEnc25, - c_aauiCQMFHuffEnc26, - c_aauiCQMFHuffEnc27, - c_aauiCQMFHuffEnc28, - c_aauiCQMFHuffEnc29, - c_aauiCQMFHuffEnc30, - c_aauiCQMFHuffEnc31, - NULL, - c_aauiCQMFHuffEnc33, - c_aauiCQMFHuffEnc34, - c_aauiCQMFHuffEnc35, - c_aauiCQMFHuffEnc36, - c_aauiCQMFHuffEnc37, - c_aauiCQMFHuffEnc38, - c_aauiCQMFHuffEnc39, - c_aauiCQMFHuffEnc40, - c_aauiCQMFHuffEnc41, - c_aauiCQMFHuffEnc42, - c_aauiCQMFHuffEnc43, - c_aauiCQMFHuffEnc44, - c_aauiCQMFHuffEnc45, - c_aauiCQMFHuffEnc46, - c_aauiCQMFHuffEnc47, - c_aauiCQMFHuffEnc48, - c_aauiCQMFHuffEnc49, - c_aauiCQMFHuffEnc50, - c_aauiCQMFHuffEnc51, - c_aauiCQMFHuffEnc52, - c_aauiCQMFHuffEnc53, - c_aauiCQMFHuffEnc54, - c_aauiCQMFHuffEnc55, - c_aauiCQMFHuffEnc56, - c_aauiCQMFHuffEnc57, - c_aauiCQMFHuffEnc58, - c_aauiCQMFHuffEnc59, - c_aauiCQMFHuffEnc60, - c_aauiCQMFHuffEnc61, - c_aauiCQMFHuffEnc62, - c_aauiCQMFHuffEnc63, + +#ifndef ROM_TO_RAM +const uint32_t(*c_apauiHuffEncTabels[2 * ALLOC_TABLE_SIZE])[2] = +#else +const uint16_t(*c_apauiHuffEncTabels[2 * ALLOC_TABLE_SIZE])[2] = +#endif +{ + NULL, + c_aauiCQMFHuffEnc1, + c_aauiCQMFHuffEnc2, + c_aauiCQMFHuffEnc3, + c_aauiCQMFHuffEnc4, + c_aauiCQMFHuffEnc5, + c_aauiCQMFHuffEnc6, + c_aauiCQMFHuffEnc7, + c_aauiCQMFHuffEnc8, + c_aauiCQMFHuffEnc9, + c_aauiCQMFHuffEnc10, + c_aauiCQMFHuffEnc11, + c_aauiCQMFHuffEnc12, + c_aauiCQMFHuffEnc13, + c_aauiCQMFHuffEnc14, + c_aauiCQMFHuffEnc15, + c_aauiCQMFHuffEnc16, + c_aauiCQMFHuffEnc17, + c_aauiCQMFHuffEnc18, + c_aauiCQMFHuffEnc19, + c_aauiCQMFHuffEnc20, + c_aauiCQMFHuffEnc21, + c_aauiCQMFHuffEnc22, + c_aauiCQMFHuffEnc23, + c_aauiCQMFHuffEnc24, + c_aauiCQMFHuffEnc25, + c_aauiCQMFHuffEnc26, + c_aauiCQMFHuffEnc27, + c_aauiCQMFHuffEnc28, + c_aauiCQMFHuffEnc29, + c_aauiCQMFHuffEnc30, + c_aauiCQMFHuffEnc31, + NULL, + c_aauiCQMFHuffEnc33, + c_aauiCQMFHuffEnc34, + c_aauiCQMFHuffEnc35, + c_aauiCQMFHuffEnc36, + c_aauiCQMFHuffEnc37, + c_aauiCQMFHuffEnc38, + c_aauiCQMFHuffEnc39, + c_aauiCQMFHuffEnc40, + c_aauiCQMFHuffEnc41, + c_aauiCQMFHuffEnc42, + c_aauiCQMFHuffEnc43, + c_aauiCQMFHuffEnc44, + c_aauiCQMFHuffEnc45, + c_aauiCQMFHuffEnc46, + c_aauiCQMFHuffEnc47, + c_aauiCQMFHuffEnc48, + c_aauiCQMFHuffEnc49, + c_aauiCQMFHuffEnc50, + c_aauiCQMFHuffEnc51, + c_aauiCQMFHuffEnc52, + c_aauiCQMFHuffEnc53, + c_aauiCQMFHuffEnc54, + c_aauiCQMFHuffEnc55, + c_aauiCQMFHuffEnc56, + c_aauiCQMFHuffEnc57, + c_aauiCQMFHuffEnc58, + c_aauiCQMFHuffEnc59, + c_aauiCQMFHuffEnc60, + c_aauiCQMFHuffEnc61, + c_aauiCQMFHuffEnc62, + c_aauiCQMFHuffEnc63, }; #ifndef ROM_TO_RAM -const uint32_t (*c_apauiHuffDecTables[2 * ALLOC_TABLE_SIZE])[HUFF_DEC_TABLE_SIZE] = { +const uint32_t(*c_apauiHuffDecTables[2 * ALLOC_TABLE_SIZE])[HUFF_DEC_TABLE_SIZE] = { NULL, c_aauiCQMFHuffDec1, c_aauiCQMFHuffDec2, @@ -3857,7 +4324,7 @@ const uint32_t (*c_apauiHuffDecTables[2 * ALLOC_TABLE_SIZE])[HUFF_DEC_TABLE_SIZE }; #else const uint32_t num_row_aauiCQMFHuff[2 * ALLOC_TABLE_SIZE] = -{ 0, 16, 16, 25, 36, 36, 49, 64, 81, 100, +{ 0, 16, 16, 25, 36, 36, 49, 64, 81, 100, 169, 196, 289, 324, 400, 576, 729, 729, 28, 29, 32, 37, 39, 46, 55, 65, 77, 91, 109, 129, 153, 181, 0, 16, 16, 25, 36, 36, 49, 64, 81, @@ -4145,7 +4612,7 @@ const int32_t c_aaiHuffDemod17[729][2] = { 14,6,14,7,14,8,14,9,14,10,14,11,14,12,14,13,14,14,14,15,14,16,14,17,14,18,14,19,14,20,14,21, 14,22,14,23,14,24,14,25,14,26,15,0,15,1,15,2,15,3,15,4,15,5,15,6,15,7,15,8,15,9,15,10, 15,11,15,12,15,13,15,14,15,15,15,16,15,17,15,18,15,19,15,20,15,21,15,22,15,23,15,24,15,25,15,26, - 16,0,16,1,16,2,16,3,16,4,16,5,16,6,16,7,16,8,16,9,16,10,16,11,16,12,16,13,16,14,16,15, + 16,0,16,1,16,2,16,3,16,4,16,5,16,6,16,7,16,8,16,9,16,10,16,11,16,12,16,13,16,14,16,15, 16,16,16,17,16,18,16,19,16,20,16,21,16,22,16,23,16,24,16,25,16,26,17,0,17,1,17,2,17,3,17,4, 17,5,17,6,17,7,17,8,17,9,17,10,17,11,17,12,17,13,17,14,17,15,17,16,17,17,17,18,17,19,17,20, 17,21,17,22,17,23,17,24,17,25,17,26,18,0,18,1,18,2,18,3,18,4,18,5,18,6,18,7,18,8,18,9, @@ -4165,9 +4632,8 @@ const int32_t c_aaiHuffDemod17[729][2] = { 26,2,26,3,26,4,26,5,26,6,26,7,26,8,26,9,26,10,26,11,26,12,26,13,26,14,26,15,26,16,26,17, 26,18,26,19,26,20,26,21,26,22,26,23,26,24,26,25,26,26, }; -}; -const int32_t (*c_apaiDemodTables[ALLOC_TABLE_SIZE])[2] = { +const int32_t(*c_apaiDemodTables[ALLOC_TABLE_SIZE])[2] = { NULL, c_aaiHuffDemod1, c_aaiHuffDemod2, @@ -4201,8 +4667,98 @@ const int32_t (*c_apaiDemodTables[ALLOC_TABLE_SIZE])[2] = { NULL, NULL, }; +#endif +const int32_t c_aiLogAddTable[LOG_ADD_TABLE_LENGTH] = { + 0x40, 0x40, 0x3F, 0x3F, 0x3E, 0x3E, 0x3D, 0x3D, 0x3C, 0x3C, 0x3B, 0x3B, 0x3A, 0x3A, 0x39, 0x39, + 0x38, 0x38, 0x37, 0x37, 0x37, 0x36, 0x36, 0x35, 0x35, 0x34, 0x34, 0x33, 0x33, 0x33, 0x32, 0x32, + 0x31, 0x31, 0x31, 0x30, 0x30, 0x2F, 0x2F, 0x2F, 0x2E, 0x2E, 0x2D, 0x2D, 0x2D, 0x2C, 0x2C, 0x2B, + 0x2B, 0x2B, 0x2A, 0x2A, 0x2A, 0x29, 0x29, 0x29, 0x28, 0x28, 0x27, 0x27, 0x27, 0x26, 0x26, 0x26, + 0x25, 0x25, 0x25, 0x24, 0x24, 0x24, 0x23, 0x23, 0x23, 0x23, 0x22, 0x22, 0x22, 0x21, 0x21, 0x21, + 0x20, 0x20, 0x20, 0x20, 0x1F, 0x1F, 0x1F, 0x1E, 0x1E, 0x1E, 0x1E, 0x1D, 0x1D, 0x1D, 0x1C, 0x1C, + 0x1C, 0x1C, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x1A, 0x1A, 0x19, 0x19, 0x19, 0x19, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x17, 0x17, 0x17, 0x17, 0x16, 0x16, 0x16, 0x16, 0x16, 0x15, 0x15, 0x15, 0x15, + 0x15, 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x12, 0x12, 0x12, 0x12, + 0x12, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0F, 0x0F, 0x0F, + 0x0F, 0x0F, 0x0F, 0x0F, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, + 0x0D, 0x0D, 0x0D, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, + 0x0B, 0x0B, 0x0B, 0x0B, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const int32_t c_aiBandwidthAdjust48[MAX_BANDS_48] = { + 0,0,0,0,0,0,0,0,0,0,0,64,64,64,64,64, + 101,101,128,165,165,180,213, }; + +const int32_t c_aiAbsoluteThresh48[MAX_BANDS_48] = { + -1787,-1787,-1787,-1787,-1787,-1787,-1787,-1787,-1782,-1761,-1737,-1679,-1638,-1613,-1590,-1568, + -1516,-1459,-1395,-1289,-671,-409,-401, }; + + +#if PERCEPTUAL_MODEL_SLGAIN_SHIFT == 4 +const int32_t c_aiDefaultTheta48[MAX_BANDS_48] = { + 7,7,6,5,5,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4, +}; +#elif PERCEPTUAL_MODEL_SLGAIN_SHIFT == 8 +const int32_t c_aiDefaultTheta48[MAX_BANDS_48] = { + 112,112,96,80,80,64,64,64,64,64,64,64,64,64,64,64, + 64,64,64,64,64,64,64, +}; #endif +const int32_t c_aaiSpreadFunction48[MAX_BANDS_48*MAX_BANDS_48] = { + 0,-1561,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552, + -2552,-2552,-2552,-2552,-2552,-2552,-2552,-289,-4,-1234,-2295,-2552,-2552,-2552,-2552,-2552, + -2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-569,-229, + -8,-905,-1705,-2324,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552, + -2552,-2552,-2552,-2552,-2552,-789,-445,-173,-16,-656,-1271,-1765,-2172,-2520,-2552,-2552, + -2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-961,-616,-340,-136, + -28,-488,-976,-1382,-1729,-2032,-2305,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552, + -2552,-2552,-2552,-1088,-743,-465,-257,-148,-31,-371,-769,-1114,-1417,-1689,-2054,-2483, + -2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-1198,-852,-574,-364,-209,-148, + -42,-300,-635,-936,-1207,-1572,-2000,-2376,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552, + -2552,-1293,-948,-669,-458,-301,-183,-145,-56,-258,-547,-816,-1179,-1606,-1982,-2311, + -2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-1375,-1029,-750,-539,-381,-260,-180,-142, + -68,-231,-487,-846,-1272,-1647,-1976,-2261,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-1444, + -1099,-820,-608,-449,-328,-233,-194,-138,-77,-213,-555,-978,-1352,-1681,-1966,-2268, + -2552,-2552,-2552,-2552,-2552,-2552,-1501,-1155,-876,-665,-505,-383,-287,-210,-193,-130, + -79,-298,-711,-1083,-1411,-1696,-1997,-2288,-2550,-2552,-2552,-2552,-2552,-1567,-1221,-942, + -730,-570,-448,-351,-272,-206,-189,-151,-72,-349,-713,-1039,-1324,-1625,-1915,-2177, + -2448,-2552,-2552,-2552,-1650,-1304,-1025,-813,-653,-530,-432,-352,-285,-227,-177,-163, + -69,-297,-613,-895,-1195,-1485,-1746,-2017,-2238,-2401,-2545,-1727,-1381,-1102,-890,-730, + -607,-509,-428,-360,-301,-249,-180,-153,-72,-257,-527,-824,-1112,-1373,-1643,-1865, + -2028,-2171,-1798,-1452,-1173,-960,-800,-677,-579,-498,-430,-370,-317,-246,-192,-145, + -76,-224,-505,-790,-1050,-1320,-1540,-1703,-1847,-1860,-1514,-1234,-1022,-862,-738,-640, + -559,-490,-430,-377,-306,-224,-197,-136,-81,-242,-515,-771,-1040,-1260,-1422,-1566, + -1923,-1577,-1297,-1085,-925,-801,-703,-621,-553,-492,-439,-367,-284,-213,-198,-144, + -83,-235,-479,-744,-963,-1125,-1268,-1986,-1640,-1360,-1148,-988,-864,-766,-684,-615, + -555,-501,-429,-345,-273,-211,-204,-146,-89,-216,-465,-680,-841,-984,-2043,-1697, + -1417,-1205,-1044,-921,-822,-741,-672,-611,-557,-485,-401,-328,-264,-211,-205,-140, + -93,-227,-430,-588,-729,-2104,-1758,-1479,-1266,-1106,-982,-884,-802,-733,-673,-619, + -546,-461,-388,-324,-269,-212,-211,-151,-100,-195,-336,-472,-2163,-1817,-1537,-1324, + -1164,-1040,-942,-860,-791,-731,-676,-604,-519,-445,-380,-325,-268,-226,-219,-147, + -114,-167,-280,-2203,-1857,-1577,-1365,-1205,-1081,-982,-901,-831,-771,-717,-644,-559, + -485,-420,-364,-306,-252,-239,-206,-132,-122,-163,-2224,-1878,-1598,-1386,-1225,-1102, + -1003,-921,-852,-792,-737,-665,-580,-505,-441,-385,-326,-271,-222,-224,-176,-121,-114, +}; #endif -/* clang-format on */ + diff --git a/lib_rend/ivas_CQMFHuff.h b/lib_rend/ivas_lcld_tables.h similarity index 60% rename from lib_rend/ivas_CQMFHuff.h rename to lib_rend/ivas_lcld_tables.h index a4c28a3bac..ad2a836f49 100644 --- a/lib_rend/ivas_CQMFHuff.h +++ b/lib_rend/ivas_lcld_tables.h @@ -29,19 +29,97 @@ the United Nations Convention on Contracts on the International Sales of Goods. *******************************************************************************************************/ - -#ifndef _IVAS_CQMF_HUFF_H_ -#define _IVAS_CQMF_HUFF_H_ +#ifndef _IVAS_TABLES_H_ +#define _IVAS_TABLES_H_ #ifdef __cplusplus extern "C" { #endif - -#include "options.h" -#include "ivas_Tables.h" -#include // For NULL #include +#include // For NULL +#include "options.h" + +#ifndef M_PI + +#define M_PI 3.14159265358979323846264338327950288f + +#endif + +#define CQMF_BLOCKS_PER_FRAME ( 16 ) +#define CQMF_MAX_BLOCKS_PER_FRAME ( 16 ) +#define CQMF_BANDS ( 60 ) + +#define MAX_BANDS ( 23 ) +#define MAX_BANDS_48 ( 23 ) + + extern const int32_t c_aiBandwidths48[MAX_BANDS_48]; // move this + + +#define ENV_MIN ( -64 ) +#define ENV_MAX ( 64 ) + +#define ENV0_BITS ( 7 ) + +#define ENV_DELTA_MIN ( -32 ) +#define ENV_DELTA_MAX ( 31 ) + +#define ENV_RECONSTRUCT_TABLE_SIZE ( 129 ) + +#define ENV_RECONSTRUCT_TABLE_CENTER ( 64 ) + +#define MIN_ALLOC ( 0 ) +#define MAX_ALLOC ( 31 ) + +#define ALLOC_OFFSET_SCALE ( 8 ) + +#define ALLOC_OFFSET_BITS ( 8 ) + +#define MIN_ALLOC_OFFSET ( -128 ) +#define MAX_ALLOC_OFFSET ( 127 ) +#ifdef ROM_TO_RAM +#define READ_LENGTH ( 4 ) +#endif + +#define ALLOC_TABLE_SIZE ( 32 ) + +#ifndef _PI_ +#define _PI_ ( 3.14159265358979f ) +#endif +#define PRED_MAX_VAL ( 12 ) +#define PRED_MIN_VAL ( -PRED_MAX_VAL ) +#define PRED_QUANT_FACTOR ( (float) PRED_MAX_VAL ) +#define PRED_BAND0_BITS ( 5 ) + +#define PHASE_MAX_VAL ( 12 ) +#define PHASE_MIN_VAL ( -PHASE_MAX_VAL ) +#define PHASE_QUANT_FACTOR ( (float) PHASE_MAX_VAL / _PI_ ) +#define PHASE_DIFF_DIM ( 2 ) +#define PHASE_BAND0_BITS ( 5 ) + +#define SIMPLE_PHASE_MAX_VAL ( 3 ) +#define SIMPLE_PHASE_MIN_VAL ( 0 ) +#define SIMPLE_PHASE_BITS ( 2 ) +#define SIMPLE_PHASE_QUANT_FACTOR ( 2.0f / _PI_ ) + +#define TON_QUOTA_ABS_THRESHOLD ( 8.0f ) +#define TON_QUOTA_INC_THRESHOLD ( 4.0f ) + +#define LOG_ADD_TABLE_LENGTH ( 512 ) + +#define PERCEPTUAL_MODEL_SCALE ( 64 ) + +#define PERCEPTUAL_MODEL_SCALE_SHIFT ( 6 ) + +#define PERCEPTUAL_MODEL_ALPHA_SCALE ( 614 ) + +#define PERCEPTUAL_MODEL_ALPHA_INV_SCALE ( 6827 ) + +#define PERCEPTUAL_MODEL_ALPHA_SHIFT ( 11 ) + +#define PERCEPTUAL_MODEL_SLGAIN_SHIFT ( 8 ) //(4) + +#define MAX_BANDS_48 ( 23 ) //#define USE_DEMOD_TABLES @@ -53,383 +131,410 @@ extern "C" #define HUFF_DEC_TABLE_SIZE ( 16 ) #endif + extern const float c_afRotRealImag[PRED_MAX_VAL - PRED_MIN_VAL + 1][2]; + extern const float c_afRotRealImagSimple[SIMPLE_PHASE_MAX_VAL + 1][2]; + extern const int32_t c_aiDefaultTheta48[MAX_BANDS_48]; - extern const uint32_t c_aauiCQMFHuffEnc1[16][2]; + extern const float c_afScaleFactor[ALLOC_TABLE_SIZE]; + + extern const float c_afInvScaleFactor[ALLOC_TABLE_SIZE]; + + extern const float c_afRMSEnvReconstructTable[ENV_RECONSTRUCT_TABLE_SIZE]; + + extern const int32_t c_aiQuantMaxValues[ALLOC_TABLE_SIZE]; + + extern const int32_t c_aiHuffmanDim[ALLOC_TABLE_SIZE]; + + extern const int32_t c_aiHuffmanMod[ALLOC_TABLE_SIZE]; + + extern const int32_t c_aiHuffmanSize[ALLOC_TABLE_SIZE]; + + extern const int32_t c_aiLogAddTable[LOG_ADD_TABLE_LENGTH]; + extern const int32_t c_aiBandwidthAdjust48[MAX_BANDS_48]; + extern const int32_t c_aiAbsoluteThresh48[MAX_BANDS_48]; + extern const int32_t c_aiDefaultTheta48[MAX_BANDS_48]; + extern const int32_t c_aaiSpreadFunction48[MAX_BANDS_48 * MAX_BANDS_48]; #ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffEnc1[16][2]; + + extern const uint32_t c_aauiCQMFHuffDec1[3][16]; -#endif + extern const uint32_t c_aauiCQMFHuffEnc2[16][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec2[3][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc3[25][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec3[10][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc4[36][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec4[5][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc5[36][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec5[10][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc6[49][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec6[7][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc7[64][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec7[25][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc8[81][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec8[16][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc9[100][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec9[22][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc10[169][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec10[45][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc11[196][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec11[50][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc12[289][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec12[76][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc13[324][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec13[89][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc14[400][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec14[53][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc15[576][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec15[73][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc16[729][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec16[85][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc17[729][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec17[93][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc18[28][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec18[6][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc19[29][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec19[6][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc20[32][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec20[6][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc21[37][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec21[7][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc22[39][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec22[9][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc23[46][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec23[12][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc24[55][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec24[17][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc25[65][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec25[19][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc26[77][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec26[26][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc27[91][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec27[28][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc28[109][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec28[30][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc29[129][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec29[34][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc30[153][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec30[39][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc31[181][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec31[43][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc33[16][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec33[2][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc34[16][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec34[2][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc35[25][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec35[9][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc36[36][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec36[7][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc37[36][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec37[4][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc38[49][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec38[22][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc39[64][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec39[12][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc40[81][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec40[36][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc41[100][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec41[16][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc42[169][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec42[28][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc43[196][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec43[32][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc44[289][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec44[27][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc45[324][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec45[50][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc46[400][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec46[61][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc47[576][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec47[87][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc48[729][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec48[110][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc49[729][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec49[113][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc50[28][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec50[6][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc51[29][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec51[6][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc52[32][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec52[7][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc53[37][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec53[9][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc54[39][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec54[9][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc55[46][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec55[10][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc56[55][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec56[12][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc57[65][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec57[14][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc58[77][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec58[17][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc59[91][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec59[20][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc60[109][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec60[24][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc61[129][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec61[33][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc62[153][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec62[41][16]; -#endif extern const uint32_t c_aauiCQMFHuffEnc63[181][2]; -#ifndef ROM_TO_RAM + extern const uint32_t c_aauiCQMFHuffDec63[39][16]; -#endif + extern const uint32_t ( *c_apauiHuffEncTabels[2 * ALLOC_TABLE_SIZE] )[2]; -#ifndef ROM_TO_RAM + extern const uint32_t ( *c_apauiHuffDecTables[2 * ALLOC_TABLE_SIZE] )[HUFF_DEC_TABLE_SIZE]; #else +extern const uint16_t c_aauiCQMFHuffEnc1[16][2]; +extern const uint16_t c_aauiCQMFHuffEnc2[16][2]; +extern const uint16_t c_aauiCQMFHuffEnc3[25][2]; +extern const uint16_t c_aauiCQMFHuffEnc4[36][2]; +extern const uint16_t c_aauiCQMFHuffEnc5[36][2]; +extern const uint16_t c_aauiCQMFHuffEnc6[49][2]; +extern const uint16_t c_aauiCQMFHuffEnc7[64][2]; +extern const uint16_t c_aauiCQMFHuffEnc8[81][2]; +extern const uint16_t c_aauiCQMFHuffEnc9[100][2]; +extern const uint16_t c_aauiCQMFHuffEnc10[169][2]; +extern const uint16_t c_aauiCQMFHuffEnc11[196][2]; +extern const uint16_t c_aauiCQMFHuffEnc12[289][2]; +extern const uint16_t c_aauiCQMFHuffEnc13[324][2]; +extern const uint16_t c_aauiCQMFHuffEnc14[400][2]; +extern const uint16_t c_aauiCQMFHuffEnc15[576][2]; +extern const uint16_t c_aauiCQMFHuffEnc16[729][2]; +extern const uint16_t c_aauiCQMFHuffEnc17[729][2]; +extern const uint16_t c_aauiCQMFHuffEnc18[28][2]; +extern const uint16_t c_aauiCQMFHuffEnc19[29][2]; +extern const uint16_t c_aauiCQMFHuffEnc20[32][2]; +extern const uint16_t c_aauiCQMFHuffEnc21[37][2]; +extern const uint16_t c_aauiCQMFHuffEnc22[39][2]; +extern const uint16_t c_aauiCQMFHuffEnc23[46][2]; +extern const uint16_t c_aauiCQMFHuffEnc24[55][2]; +extern const uint16_t c_aauiCQMFHuffEnc25[65][2]; +extern const uint16_t c_aauiCQMFHuffEnc26[77][2]; +extern const uint16_t c_aauiCQMFHuffEnc27[91][2]; +extern const uint16_t c_aauiCQMFHuffEnc28[109][2]; +extern const uint16_t c_aauiCQMFHuffEnc29[129][2]; +extern const uint16_t c_aauiCQMFHuffEnc30[153][2]; +extern const uint16_t c_aauiCQMFHuffEnc31[181][2]; +extern const uint16_t c_aauiCQMFHuffEnc33[16][2]; +extern const uint16_t c_aauiCQMFHuffEnc34[16][2]; +extern const uint16_t c_aauiCQMFHuffEnc35[25][2]; +extern const uint16_t c_aauiCQMFHuffEnc36[36][2]; +extern const uint16_t c_aauiCQMFHuffEnc37[36][2]; +extern const uint16_t c_aauiCQMFHuffEnc38[49][2]; +extern const uint16_t c_aauiCQMFHuffEnc39[64][2]; +extern const uint16_t c_aauiCQMFHuffEnc40[81][2]; +extern const uint16_t c_aauiCQMFHuffEnc41[100][2]; +extern const uint16_t c_aauiCQMFHuffEnc42[169][2]; +extern const uint16_t c_aauiCQMFHuffEnc43[196][2]; +extern const uint16_t c_aauiCQMFHuffEnc44[289][2]; +extern const uint16_t c_aauiCQMFHuffEnc45[324][2]; +extern const uint16_t c_aauiCQMFHuffEnc46[400][2]; +extern const uint16_t c_aauiCQMFHuffEnc47[576][2]; +extern const uint16_t c_aauiCQMFHuffEnc48[729][2]; +extern const uint16_t c_aauiCQMFHuffEnc49[729][2]; +extern const uint16_t c_aauiCQMFHuffEnc50[28][2]; +extern const uint16_t c_aauiCQMFHuffEnc51[29][2]; +extern const uint16_t c_aauiCQMFHuffEnc52[32][2]; +extern const uint16_t c_aauiCQMFHuffEnc53[37][2]; +extern const uint16_t c_aauiCQMFHuffEnc54[39][2]; +extern const uint16_t c_aauiCQMFHuffEnc55[46][2]; +extern const uint16_t c_aauiCQMFHuffEnc56[55][2]; +extern const uint16_t c_aauiCQMFHuffEnc57[65][2]; +extern const uint16_t c_aauiCQMFHuffEnc58[77][2]; +extern const uint16_t c_aauiCQMFHuffEnc59[91][2]; +extern const uint16_t c_aauiCQMFHuffEnc60[109][2]; +extern const uint16_t c_aauiCQMFHuffEnc61[129][2]; +extern const uint16_t c_aauiCQMFHuffEnc62[153][2]; +extern const uint16_t c_aauiCQMFHuffEnc63[181][2]; +extern const uint16_t ( *c_apauiHuffEncTabels[2 * ALLOC_TABLE_SIZE] )[2]; extern const uint32_t num_row_aauiCQMFHuff[2 * ALLOC_TABLE_SIZE]; #endif @@ -471,8 +576,26 @@ extern const uint32_t num_row_aauiCQMFHuff[2 * ALLOC_TABLE_SIZE]; extern const int32_t ( *c_apaiDemodTables[ALLOC_TABLE_SIZE] )[2]; #endif + extern const uint32_t c_aaiRMSEnvHuffEnc[64][2]; + + extern const uint32_t c_aaiRMSEnvHuffDec[13][HUFF_DEC_TABLE_SIZE]; + + void PerceptualModel( const int32_t iMaxQuantBands, + const int32_t *piRMSEnvelope, + int32_t *piExcitation, + int32_t *piSMR ); + + void PerceptualModelStereo( const int32_t iMaxQuantBands, + const int32_t *piMSFlags, + const int32_t *piRMSEnvelope0, + const int32_t *piRMSEnvelope1, + int32_t *piExcitation0, + int32_t *piExcitation1, + int32_t *piSMR0, + int32_t *piSMR1 ); + #ifdef __cplusplus } #endif -#endif /* _CQMF_HUFF_H_ */ +#endif /* _TABLES_H_ */ -- GitLab From 8e906a8572a83d4187b90a31a963d7e7afbf23d1 Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Thu, 4 May 2023 17:29:22 +0530 Subject: [PATCH 24/31] Clang format fix & readdition of ivas_PerceptualModel.h --- Workspace_msvc/lib_rend.vcxproj | 1 + lib_rend/ivas_CQMFDecoder.c | 5 +- lib_rend/ivas_CQMFEncoder.c | 9 +- lib_rend/ivas_PerceptualModel.c | 2 +- lib_rend/ivas_PerceptualModel.h | 75 + lib_rend/ivas_lcld_tables.c | 55914 ++++++++++++++++++++++++++++-- lib_rend/ivas_lcld_tables.h | 36 +- 7 files changed, 52194 insertions(+), 3848 deletions(-) create mode 100644 lib_rend/ivas_PerceptualModel.h diff --git a/Workspace_msvc/lib_rend.vcxproj b/Workspace_msvc/lib_rend.vcxproj index 423c250c03..cf98947589 100644 --- a/Workspace_msvc/lib_rend.vcxproj +++ b/Workspace_msvc/lib_rend.vcxproj @@ -244,6 +244,7 @@ + diff --git a/lib_rend/ivas_CQMFDecoder.c b/lib_rend/ivas_CQMFDecoder.c index 5a5888fa09..0c152e95e3 100644 --- a/lib_rend/ivas_CQMFDecoder.c +++ b/lib_rend/ivas_CQMFDecoder.c @@ -40,6 +40,7 @@ Nations Convention on Contracts on the International Sales of Goods. #ifdef SPLIT_REND_WITH_HEAD_ROT #include "ivas_NoiseGen.h" +#include "ivas_PerceptualModel.h" #include "ivas_lcld_tables.h" #include "ivas_cldfb_codec_bitstream.h" #include "prot.h" @@ -285,8 +286,8 @@ static void CreateDecodeTable( CQMFDecoder *psCQMFDecoder, int32_t num, const ui { ppsort_enc_table[n] = (uint32_t *) malloc( 3 * sizeof( int32_t ) ); - ppsort_enc_table[n][0] = (uint32_t)ppuiEncTable[n][0]; - ppsort_enc_table[n][1] = (uint32_t)ppuiEncTable[n][1]; + ppsort_enc_table[n][0] = (uint32_t) ppuiEncTable[n][0]; + ppsort_enc_table[n][1] = (uint32_t) ppuiEncTable[n][1]; ppsort_enc_table[n][2] = (uint32_t) n; } diff --git a/lib_rend/ivas_CQMFEncoder.c b/lib_rend/ivas_CQMFEncoder.c index 05c992516e..82bcf6879a 100644 --- a/lib_rend/ivas_CQMFEncoder.c +++ b/lib_rend/ivas_CQMFEncoder.c @@ -40,6 +40,7 @@ #include "ivas_lcld_tables.h" #include "prot.h" #include "ivas_RMSEnvGrouping.h" +#include "ivas_PerceptualModel.h" #include "ivas_cldfb_codec_bitstream.h" #include "ivas_prot_rend.h" #ifdef ENABLE_MS_PRED @@ -1807,11 +1808,11 @@ static int32_t WriteCQMFData( const int32_t iNumGroups, if ( iAlloc > 0 ) { #ifndef ROM_TO_RAM - const uint32_t(*pauiHuffmanTable)[2] = NULL; - const uint32_t(*pauiHuffmanTableDPCM)[2] = NULL; + const uint32_t( *pauiHuffmanTable )[2] = NULL; + const uint32_t( *pauiHuffmanTableDPCM )[2] = NULL; #else - const uint16_t(*pauiHuffmanTable)[2] = NULL; - const uint16_t(*pauiHuffmanTableDPCM)[2] = NULL; + const uint16_t( *pauiHuffmanTable )[2] = NULL; + const uint16_t( *pauiHuffmanTableDPCM )[2] = NULL; #endif // pauiHuffmanTable = GetHuffEncTable(iAlloc); pauiHuffmanTable = c_apauiHuffEncTabels[iAlloc]; diff --git a/lib_rend/ivas_PerceptualModel.c b/lib_rend/ivas_PerceptualModel.c index 2f0072ee97..131ca8af0d 100644 --- a/lib_rend/ivas_PerceptualModel.c +++ b/lib_rend/ivas_PerceptualModel.c @@ -31,7 +31,7 @@ *******************************************************************************************************/ #include "options.h" #ifdef SPLIT_REND_WITH_HEAD_ROT -#include "ivas_lcld_tables.h" +#include "ivas_PerceptualModel.h" #include "prot.h" #include "ivas_prot_rend.h" #include diff --git a/lib_rend/ivas_PerceptualModel.h b/lib_rend/ivas_PerceptualModel.h new file mode 100644 index 0000000000..fdd1027623 --- /dev/null +++ b/lib_rend/ivas_PerceptualModel.h @@ -0,0 +1,75 @@ +/****************************************************************************************************** + + (C) 2022 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +#ifndef _IVAS_PERCEPTUAL_MODEL_H_ +#define _IVAS_PERCEPTUAL_MODEL_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif +#include + +#define LOG_ADD_TABLE_LENGTH (512) +#define PERCEPTUAL_MODEL_SCALE (64) +#define PERCEPTUAL_MODEL_SCALE_SHIFT (6) +#define PERCEPTUAL_MODEL_ALPHA_SCALE (614) +#define PERCEPTUAL_MODEL_ALPHA_INV_SCALE (6827) +#define PERCEPTUAL_MODEL_ALPHA_SHIFT (11) +#define PERCEPTUAL_MODEL_SLGAIN_SHIFT (8)//(4) +#define MAX_BANDS_48 ( 23 ) + + extern const int32_t c_aiLogAddTable[LOG_ADD_TABLE_LENGTH]; + extern const int32_t c_aiBandwidthAdjust48[MAX_BANDS_48]; + extern const int32_t c_aiAbsoluteThresh48[MAX_BANDS_48]; + extern const int32_t c_aiDefaultTheta48[MAX_BANDS_48]; + extern const int32_t c_aaiSpreadFunction48[MAX_BANDS_48 * MAX_BANDS_48]; + + extern void PerceptualModel(const int32_t iMaxQuantBands, + const int32_t *piRMSEnvelope, + int32_t *piExcitation, + int32_t *piSMR); + + extern void PerceptualModelStereo(const int32_t iMaxQuantBands, + const int32_t *piMSFlags, + const int32_t *piRMSEnvelope0, + const int32_t *piRMSEnvelope1, + int32_t *piExcitation0, + int32_t *piExcitation1, + int32_t *piSMR0, + int32_t *piSMR1); + +#ifdef __cplusplus +} +#endif + +#endif /* _PERCEPTUAL_MODEL_H_ */ diff --git a/lib_rend/ivas_lcld_tables.c b/lib_rend/ivas_lcld_tables.c index 7afb33a184..834e0536af 100644 --- a/lib_rend/ivas_lcld_tables.c +++ b/lib_rend/ivas_lcld_tables.c @@ -37,47 +37,71 @@ #include "wmc_auto.h" #include #include "prot.h" +#include "ivas_PerceptualModel.h" /* clang-format off */ + const float c_afRotRealImagSimple[SIMPLE_PHASE_MAX_VAL + 1][2] = { - {1.0f, 0.0f}, /* zero */ - {0.0f, 1.0f}, /* pi/2 */ - {-1.0f, 0.0f}, /* pi */ - {0.0f, -1.0f}, /* 3*pi/2 */ + { 1.0f, 0.0f }, /* zero */ + { 0.0f, 1.0f }, /* pi/2 */ + { -1.0f, 0.0f }, /* pi */ + { 0.0f, -1.0f }, /* 3*pi/2 */ }; /* phi = (-12:12)'/12 *pi; tmp = [cos(phi),sin(phi)]; tmp = tmp';sprintf('{%.8ff, %.8ff},\n',tmp(:)) */ const float c_afRotRealImag[PHASE_MAX_VAL - PHASE_MIN_VAL + 1][2] = { - {-1.00000000f, -0.00000000f}, - {-0.96592583f, -0.25881905f}, - {-0.86602540f, -0.50000000f}, - {-0.70710678f, -0.70710678f}, - {-0.50000000f, -0.86602540f}, - {-0.25881905f, -0.96592583f}, - {0.00000000f, -1.00000000f}, - {0.25881905f, -0.96592583f}, - {0.50000000f, -0.86602540f}, - {0.70710678f, -0.70710678f}, - {0.86602540f, -0.50000000f}, - {0.96592583f, -0.25881905f}, - {1.00000000f, 0.00000000f}, - {0.96592583f, 0.25881905f}, - {0.86602540f, 0.50000000f}, - {0.70710678f, 0.70710678f}, - {0.50000000f, 0.86602540f}, - {0.25881905f, 0.96592583f}, - {0.00000000f, 1.00000000f}, - {-0.25881905f, 0.96592583f}, - {-0.50000000f, 0.86602540f}, - {-0.70710678f, 0.70710678f}, - {-0.86602540f, 0.50000000f}, - {-0.96592583f, 0.25881905f}, - {-1.00000000f, 0.00000000f} + { -1.00000000f, -0.00000000f }, + { -0.96592583f, -0.25881905f }, + { -0.86602540f, -0.50000000f }, + { -0.70710678f, -0.70710678f }, + { -0.50000000f, -0.86602540f }, + { -0.25881905f, -0.96592583f }, + { 0.00000000f, -1.00000000f }, + { 0.25881905f, -0.96592583f }, + { 0.50000000f, -0.86602540f }, + { 0.70710678f, -0.70710678f }, + { 0.86602540f, -0.50000000f }, + { 0.96592583f, -0.25881905f }, + { 1.00000000f, 0.00000000f }, + { 0.96592583f, 0.25881905f }, + { 0.86602540f, 0.50000000f }, + { 0.70710678f, 0.70710678f }, + { 0.50000000f, 0.86602540f }, + { 0.25881905f, 0.96592583f }, + { 0.00000000f, 1.00000000f }, + { -0.25881905f, 0.96592583f }, + { -0.50000000f, 0.86602540f }, + { -0.70710678f, 0.70710678f }, + { -0.86602540f, 0.50000000f }, + { -0.96592583f, 0.25881905f }, + { -1.00000000f, 0.00000000f } }; /* Move this to perceptual model ? */ const int32_t c_aiBandwidths48[MAX_BANDS_48] = { - 1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,4,6,6,7,10, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 4, + 6, + 6, + 7, + 10, }; @@ -152,80 +176,579 @@ const float c_afInvScaleFactor[ALLOC_TABLE_SIZE] = { }; const float c_afRMSEnvReconstructTable[ENV_RECONSTRUCT_TABLE_SIZE] = { - 2.32830644e-10f, 3.29272254e-10f, 4.65661287e-10f, 6.58544508e-10f, 9.31322575e-10f, 1.31708902e-09f, 1.86264515e-09f, 2.63417803e-09f, - 3.72529030e-09f, 5.26835606e-09f, 7.45058060e-09f, 1.05367121e-08f, 1.49011612e-08f, 2.10734243e-08f, 2.98023224e-08f, 4.21468485e-08f, - 5.96046448e-08f, 8.42936970e-08f, 1.19209290e-07f, 1.68587394e-07f, 2.38418579e-07f, 3.37174788e-07f, 4.76837158e-07f, 6.74349576e-07f, - 9.53674316e-07f, 1.34869915e-06f, 1.90734863e-06f, 2.69739830e-06f, 3.81469727e-06f, 5.39479661e-06f, 7.62939453e-06f, 1.07895932e-05f, - 1.52587891e-05f, 2.15791864e-05f, 3.05175781e-05f, 4.31583729e-05f, 6.10351562e-05f, 8.63167458e-05f, 1.22070312e-04f, 1.72633492e-04f, - 2.44140625e-04f, 3.45266983e-04f, 4.88281250e-04f, 6.90533966e-04f, 9.76562500e-04f, 1.38106793e-03f, 1.95312500e-03f, 2.76213586e-03f, - 3.90625000e-03f, 5.52427173e-03f, 7.81250000e-03f, 1.10485435e-02f, 1.56250000e-02f, 2.20970869e-02f, 3.12500000e-02f, 4.41941738e-02f, - 6.25000000e-02f, 8.83883476e-02f, 1.25000000e-01f, 1.76776695e-01f, 2.50000000e-01f, 3.53553391e-01f, 5.00000000e-01f, 7.07106781e-01f, - 1.00000000e+00f, 1.41421356e+00f, 2.00000000e+00f, 2.82842712e+00f, 4.00000000e+00f, 5.65685425e+00f, 8.00000000e+00f, 1.13137085e+01f, - 1.60000000e+01f, 2.26274170e+01f, 3.20000000e+01f, 4.52548340e+01f, 6.40000000e+01f, 9.05096680e+01f, 1.28000000e+02f, 1.81019336e+02f, - 2.56000000e+02f, 3.62038672e+02f, 5.12000000e+02f, 7.24077344e+02f, 1.02400000e+03f, 1.44815469e+03f, 2.04800000e+03f, 2.89630938e+03f, - 4.09600000e+03f, 5.79261875e+03f, 8.19200000e+03f, 1.15852375e+04f, 1.63840000e+04f, 2.31704750e+04f, 3.27680000e+04f, 4.63409500e+04f, - 6.55360000e+04f, 9.26819000e+04f, 1.31072000e+05f, 1.85363800e+05f, 2.62144000e+05f, 3.70727600e+05f, 5.24288000e+05f, 7.41455200e+05f, - 1.04857600e+06f, 1.48291040e+06f, 2.09715200e+06f, 2.96582080e+06f, 4.19430400e+06f, 5.93164160e+06f, 8.38860800e+06f, 1.18632832e+07f, - 1.67772160e+07f, 2.37265664e+07f, 3.35544320e+07f, 4.74531328e+07f, 6.71088640e+07f, 9.49062656e+07f, 1.34217728e+08f, 1.89812531e+08f, - 2.68435456e+08f, 3.79625062e+08f, 5.36870912e+08f, 7.59250125e+08f, 1.07374182e+09f, 1.51850025e+09f, 2.14748365e+09f, 3.03700050e+09f, + 2.32830644e-10f, + 3.29272254e-10f, + 4.65661287e-10f, + 6.58544508e-10f, + 9.31322575e-10f, + 1.31708902e-09f, + 1.86264515e-09f, + 2.63417803e-09f, + 3.72529030e-09f, + 5.26835606e-09f, + 7.45058060e-09f, + 1.05367121e-08f, + 1.49011612e-08f, + 2.10734243e-08f, + 2.98023224e-08f, + 4.21468485e-08f, + 5.96046448e-08f, + 8.42936970e-08f, + 1.19209290e-07f, + 1.68587394e-07f, + 2.38418579e-07f, + 3.37174788e-07f, + 4.76837158e-07f, + 6.74349576e-07f, + 9.53674316e-07f, + 1.34869915e-06f, + 1.90734863e-06f, + 2.69739830e-06f, + 3.81469727e-06f, + 5.39479661e-06f, + 7.62939453e-06f, + 1.07895932e-05f, + 1.52587891e-05f, + 2.15791864e-05f, + 3.05175781e-05f, + 4.31583729e-05f, + 6.10351562e-05f, + 8.63167458e-05f, + 1.22070312e-04f, + 1.72633492e-04f, + 2.44140625e-04f, + 3.45266983e-04f, + 4.88281250e-04f, + 6.90533966e-04f, + 9.76562500e-04f, + 1.38106793e-03f, + 1.95312500e-03f, + 2.76213586e-03f, + 3.90625000e-03f, + 5.52427173e-03f, + 7.81250000e-03f, + 1.10485435e-02f, + 1.56250000e-02f, + 2.20970869e-02f, + 3.12500000e-02f, + 4.41941738e-02f, + 6.25000000e-02f, + 8.83883476e-02f, + 1.25000000e-01f, + 1.76776695e-01f, + 2.50000000e-01f, + 3.53553391e-01f, + 5.00000000e-01f, + 7.07106781e-01f, + 1.00000000e+00f, + 1.41421356e+00f, + 2.00000000e+00f, + 2.82842712e+00f, + 4.00000000e+00f, + 5.65685425e+00f, + 8.00000000e+00f, + 1.13137085e+01f, + 1.60000000e+01f, + 2.26274170e+01f, + 3.20000000e+01f, + 4.52548340e+01f, + 6.40000000e+01f, + 9.05096680e+01f, + 1.28000000e+02f, + 1.81019336e+02f, + 2.56000000e+02f, + 3.62038672e+02f, + 5.12000000e+02f, + 7.24077344e+02f, + 1.02400000e+03f, + 1.44815469e+03f, + 2.04800000e+03f, + 2.89630938e+03f, + 4.09600000e+03f, + 5.79261875e+03f, + 8.19200000e+03f, + 1.15852375e+04f, + 1.63840000e+04f, + 2.31704750e+04f, + 3.27680000e+04f, + 4.63409500e+04f, + 6.55360000e+04f, + 9.26819000e+04f, + 1.31072000e+05f, + 1.85363800e+05f, + 2.62144000e+05f, + 3.70727600e+05f, + 5.24288000e+05f, + 7.41455200e+05f, + 1.04857600e+06f, + 1.48291040e+06f, + 2.09715200e+06f, + 2.96582080e+06f, + 4.19430400e+06f, + 5.93164160e+06f, + 8.38860800e+06f, + 1.18632832e+07f, + 1.67772160e+07f, + 2.37265664e+07f, + 3.35544320e+07f, + 4.74531328e+07f, + 6.71088640e+07f, + 9.49062656e+07f, + 1.34217728e+08f, + 1.89812531e+08f, + 2.68435456e+08f, + 3.79625062e+08f, + 5.36870912e+08f, + 7.59250125e+08f, + 1.07374182e+09f, + 1.51850025e+09f, + 2.14748365e+09f, + 3.03700050e+09f, 4.29496730e+09f, }; const int32_t c_aiQuantMaxValues[ALLOC_TABLE_SIZE] = { - 0, 3, 3, 4, 5, 5, 6, 7, - 8, 9, 12, 13, 16, 17, 19, 23, - 26, 26, 27, 28, 31, 36, 38, 45, - 54, 64, 76, 90, 108, 128, 152, 180, + 0, + 3, + 3, + 4, + 5, + 5, + 6, + 7, + 8, + 9, + 12, + 13, + 16, + 17, + 19, + 23, + 26, + 26, + 27, + 28, + 31, + 36, + 38, + 45, + 54, + 64, + 76, + 90, + 108, + 128, + 152, + 180, }; const int32_t c_aiHuffmanDim[ALLOC_TABLE_SIZE] = { - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, }; const int32_t c_aiHuffmanMod[ALLOC_TABLE_SIZE] = { - 0, 4, 4, 5, 6, 6, 7, 8, - 9, 10, 13, 14, 17, 18, 20, 24, - 27, 27, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, + 0, + 4, + 4, + 5, + 6, + 6, + 7, + 8, + 9, + 10, + 13, + 14, + 17, + 18, + 20, + 24, + 27, + 27, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, }; const int32_t c_aiHuffmanSize[ALLOC_TABLE_SIZE] = { - 1, 16, 16, 25, 36, 36, 49, 64, - 81, 100, 169, 196, 289, 324, 400, 576, - 729, 729, 28, 29, 32, 37, 39, 46, - 55, 65, 77, 91, 109, 129, 153, 181, + 1, + 16, + 16, + 25, + 36, + 36, + 49, + 64, + 81, + 100, + 169, + 196, + 289, + 324, + 400, + 576, + 729, + 729, + 28, + 29, + 32, + 37, + 39, + 46, + 55, + 65, + 77, + 91, + 109, + 129, + 153, + 181, }; -const uint32_t c_aaiRMSEnvHuffEnc[64][2] = -{ - {0x0014, 0x0000}, {0x0014, 0x0001}, {0x0014, 0x0002}, {0x0014, 0x0003}, {0x0014, 0x0004}, {0x0014, 0x0005}, {0x0013, 0x0003}, {0x0013, 0x0004}, - {0x0013, 0x0005}, {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0012, 0x000b}, {0x000d, 0x0002}, {0x000e, 0x0001}, {0x000e, 0x0002}, {0x000d, 0x0003}, - {0x000b, 0x0002}, {0x000a, 0x0003}, {0x000a, 0x0004}, {0x000a, 0x0005}, {0x0009, 0x0004}, {0x0009, 0x0005}, {0x0009, 0x0006}, {0x0008, 0x0005}, - {0x0008, 0x0006}, {0x0007, 0x0004}, {0x0006, 0x0003}, {0x0006, 0x0004}, {0x0005, 0x0003}, {0x0004, 0x0002}, {0x0003, 0x0002}, {0x0002, 0x0002}, - {0x0002, 0x0003}, {0x0003, 0x0003}, {0x0004, 0x0003}, {0x0006, 0x0005}, {0x0007, 0x0005}, {0x0008, 0x0007}, {0x0009, 0x0007}, {0x0009, 0x0008}, - {0x0009, 0x0009}, {0x000a, 0x0006}, {0x000a, 0x0007}, {0x000b, 0x0003}, {0x000c, 0x0002}, {0x000c, 0x0003}, {0x000b, 0x0004}, {0x000b, 0x0005}, - {0x000e, 0x0003}, {0x0010, 0x0003}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0013, 0x000c}, {0x0013, 0x000d}, - {0x0013, 0x000e}, {0x0013, 0x000f}, {0x0013, 0x0010}, {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0013, 0x0014}, {0x0013, 0x0015}, +const uint32_t c_aaiRMSEnvHuffEnc[64][2] = { + { 0x0014, 0x0000 }, + { 0x0014, 0x0001 }, + { 0x0014, 0x0002 }, + { 0x0014, 0x0003 }, + { 0x0014, 0x0004 }, + { 0x0014, 0x0005 }, + { 0x0013, 0x0003 }, + { 0x0013, 0x0004 }, + { 0x0013, 0x0005 }, + { 0x0013, 0x0006 }, + { 0x0013, 0x0007 }, + { 0x0012, 0x000b }, + { 0x000d, 0x0002 }, + { 0x000e, 0x0001 }, + { 0x000e, 0x0002 }, + { 0x000d, 0x0003 }, + { 0x000b, 0x0002 }, + { 0x000a, 0x0003 }, + { 0x000a, 0x0004 }, + { 0x000a, 0x0005 }, + { 0x0009, 0x0004 }, + { 0x0009, 0x0005 }, + { 0x0009, 0x0006 }, + { 0x0008, 0x0005 }, + { 0x0008, 0x0006 }, + { 0x0007, 0x0004 }, + { 0x0006, 0x0003 }, + { 0x0006, 0x0004 }, + { 0x0005, 0x0003 }, + { 0x0004, 0x0002 }, + { 0x0003, 0x0002 }, + { 0x0002, 0x0002 }, + { 0x0002, 0x0003 }, + { 0x0003, 0x0003 }, + { 0x0004, 0x0003 }, + { 0x0006, 0x0005 }, + { 0x0007, 0x0005 }, + { 0x0008, 0x0007 }, + { 0x0009, 0x0007 }, + { 0x0009, 0x0008 }, + { 0x0009, 0x0009 }, + { 0x000a, 0x0006 }, + { 0x000a, 0x0007 }, + { 0x000b, 0x0003 }, + { 0x000c, 0x0002 }, + { 0x000c, 0x0003 }, + { 0x000b, 0x0004 }, + { 0x000b, 0x0005 }, + { 0x000e, 0x0003 }, + { 0x0010, 0x0003 }, + { 0x0013, 0x0008 }, + { 0x0013, 0x0009 }, + { 0x0013, 0x000a }, + { 0x0013, 0x000b }, + { 0x0013, 0x000c }, + { 0x0013, 0x000d }, + { 0x0013, 0x000e }, + { 0x0013, 0x000f }, + { 0x0013, 0x0010 }, + { 0x0013, 0x0011 }, + { 0x0013, 0x0012 }, + { 0x0013, 0x0013 }, + { 0x0013, 0x0014 }, + { 0x0013, 0x0015 }, }; -const uint32_t c_aaiRMSEnvHuffDec[13][HUFF_DEC_TABLE_SIZE] = -{ - {0x0002ffff, 0x0001ffff, 0x0000001d, 0x00000022, 0x0001001e, 0x0001001e, 0x00010021, 0x00010021, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x00020020, 0x00020020, 0x00020020, 0x00020020, }, - {0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x00020023, 0x00020023, 0x00020023, 0x00020023, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, }, - {0x0006ffff, 0x0007ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x00000017, 0x00000018, 0x00000025, 0x00010019, 0x00010019, 0x00010024, 0x00010024, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, }, - {0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, }, - {0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, }, - {0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, }, - {0x0009ffff, 0x0008ffff, 0x0000002c, 0x0000002d, 0x00010010, 0x00010010, 0x0001002b, 0x0001002b, 0x0001002e, 0x0001002e, 0x0001002f, 0x0001002f, 0x00020011, 0x00020011, 0x00020011, 0x00020011, }, - {0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00020013, 0x00020013, 0x00020013, 0x00020013, 0x00020029, 0x00020029, 0x00020029, 0x00020029, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, }, - {0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, - {0x000bffff, 0x000cffff, 0x000affff, 0x00000031, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x00020030, 0x00020030, 0x00020030, 0x00020030, }, - {0x0001003a, 0x0001003a, 0x0001003b, 0x0001003b, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, 0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, }, - {0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00010006, 0x00010006, 0x00010007, 0x00010007, 0x00010008, 0x00010008, 0x00010009, 0x00010009, 0x0001000a, 0x0001000a, }, - {0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x00010036, 0x00010036, 0x00010037, 0x00010037, 0x00010038, 0x00010038, 0x00010039, 0x00010039, }, +const uint32_t c_aaiRMSEnvHuffDec[13][HUFF_DEC_TABLE_SIZE] = { + { + 0x0002ffff, + 0x0001ffff, + 0x0000001d, + 0x00000022, + 0x0001001e, + 0x0001001e, + 0x00010021, + 0x00010021, + 0x0002001f, + 0x0002001f, + 0x0002001f, + 0x0002001f, + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020020, + }, + { + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x00020023, + 0x00020023, + 0x00020023, + 0x00020023, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + }, + { + 0x0006ffff, + 0x0007ffff, + 0x0003ffff, + 0x0004ffff, + 0x0005ffff, + 0x00000017, + 0x00000018, + 0x00000025, + 0x00010019, + 0x00010019, + 0x00010024, + 0x00010024, + 0x0002001a, + 0x0002001a, + 0x0002001a, + 0x0002001a, + }, + { + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + }, + { + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + }, + { + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + }, + { + 0x0009ffff, + 0x0008ffff, + 0x0000002c, + 0x0000002d, + 0x00010010, + 0x00010010, + 0x0001002b, + 0x0001002b, + 0x0001002e, + 0x0001002e, + 0x0001002f, + 0x0001002f, + 0x00020011, + 0x00020011, + 0x00020011, + 0x00020011, + }, + { + 0x00020012, + 0x00020012, + 0x00020012, + 0x00020012, + 0x00020013, + 0x00020013, + 0x00020013, + 0x00020013, + 0x00020029, + 0x00020029, + 0x00020029, + 0x00020029, + 0x0002002a, + 0x0002002a, + 0x0002002a, + 0x0002002a, + }, + { + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + }, + { + 0x000bffff, + 0x000cffff, + 0x000affff, + 0x00000031, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x00020030, + 0x00020030, + 0x00020030, + 0x00020030, + }, + { + 0x0001003a, + 0x0001003a, + 0x0001003b, + 0x0001003b, + 0x0001003c, + 0x0001003c, + 0x0001003d, + 0x0001003d, + 0x0001003e, + 0x0001003e, + 0x0001003f, + 0x0001003f, + 0x0002000b, + 0x0002000b, + 0x0002000b, + 0x0002000b, + }, + { + 0x00000000, + 0x00000001, + 0x00000002, + 0x00000003, + 0x00000004, + 0x00000005, + 0x00010006, + 0x00010006, + 0x00010007, + 0x00010007, + 0x00010008, + 0x00010008, + 0x00010009, + 0x00010009, + 0x0001000a, + 0x0001000a, + }, + { + 0x00010032, + 0x00010032, + 0x00010033, + 0x00010033, + 0x00010034, + 0x00010034, + 0x00010035, + 0x00010035, + 0x00010036, + 0x00010036, + 0x00010037, + 0x00010037, + 0x00010038, + 0x00010038, + 0x00010039, + 0x00010039, + }, }; #ifndef ROM_TO_RAM @@ -233,17 +756,81 @@ const uint32_t c_aauiCQMFHuffEnc1[16][2] = #else const uint16_t c_aauiCQMFHuffEnc1[16][2] = #endif -{ - {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0005, 0x0001}, {0x000b, 0x0000}, {0x0002, 0x0001}, {0x0004, 0x0001}, {0x0007, 0x0001}, {0x000b, 0x0001}, - {0x0006, 0x0001}, {0x0008, 0x0001}, {0x000b, 0x0002}, {0x000b, 0x0003}, {0x000b, 0x0004}, {0x000b, 0x0005}, {0x000b, 0x0006}, {0x000b, 0x0007}, -}; + { + { 0x0001, 0x0001 }, + { 0x0003, 0x0001 }, + { 0x0005, 0x0001 }, + { 0x000b, 0x0000 }, + { 0x0002, 0x0001 }, + { 0x0004, 0x0001 }, + { 0x0007, 0x0001 }, + { 0x000b, 0x0001 }, + { 0x0006, 0x0001 }, + { 0x0008, 0x0001 }, + { 0x000b, 0x0002 }, + { 0x000b, 0x0003 }, + { 0x000b, 0x0004 }, + { 0x000b, 0x0005 }, + { 0x000b, 0x0006 }, + { 0x000b, 0x0007 }, + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec1[3][16] = -{ - {0x0001ffff, 0x00000005, 0x00010001, 0x00010001, 0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x0002ffff, 0x00000009, 0x00010006, 0x00010006, 0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, }, - {0x00010003, 0x00010003, 0x00010007, 0x00010007, 0x0001000a, 0x0001000a, 0x0001000b, 0x0001000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, }, +const uint32_t c_aauiCQMFHuffDec1[3][16] = { + { + 0x0001ffff, + 0x00000005, + 0x00010001, + 0x00010001, + 0x00020004, + 0x00020004, + 0x00020004, + 0x00020004, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + }, + { + 0x0002ffff, + 0x00000009, + 0x00010006, + 0x00010006, + 0x00020008, + 0x00020008, + 0x00020008, + 0x00020008, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + }, + { + 0x00010003, + 0x00010003, + 0x00010007, + 0x00010007, + 0x0001000a, + 0x0001000a, + 0x0001000b, + 0x0001000b, + 0x0001000c, + 0x0001000c, + 0x0001000d, + 0x0001000d, + 0x0001000e, + 0x0001000e, + 0x0001000f, + 0x0001000f, + }, }; #endif @@ -252,17 +839,81 @@ const uint32_t c_aauiCQMFHuffEnc2[16][2] = #else const uint16_t c_aauiCQMFHuffEnc2[16][2] = #endif -{ - {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0005, 0x0001}, {0x000c, 0x0000}, {0x0002, 0x0001}, {0x0004, 0x0001}, {0x0007, 0x0001}, {0x000c, 0x0001}, - {0x0006, 0x0001}, {0x0008, 0x0001}, {0x0009, 0x0001}, {0x000c, 0x0002}, {0x000c, 0x0003}, {0x000c, 0x0004}, {0x000c, 0x0005}, {0x000b, 0x0003}, -}; + { + { 0x0001, 0x0001 }, + { 0x0003, 0x0001 }, + { 0x0005, 0x0001 }, + { 0x000c, 0x0000 }, + { 0x0002, 0x0001 }, + { 0x0004, 0x0001 }, + { 0x0007, 0x0001 }, + { 0x000c, 0x0001 }, + { 0x0006, 0x0001 }, + { 0x0008, 0x0001 }, + { 0x0009, 0x0001 }, + { 0x000c, 0x0002 }, + { 0x000c, 0x0003 }, + { 0x000c, 0x0004 }, + { 0x000c, 0x0005 }, + { 0x000b, 0x0003 }, + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec2[3][16] = -{ - {0x0001ffff, 0x00000005, 0x00010001, 0x00010001, 0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x0002ffff, 0x00000009, 0x00010006, 0x00010006, 0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, }, - {0x00000003, 0x00000007, 0x0000000b, 0x0000000c, 0x0000000d, 0x0000000e, 0x0001000f, 0x0001000f, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, }, +const uint32_t c_aauiCQMFHuffDec2[3][16] = { + { + 0x0001ffff, + 0x00000005, + 0x00010001, + 0x00010001, + 0x00020004, + 0x00020004, + 0x00020004, + 0x00020004, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + }, + { + 0x0002ffff, + 0x00000009, + 0x00010006, + 0x00010006, + 0x00020008, + 0x00020008, + 0x00020008, + 0x00020008, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + }, + { + 0x00000003, + 0x00000007, + 0x0000000b, + 0x0000000c, + 0x0000000d, + 0x0000000e, + 0x0001000f, + 0x0001000f, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + }, }; #endif #ifndef ROM_TO_RAM @@ -270,27 +921,217 @@ const uint32_t c_aauiCQMFHuffEnc3[25][2] = #else const uint16_t c_aauiCQMFHuffEnc3[25][2] = #endif -{ - {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000d, 0x0000}, {0x000d, 0x0001}, {0x0002, 0x0001}, {0x0004, 0x0001}, {0x0007, 0x0001}, - {0x000d, 0x0002}, {0x000d, 0x0003}, {0x0006, 0x0002}, {0x0006, 0x0003}, {0x0008, 0x0001}, {0x000d, 0x0004}, {0x000d, 0x0005}, {0x0009, 0x0001}, - {0x000c, 0x0007}, {0x000d, 0x0006}, {0x000d, 0x0007}, {0x000d, 0x0008}, {0x000d, 0x0009}, {0x000d, 0x000a}, {0x000d, 0x000b}, {0x000d, 0x000c}, - {0x000d, 0x000d}, + { + { 0x0001, 0x0001 }, + { 0x0003, 0x0001 }, + { 0x0006, 0x0001 }, + { 0x000d, 0x0000 }, + { 0x000d, 0x0001 }, + { 0x0002, 0x0001 }, + { 0x0004, 0x0001 }, + { 0x0007, 0x0001 }, + { 0x000d, 0x0002 }, + { 0x000d, 0x0003 }, + { 0x0006, 0x0002 }, + { 0x0006, 0x0003 }, + { 0x0008, 0x0001 }, + { 0x000d, 0x0004 }, + { 0x000d, 0x0005 }, + { 0x0009, 0x0001 }, + { 0x000c, 0x0007 }, + { 0x000d, 0x0006 }, + { 0x000d, 0x0007 }, + { 0x000d, 0x0008 }, + { 0x000d, 0x0009 }, + { 0x000d, 0x000a }, + { 0x000d, 0x000b }, + { 0x000d, 0x000c }, + { 0x000d, 0x000d }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec3[10][16] = -{ - {0x0001ffff, 0x00000006, 0x00010001, 0x00010001, 0x00020005, 0x00020005, 0x00020005, 0x00020005, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x0002ffff, 0x0000000c, 0x00010007, 0x00010007, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, }, - {0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x00000010, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, - {0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, }, - {0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, - {0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, - {0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, }, - {0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, }, - {0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, }, - {0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, }, +const uint32_t c_aauiCQMFHuffDec3[10][16] = { + { + 0x0001ffff, + 0x00000006, + 0x00010001, + 0x00010001, + 0x00020005, + 0x00020005, + 0x00020005, + 0x00020005, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + }, + { + 0x0002ffff, + 0x0000000c, + 0x00010007, + 0x00010007, + 0x00020002, + 0x00020002, + 0x00020002, + 0x00020002, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x0002000b, + 0x0002000b, + 0x0002000b, + 0x0002000b, + }, + { + 0x0003ffff, + 0x0004ffff, + 0x0005ffff, + 0x0006ffff, + 0x0007ffff, + 0x0008ffff, + 0x0009ffff, + 0x00000010, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + }, + { + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + }, + { + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + }, + { + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + }, + { + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + }, + { + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + }, + { + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + }, + { + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + }, }; #endif @@ -299,23 +1140,138 @@ const uint32_t c_aauiCQMFHuffEnc4[36][2] = #else const uint16_t c_aauiCQMFHuffEnc4[36][2] = #endif -{ - {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000b, 0x0001}, {0x0010, 0x0000}, {0x0010, 0x0001}, {0x0002, 0x0001}, {0x0004, 0x0001}, - {0x0007, 0x0001}, {0x000a, 0x0001}, {0x0010, 0x0002}, {0x0010, 0x0003}, {0x0006, 0x0002}, {0x0006, 0x0003}, {0x0008, 0x0001}, {0x000e, 0x0006}, - {0x0010, 0x0004}, {0x0010, 0x0005}, {0x000a, 0x0002}, {0x000a, 0x0003}, {0x000e, 0x0007}, {0x0010, 0x0006}, {0x0010, 0x0007}, {0x0010, 0x0008}, - {0x0010, 0x0009}, {0x0010, 0x000a}, {0x0010, 0x000b}, {0x0010, 0x000c}, {0x0010, 0x000d}, {0x0010, 0x000e}, {0x0010, 0x000f}, {0x0010, 0x0010}, - {0x0010, 0x0011}, {0x000f, 0x0009}, {0x000f, 0x000a}, {0x000f, 0x000b}, + { + { 0x0001, 0x0001 }, + { 0x0003, 0x0001 }, + { 0x0006, 0x0001 }, + { 0x000b, 0x0001 }, + { 0x0010, 0x0000 }, + { 0x0010, 0x0001 }, + { 0x0002, 0x0001 }, + { 0x0004, 0x0001 }, + { 0x0007, 0x0001 }, + { 0x000a, 0x0001 }, + { 0x0010, 0x0002 }, + { 0x0010, 0x0003 }, + { 0x0006, 0x0002 }, + { 0x0006, 0x0003 }, + { 0x0008, 0x0001 }, + { 0x000e, 0x0006 }, + { 0x0010, 0x0004 }, + { 0x0010, 0x0005 }, + { 0x000a, 0x0002 }, + { 0x000a, 0x0003 }, + { 0x000e, 0x0007 }, + { 0x0010, 0x0006 }, + { 0x0010, 0x0007 }, + { 0x0010, 0x0008 }, + { 0x0010, 0x0009 }, + { 0x0010, 0x000a }, + { 0x0010, 0x000b }, + { 0x0010, 0x000c }, + { 0x0010, 0x000d }, + { 0x0010, 0x000e }, + { 0x0010, 0x000f }, + { 0x0010, 0x0010 }, + { 0x0010, 0x0011 }, + { 0x000f, 0x0009 }, + { 0x000f, 0x000a }, + { 0x000f, 0x000b }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec4[5][16] = -{ - {0x0001ffff, 0x00000007, 0x00010001, 0x00010001, 0x00020006, 0x00020006, 0x00020006, 0x00020006, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x0002ffff, 0x0000000e, 0x00010008, 0x00010008, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, }, - {0x0004ffff, 0x0003ffff, 0x00010003, 0x00010003, 0x00020009, 0x00020009, 0x00020009, 0x00020009, 0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00020013, 0x00020013, 0x00020013, 0x00020013, }, - {0x0000001f, 0x00000020, 0x00010021, 0x00010021, 0x00010022, 0x00010022, 0x00010023, 0x00010023, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, 0x00020014, 0x00020014, 0x00020014, 0x00020014, }, - {0x00000004, 0x00000005, 0x0000000a, 0x0000000b, 0x00000010, 0x00000011, 0x00000015, 0x00000016, 0x00000017, 0x00000018, 0x00000019, 0x0000001a, 0x0000001b, 0x0000001c, 0x0000001d, 0x0000001e, }, +const uint32_t c_aauiCQMFHuffDec4[5][16] = { + { + 0x0001ffff, + 0x00000007, + 0x00010001, + 0x00010001, + 0x00020006, + 0x00020006, + 0x00020006, + 0x00020006, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + }, + { + 0x0002ffff, + 0x0000000e, + 0x00010008, + 0x00010008, + 0x00020002, + 0x00020002, + 0x00020002, + 0x00020002, + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0002000d, + }, + { + 0x0004ffff, + 0x0003ffff, + 0x00010003, + 0x00010003, + 0x00020009, + 0x00020009, + 0x00020009, + 0x00020009, + 0x00020012, + 0x00020012, + 0x00020012, + 0x00020012, + 0x00020013, + 0x00020013, + 0x00020013, + 0x00020013, + }, + { + 0x0000001f, + 0x00000020, + 0x00010021, + 0x00010021, + 0x00010022, + 0x00010022, + 0x00010023, + 0x00010023, + 0x0002000f, + 0x0002000f, + 0x0002000f, + 0x0002000f, + 0x00020014, + 0x00020014, + 0x00020014, + 0x00020014, + }, + { + 0x00000004, + 0x00000005, + 0x0000000a, + 0x0000000b, + 0x00000010, + 0x00000011, + 0x00000015, + 0x00000016, + 0x00000017, + 0x00000018, + 0x00000019, + 0x0000001a, + 0x0000001b, + 0x0000001c, + 0x0000001d, + 0x0000001e, + }, }; #endif @@ -324,28 +1280,228 @@ const uint32_t c_aauiCQMFHuffEnc5[36][2] = #else const uint16_t c_aauiCQMFHuffEnc5[36][2] = #endif -{ - {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000a, 0x0001}, {0x000f, 0x0003}, {0x0012, 0x0000}, {0x0002, 0x0001}, {0x0004, 0x0001}, - {0x0007, 0x0001}, {0x000b, 0x0001}, {0x0011, 0x0008}, {0x0012, 0x0001}, {0x0006, 0x0002}, {0x0006, 0x0003}, {0x0008, 0x0001}, {0x000c, 0x0001}, - {0x0012, 0x0002}, {0x0012, 0x0003}, {0x000a, 0x0002}, {0x000a, 0x0003}, {0x000d, 0x0001}, {0x0012, 0x0004}, {0x0012, 0x0005}, {0x0012, 0x0006}, - {0x0011, 0x0009}, {0x0011, 0x000a}, {0x0012, 0x0007}, {0x0012, 0x0008}, {0x0012, 0x0009}, {0x0012, 0x000a}, {0x0012, 0x000b}, {0x0012, 0x000c}, - {0x0012, 0x000d}, {0x0012, 0x000e}, {0x0012, 0x000f}, {0x0011, 0x000b}, + { + { 0x0001, 0x0001 }, + { 0x0003, 0x0001 }, + { 0x0006, 0x0001 }, + { 0x000a, 0x0001 }, + { 0x000f, 0x0003 }, + { 0x0012, 0x0000 }, + { 0x0002, 0x0001 }, + { 0x0004, 0x0001 }, + { 0x0007, 0x0001 }, + { 0x000b, 0x0001 }, + { 0x0011, 0x0008 }, + { 0x0012, 0x0001 }, + { 0x0006, 0x0002 }, + { 0x0006, 0x0003 }, + { 0x0008, 0x0001 }, + { 0x000c, 0x0001 }, + { 0x0012, 0x0002 }, + { 0x0012, 0x0003 }, + { 0x000a, 0x0002 }, + { 0x000a, 0x0003 }, + { 0x000d, 0x0001 }, + { 0x0012, 0x0004 }, + { 0x0012, 0x0005 }, + { 0x0012, 0x0006 }, + { 0x0011, 0x0009 }, + { 0x0011, 0x000a }, + { 0x0012, 0x0007 }, + { 0x0012, 0x0008 }, + { 0x0012, 0x0009 }, + { 0x0012, 0x000a }, + { 0x0012, 0x000b }, + { 0x0012, 0x000c }, + { 0x0012, 0x000d }, + { 0x0012, 0x000e }, + { 0x0012, 0x000f }, + { 0x0011, 0x000b }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec5[10][16] = -{ - {0x0001ffff, 0x00000007, 0x00010001, 0x00010001, 0x00020006, 0x00020006, 0x00020006, 0x00020006, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x0002ffff, 0x0000000e, 0x00010008, 0x00010008, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, }, - {0x0003ffff, 0x0000000f, 0x00010009, 0x00010009, 0x00020003, 0x00020003, 0x00020003, 0x00020003, 0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00020013, 0x00020013, 0x00020013, 0x00020013, }, - {0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x0004ffff, 0x0005ffff, 0x00010004, 0x00010004, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, }, - {0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, }, - {0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, }, - {0x00020005, 0x00020005, 0x00020005, 0x00020005, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x00020011, 0x00020011, 0x00020011, 0x00020011, }, - {0x00020015, 0x00020015, 0x00020015, 0x00020015, 0x00020016, 0x00020016, 0x00020016, 0x00020016, 0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, }, - {0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, }, - {0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, }, +const uint32_t c_aauiCQMFHuffDec5[10][16] = { + { + 0x0001ffff, + 0x00000007, + 0x00010001, + 0x00010001, + 0x00020006, + 0x00020006, + 0x00020006, + 0x00020006, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + }, + { + 0x0002ffff, + 0x0000000e, + 0x00010008, + 0x00010008, + 0x00020002, + 0x00020002, + 0x00020002, + 0x00020002, + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0002000d, + }, + { + 0x0003ffff, + 0x0000000f, + 0x00010009, + 0x00010009, + 0x00020003, + 0x00020003, + 0x00020003, + 0x00020003, + 0x00020012, + 0x00020012, + 0x00020012, + 0x00020012, + 0x00020013, + 0x00020013, + 0x00020013, + 0x00020013, + }, + { + 0x0006ffff, + 0x0007ffff, + 0x0008ffff, + 0x0009ffff, + 0x0004ffff, + 0x0005ffff, + 0x00010004, + 0x00010004, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + }, + { + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + }, + { + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + }, + { + 0x00020005, + 0x00020005, + 0x00020005, + 0x00020005, + 0x0002000b, + 0x0002000b, + 0x0002000b, + 0x0002000b, + 0x00020010, + 0x00020010, + 0x00020010, + 0x00020010, + 0x00020011, + 0x00020011, + 0x00020011, + 0x00020011, + }, + { + 0x00020015, + 0x00020015, + 0x00020015, + 0x00020015, + 0x00020016, + 0x00020016, + 0x00020016, + 0x00020016, + 0x00020017, + 0x00020017, + 0x00020017, + 0x00020017, + 0x0002001a, + 0x0002001a, + 0x0002001a, + 0x0002001a, + }, + { + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002001c, + 0x0002001c, + 0x0002001c, + 0x0002001c, + 0x0002001d, + 0x0002001d, + 0x0002001d, + 0x0002001d, + 0x0002001e, + 0x0002001e, + 0x0002001e, + 0x0002001e, + }, + { + 0x0002001f, + 0x0002001f, + 0x0002001f, + 0x0002001f, + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020021, + 0x00020021, + 0x00020021, + 0x00020021, + 0x00020022, + 0x00020022, + 0x00020022, + 0x00020022, + }, }; #endif @@ -354,27 +1510,187 @@ const uint32_t c_aauiCQMFHuffEnc6[49][2] = #else const uint16_t c_aauiCQMFHuffEnc6[49][2] = #endif -{ - {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000a, 0x0001}, {0x0010, 0x0003}, {0x0014, 0x0000}, {0x0014, 0x0001}, {0x0002, 0x0001}, - {0x0004, 0x0001}, {0x0007, 0x0001}, {0x000a, 0x0002}, {0x0010, 0x0004}, {0x0014, 0x0002}, {0x0014, 0x0003}, {0x0006, 0x0002}, {0x0006, 0x0003}, - {0x0008, 0x0001}, {0x000d, 0x0001}, {0x0012, 0x0007}, {0x0014, 0x0004}, {0x0014, 0x0005}, {0x000a, 0x0003}, {0x000b, 0x0001}, {0x000c, 0x0001}, - {0x0011, 0x0004}, {0x0014, 0x0006}, {0x0014, 0x0007}, {0x0014, 0x0008}, {0x0010, 0x0005}, {0x000f, 0x0003}, {0x0011, 0x0005}, {0x0014, 0x0009}, - {0x0014, 0x000a}, {0x0014, 0x000b}, {0x0014, 0x000c}, {0x0014, 0x000d}, {0x0013, 0x000d}, {0x0014, 0x000e}, {0x0014, 0x000f}, {0x0014, 0x0010}, - {0x0014, 0x0011}, {0x0014, 0x0012}, {0x0014, 0x0013}, {0x0014, 0x0014}, {0x0014, 0x0015}, {0x0014, 0x0016}, {0x0014, 0x0017}, {0x0014, 0x0018}, - {0x0014, 0x0019}, + { + { 0x0001, 0x0001 }, + { 0x0003, 0x0001 }, + { 0x0006, 0x0001 }, + { 0x000a, 0x0001 }, + { 0x0010, 0x0003 }, + { 0x0014, 0x0000 }, + { 0x0014, 0x0001 }, + { 0x0002, 0x0001 }, + { 0x0004, 0x0001 }, + { 0x0007, 0x0001 }, + { 0x000a, 0x0002 }, + { 0x0010, 0x0004 }, + { 0x0014, 0x0002 }, + { 0x0014, 0x0003 }, + { 0x0006, 0x0002 }, + { 0x0006, 0x0003 }, + { 0x0008, 0x0001 }, + { 0x000d, 0x0001 }, + { 0x0012, 0x0007 }, + { 0x0014, 0x0004 }, + { 0x0014, 0x0005 }, + { 0x000a, 0x0003 }, + { 0x000b, 0x0001 }, + { 0x000c, 0x0001 }, + { 0x0011, 0x0004 }, + { 0x0014, 0x0006 }, + { 0x0014, 0x0007 }, + { 0x0014, 0x0008 }, + { 0x0010, 0x0005 }, + { 0x000f, 0x0003 }, + { 0x0011, 0x0005 }, + { 0x0014, 0x0009 }, + { 0x0014, 0x000a }, + { 0x0014, 0x000b }, + { 0x0014, 0x000c }, + { 0x0014, 0x000d }, + { 0x0013, 0x000d }, + { 0x0014, 0x000e }, + { 0x0014, 0x000f }, + { 0x0014, 0x0010 }, + { 0x0014, 0x0011 }, + { 0x0014, 0x0012 }, + { 0x0014, 0x0013 }, + { 0x0014, 0x0014 }, + { 0x0014, 0x0015 }, + { 0x0014, 0x0016 }, + { 0x0014, 0x0017 }, + { 0x0014, 0x0018 }, + { 0x0014, 0x0019 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec6[7][16] = -{ - {0x0001ffff, 0x00000008, 0x00010001, 0x00010001, 0x00020007, 0x00020007, 0x00020007, 0x00020007, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x0002ffff, 0x00000010, 0x00010009, 0x00010009, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, }, - {0x0003ffff, 0x00000017, 0x00010016, 0x00010016, 0x00020003, 0x00020003, 0x00020003, 0x00020003, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x00020015, 0x00020015, 0x00020015, 0x00020015, }, - {0x0006ffff, 0x0005ffff, 0x0004ffff, 0x00000004, 0x0000000b, 0x0000001c, 0x0001001d, 0x0001001d, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, - {0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, }, - {0x00000027, 0x00000028, 0x00000029, 0x0000002a, 0x0000002b, 0x0000002c, 0x0000002d, 0x0000002e, 0x0000002f, 0x00000030, 0x00010024, 0x00010024, 0x00020012, 0x00020012, 0x00020012, 0x00020012, }, - {0x00000005, 0x00000006, 0x0000000c, 0x0000000d, 0x00000013, 0x00000014, 0x00000019, 0x0000001a, 0x0000001b, 0x0000001f, 0x00000020, 0x00000021, 0x00000022, 0x00000023, 0x00000025, 0x00000026, }, +const uint32_t c_aauiCQMFHuffDec6[7][16] = { + { + 0x0001ffff, + 0x00000008, + 0x00010001, + 0x00010001, + 0x00020007, + 0x00020007, + 0x00020007, + 0x00020007, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + }, + { + 0x0002ffff, + 0x00000010, + 0x00010009, + 0x00010009, + 0x00020002, + 0x00020002, + 0x00020002, + 0x00020002, + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0002000f, + 0x0002000f, + 0x0002000f, + 0x0002000f, + }, + { + 0x0003ffff, + 0x00000017, + 0x00010016, + 0x00010016, + 0x00020003, + 0x00020003, + 0x00020003, + 0x00020003, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x00020015, + 0x00020015, + 0x00020015, + 0x00020015, + }, + { + 0x0006ffff, + 0x0005ffff, + 0x0004ffff, + 0x00000004, + 0x0000000b, + 0x0000001c, + 0x0001001d, + 0x0001001d, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + }, + { + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + }, + { + 0x00000027, + 0x00000028, + 0x00000029, + 0x0000002a, + 0x0000002b, + 0x0000002c, + 0x0000002d, + 0x0000002e, + 0x0000002f, + 0x00000030, + 0x00010024, + 0x00010024, + 0x00020012, + 0x00020012, + 0x00020012, + 0x00020012, + }, + { + 0x00000005, + 0x00000006, + 0x0000000c, + 0x0000000d, + 0x00000013, + 0x00000014, + 0x00000019, + 0x0000001a, + 0x0000001b, + 0x0000001f, + 0x00000020, + 0x00000021, + 0x00000022, + 0x00000023, + 0x00000025, + 0x00000026, + }, }; #endif @@ -383,45 +1699,525 @@ const uint32_t c_aauiCQMFHuffEnc7[64][2] = #else const uint16_t c_aauiCQMFHuffEnc7[64][2] = #endif -{ - {0x0002, 0x0001}, {0x0002, 0x0002}, {0x0005, 0x0001}, {0x0009, 0x0001}, {0x000f, 0x0002}, {0x0015, 0x0000}, {0x0015, 0x0001}, {0x0015, 0x0002}, - {0x0002, 0x0003}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x0009, 0x0002}, {0x000f, 0x0003}, {0x0014, 0x0011}, {0x0015, 0x0003}, {0x0015, 0x0004}, - {0x0005, 0x0002}, {0x0005, 0x0003}, {0x0007, 0x0001}, {0x000b, 0x0001}, {0x0010, 0x0002}, {0x0015, 0x0005}, {0x0015, 0x0006}, {0x0015, 0x0007}, - {0x000a, 0x0001}, {0x0009, 0x0003}, {0x000c, 0x0001}, {0x000f, 0x0004}, {0x0012, 0x0006}, {0x0015, 0x0008}, {0x0015, 0x0009}, {0x0015, 0x000a}, - {0x000f, 0x0005}, {0x000e, 0x0003}, {0x0010, 0x0003}, {0x0012, 0x0007}, {0x0014, 0x0012}, {0x0015, 0x000b}, {0x0015, 0x000c}, {0x0015, 0x000d}, - {0x0014, 0x0013}, {0x0014, 0x0014}, {0x0013, 0x000b}, {0x0014, 0x0015}, {0x0015, 0x000e}, {0x0015, 0x000f}, {0x0015, 0x0010}, {0x0015, 0x0011}, - {0x0015, 0x0012}, {0x0015, 0x0013}, {0x0015, 0x0014}, {0x0015, 0x0015}, {0x0015, 0x0016}, {0x0015, 0x0017}, {0x0015, 0x0018}, {0x0015, 0x0019}, - {0x0015, 0x001a}, {0x0015, 0x001b}, {0x0015, 0x001c}, {0x0015, 0x001d}, {0x0015, 0x001e}, {0x0015, 0x001f}, {0x0015, 0x0020}, {0x0015, 0x0021}, -}; + { + { 0x0002, 0x0001 }, + { 0x0002, 0x0002 }, + { 0x0005, 0x0001 }, + { 0x0009, 0x0001 }, + { 0x000f, 0x0002 }, + { 0x0015, 0x0000 }, + { 0x0015, 0x0001 }, + { 0x0015, 0x0002 }, + { 0x0002, 0x0003 }, + { 0x0003, 0x0001 }, + { 0x0006, 0x0001 }, + { 0x0009, 0x0002 }, + { 0x000f, 0x0003 }, + { 0x0014, 0x0011 }, + { 0x0015, 0x0003 }, + { 0x0015, 0x0004 }, + { 0x0005, 0x0002 }, + { 0x0005, 0x0003 }, + { 0x0007, 0x0001 }, + { 0x000b, 0x0001 }, + { 0x0010, 0x0002 }, + { 0x0015, 0x0005 }, + { 0x0015, 0x0006 }, + { 0x0015, 0x0007 }, + { 0x000a, 0x0001 }, + { 0x0009, 0x0003 }, + { 0x000c, 0x0001 }, + { 0x000f, 0x0004 }, + { 0x0012, 0x0006 }, + { 0x0015, 0x0008 }, + { 0x0015, 0x0009 }, + { 0x0015, 0x000a }, + { 0x000f, 0x0005 }, + { 0x000e, 0x0003 }, + { 0x0010, 0x0003 }, + { 0x0012, 0x0007 }, + { 0x0014, 0x0012 }, + { 0x0015, 0x000b }, + { 0x0015, 0x000c }, + { 0x0015, 0x000d }, + { 0x0014, 0x0013 }, + { 0x0014, 0x0014 }, + { 0x0013, 0x000b }, + { 0x0014, 0x0015 }, + { 0x0015, 0x000e }, + { 0x0015, 0x000f }, + { 0x0015, 0x0010 }, + { 0x0015, 0x0011 }, + { 0x0015, 0x0012 }, + { 0x0015, 0x0013 }, + { 0x0015, 0x0014 }, + { 0x0015, 0x0015 }, + { 0x0015, 0x0016 }, + { 0x0015, 0x0017 }, + { 0x0015, 0x0018 }, + { 0x0015, 0x0019 }, + { 0x0015, 0x001a }, + { 0x0015, 0x001b }, + { 0x0015, 0x001c }, + { 0x0015, 0x001d }, + { 0x0015, 0x001e }, + { 0x0015, 0x001f }, + { 0x0015, 0x0020 }, + { 0x0015, 0x0021 }, + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec7[25][16] = -{ - {0x0001ffff, 0x0002ffff, 0x00010009, 0x00010009, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00020008, 0x00020008, 0x00020008, 0x00020008, }, - {0x0003ffff, 0x0004ffff, 0x00010012, 0x00010012, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, }, - {0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, - {0x0005ffff, 0x0000001a, 0x00010013, 0x00010013, 0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, }, - {0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, }, - {0x0007ffff, 0x0006ffff, 0x00000014, 0x00000022, 0x00010004, 0x00010004, 0x0001000c, 0x0001000c, 0x0001001b, 0x0001001b, 0x00010020, 0x00010020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, }, - {0x0018ffff, 0x0000000d, 0x00000024, 0x00000028, 0x00000029, 0x0000002b, 0x0001002a, 0x0001002a, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x00020023, 0x00020023, 0x00020023, 0x00020023, }, - {0x000effff, 0x000affff, 0x000bffff, 0x000cffff, 0x0008ffff, 0x0009ffff, 0x000dffff, 0x000fffff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, 0x0016ffff, 0x0017ffff, }, - {0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, }, - {0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, }, - {0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, - {0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, }, - {0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, }, - {0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, }, - {0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, - {0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, }, - {0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, }, - {0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, }, - {0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, }, - {0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, }, - {0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, }, - {0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, }, - {0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, }, - {0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, }, - {0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, }, +const uint32_t c_aauiCQMFHuffDec7[25][16] = { + { + 0x0001ffff, + 0x0002ffff, + 0x00010009, + 0x00010009, + 0x00020000, + 0x00020000, + 0x00020000, + 0x00020000, + 0x00020001, + 0x00020001, + 0x00020001, + 0x00020001, + 0x00020008, + 0x00020008, + 0x00020008, + 0x00020008, + }, + { + 0x0003ffff, + 0x0004ffff, + 0x00010012, + 0x00010012, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + }, + { + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + }, + { + 0x0005ffff, + 0x0000001a, + 0x00010013, + 0x00010013, + 0x00020018, + 0x00020018, + 0x00020018, + 0x00020018, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + }, + { + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + }, + { + 0x0007ffff, + 0x0006ffff, + 0x00000014, + 0x00000022, + 0x00010004, + 0x00010004, + 0x0001000c, + 0x0001000c, + 0x0001001b, + 0x0001001b, + 0x00010020, + 0x00010020, + 0x00020021, + 0x00020021, + 0x00020021, + 0x00020021, + }, + { + 0x0018ffff, + 0x0000000d, + 0x00000024, + 0x00000028, + 0x00000029, + 0x0000002b, + 0x0001002a, + 0x0001002a, + 0x0002001c, + 0x0002001c, + 0x0002001c, + 0x0002001c, + 0x00020023, + 0x00020023, + 0x00020023, + 0x00020023, + }, + { + 0x000effff, + 0x000affff, + 0x000bffff, + 0x000cffff, + 0x0008ffff, + 0x0009ffff, + 0x000dffff, + 0x000fffff, + 0x0010ffff, + 0x0011ffff, + 0x0012ffff, + 0x0013ffff, + 0x0014ffff, + 0x0015ffff, + 0x0016ffff, + 0x0017ffff, + }, + { + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + }, + { + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + }, + { + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + }, + { + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + }, + { + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + }, + { + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + }, + { + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + }, + { + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + }, + { + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + }, + { + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030031, + }, + { + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + }, + { + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + }, + { + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + }, + { + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + }, + { + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + }, + { + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + }, + { + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + }, }; #endif @@ -430,40 +2226,381 @@ const uint32_t c_aauiCQMFHuffEnc8[81][2] = #else const uint16_t c_aauiCQMFHuffEnc8[81][2] = #endif -{ - {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000a, 0x0001}, {0x000f, 0x0002}, {0x0014, 0x0008}, {0x0017, 0x0000}, {0x0017, 0x0001}, - {0x0017, 0x0002}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0005, 0x0001}, {0x0009, 0x0001}, {0x000f, 0x0003}, {0x0012, 0x0004}, {0x0015, 0x000d}, - {0x0017, 0x0003}, {0x0017, 0x0004}, {0x0005, 0x0002}, {0x0005, 0x0003}, {0x0007, 0x0001}, {0x000c, 0x0001}, {0x0010, 0x0002}, {0x0013, 0x0005}, - {0x0017, 0x0005}, {0x0017, 0x0006}, {0x0017, 0x0007}, {0x0009, 0x0002}, {0x0009, 0x0003}, {0x000b, 0x0001}, {0x000f, 0x0004}, {0x0012, 0x0005}, - {0x0016, 0x0015}, {0x0017, 0x0008}, {0x0017, 0x0009}, {0x0017, 0x000a}, {0x000f, 0x0005}, {0x000e, 0x0003}, {0x0010, 0x0003}, {0x0012, 0x0006}, - {0x0014, 0x0009}, {0x0017, 0x000b}, {0x0017, 0x000c}, {0x0017, 0x000d}, {0x0017, 0x000e}, {0x0013, 0x0006}, {0x0012, 0x0007}, {0x0013, 0x0007}, - {0x0015, 0x000e}, {0x0017, 0x000f}, {0x0017, 0x0010}, {0x0017, 0x0011}, {0x0017, 0x0012}, {0x0017, 0x0013}, {0x0016, 0x0016}, {0x0016, 0x0017}, - {0x0015, 0x000f}, {0x0016, 0x0018}, {0x0017, 0x0014}, {0x0017, 0x0015}, {0x0017, 0x0016}, {0x0017, 0x0017}, {0x0017, 0x0018}, {0x0017, 0x0019}, - {0x0017, 0x001a}, {0x0017, 0x001b}, {0x0017, 0x001c}, {0x0017, 0x001d}, {0x0017, 0x001e}, {0x0017, 0x001f}, {0x0017, 0x0020}, {0x0017, 0x0021}, - {0x0017, 0x0022}, {0x0017, 0x0023}, {0x0017, 0x0024}, {0x0017, 0x0025}, {0x0017, 0x0026}, {0x0017, 0x0027}, {0x0017, 0x0028}, {0x0017, 0x0029}, - {0x0016, 0x0019}, + { + { 0x0001, 0x0001 }, + { 0x0003, 0x0001 }, + { 0x0006, 0x0001 }, + { 0x000a, 0x0001 }, + { 0x000f, 0x0002 }, + { 0x0014, 0x0008 }, + { 0x0017, 0x0000 }, + { 0x0017, 0x0001 }, + { 0x0017, 0x0002 }, + { 0x0003, 0x0002 }, + { 0x0003, 0x0003 }, + { 0x0005, 0x0001 }, + { 0x0009, 0x0001 }, + { 0x000f, 0x0003 }, + { 0x0012, 0x0004 }, + { 0x0015, 0x000d }, + { 0x0017, 0x0003 }, + { 0x0017, 0x0004 }, + { 0x0005, 0x0002 }, + { 0x0005, 0x0003 }, + { 0x0007, 0x0001 }, + { 0x000c, 0x0001 }, + { 0x0010, 0x0002 }, + { 0x0013, 0x0005 }, + { 0x0017, 0x0005 }, + { 0x0017, 0x0006 }, + { 0x0017, 0x0007 }, + { 0x0009, 0x0002 }, + { 0x0009, 0x0003 }, + { 0x000b, 0x0001 }, + { 0x000f, 0x0004 }, + { 0x0012, 0x0005 }, + { 0x0016, 0x0015 }, + { 0x0017, 0x0008 }, + { 0x0017, 0x0009 }, + { 0x0017, 0x000a }, + { 0x000f, 0x0005 }, + { 0x000e, 0x0003 }, + { 0x0010, 0x0003 }, + { 0x0012, 0x0006 }, + { 0x0014, 0x0009 }, + { 0x0017, 0x000b }, + { 0x0017, 0x000c }, + { 0x0017, 0x000d }, + { 0x0017, 0x000e }, + { 0x0013, 0x0006 }, + { 0x0012, 0x0007 }, + { 0x0013, 0x0007 }, + { 0x0015, 0x000e }, + { 0x0017, 0x000f }, + { 0x0017, 0x0010 }, + { 0x0017, 0x0011 }, + { 0x0017, 0x0012 }, + { 0x0017, 0x0013 }, + { 0x0016, 0x0016 }, + { 0x0016, 0x0017 }, + { 0x0015, 0x000f }, + { 0x0016, 0x0018 }, + { 0x0017, 0x0014 }, + { 0x0017, 0x0015 }, + { 0x0017, 0x0016 }, + { 0x0017, 0x0017 }, + { 0x0017, 0x0018 }, + { 0x0017, 0x0019 }, + { 0x0017, 0x001a }, + { 0x0017, 0x001b }, + { 0x0017, 0x001c }, + { 0x0017, 0x001d }, + { 0x0017, 0x001e }, + { 0x0017, 0x001f }, + { 0x0017, 0x0020 }, + { 0x0017, 0x0021 }, + { 0x0017, 0x0022 }, + { 0x0017, 0x0023 }, + { 0x0017, 0x0024 }, + { 0x0017, 0x0025 }, + { 0x0017, 0x0026 }, + { 0x0017, 0x0027 }, + { 0x0017, 0x0028 }, + { 0x0017, 0x0029 }, + { 0x0016, 0x0019 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec8[16][16] = -{ - {0x0001ffff, 0x0002ffff, 0x00010001, 0x00010001, 0x00010009, 0x00010009, 0x0001000a, 0x0001000a, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x0003ffff, 0x0004ffff, 0x00010014, 0x00010014, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, - {0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, }, - {0x0005ffff, 0x00000015, 0x0001001d, 0x0001001d, 0x00020003, 0x00020003, 0x00020003, 0x00020003, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, - {0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, }, - {0x0007ffff, 0x0006ffff, 0x00000016, 0x00000026, 0x00010004, 0x00010004, 0x0001000d, 0x0001000d, 0x0001001e, 0x0001001e, 0x00010024, 0x00010024, 0x00020025, 0x00020025, 0x00020025, 0x00020025, }, - {0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x00020027, 0x00020027, 0x00020027, 0x00020027, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, }, - {0x000bffff, 0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x000affff, 0x0008ffff, 0x0009ffff, 0x00000005, 0x00000028, 0x00010017, 0x00010017, 0x0001002d, 0x0001002d, 0x0001002f, 0x0001002f, }, - {0x00020039, 0x00020039, 0x00020039, 0x00020039, 0x00020050, 0x00020050, 0x00020050, 0x00020050, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, - {0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, }, - {0x0001004e, 0x0001004e, 0x0001004f, 0x0001004f, 0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020036, 0x00020036, 0x00020036, 0x00020036, 0x00020037, 0x00020037, 0x00020037, 0x00020037, }, - {0x00010006, 0x00010006, 0x00010007, 0x00010007, 0x00010008, 0x00010008, 0x00010010, 0x00010010, 0x00010011, 0x00010011, 0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x0001001a, 0x0001001a, }, - {0x00010021, 0x00010021, 0x00010022, 0x00010022, 0x00010023, 0x00010023, 0x00010029, 0x00010029, 0x0001002a, 0x0001002a, 0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x00010031, 0x00010031, }, - {0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x0001003a, 0x0001003a, 0x0001003b, 0x0001003b, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, }, - {0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x00010040, 0x00010040, 0x00010041, 0x00010041, 0x00010042, 0x00010042, 0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, }, - {0x00010046, 0x00010046, 0x00010047, 0x00010047, 0x00010048, 0x00010048, 0x00010049, 0x00010049, 0x0001004a, 0x0001004a, 0x0001004b, 0x0001004b, 0x0001004c, 0x0001004c, 0x0001004d, 0x0001004d, }, +const uint32_t c_aauiCQMFHuffDec8[16][16] = { + { + 0x0001ffff, + 0x0002ffff, + 0x00010001, + 0x00010001, + 0x00010009, + 0x00010009, + 0x0001000a, + 0x0001000a, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + }, + { + 0x0003ffff, + 0x0004ffff, + 0x00010014, + 0x00010014, + 0x00020002, + 0x00020002, + 0x00020002, + 0x00020002, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + }, + { + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + }, + { + 0x0005ffff, + 0x00000015, + 0x0001001d, + 0x0001001d, + 0x00020003, + 0x00020003, + 0x00020003, + 0x00020003, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + }, + { + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + }, + { + 0x0007ffff, + 0x0006ffff, + 0x00000016, + 0x00000026, + 0x00010004, + 0x00010004, + 0x0001000d, + 0x0001000d, + 0x0001001e, + 0x0001001e, + 0x00010024, + 0x00010024, + 0x00020025, + 0x00020025, + 0x00020025, + 0x00020025, + }, + { + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0002001f, + 0x0002001f, + 0x0002001f, + 0x0002001f, + 0x00020027, + 0x00020027, + 0x00020027, + 0x00020027, + 0x0002002e, + 0x0002002e, + 0x0002002e, + 0x0002002e, + }, + { + 0x000bffff, + 0x000cffff, + 0x000dffff, + 0x000effff, + 0x000fffff, + 0x000affff, + 0x0008ffff, + 0x0009ffff, + 0x00000005, + 0x00000028, + 0x00010017, + 0x00010017, + 0x0001002d, + 0x0001002d, + 0x0001002f, + 0x0001002f, + }, + { + 0x00020039, + 0x00020039, + 0x00020039, + 0x00020039, + 0x00020050, + 0x00020050, + 0x00020050, + 0x00020050, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + }, + { + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + }, + { + 0x0001004e, + 0x0001004e, + 0x0001004f, + 0x0001004f, + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020036, + 0x00020036, + 0x00020036, + 0x00020036, + 0x00020037, + 0x00020037, + 0x00020037, + 0x00020037, + }, + { + 0x00010006, + 0x00010006, + 0x00010007, + 0x00010007, + 0x00010008, + 0x00010008, + 0x00010010, + 0x00010010, + 0x00010011, + 0x00010011, + 0x00010018, + 0x00010018, + 0x00010019, + 0x00010019, + 0x0001001a, + 0x0001001a, + }, + { + 0x00010021, + 0x00010021, + 0x00010022, + 0x00010022, + 0x00010023, + 0x00010023, + 0x00010029, + 0x00010029, + 0x0001002a, + 0x0001002a, + 0x0001002b, + 0x0001002b, + 0x0001002c, + 0x0001002c, + 0x00010031, + 0x00010031, + }, + { + 0x00010032, + 0x00010032, + 0x00010033, + 0x00010033, + 0x00010034, + 0x00010034, + 0x00010035, + 0x00010035, + 0x0001003a, + 0x0001003a, + 0x0001003b, + 0x0001003b, + 0x0001003c, + 0x0001003c, + 0x0001003d, + 0x0001003d, + }, + { + 0x0001003e, + 0x0001003e, + 0x0001003f, + 0x0001003f, + 0x00010040, + 0x00010040, + 0x00010041, + 0x00010041, + 0x00010042, + 0x00010042, + 0x00010043, + 0x00010043, + 0x00010044, + 0x00010044, + 0x00010045, + 0x00010045, + }, + { + 0x00010046, + 0x00010046, + 0x00010047, + 0x00010047, + 0x00010048, + 0x00010048, + 0x00010049, + 0x00010049, + 0x0001004a, + 0x0001004a, + 0x0001004b, + 0x0001004b, + 0x0001004c, + 0x0001004c, + 0x0001004d, + 0x0001004d, + }, }; #endif @@ -472,48 +2609,508 @@ const uint32_t c_aauiCQMFHuffEnc9[100][2] = #else const uint16_t c_aauiCQMFHuffEnc9[100][2] = #endif -{ - {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x0009, 0x0001}, {0x000d, 0x0002}, {0x0011, 0x0004}, {0x0014, 0x000a}, {0x0017, 0x0000}, - {0x0017, 0x0001}, {0x0017, 0x0002}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0005, 0x0001}, {0x0009, 0x0002}, {0x000d, 0x0003}, {0x0010, 0x0004}, - {0x0013, 0x0007}, {0x0016, 0x0018}, {0x0017, 0x0003}, {0x0017, 0x0004}, {0x0005, 0x0002}, {0x0005, 0x0003}, {0x0008, 0x0002}, {0x000b, 0x0002}, - {0x000e, 0x0002}, {0x0011, 0x0005}, {0x0014, 0x000b}, {0x0016, 0x0019}, {0x0017, 0x0005}, {0x0017, 0x0006}, {0x0009, 0x0003}, {0x0008, 0x0003}, - {0x000b, 0x0003}, {0x000d, 0x0004}, {0x0010, 0x0005}, {0x0012, 0x0006}, {0x0015, 0x000f}, {0x0017, 0x0007}, {0x0017, 0x0008}, {0x0017, 0x0009}, - {0x000d, 0x0005}, {0x000c, 0x0003}, {0x000e, 0x0003}, {0x0010, 0x0006}, {0x0012, 0x0007}, {0x0014, 0x000c}, {0x0017, 0x000a}, {0x0016, 0x001a}, - {0x0017, 0x000b}, {0x0017, 0x000c}, {0x0011, 0x0006}, {0x0010, 0x0007}, {0x0011, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0015, 0x0010}, - {0x0017, 0x000d}, {0x0017, 0x000e}, {0x0017, 0x000f}, {0x0017, 0x0010}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0014, 0x000d}, {0x0015, 0x0011}, - {0x0017, 0x0011}, {0x0016, 0x001b}, {0x0017, 0x0012}, {0x0017, 0x0013}, {0x0017, 0x0014}, {0x0017, 0x0015}, {0x0017, 0x0016}, {0x0015, 0x0012}, - {0x0015, 0x0013}, {0x0017, 0x0017}, {0x0016, 0x001c}, {0x0017, 0x0018}, {0x0017, 0x0019}, {0x0017, 0x001a}, {0x0017, 0x001b}, {0x0017, 0x001c}, - {0x0017, 0x001d}, {0x0017, 0x001e}, {0x0017, 0x001f}, {0x0017, 0x0020}, {0x0017, 0x0021}, {0x0017, 0x0022}, {0x0017, 0x0023}, {0x0017, 0x0024}, - {0x0017, 0x0025}, {0x0017, 0x0026}, {0x0017, 0x0027}, {0x0017, 0x0028}, {0x0017, 0x0029}, {0x0017, 0x002a}, {0x0017, 0x002b}, {0x0017, 0x002c}, - {0x0017, 0x002d}, {0x0017, 0x002e}, {0x0017, 0x002f}, {0x0016, 0x001d}, + { + { 0x0001, 0x0001 }, + { 0x0003, 0x0001 }, + { 0x0006, 0x0001 }, + { 0x0009, 0x0001 }, + { 0x000d, 0x0002 }, + { 0x0011, 0x0004 }, + { 0x0014, 0x000a }, + { 0x0017, 0x0000 }, + { 0x0017, 0x0001 }, + { 0x0017, 0x0002 }, + { 0x0003, 0x0002 }, + { 0x0003, 0x0003 }, + { 0x0005, 0x0001 }, + { 0x0009, 0x0002 }, + { 0x000d, 0x0003 }, + { 0x0010, 0x0004 }, + { 0x0013, 0x0007 }, + { 0x0016, 0x0018 }, + { 0x0017, 0x0003 }, + { 0x0017, 0x0004 }, + { 0x0005, 0x0002 }, + { 0x0005, 0x0003 }, + { 0x0008, 0x0002 }, + { 0x000b, 0x0002 }, + { 0x000e, 0x0002 }, + { 0x0011, 0x0005 }, + { 0x0014, 0x000b }, + { 0x0016, 0x0019 }, + { 0x0017, 0x0005 }, + { 0x0017, 0x0006 }, + { 0x0009, 0x0003 }, + { 0x0008, 0x0003 }, + { 0x000b, 0x0003 }, + { 0x000d, 0x0004 }, + { 0x0010, 0x0005 }, + { 0x0012, 0x0006 }, + { 0x0015, 0x000f }, + { 0x0017, 0x0007 }, + { 0x0017, 0x0008 }, + { 0x0017, 0x0009 }, + { 0x000d, 0x0005 }, + { 0x000c, 0x0003 }, + { 0x000e, 0x0003 }, + { 0x0010, 0x0006 }, + { 0x0012, 0x0007 }, + { 0x0014, 0x000c }, + { 0x0017, 0x000a }, + { 0x0016, 0x001a }, + { 0x0017, 0x000b }, + { 0x0017, 0x000c }, + { 0x0011, 0x0006 }, + { 0x0010, 0x0007 }, + { 0x0011, 0x0007 }, + { 0x0013, 0x0008 }, + { 0x0013, 0x0009 }, + { 0x0015, 0x0010 }, + { 0x0017, 0x000d }, + { 0x0017, 0x000e }, + { 0x0017, 0x000f }, + { 0x0017, 0x0010 }, + { 0x0013, 0x000a }, + { 0x0013, 0x000b }, + { 0x0014, 0x000d }, + { 0x0015, 0x0011 }, + { 0x0017, 0x0011 }, + { 0x0016, 0x001b }, + { 0x0017, 0x0012 }, + { 0x0017, 0x0013 }, + { 0x0017, 0x0014 }, + { 0x0017, 0x0015 }, + { 0x0017, 0x0016 }, + { 0x0015, 0x0012 }, + { 0x0015, 0x0013 }, + { 0x0017, 0x0017 }, + { 0x0016, 0x001c }, + { 0x0017, 0x0018 }, + { 0x0017, 0x0019 }, + { 0x0017, 0x001a }, + { 0x0017, 0x001b }, + { 0x0017, 0x001c }, + { 0x0017, 0x001d }, + { 0x0017, 0x001e }, + { 0x0017, 0x001f }, + { 0x0017, 0x0020 }, + { 0x0017, 0x0021 }, + { 0x0017, 0x0022 }, + { 0x0017, 0x0023 }, + { 0x0017, 0x0024 }, + { 0x0017, 0x0025 }, + { 0x0017, 0x0026 }, + { 0x0017, 0x0027 }, + { 0x0017, 0x0028 }, + { 0x0017, 0x0029 }, + { 0x0017, 0x002a }, + { 0x0017, 0x002b }, + { 0x0017, 0x002c }, + { 0x0017, 0x002d }, + { 0x0017, 0x002e }, + { 0x0017, 0x002f }, + { 0x0016, 0x001d }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec9[22][16] = -{ - {0x0001ffff, 0x0002ffff, 0x00010001, 0x00010001, 0x0001000a, 0x0001000a, 0x0001000b, 0x0001000b, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x0003ffff, 0x0004ffff, 0x00000016, 0x0000001f, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, - {0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, }, - {0x0007ffff, 0x0005ffff, 0x0006ffff, 0x00000029, 0x00010017, 0x00010017, 0x00010020, 0x00010020, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, }, - {0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, }, - {0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, - {0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, }, - {0x000bffff, 0x000affff, 0x0008ffff, 0x0009ffff, 0x0000000f, 0x00000022, 0x0000002b, 0x00000033, 0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, }, - {0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, }, - {0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, }, - {0x00010035, 0x00010035, 0x00010036, 0x00010036, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, 0x00020023, 0x00020023, 0x00020023, 0x00020023, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, }, - {0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, 0x000fffff, 0x000dffff, 0x000cffff, 0x000effff, 0x00000006, 0x0000001a, 0x0000002d, 0x0000003e, 0x00010010, 0x00010010, }, - {0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, }, - {0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, 0x00020063, 0x00020063, 0x00020063, 0x00020063, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, }, - {0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, }, - {0x00020011, 0x00020011, 0x00020011, 0x00020011, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002002f, 0x0002002f, 0x0002002f, 0x0002002f, 0x00020041, 0x00020041, 0x00020041, 0x00020041, }, - {0x00010007, 0x00010007, 0x00010008, 0x00010008, 0x00010009, 0x00010009, 0x00010012, 0x00010012, 0x00010013, 0x00010013, 0x0001001c, 0x0001001c, 0x0001001d, 0x0001001d, 0x00010025, 0x00010025, }, - {0x00010026, 0x00010026, 0x00010027, 0x00010027, 0x0001002e, 0x0001002e, 0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x00010038, 0x00010038, 0x00010039, 0x00010039, 0x0001003a, 0x0001003a, }, - {0x0001003b, 0x0001003b, 0x00010040, 0x00010040, 0x00010042, 0x00010042, 0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, 0x00010046, 0x00010046, 0x00010049, 0x00010049, }, - {0x0001004b, 0x0001004b, 0x0001004c, 0x0001004c, 0x0001004d, 0x0001004d, 0x0001004e, 0x0001004e, 0x0001004f, 0x0001004f, 0x00010050, 0x00010050, 0x00010051, 0x00010051, 0x00010052, 0x00010052, }, - {0x00010053, 0x00010053, 0x00010054, 0x00010054, 0x00010055, 0x00010055, 0x00010056, 0x00010056, 0x00010057, 0x00010057, 0x00010058, 0x00010058, 0x00010059, 0x00010059, 0x0001005a, 0x0001005a, }, - {0x0001005b, 0x0001005b, 0x0001005c, 0x0001005c, 0x0001005d, 0x0001005d, 0x0001005e, 0x0001005e, 0x0001005f, 0x0001005f, 0x00010060, 0x00010060, 0x00010061, 0x00010061, 0x00010062, 0x00010062, }, +const uint32_t c_aauiCQMFHuffDec9[22][16] = { + { + 0x0001ffff, + 0x0002ffff, + 0x00010001, + 0x00010001, + 0x0001000a, + 0x0001000a, + 0x0001000b, + 0x0001000b, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + }, + { + 0x0003ffff, + 0x0004ffff, + 0x00000016, + 0x0000001f, + 0x00020002, + 0x00020002, + 0x00020002, + 0x00020002, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + }, + { + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + }, + { + 0x0007ffff, + 0x0005ffff, + 0x0006ffff, + 0x00000029, + 0x00010017, + 0x00010017, + 0x00010020, + 0x00010020, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + }, + { + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + }, + { + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + }, + { + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + }, + { + 0x000bffff, + 0x000affff, + 0x0008ffff, + 0x0009ffff, + 0x0000000f, + 0x00000022, + 0x0000002b, + 0x00000033, + 0x00020018, + 0x00020018, + 0x00020018, + 0x00020018, + 0x0002002a, + 0x0002002a, + 0x0002002a, + 0x0002002a, + }, + { + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + }, + { + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + }, + { + 0x00010035, + 0x00010035, + 0x00010036, + 0x00010036, + 0x0001003c, + 0x0001003c, + 0x0001003d, + 0x0001003d, + 0x00020023, + 0x00020023, + 0x00020023, + 0x00020023, + 0x0002002c, + 0x0002002c, + 0x0002002c, + 0x0002002c, + }, + { + 0x0010ffff, + 0x0011ffff, + 0x0012ffff, + 0x0013ffff, + 0x0014ffff, + 0x0015ffff, + 0x000fffff, + 0x000dffff, + 0x000cffff, + 0x000effff, + 0x00000006, + 0x0000001a, + 0x0000002d, + 0x0000003e, + 0x00010010, + 0x00010010, + }, + { + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + }, + { + 0x0002004a, + 0x0002004a, + 0x0002004a, + 0x0002004a, + 0x00020063, + 0x00020063, + 0x00020063, + 0x00020063, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + }, + { + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030048, + 0x00030048, + 0x00030048, + 0x00030048, + 0x00030048, + 0x00030048, + 0x00030048, + 0x00030048, + }, + { + 0x00020011, + 0x00020011, + 0x00020011, + 0x00020011, + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002002f, + 0x0002002f, + 0x0002002f, + 0x0002002f, + 0x00020041, + 0x00020041, + 0x00020041, + 0x00020041, + }, + { + 0x00010007, + 0x00010007, + 0x00010008, + 0x00010008, + 0x00010009, + 0x00010009, + 0x00010012, + 0x00010012, + 0x00010013, + 0x00010013, + 0x0001001c, + 0x0001001c, + 0x0001001d, + 0x0001001d, + 0x00010025, + 0x00010025, + }, + { + 0x00010026, + 0x00010026, + 0x00010027, + 0x00010027, + 0x0001002e, + 0x0001002e, + 0x00010030, + 0x00010030, + 0x00010031, + 0x00010031, + 0x00010038, + 0x00010038, + 0x00010039, + 0x00010039, + 0x0001003a, + 0x0001003a, + }, + { + 0x0001003b, + 0x0001003b, + 0x00010040, + 0x00010040, + 0x00010042, + 0x00010042, + 0x00010043, + 0x00010043, + 0x00010044, + 0x00010044, + 0x00010045, + 0x00010045, + 0x00010046, + 0x00010046, + 0x00010049, + 0x00010049, + }, + { + 0x0001004b, + 0x0001004b, + 0x0001004c, + 0x0001004c, + 0x0001004d, + 0x0001004d, + 0x0001004e, + 0x0001004e, + 0x0001004f, + 0x0001004f, + 0x00010050, + 0x00010050, + 0x00010051, + 0x00010051, + 0x00010052, + 0x00010052, + }, + { + 0x00010053, + 0x00010053, + 0x00010054, + 0x00010054, + 0x00010055, + 0x00010055, + 0x00010056, + 0x00010056, + 0x00010057, + 0x00010057, + 0x00010058, + 0x00010058, + 0x00010059, + 0x00010059, + 0x0001005a, + 0x0001005a, + }, + { + 0x0001005b, + 0x0001005b, + 0x0001005c, + 0x0001005c, + 0x0001005d, + 0x0001005d, + 0x0001005e, + 0x0001005e, + 0x0001005f, + 0x0001005f, + 0x00010060, + 0x00010060, + 0x00010061, + 0x00010061, + 0x00010062, + 0x00010062, + }, }; #endif @@ -522,80 +3119,991 @@ const uint32_t c_aauiCQMFHuffEnc10[169][2] = #else const uint16_t c_aauiCQMFHuffEnc10[169][2] = #endif -{ - {0x0001, 0x0001}, {0x0004, 0x0002}, {0x0005, 0x0002}, {0x0007, 0x0002}, {0x000a, 0x0002}, {0x000e, 0x0004}, {0x0011, 0x0007}, {0x0013, 0x0012}, - {0x0016, 0x0000}, {0x0016, 0x0001}, {0x0016, 0x0002}, {0x0016, 0x0003}, {0x0016, 0x0004}, {0x0004, 0x0003}, {0x0003, 0x0003}, {0x0004, 0x0004}, - {0x0007, 0x0003}, {0x000a, 0x0003}, {0x000d, 0x0004}, {0x0010, 0x0007}, {0x0013, 0x0013}, {0x0015, 0x0035}, {0x0016, 0x0005}, {0x0016, 0x0006}, - {0x0016, 0x0007}, {0x0016, 0x0008}, {0x0005, 0x0003}, {0x0004, 0x0005}, {0x0006, 0x0003}, {0x0008, 0x0002}, {0x000b, 0x0002}, {0x000e, 0x0005}, - {0x0010, 0x0008}, {0x0013, 0x0014}, {0x0014, 0x001d}, {0x0016, 0x0009}, {0x0016, 0x000a}, {0x0016, 0x000b}, {0x0016, 0x000c}, {0x0007, 0x0004}, - {0x0007, 0x0005}, {0x0008, 0x0003}, {0x000a, 0x0004}, {0x000d, 0x0005}, {0x000f, 0x0005}, {0x0011, 0x0008}, {0x0014, 0x001e}, {0x0014, 0x001f}, - {0x0016, 0x000d}, {0x0016, 0x000e}, {0x0016, 0x000f}, {0x0016, 0x0010}, {0x000a, 0x0005}, {0x0009, 0x0003}, {0x000b, 0x0003}, {0x000d, 0x0006}, - {0x000f, 0x0006}, {0x0011, 0x0009}, {0x0013, 0x0015}, {0x0014, 0x0020}, {0x0016, 0x0011}, {0x0016, 0x0012}, {0x0016, 0x0013}, {0x0016, 0x0014}, - {0x0016, 0x0015}, {0x000e, 0x0006}, {0x000d, 0x0007}, {0x000e, 0x0007}, {0x000f, 0x0007}, {0x0011, 0x000a}, {0x0012, 0x000c}, {0x0016, 0x0016}, - {0x0016, 0x0017}, {0x0016, 0x0018}, {0x0016, 0x0019}, {0x0016, 0x001a}, {0x0016, 0x001b}, {0x0016, 0x001c}, {0x0011, 0x000b}, {0x0010, 0x0009}, - {0x0011, 0x000c}, {0x0011, 0x000d}, {0x0013, 0x0016}, {0x0016, 0x001d}, {0x0016, 0x001e}, {0x0016, 0x001f}, {0x0016, 0x0020}, {0x0016, 0x0021}, - {0x0016, 0x0022}, {0x0016, 0x0023}, {0x0016, 0x0024}, {0x0014, 0x0021}, {0x0014, 0x0022}, {0x0012, 0x000d}, {0x0013, 0x0017}, {0x0016, 0x0025}, - {0x0016, 0x0026}, {0x0016, 0x0027}, {0x0016, 0x0028}, {0x0016, 0x0029}, {0x0016, 0x002a}, {0x0016, 0x002b}, {0x0016, 0x002c}, {0x0016, 0x002d}, - {0x0015, 0x0036}, {0x0015, 0x0037}, {0x0014, 0x0023}, {0x0015, 0x0038}, {0x0016, 0x002e}, {0x0016, 0x002f}, {0x0016, 0x0030}, {0x0016, 0x0031}, - {0x0016, 0x0032}, {0x0016, 0x0033}, {0x0016, 0x0034}, {0x0016, 0x0035}, {0x0016, 0x0036}, {0x0016, 0x0037}, {0x0016, 0x0038}, {0x0016, 0x0039}, - {0x0016, 0x003a}, {0x0016, 0x003b}, {0x0016, 0x003c}, {0x0016, 0x003d}, {0x0016, 0x003e}, {0x0016, 0x003f}, {0x0016, 0x0040}, {0x0016, 0x0041}, - {0x0016, 0x0042}, {0x0016, 0x0043}, {0x0016, 0x0044}, {0x0016, 0x0045}, {0x0016, 0x0046}, {0x0016, 0x0047}, {0x0016, 0x0048}, {0x0016, 0x0049}, - {0x0016, 0x004a}, {0x0016, 0x004b}, {0x0016, 0x004c}, {0x0016, 0x004d}, {0x0016, 0x004e}, {0x0016, 0x004f}, {0x0016, 0x0050}, {0x0016, 0x0051}, - {0x0016, 0x0052}, {0x0016, 0x0053}, {0x0016, 0x0054}, {0x0016, 0x0055}, {0x0016, 0x0056}, {0x0016, 0x0057}, {0x0016, 0x0058}, {0x0016, 0x0059}, - {0x0016, 0x005a}, {0x0016, 0x005b}, {0x0016, 0x005c}, {0x0016, 0x005d}, {0x0016, 0x005e}, {0x0016, 0x005f}, {0x0016, 0x0060}, {0x0016, 0x0061}, - {0x0016, 0x0062}, {0x0016, 0x0063}, {0x0016, 0x0064}, {0x0016, 0x0065}, {0x0016, 0x0066}, {0x0016, 0x0067}, {0x0016, 0x0068}, {0x0016, 0x0069}, - {0x0015, 0x0039}, + { + { 0x0001, 0x0001 }, + { 0x0004, 0x0002 }, + { 0x0005, 0x0002 }, + { 0x0007, 0x0002 }, + { 0x000a, 0x0002 }, + { 0x000e, 0x0004 }, + { 0x0011, 0x0007 }, + { 0x0013, 0x0012 }, + { 0x0016, 0x0000 }, + { 0x0016, 0x0001 }, + { 0x0016, 0x0002 }, + { 0x0016, 0x0003 }, + { 0x0016, 0x0004 }, + { 0x0004, 0x0003 }, + { 0x0003, 0x0003 }, + { 0x0004, 0x0004 }, + { 0x0007, 0x0003 }, + { 0x000a, 0x0003 }, + { 0x000d, 0x0004 }, + { 0x0010, 0x0007 }, + { 0x0013, 0x0013 }, + { 0x0015, 0x0035 }, + { 0x0016, 0x0005 }, + { 0x0016, 0x0006 }, + { 0x0016, 0x0007 }, + { 0x0016, 0x0008 }, + { 0x0005, 0x0003 }, + { 0x0004, 0x0005 }, + { 0x0006, 0x0003 }, + { 0x0008, 0x0002 }, + { 0x000b, 0x0002 }, + { 0x000e, 0x0005 }, + { 0x0010, 0x0008 }, + { 0x0013, 0x0014 }, + { 0x0014, 0x001d }, + { 0x0016, 0x0009 }, + { 0x0016, 0x000a }, + { 0x0016, 0x000b }, + { 0x0016, 0x000c }, + { 0x0007, 0x0004 }, + { 0x0007, 0x0005 }, + { 0x0008, 0x0003 }, + { 0x000a, 0x0004 }, + { 0x000d, 0x0005 }, + { 0x000f, 0x0005 }, + { 0x0011, 0x0008 }, + { 0x0014, 0x001e }, + { 0x0014, 0x001f }, + { 0x0016, 0x000d }, + { 0x0016, 0x000e }, + { 0x0016, 0x000f }, + { 0x0016, 0x0010 }, + { 0x000a, 0x0005 }, + { 0x0009, 0x0003 }, + { 0x000b, 0x0003 }, + { 0x000d, 0x0006 }, + { 0x000f, 0x0006 }, + { 0x0011, 0x0009 }, + { 0x0013, 0x0015 }, + { 0x0014, 0x0020 }, + { 0x0016, 0x0011 }, + { 0x0016, 0x0012 }, + { 0x0016, 0x0013 }, + { 0x0016, 0x0014 }, + { 0x0016, 0x0015 }, + { 0x000e, 0x0006 }, + { 0x000d, 0x0007 }, + { 0x000e, 0x0007 }, + { 0x000f, 0x0007 }, + { 0x0011, 0x000a }, + { 0x0012, 0x000c }, + { 0x0016, 0x0016 }, + { 0x0016, 0x0017 }, + { 0x0016, 0x0018 }, + { 0x0016, 0x0019 }, + { 0x0016, 0x001a }, + { 0x0016, 0x001b }, + { 0x0016, 0x001c }, + { 0x0011, 0x000b }, + { 0x0010, 0x0009 }, + { 0x0011, 0x000c }, + { 0x0011, 0x000d }, + { 0x0013, 0x0016 }, + { 0x0016, 0x001d }, + { 0x0016, 0x001e }, + { 0x0016, 0x001f }, + { 0x0016, 0x0020 }, + { 0x0016, 0x0021 }, + { 0x0016, 0x0022 }, + { 0x0016, 0x0023 }, + { 0x0016, 0x0024 }, + { 0x0014, 0x0021 }, + { 0x0014, 0x0022 }, + { 0x0012, 0x000d }, + { 0x0013, 0x0017 }, + { 0x0016, 0x0025 }, + { 0x0016, 0x0026 }, + { 0x0016, 0x0027 }, + { 0x0016, 0x0028 }, + { 0x0016, 0x0029 }, + { 0x0016, 0x002a }, + { 0x0016, 0x002b }, + { 0x0016, 0x002c }, + { 0x0016, 0x002d }, + { 0x0015, 0x0036 }, + { 0x0015, 0x0037 }, + { 0x0014, 0x0023 }, + { 0x0015, 0x0038 }, + { 0x0016, 0x002e }, + { 0x0016, 0x002f }, + { 0x0016, 0x0030 }, + { 0x0016, 0x0031 }, + { 0x0016, 0x0032 }, + { 0x0016, 0x0033 }, + { 0x0016, 0x0034 }, + { 0x0016, 0x0035 }, + { 0x0016, 0x0036 }, + { 0x0016, 0x0037 }, + { 0x0016, 0x0038 }, + { 0x0016, 0x0039 }, + { 0x0016, 0x003a }, + { 0x0016, 0x003b }, + { 0x0016, 0x003c }, + { 0x0016, 0x003d }, + { 0x0016, 0x003e }, + { 0x0016, 0x003f }, + { 0x0016, 0x0040 }, + { 0x0016, 0x0041 }, + { 0x0016, 0x0042 }, + { 0x0016, 0x0043 }, + { 0x0016, 0x0044 }, + { 0x0016, 0x0045 }, + { 0x0016, 0x0046 }, + { 0x0016, 0x0047 }, + { 0x0016, 0x0048 }, + { 0x0016, 0x0049 }, + { 0x0016, 0x004a }, + { 0x0016, 0x004b }, + { 0x0016, 0x004c }, + { 0x0016, 0x004d }, + { 0x0016, 0x004e }, + { 0x0016, 0x004f }, + { 0x0016, 0x0050 }, + { 0x0016, 0x0051 }, + { 0x0016, 0x0052 }, + { 0x0016, 0x0053 }, + { 0x0016, 0x0054 }, + { 0x0016, 0x0055 }, + { 0x0016, 0x0056 }, + { 0x0016, 0x0057 }, + { 0x0016, 0x0058 }, + { 0x0016, 0x0059 }, + { 0x0016, 0x005a }, + { 0x0016, 0x005b }, + { 0x0016, 0x005c }, + { 0x0016, 0x005d }, + { 0x0016, 0x005e }, + { 0x0016, 0x005f }, + { 0x0016, 0x0060 }, + { 0x0016, 0x0061 }, + { 0x0016, 0x0062 }, + { 0x0016, 0x0063 }, + { 0x0016, 0x0064 }, + { 0x0016, 0x0065 }, + { 0x0016, 0x0066 }, + { 0x0016, 0x0067 }, + { 0x0016, 0x0068 }, + { 0x0016, 0x0069 }, + { 0x0015, 0x0039 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec10[45][16] = -{ - {0x0002ffff, 0x0001ffff, 0x00000001, 0x0000000d, 0x0000000f, 0x0000001b, 0x0001000e, 0x0001000e, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, }, - {0x0004ffff, 0x0003ffff, 0x0000001d, 0x00000029, 0x00010003, 0x00010003, 0x00010010, 0x00010010, 0x00010027, 0x00010027, 0x00010028, 0x00010028, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, }, - {0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, 0x00020034, 0x00020034, 0x00020034, 0x00020034, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, }, - {0x0008ffff, 0x0007ffff, 0x0005ffff, 0x0006ffff, 0x0001001e, 0x0001001e, 0x00010036, 0x00010036, 0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x00020011, 0x00020011, 0x00020011, 0x00020011, }, - {0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, }, - {0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, }, - {0x00020005, 0x00020005, 0x00020005, 0x00020005, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x00020041, 0x00020041, 0x00020041, 0x00020041, 0x00020043, 0x00020043, 0x00020043, 0x00020043, }, - {0x0012ffff, 0x000effff, 0x000dffff, 0x000affff, 0x0009ffff, 0x000bffff, 0x000cffff, 0x00000013, 0x00000020, 0x0000004f, 0x0001002c, 0x0001002c, 0x00010038, 0x00010038, 0x00010044, 0x00010044, }, - {0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, }, - {0x00020046, 0x00020046, 0x00020046, 0x00020046, 0x0002005d, 0x0002005d, 0x0002005d, 0x0002005d, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, - {0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, }, - {0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, }, - {0x0000003b, 0x0000005b, 0x0000005c, 0x0000006a, 0x00010007, 0x00010007, 0x00010014, 0x00010014, 0x00010021, 0x00010021, 0x0001003a, 0x0001003a, 0x00010052, 0x00010052, 0x0001005e, 0x0001005e, }, - {0x0023ffff, 0x0024ffff, 0x0025ffff, 0x0026ffff, 0x0027ffff, 0x0028ffff, 0x0029ffff, 0x002affff, 0x002bffff, 0x002cffff, 0x000fffff, 0x0010ffff, 0x0011ffff, 0x00000022, 0x0000002e, 0x0000002f, }, - {0x000200a6, 0x000200a6, 0x000200a6, 0x000200a6, 0x000200a7, 0x000200a7, 0x000200a7, 0x000200a7, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, }, - {0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, }, - {0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x000300a8, 0x000300a8, 0x000300a8, 0x000300a8, 0x000300a8, 0x000300a8, 0x000300a8, 0x000300a8, }, - {0x0014ffff, 0x0017ffff, 0x0015ffff, 0x0016ffff, 0x001cffff, 0x0013ffff, 0x0018ffff, 0x0019ffff, 0x001affff, 0x001bffff, 0x001dffff, 0x001effff, 0x001fffff, 0x0020ffff, 0x0021ffff, 0x0022ffff, }, - {0x0002003f, 0x0002003f, 0x0002003f, 0x0002003f, 0x00020040, 0x00020040, 0x00020040, 0x00020040, 0x00020047, 0x00020047, 0x00020047, 0x00020047, 0x00020048, 0x00020048, 0x00020048, 0x00020048, }, - {0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x00020009, 0x00020009, 0x00020009, 0x00020009, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, }, - {0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x00020023, 0x00020023, 0x00020023, 0x00020023, 0x00020024, 0x00020024, 0x00020024, 0x00020024, 0x00020025, 0x00020025, 0x00020025, 0x00020025, }, - {0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00020030, 0x00020030, 0x00020030, 0x00020030, 0x00020031, 0x00020031, 0x00020031, 0x00020031, 0x00020032, 0x00020032, 0x00020032, 0x00020032, }, - {0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x00020016, 0x00020016, 0x00020016, 0x00020016, 0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x00020018, 0x00020018, 0x00020018, 0x00020018, }, - {0x00020049, 0x00020049, 0x00020049, 0x00020049, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004b, 0x0002004b, 0x0002004b, 0x0002004b, 0x0002004c, 0x0002004c, 0x0002004c, 0x0002004c, }, - {0x0002004d, 0x0002004d, 0x0002004d, 0x0002004d, 0x00020053, 0x00020053, 0x00020053, 0x00020053, 0x00020054, 0x00020054, 0x00020054, 0x00020054, 0x00020055, 0x00020055, 0x00020055, 0x00020055, }, - {0x00020056, 0x00020056, 0x00020056, 0x00020056, 0x00020057, 0x00020057, 0x00020057, 0x00020057, 0x00020058, 0x00020058, 0x00020058, 0x00020058, 0x00020059, 0x00020059, 0x00020059, 0x00020059, }, - {0x0002005a, 0x0002005a, 0x0002005a, 0x0002005a, 0x0002005f, 0x0002005f, 0x0002005f, 0x0002005f, 0x00020060, 0x00020060, 0x00020060, 0x00020060, 0x00020061, 0x00020061, 0x00020061, 0x00020061, }, - {0x00020033, 0x00020033, 0x00020033, 0x00020033, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002003e, }, - {0x00020062, 0x00020062, 0x00020062, 0x00020062, 0x00020063, 0x00020063, 0x00020063, 0x00020063, 0x00020064, 0x00020064, 0x00020064, 0x00020064, 0x00020065, 0x00020065, 0x00020065, 0x00020065, }, - {0x00020066, 0x00020066, 0x00020066, 0x00020066, 0x00020067, 0x00020067, 0x00020067, 0x00020067, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006d, 0x0002006d, 0x0002006d, 0x0002006d, }, - {0x0002006e, 0x0002006e, 0x0002006e, 0x0002006e, 0x0002006f, 0x0002006f, 0x0002006f, 0x0002006f, 0x00020070, 0x00020070, 0x00020070, 0x00020070, 0x00020071, 0x00020071, 0x00020071, 0x00020071, }, - {0x00020072, 0x00020072, 0x00020072, 0x00020072, 0x00020073, 0x00020073, 0x00020073, 0x00020073, 0x00020074, 0x00020074, 0x00020074, 0x00020074, 0x00020075, 0x00020075, 0x00020075, 0x00020075, }, - {0x00020076, 0x00020076, 0x00020076, 0x00020076, 0x00020077, 0x00020077, 0x00020077, 0x00020077, 0x00020078, 0x00020078, 0x00020078, 0x00020078, 0x00020079, 0x00020079, 0x00020079, 0x00020079, }, - {0x0002007a, 0x0002007a, 0x0002007a, 0x0002007a, 0x0002007b, 0x0002007b, 0x0002007b, 0x0002007b, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007d, 0x0002007d, 0x0002007d, 0x0002007d, }, - {0x0002007e, 0x0002007e, 0x0002007e, 0x0002007e, 0x0002007f, 0x0002007f, 0x0002007f, 0x0002007f, 0x00020080, 0x00020080, 0x00020080, 0x00020080, 0x00020081, 0x00020081, 0x00020081, 0x00020081, }, - {0x00020082, 0x00020082, 0x00020082, 0x00020082, 0x00020083, 0x00020083, 0x00020083, 0x00020083, 0x00020084, 0x00020084, 0x00020084, 0x00020084, 0x00020085, 0x00020085, 0x00020085, 0x00020085, }, - {0x00020086, 0x00020086, 0x00020086, 0x00020086, 0x00020087, 0x00020087, 0x00020087, 0x00020087, 0x00020088, 0x00020088, 0x00020088, 0x00020088, 0x00020089, 0x00020089, 0x00020089, 0x00020089, }, - {0x0002008a, 0x0002008a, 0x0002008a, 0x0002008a, 0x0002008b, 0x0002008b, 0x0002008b, 0x0002008b, 0x0002008c, 0x0002008c, 0x0002008c, 0x0002008c, 0x0002008d, 0x0002008d, 0x0002008d, 0x0002008d, }, - {0x0002008e, 0x0002008e, 0x0002008e, 0x0002008e, 0x0002008f, 0x0002008f, 0x0002008f, 0x0002008f, 0x00020090, 0x00020090, 0x00020090, 0x00020090, 0x00020091, 0x00020091, 0x00020091, 0x00020091, }, - {0x00020092, 0x00020092, 0x00020092, 0x00020092, 0x00020093, 0x00020093, 0x00020093, 0x00020093, 0x00020094, 0x00020094, 0x00020094, 0x00020094, 0x00020095, 0x00020095, 0x00020095, 0x00020095, }, - {0x00020096, 0x00020096, 0x00020096, 0x00020096, 0x00020097, 0x00020097, 0x00020097, 0x00020097, 0x00020098, 0x00020098, 0x00020098, 0x00020098, 0x00020099, 0x00020099, 0x00020099, 0x00020099, }, - {0x0002009a, 0x0002009a, 0x0002009a, 0x0002009a, 0x0002009b, 0x0002009b, 0x0002009b, 0x0002009b, 0x0002009c, 0x0002009c, 0x0002009c, 0x0002009c, 0x0002009d, 0x0002009d, 0x0002009d, 0x0002009d, }, - {0x0002009e, 0x0002009e, 0x0002009e, 0x0002009e, 0x0002009f, 0x0002009f, 0x0002009f, 0x0002009f, 0x000200a0, 0x000200a0, 0x000200a0, 0x000200a0, 0x000200a1, 0x000200a1, 0x000200a1, 0x000200a1, }, - {0x000200a2, 0x000200a2, 0x000200a2, 0x000200a2, 0x000200a3, 0x000200a3, 0x000200a3, 0x000200a3, 0x000200a4, 0x000200a4, 0x000200a4, 0x000200a4, 0x000200a5, 0x000200a5, 0x000200a5, 0x000200a5, }, +const uint32_t c_aauiCQMFHuffDec10[45][16] = { + { + 0x0002ffff, + 0x0001ffff, + 0x00000001, + 0x0000000d, + 0x0000000f, + 0x0000001b, + 0x0001000e, + 0x0001000e, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + }, + { + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + }, + { + 0x0004ffff, + 0x0003ffff, + 0x0000001d, + 0x00000029, + 0x00010003, + 0x00010003, + 0x00010010, + 0x00010010, + 0x00010027, + 0x00010027, + 0x00010028, + 0x00010028, + 0x0002001c, + 0x0002001c, + 0x0002001c, + 0x0002001c, + }, + { + 0x0002002a, + 0x0002002a, + 0x0002002a, + 0x0002002a, + 0x00020034, + 0x00020034, + 0x00020034, + 0x00020034, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + }, + { + 0x0008ffff, + 0x0007ffff, + 0x0005ffff, + 0x0006ffff, + 0x0001001e, + 0x0001001e, + 0x00010036, + 0x00010036, + 0x00020004, + 0x00020004, + 0x00020004, + 0x00020004, + 0x00020011, + 0x00020011, + 0x00020011, + 0x00020011, + }, + { + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + }, + { + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030042, + }, + { + 0x00020005, + 0x00020005, + 0x00020005, + 0x00020005, + 0x0002001f, + 0x0002001f, + 0x0002001f, + 0x0002001f, + 0x00020041, + 0x00020041, + 0x00020041, + 0x00020041, + 0x00020043, + 0x00020043, + 0x00020043, + 0x00020043, + }, + { + 0x0012ffff, + 0x000effff, + 0x000dffff, + 0x000affff, + 0x0009ffff, + 0x000bffff, + 0x000cffff, + 0x00000013, + 0x00000020, + 0x0000004f, + 0x0001002c, + 0x0001002c, + 0x00010038, + 0x00010038, + 0x00010044, + 0x00010044, + }, + { + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + }, + { + 0x00020046, + 0x00020046, + 0x00020046, + 0x00020046, + 0x0002005d, + 0x0002005d, + 0x0002005d, + 0x0002005d, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + }, + { + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x0003004e, + }, + { + 0x00030050, + 0x00030050, + 0x00030050, + 0x00030050, + 0x00030050, + 0x00030050, + 0x00030050, + 0x00030050, + 0x00030051, + 0x00030051, + 0x00030051, + 0x00030051, + 0x00030051, + 0x00030051, + 0x00030051, + 0x00030051, + }, + { + 0x0000003b, + 0x0000005b, + 0x0000005c, + 0x0000006a, + 0x00010007, + 0x00010007, + 0x00010014, + 0x00010014, + 0x00010021, + 0x00010021, + 0x0001003a, + 0x0001003a, + 0x00010052, + 0x00010052, + 0x0001005e, + 0x0001005e, + }, + { + 0x0023ffff, + 0x0024ffff, + 0x0025ffff, + 0x0026ffff, + 0x0027ffff, + 0x0028ffff, + 0x0029ffff, + 0x002affff, + 0x002bffff, + 0x002cffff, + 0x000fffff, + 0x0010ffff, + 0x0011ffff, + 0x00000022, + 0x0000002e, + 0x0000002f, + }, + { + 0x000200a6, + 0x000200a6, + 0x000200a6, + 0x000200a6, + 0x000200a7, + 0x000200a7, + 0x000200a7, + 0x000200a7, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + }, + { + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030069, + 0x00030069, + 0x00030069, + 0x00030069, + 0x00030069, + 0x00030069, + 0x00030069, + 0x00030069, + }, + { + 0x0003006b, + 0x0003006b, + 0x0003006b, + 0x0003006b, + 0x0003006b, + 0x0003006b, + 0x0003006b, + 0x0003006b, + 0x000300a8, + 0x000300a8, + 0x000300a8, + 0x000300a8, + 0x000300a8, + 0x000300a8, + 0x000300a8, + 0x000300a8, + }, + { + 0x0014ffff, + 0x0017ffff, + 0x0015ffff, + 0x0016ffff, + 0x001cffff, + 0x0013ffff, + 0x0018ffff, + 0x0019ffff, + 0x001affff, + 0x001bffff, + 0x001dffff, + 0x001effff, + 0x001fffff, + 0x0020ffff, + 0x0021ffff, + 0x0022ffff, + }, + { + 0x0002003f, + 0x0002003f, + 0x0002003f, + 0x0002003f, + 0x00020040, + 0x00020040, + 0x00020040, + 0x00020040, + 0x00020047, + 0x00020047, + 0x00020047, + 0x00020047, + 0x00020048, + 0x00020048, + 0x00020048, + 0x00020048, + }, + { + 0x00020008, + 0x00020008, + 0x00020008, + 0x00020008, + 0x00020009, + 0x00020009, + 0x00020009, + 0x00020009, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x0002000b, + 0x0002000b, + 0x0002000b, + 0x0002000b, + }, + { + 0x00020019, + 0x00020019, + 0x00020019, + 0x00020019, + 0x00020023, + 0x00020023, + 0x00020023, + 0x00020023, + 0x00020024, + 0x00020024, + 0x00020024, + 0x00020024, + 0x00020025, + 0x00020025, + 0x00020025, + 0x00020025, + }, + { + 0x00020026, + 0x00020026, + 0x00020026, + 0x00020026, + 0x00020030, + 0x00020030, + 0x00020030, + 0x00020030, + 0x00020031, + 0x00020031, + 0x00020031, + 0x00020031, + 0x00020032, + 0x00020032, + 0x00020032, + 0x00020032, + }, + { + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x00020016, + 0x00020016, + 0x00020016, + 0x00020016, + 0x00020017, + 0x00020017, + 0x00020017, + 0x00020017, + 0x00020018, + 0x00020018, + 0x00020018, + 0x00020018, + }, + { + 0x00020049, + 0x00020049, + 0x00020049, + 0x00020049, + 0x0002004a, + 0x0002004a, + 0x0002004a, + 0x0002004a, + 0x0002004b, + 0x0002004b, + 0x0002004b, + 0x0002004b, + 0x0002004c, + 0x0002004c, + 0x0002004c, + 0x0002004c, + }, + { + 0x0002004d, + 0x0002004d, + 0x0002004d, + 0x0002004d, + 0x00020053, + 0x00020053, + 0x00020053, + 0x00020053, + 0x00020054, + 0x00020054, + 0x00020054, + 0x00020054, + 0x00020055, + 0x00020055, + 0x00020055, + 0x00020055, + }, + { + 0x00020056, + 0x00020056, + 0x00020056, + 0x00020056, + 0x00020057, + 0x00020057, + 0x00020057, + 0x00020057, + 0x00020058, + 0x00020058, + 0x00020058, + 0x00020058, + 0x00020059, + 0x00020059, + 0x00020059, + 0x00020059, + }, + { + 0x0002005a, + 0x0002005a, + 0x0002005a, + 0x0002005a, + 0x0002005f, + 0x0002005f, + 0x0002005f, + 0x0002005f, + 0x00020060, + 0x00020060, + 0x00020060, + 0x00020060, + 0x00020061, + 0x00020061, + 0x00020061, + 0x00020061, + }, + { + 0x00020033, + 0x00020033, + 0x00020033, + 0x00020033, + 0x0002003c, + 0x0002003c, + 0x0002003c, + 0x0002003c, + 0x0002003d, + 0x0002003d, + 0x0002003d, + 0x0002003d, + 0x0002003e, + 0x0002003e, + 0x0002003e, + 0x0002003e, + }, + { + 0x00020062, + 0x00020062, + 0x00020062, + 0x00020062, + 0x00020063, + 0x00020063, + 0x00020063, + 0x00020063, + 0x00020064, + 0x00020064, + 0x00020064, + 0x00020064, + 0x00020065, + 0x00020065, + 0x00020065, + 0x00020065, + }, + { + 0x00020066, + 0x00020066, + 0x00020066, + 0x00020066, + 0x00020067, + 0x00020067, + 0x00020067, + 0x00020067, + 0x0002006c, + 0x0002006c, + 0x0002006c, + 0x0002006c, + 0x0002006d, + 0x0002006d, + 0x0002006d, + 0x0002006d, + }, + { + 0x0002006e, + 0x0002006e, + 0x0002006e, + 0x0002006e, + 0x0002006f, + 0x0002006f, + 0x0002006f, + 0x0002006f, + 0x00020070, + 0x00020070, + 0x00020070, + 0x00020070, + 0x00020071, + 0x00020071, + 0x00020071, + 0x00020071, + }, + { + 0x00020072, + 0x00020072, + 0x00020072, + 0x00020072, + 0x00020073, + 0x00020073, + 0x00020073, + 0x00020073, + 0x00020074, + 0x00020074, + 0x00020074, + 0x00020074, + 0x00020075, + 0x00020075, + 0x00020075, + 0x00020075, + }, + { + 0x00020076, + 0x00020076, + 0x00020076, + 0x00020076, + 0x00020077, + 0x00020077, + 0x00020077, + 0x00020077, + 0x00020078, + 0x00020078, + 0x00020078, + 0x00020078, + 0x00020079, + 0x00020079, + 0x00020079, + 0x00020079, + }, + { + 0x0002007a, + 0x0002007a, + 0x0002007a, + 0x0002007a, + 0x0002007b, + 0x0002007b, + 0x0002007b, + 0x0002007b, + 0x0002007c, + 0x0002007c, + 0x0002007c, + 0x0002007c, + 0x0002007d, + 0x0002007d, + 0x0002007d, + 0x0002007d, + }, + { + 0x0002007e, + 0x0002007e, + 0x0002007e, + 0x0002007e, + 0x0002007f, + 0x0002007f, + 0x0002007f, + 0x0002007f, + 0x00020080, + 0x00020080, + 0x00020080, + 0x00020080, + 0x00020081, + 0x00020081, + 0x00020081, + 0x00020081, + }, + { + 0x00020082, + 0x00020082, + 0x00020082, + 0x00020082, + 0x00020083, + 0x00020083, + 0x00020083, + 0x00020083, + 0x00020084, + 0x00020084, + 0x00020084, + 0x00020084, + 0x00020085, + 0x00020085, + 0x00020085, + 0x00020085, + }, + { + 0x00020086, + 0x00020086, + 0x00020086, + 0x00020086, + 0x00020087, + 0x00020087, + 0x00020087, + 0x00020087, + 0x00020088, + 0x00020088, + 0x00020088, + 0x00020088, + 0x00020089, + 0x00020089, + 0x00020089, + 0x00020089, + }, + { + 0x0002008a, + 0x0002008a, + 0x0002008a, + 0x0002008a, + 0x0002008b, + 0x0002008b, + 0x0002008b, + 0x0002008b, + 0x0002008c, + 0x0002008c, + 0x0002008c, + 0x0002008c, + 0x0002008d, + 0x0002008d, + 0x0002008d, + 0x0002008d, + }, + { + 0x0002008e, + 0x0002008e, + 0x0002008e, + 0x0002008e, + 0x0002008f, + 0x0002008f, + 0x0002008f, + 0x0002008f, + 0x00020090, + 0x00020090, + 0x00020090, + 0x00020090, + 0x00020091, + 0x00020091, + 0x00020091, + 0x00020091, + }, + { + 0x00020092, + 0x00020092, + 0x00020092, + 0x00020092, + 0x00020093, + 0x00020093, + 0x00020093, + 0x00020093, + 0x00020094, + 0x00020094, + 0x00020094, + 0x00020094, + 0x00020095, + 0x00020095, + 0x00020095, + 0x00020095, + }, + { + 0x00020096, + 0x00020096, + 0x00020096, + 0x00020096, + 0x00020097, + 0x00020097, + 0x00020097, + 0x00020097, + 0x00020098, + 0x00020098, + 0x00020098, + 0x00020098, + 0x00020099, + 0x00020099, + 0x00020099, + 0x00020099, + }, + { + 0x0002009a, + 0x0002009a, + 0x0002009a, + 0x0002009a, + 0x0002009b, + 0x0002009b, + 0x0002009b, + 0x0002009b, + 0x0002009c, + 0x0002009c, + 0x0002009c, + 0x0002009c, + 0x0002009d, + 0x0002009d, + 0x0002009d, + 0x0002009d, + }, + { + 0x0002009e, + 0x0002009e, + 0x0002009e, + 0x0002009e, + 0x0002009f, + 0x0002009f, + 0x0002009f, + 0x0002009f, + 0x000200a0, + 0x000200a0, + 0x000200a0, + 0x000200a0, + 0x000200a1, + 0x000200a1, + 0x000200a1, + 0x000200a1, + }, + { + 0x000200a2, + 0x000200a2, + 0x000200a2, + 0x000200a2, + 0x000200a3, + 0x000200a3, + 0x000200a3, + 0x000200a3, + 0x000200a4, + 0x000200a4, + 0x000200a4, + 0x000200a4, + 0x000200a5, + 0x000200a5, + 0x000200a5, + 0x000200a5, + }, }; #endif @@ -604,88 +4112,1108 @@ const uint32_t c_aauiCQMFHuffEnc11[196][2] = #else const uint16_t c_aauiCQMFHuffEnc11[196][2] = #endif -{ - {0x0001, 0x0001}, {0x0004, 0x0003}, {0x0005, 0x0003}, {0x0007, 0x0002}, {0x0009, 0x0003}, {0x000c, 0x0004}, {0x000f, 0x0005}, {0x0012, 0x000d}, - {0x0014, 0x001f}, {0x0016, 0x0000}, {0x0016, 0x0001}, {0x0016, 0x0002}, {0x0016, 0x0003}, {0x0016, 0x0004}, {0x0004, 0x0004}, {0x0003, 0x0003}, - {0x0005, 0x0004}, {0x0006, 0x0003}, {0x0009, 0x0004}, {0x000b, 0x0004}, {0x000e, 0x0005}, {0x0010, 0x0007}, {0x0012, 0x000e}, {0x0014, 0x0020}, - {0x0016, 0x0005}, {0x0016, 0x0006}, {0x0016, 0x0007}, {0x0016, 0x0008}, {0x0005, 0x0005}, {0x0004, 0x0005}, {0x0006, 0x0004}, {0x0007, 0x0003}, - {0x000a, 0x0004}, {0x000c, 0x0005}, {0x000e, 0x0006}, {0x0011, 0x000a}, {0x0012, 0x000f}, {0x0015, 0x003b}, {0x0016, 0x0009}, {0x0016, 0x000a}, - {0x0016, 0x000b}, {0x0016, 0x000c}, {0x0007, 0x0004}, {0x0006, 0x0005}, {0x0007, 0x0005}, {0x0009, 0x0005}, {0x000b, 0x0005}, {0x000d, 0x0005}, - {0x000f, 0x0006}, {0x0012, 0x0010}, {0x0014, 0x0021}, {0x0016, 0x000d}, {0x0016, 0x000e}, {0x0016, 0x000f}, {0x0016, 0x0010}, {0x0016, 0x0011}, - {0x0009, 0x0006}, {0x0009, 0x0007}, {0x000a, 0x0005}, {0x000b, 0x0006}, {0x000d, 0x0006}, {0x000f, 0x0007}, {0x0011, 0x000b}, {0x0013, 0x0017}, - {0x0014, 0x0022}, {0x0016, 0x0012}, {0x0016, 0x0013}, {0x0016, 0x0014}, {0x0016, 0x0015}, {0x0016, 0x0016}, {0x000c, 0x0006}, {0x000b, 0x0007}, - {0x000c, 0x0007}, {0x000d, 0x0007}, {0x000e, 0x0007}, {0x0010, 0x0008}, {0x0012, 0x0011}, {0x0014, 0x0023}, {0x0015, 0x003c}, {0x0016, 0x0017}, - {0x0016, 0x0018}, {0x0016, 0x0019}, {0x0016, 0x001a}, {0x0016, 0x001b}, {0x000f, 0x0008}, {0x000e, 0x0008}, {0x000e, 0x0009}, {0x000f, 0x0009}, - {0x0011, 0x000c}, {0x0013, 0x0018}, {0x0014, 0x0024}, {0x0016, 0x001c}, {0x0016, 0x001d}, {0x0016, 0x001e}, {0x0016, 0x001f}, {0x0016, 0x0020}, - {0x0016, 0x0021}, {0x0016, 0x0022}, {0x0011, 0x000d}, {0x0010, 0x0009}, {0x0012, 0x0012}, {0x0012, 0x0013}, {0x0014, 0x0025}, {0x0015, 0x003d}, - {0x0014, 0x0026}, {0x0016, 0x0023}, {0x0016, 0x0024}, {0x0016, 0x0025}, {0x0016, 0x0026}, {0x0016, 0x0027}, {0x0016, 0x0028}, {0x0016, 0x0029}, - {0x0014, 0x0027}, {0x0013, 0x0019}, {0x0014, 0x0028}, {0x0014, 0x0029}, {0x0014, 0x002a}, {0x0016, 0x002a}, {0x0016, 0x002b}, {0x0016, 0x002c}, - {0x0016, 0x002d}, {0x0016, 0x002e}, {0x0016, 0x002f}, {0x0016, 0x0030}, {0x0016, 0x0031}, {0x0016, 0x0032}, {0x0014, 0x002b}, {0x0014, 0x002c}, - {0x0014, 0x002d}, {0x0016, 0x0033}, {0x0016, 0x0034}, {0x0016, 0x0035}, {0x0016, 0x0036}, {0x0016, 0x0037}, {0x0016, 0x0038}, {0x0016, 0x0039}, - {0x0016, 0x003a}, {0x0016, 0x003b}, {0x0016, 0x003c}, {0x0016, 0x003d}, {0x0016, 0x003e}, {0x0016, 0x003f}, {0x0016, 0x0040}, {0x0016, 0x0041}, - {0x0016, 0x0042}, {0x0016, 0x0043}, {0x0016, 0x0044}, {0x0016, 0x0045}, {0x0016, 0x0046}, {0x0016, 0x0047}, {0x0016, 0x0048}, {0x0016, 0x0049}, - {0x0016, 0x004a}, {0x0016, 0x004b}, {0x0016, 0x004c}, {0x0016, 0x004d}, {0x0016, 0x004e}, {0x0016, 0x004f}, {0x0016, 0x0050}, {0x0016, 0x0051}, - {0x0016, 0x0052}, {0x0016, 0x0053}, {0x0016, 0x0054}, {0x0016, 0x0055}, {0x0016, 0x0056}, {0x0016, 0x0057}, {0x0016, 0x0058}, {0x0016, 0x0059}, - {0x0016, 0x005a}, {0x0016, 0x005b}, {0x0016, 0x005c}, {0x0016, 0x005d}, {0x0016, 0x005e}, {0x0016, 0x005f}, {0x0016, 0x0060}, {0x0016, 0x0061}, - {0x0016, 0x0062}, {0x0016, 0x0063}, {0x0016, 0x0064}, {0x0016, 0x0065}, {0x0016, 0x0066}, {0x0016, 0x0067}, {0x0016, 0x0068}, {0x0016, 0x0069}, - {0x0016, 0x006a}, {0x0016, 0x006b}, {0x0016, 0x006c}, {0x0016, 0x006d}, {0x0016, 0x006e}, {0x0016, 0x006f}, {0x0016, 0x0070}, {0x0016, 0x0071}, - {0x0016, 0x0072}, {0x0016, 0x0073}, {0x0016, 0x0074}, {0x0016, 0x0075}, + { + { 0x0001, 0x0001 }, + { 0x0004, 0x0003 }, + { 0x0005, 0x0003 }, + { 0x0007, 0x0002 }, + { 0x0009, 0x0003 }, + { 0x000c, 0x0004 }, + { 0x000f, 0x0005 }, + { 0x0012, 0x000d }, + { 0x0014, 0x001f }, + { 0x0016, 0x0000 }, + { 0x0016, 0x0001 }, + { 0x0016, 0x0002 }, + { 0x0016, 0x0003 }, + { 0x0016, 0x0004 }, + { 0x0004, 0x0004 }, + { 0x0003, 0x0003 }, + { 0x0005, 0x0004 }, + { 0x0006, 0x0003 }, + { 0x0009, 0x0004 }, + { 0x000b, 0x0004 }, + { 0x000e, 0x0005 }, + { 0x0010, 0x0007 }, + { 0x0012, 0x000e }, + { 0x0014, 0x0020 }, + { 0x0016, 0x0005 }, + { 0x0016, 0x0006 }, + { 0x0016, 0x0007 }, + { 0x0016, 0x0008 }, + { 0x0005, 0x0005 }, + { 0x0004, 0x0005 }, + { 0x0006, 0x0004 }, + { 0x0007, 0x0003 }, + { 0x000a, 0x0004 }, + { 0x000c, 0x0005 }, + { 0x000e, 0x0006 }, + { 0x0011, 0x000a }, + { 0x0012, 0x000f }, + { 0x0015, 0x003b }, + { 0x0016, 0x0009 }, + { 0x0016, 0x000a }, + { 0x0016, 0x000b }, + { 0x0016, 0x000c }, + { 0x0007, 0x0004 }, + { 0x0006, 0x0005 }, + { 0x0007, 0x0005 }, + { 0x0009, 0x0005 }, + { 0x000b, 0x0005 }, + { 0x000d, 0x0005 }, + { 0x000f, 0x0006 }, + { 0x0012, 0x0010 }, + { 0x0014, 0x0021 }, + { 0x0016, 0x000d }, + { 0x0016, 0x000e }, + { 0x0016, 0x000f }, + { 0x0016, 0x0010 }, + { 0x0016, 0x0011 }, + { 0x0009, 0x0006 }, + { 0x0009, 0x0007 }, + { 0x000a, 0x0005 }, + { 0x000b, 0x0006 }, + { 0x000d, 0x0006 }, + { 0x000f, 0x0007 }, + { 0x0011, 0x000b }, + { 0x0013, 0x0017 }, + { 0x0014, 0x0022 }, + { 0x0016, 0x0012 }, + { 0x0016, 0x0013 }, + { 0x0016, 0x0014 }, + { 0x0016, 0x0015 }, + { 0x0016, 0x0016 }, + { 0x000c, 0x0006 }, + { 0x000b, 0x0007 }, + { 0x000c, 0x0007 }, + { 0x000d, 0x0007 }, + { 0x000e, 0x0007 }, + { 0x0010, 0x0008 }, + { 0x0012, 0x0011 }, + { 0x0014, 0x0023 }, + { 0x0015, 0x003c }, + { 0x0016, 0x0017 }, + { 0x0016, 0x0018 }, + { 0x0016, 0x0019 }, + { 0x0016, 0x001a }, + { 0x0016, 0x001b }, + { 0x000f, 0x0008 }, + { 0x000e, 0x0008 }, + { 0x000e, 0x0009 }, + { 0x000f, 0x0009 }, + { 0x0011, 0x000c }, + { 0x0013, 0x0018 }, + { 0x0014, 0x0024 }, + { 0x0016, 0x001c }, + { 0x0016, 0x001d }, + { 0x0016, 0x001e }, + { 0x0016, 0x001f }, + { 0x0016, 0x0020 }, + { 0x0016, 0x0021 }, + { 0x0016, 0x0022 }, + { 0x0011, 0x000d }, + { 0x0010, 0x0009 }, + { 0x0012, 0x0012 }, + { 0x0012, 0x0013 }, + { 0x0014, 0x0025 }, + { 0x0015, 0x003d }, + { 0x0014, 0x0026 }, + { 0x0016, 0x0023 }, + { 0x0016, 0x0024 }, + { 0x0016, 0x0025 }, + { 0x0016, 0x0026 }, + { 0x0016, 0x0027 }, + { 0x0016, 0x0028 }, + { 0x0016, 0x0029 }, + { 0x0014, 0x0027 }, + { 0x0013, 0x0019 }, + { 0x0014, 0x0028 }, + { 0x0014, 0x0029 }, + { 0x0014, 0x002a }, + { 0x0016, 0x002a }, + { 0x0016, 0x002b }, + { 0x0016, 0x002c }, + { 0x0016, 0x002d }, + { 0x0016, 0x002e }, + { 0x0016, 0x002f }, + { 0x0016, 0x0030 }, + { 0x0016, 0x0031 }, + { 0x0016, 0x0032 }, + { 0x0014, 0x002b }, + { 0x0014, 0x002c }, + { 0x0014, 0x002d }, + { 0x0016, 0x0033 }, + { 0x0016, 0x0034 }, + { 0x0016, 0x0035 }, + { 0x0016, 0x0036 }, + { 0x0016, 0x0037 }, + { 0x0016, 0x0038 }, + { 0x0016, 0x0039 }, + { 0x0016, 0x003a }, + { 0x0016, 0x003b }, + { 0x0016, 0x003c }, + { 0x0016, 0x003d }, + { 0x0016, 0x003e }, + { 0x0016, 0x003f }, + { 0x0016, 0x0040 }, + { 0x0016, 0x0041 }, + { 0x0016, 0x0042 }, + { 0x0016, 0x0043 }, + { 0x0016, 0x0044 }, + { 0x0016, 0x0045 }, + { 0x0016, 0x0046 }, + { 0x0016, 0x0047 }, + { 0x0016, 0x0048 }, + { 0x0016, 0x0049 }, + { 0x0016, 0x004a }, + { 0x0016, 0x004b }, + { 0x0016, 0x004c }, + { 0x0016, 0x004d }, + { 0x0016, 0x004e }, + { 0x0016, 0x004f }, + { 0x0016, 0x0050 }, + { 0x0016, 0x0051 }, + { 0x0016, 0x0052 }, + { 0x0016, 0x0053 }, + { 0x0016, 0x0054 }, + { 0x0016, 0x0055 }, + { 0x0016, 0x0056 }, + { 0x0016, 0x0057 }, + { 0x0016, 0x0058 }, + { 0x0016, 0x0059 }, + { 0x0016, 0x005a }, + { 0x0016, 0x005b }, + { 0x0016, 0x005c }, + { 0x0016, 0x005d }, + { 0x0016, 0x005e }, + { 0x0016, 0x005f }, + { 0x0016, 0x0060 }, + { 0x0016, 0x0061 }, + { 0x0016, 0x0062 }, + { 0x0016, 0x0063 }, + { 0x0016, 0x0064 }, + { 0x0016, 0x0065 }, + { 0x0016, 0x0066 }, + { 0x0016, 0x0067 }, + { 0x0016, 0x0068 }, + { 0x0016, 0x0069 }, + { 0x0016, 0x006a }, + { 0x0016, 0x006b }, + { 0x0016, 0x006c }, + { 0x0016, 0x006d }, + { 0x0016, 0x006e }, + { 0x0016, 0x006f }, + { 0x0016, 0x0070 }, + { 0x0016, 0x0071 }, + { 0x0016, 0x0072 }, + { 0x0016, 0x0073 }, + { 0x0016, 0x0074 }, + { 0x0016, 0x0075 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec11[50][16] = -{ - {0x0003ffff, 0x0001ffff, 0x0002ffff, 0x00000001, 0x0000000e, 0x0000001d, 0x0001000f, 0x0001000f, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002b, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, }, - {0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, }, - {0x0007ffff, 0x0005ffff, 0x0004ffff, 0x0006ffff, 0x00010003, 0x00010003, 0x0001001f, 0x0001001f, 0x0001002a, 0x0001002a, 0x0001002c, 0x0001002c, 0x00020011, 0x00020011, 0x00020011, 0x00020011, }, - {0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, }, - {0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x0002003a, 0x0002003a, 0x0002003a, 0x0002003a, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, }, - {0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, }, - {0x000bffff, 0x000affff, 0x0008ffff, 0x0009ffff, 0x00000005, 0x00000021, 0x00000046, 0x00000048, 0x00010013, 0x00010013, 0x0001002e, 0x0001002e, 0x0001003b, 0x0001003b, 0x00010047, 0x00010047, }, - {0x00020055, 0x00020055, 0x00020055, 0x00020055, 0x00020056, 0x00020056, 0x00020056, 0x00020056, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, }, - {0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, }, - {0x00010054, 0x00010054, 0x00010057, 0x00010057, 0x00020014, 0x00020014, 0x00020014, 0x00020014, 0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, }, - {0x0014ffff, 0x0011ffff, 0x0010ffff, 0x000effff, 0x000fffff, 0x000cffff, 0x000dffff, 0x00000015, 0x0000004b, 0x00000063, 0x00010006, 0x00010006, 0x00010030, 0x00010030, 0x0001003d, 0x0001003d, }, - {0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, }, - {0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030062, 0x00030062, 0x00030062, 0x00030062, 0x00030062, 0x00030062, 0x00030062, 0x00030062, }, - {0x00010059, 0x00010059, 0x00010071, 0x00010071, 0x00020007, 0x00020007, 0x00020007, 0x00020007, 0x00020016, 0x00020016, 0x00020016, 0x00020016, 0x00020024, 0x00020024, 0x00020024, 0x00020024, }, - {0x00020031, 0x00020031, 0x00020031, 0x00020031, 0x0002004c, 0x0002004c, 0x0002004c, 0x0002004c, 0x00020064, 0x00020064, 0x00020064, 0x00020064, 0x00020065, 0x00020065, 0x00020065, 0x00020065, }, - {0x00000017, 0x00000032, 0x00000040, 0x0000004d, 0x0000005a, 0x00000066, 0x00000068, 0x00000070, 0x00000072, 0x00000073, 0x00000074, 0x0000007e, 0x0000007f, 0x00000080, 0x0001003f, 0x0001003f, }, - {0x0025ffff, 0x0026ffff, 0x0027ffff, 0x0028ffff, 0x0029ffff, 0x002affff, 0x002bffff, 0x002cffff, 0x002dffff, 0x002effff, 0x002fffff, 0x0030ffff, 0x0031ffff, 0x0013ffff, 0x0012ffff, 0x00000008, }, - {0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, }, - {0x000200c2, 0x000200c2, 0x000200c2, 0x000200c2, 0x000200c3, 0x000200c3, 0x000200c3, 0x000200c3, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, }, - {0x001affff, 0x0019ffff, 0x0015ffff, 0x0018ffff, 0x001dffff, 0x0016ffff, 0x0017ffff, 0x001bffff, 0x001cffff, 0x001effff, 0x001fffff, 0x0020ffff, 0x0021ffff, 0x0022ffff, 0x0023ffff, 0x0024ffff, }, - {0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00020027, 0x00020027, 0x00020027, 0x00020027, 0x00020028, 0x00020028, 0x00020028, 0x00020028, }, - {0x00020043, 0x00020043, 0x00020043, 0x00020043, 0x00020044, 0x00020044, 0x00020044, 0x00020044, 0x00020045, 0x00020045, 0x00020045, 0x00020045, 0x0002004f, 0x0002004f, 0x0002004f, 0x0002004f, }, - {0x00020050, 0x00020050, 0x00020050, 0x00020050, 0x00020051, 0x00020051, 0x00020051, 0x00020051, 0x00020052, 0x00020052, 0x00020052, 0x00020052, 0x00020053, 0x00020053, 0x00020053, 0x00020053, }, - {0x00020029, 0x00020029, 0x00020029, 0x00020029, 0x00020033, 0x00020033, 0x00020033, 0x00020033, 0x00020034, 0x00020034, 0x00020034, 0x00020034, 0x00020035, 0x00020035, 0x00020035, 0x00020035, }, - {0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, }, - {0x00020009, 0x00020009, 0x00020009, 0x00020009, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, }, - {0x0002005b, 0x0002005b, 0x0002005b, 0x0002005b, 0x0002005c, 0x0002005c, 0x0002005c, 0x0002005c, 0x0002005d, 0x0002005d, 0x0002005d, 0x0002005d, 0x0002005e, 0x0002005e, 0x0002005e, 0x0002005e, }, - {0x0002005f, 0x0002005f, 0x0002005f, 0x0002005f, 0x00020060, 0x00020060, 0x00020060, 0x00020060, 0x00020061, 0x00020061, 0x00020061, 0x00020061, 0x00020069, 0x00020069, 0x00020069, 0x00020069, }, - {0x00020036, 0x00020036, 0x00020036, 0x00020036, 0x00020037, 0x00020037, 0x00020037, 0x00020037, 0x00020041, 0x00020041, 0x00020041, 0x00020041, 0x00020042, 0x00020042, 0x00020042, 0x00020042, }, - {0x0002006a, 0x0002006a, 0x0002006a, 0x0002006a, 0x0002006b, 0x0002006b, 0x0002006b, 0x0002006b, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006d, 0x0002006d, 0x0002006d, 0x0002006d, }, - {0x0002006e, 0x0002006e, 0x0002006e, 0x0002006e, 0x0002006f, 0x0002006f, 0x0002006f, 0x0002006f, 0x00020075, 0x00020075, 0x00020075, 0x00020075, 0x00020076, 0x00020076, 0x00020076, 0x00020076, }, - {0x00020077, 0x00020077, 0x00020077, 0x00020077, 0x00020078, 0x00020078, 0x00020078, 0x00020078, 0x00020079, 0x00020079, 0x00020079, 0x00020079, 0x0002007a, 0x0002007a, 0x0002007a, 0x0002007a, }, - {0x0002007b, 0x0002007b, 0x0002007b, 0x0002007b, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007d, 0x0002007d, 0x0002007d, 0x0002007d, 0x00020081, 0x00020081, 0x00020081, 0x00020081, }, - {0x00020082, 0x00020082, 0x00020082, 0x00020082, 0x00020083, 0x00020083, 0x00020083, 0x00020083, 0x00020084, 0x00020084, 0x00020084, 0x00020084, 0x00020085, 0x00020085, 0x00020085, 0x00020085, }, - {0x00020086, 0x00020086, 0x00020086, 0x00020086, 0x00020087, 0x00020087, 0x00020087, 0x00020087, 0x00020088, 0x00020088, 0x00020088, 0x00020088, 0x00020089, 0x00020089, 0x00020089, 0x00020089, }, - {0x0002008a, 0x0002008a, 0x0002008a, 0x0002008a, 0x0002008b, 0x0002008b, 0x0002008b, 0x0002008b, 0x0002008c, 0x0002008c, 0x0002008c, 0x0002008c, 0x0002008d, 0x0002008d, 0x0002008d, 0x0002008d, }, - {0x0002008e, 0x0002008e, 0x0002008e, 0x0002008e, 0x0002008f, 0x0002008f, 0x0002008f, 0x0002008f, 0x00020090, 0x00020090, 0x00020090, 0x00020090, 0x00020091, 0x00020091, 0x00020091, 0x00020091, }, - {0x00020092, 0x00020092, 0x00020092, 0x00020092, 0x00020093, 0x00020093, 0x00020093, 0x00020093, 0x00020094, 0x00020094, 0x00020094, 0x00020094, 0x00020095, 0x00020095, 0x00020095, 0x00020095, }, - {0x00020096, 0x00020096, 0x00020096, 0x00020096, 0x00020097, 0x00020097, 0x00020097, 0x00020097, 0x00020098, 0x00020098, 0x00020098, 0x00020098, 0x00020099, 0x00020099, 0x00020099, 0x00020099, }, - {0x0002009a, 0x0002009a, 0x0002009a, 0x0002009a, 0x0002009b, 0x0002009b, 0x0002009b, 0x0002009b, 0x0002009c, 0x0002009c, 0x0002009c, 0x0002009c, 0x0002009d, 0x0002009d, 0x0002009d, 0x0002009d, }, - {0x0002009e, 0x0002009e, 0x0002009e, 0x0002009e, 0x0002009f, 0x0002009f, 0x0002009f, 0x0002009f, 0x000200a0, 0x000200a0, 0x000200a0, 0x000200a0, 0x000200a1, 0x000200a1, 0x000200a1, 0x000200a1, }, - {0x000200a2, 0x000200a2, 0x000200a2, 0x000200a2, 0x000200a3, 0x000200a3, 0x000200a3, 0x000200a3, 0x000200a4, 0x000200a4, 0x000200a4, 0x000200a4, 0x000200a5, 0x000200a5, 0x000200a5, 0x000200a5, }, - {0x000200a6, 0x000200a6, 0x000200a6, 0x000200a6, 0x000200a7, 0x000200a7, 0x000200a7, 0x000200a7, 0x000200a8, 0x000200a8, 0x000200a8, 0x000200a8, 0x000200a9, 0x000200a9, 0x000200a9, 0x000200a9, }, - {0x000200aa, 0x000200aa, 0x000200aa, 0x000200aa, 0x000200ab, 0x000200ab, 0x000200ab, 0x000200ab, 0x000200ac, 0x000200ac, 0x000200ac, 0x000200ac, 0x000200ad, 0x000200ad, 0x000200ad, 0x000200ad, }, - {0x000200ae, 0x000200ae, 0x000200ae, 0x000200ae, 0x000200af, 0x000200af, 0x000200af, 0x000200af, 0x000200b0, 0x000200b0, 0x000200b0, 0x000200b0, 0x000200b1, 0x000200b1, 0x000200b1, 0x000200b1, }, - {0x000200b2, 0x000200b2, 0x000200b2, 0x000200b2, 0x000200b3, 0x000200b3, 0x000200b3, 0x000200b3, 0x000200b4, 0x000200b4, 0x000200b4, 0x000200b4, 0x000200b5, 0x000200b5, 0x000200b5, 0x000200b5, }, - {0x000200b6, 0x000200b6, 0x000200b6, 0x000200b6, 0x000200b7, 0x000200b7, 0x000200b7, 0x000200b7, 0x000200b8, 0x000200b8, 0x000200b8, 0x000200b8, 0x000200b9, 0x000200b9, 0x000200b9, 0x000200b9, }, - {0x000200ba, 0x000200ba, 0x000200ba, 0x000200ba, 0x000200bb, 0x000200bb, 0x000200bb, 0x000200bb, 0x000200bc, 0x000200bc, 0x000200bc, 0x000200bc, 0x000200bd, 0x000200bd, 0x000200bd, 0x000200bd, }, - {0x000200be, 0x000200be, 0x000200be, 0x000200be, 0x000200bf, 0x000200bf, 0x000200bf, 0x000200bf, 0x000200c0, 0x000200c0, 0x000200c0, 0x000200c0, 0x000200c1, 0x000200c1, 0x000200c1, 0x000200c1, }, +const uint32_t c_aauiCQMFHuffDec11[50][16] = { + { + 0x0003ffff, + 0x0001ffff, + 0x0002ffff, + 0x00000001, + 0x0000000e, + 0x0000001d, + 0x0001000f, + 0x0001000f, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + }, + { + 0x0002001e, + 0x0002001e, + 0x0002001e, + 0x0002001e, + 0x0002002b, + 0x0002002b, + 0x0002002b, + 0x0002002b, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + }, + { + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + }, + { + 0x0007ffff, + 0x0005ffff, + 0x0004ffff, + 0x0006ffff, + 0x00010003, + 0x00010003, + 0x0001001f, + 0x0001001f, + 0x0001002a, + 0x0001002a, + 0x0001002c, + 0x0001002c, + 0x00020011, + 0x00020011, + 0x00020011, + 0x00020011, + }, + { + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + }, + { + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020020, + 0x0002003a, + 0x0002003a, + 0x0002003a, + 0x0002003a, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + }, + { + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + }, + { + 0x000bffff, + 0x000affff, + 0x0008ffff, + 0x0009ffff, + 0x00000005, + 0x00000021, + 0x00000046, + 0x00000048, + 0x00010013, + 0x00010013, + 0x0001002e, + 0x0001002e, + 0x0001003b, + 0x0001003b, + 0x00010047, + 0x00010047, + }, + { + 0x00020055, + 0x00020055, + 0x00020055, + 0x00020055, + 0x00020056, + 0x00020056, + 0x00020056, + 0x00020056, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + }, + { + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + }, + { + 0x00010054, + 0x00010054, + 0x00010057, + 0x00010057, + 0x00020014, + 0x00020014, + 0x00020014, + 0x00020014, + 0x00020022, + 0x00020022, + 0x00020022, + 0x00020022, + 0x0002004a, + 0x0002004a, + 0x0002004a, + 0x0002004a, + }, + { + 0x0014ffff, + 0x0011ffff, + 0x0010ffff, + 0x000effff, + 0x000fffff, + 0x000cffff, + 0x000dffff, + 0x00000015, + 0x0000004b, + 0x00000063, + 0x00010006, + 0x00010006, + 0x00010030, + 0x00010030, + 0x0001003d, + 0x0001003d, + }, + { + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + }, + { + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030062, + 0x00030062, + 0x00030062, + 0x00030062, + 0x00030062, + 0x00030062, + 0x00030062, + 0x00030062, + }, + { + 0x00010059, + 0x00010059, + 0x00010071, + 0x00010071, + 0x00020007, + 0x00020007, + 0x00020007, + 0x00020007, + 0x00020016, + 0x00020016, + 0x00020016, + 0x00020016, + 0x00020024, + 0x00020024, + 0x00020024, + 0x00020024, + }, + { + 0x00020031, + 0x00020031, + 0x00020031, + 0x00020031, + 0x0002004c, + 0x0002004c, + 0x0002004c, + 0x0002004c, + 0x00020064, + 0x00020064, + 0x00020064, + 0x00020064, + 0x00020065, + 0x00020065, + 0x00020065, + 0x00020065, + }, + { + 0x00000017, + 0x00000032, + 0x00000040, + 0x0000004d, + 0x0000005a, + 0x00000066, + 0x00000068, + 0x00000070, + 0x00000072, + 0x00000073, + 0x00000074, + 0x0000007e, + 0x0000007f, + 0x00000080, + 0x0001003f, + 0x0001003f, + }, + { + 0x0025ffff, + 0x0026ffff, + 0x0027ffff, + 0x0028ffff, + 0x0029ffff, + 0x002affff, + 0x002bffff, + 0x002cffff, + 0x002dffff, + 0x002effff, + 0x002fffff, + 0x0030ffff, + 0x0031ffff, + 0x0013ffff, + 0x0012ffff, + 0x00000008, + }, + { + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x00030067, + 0x00030067, + 0x00030067, + 0x00030067, + 0x00030067, + 0x00030067, + 0x00030067, + 0x00030067, + }, + { + 0x000200c2, + 0x000200c2, + 0x000200c2, + 0x000200c2, + 0x000200c3, + 0x000200c3, + 0x000200c3, + 0x000200c3, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + }, + { + 0x001affff, + 0x0019ffff, + 0x0015ffff, + 0x0018ffff, + 0x001dffff, + 0x0016ffff, + 0x0017ffff, + 0x001bffff, + 0x001cffff, + 0x001effff, + 0x001fffff, + 0x0020ffff, + 0x0021ffff, + 0x0022ffff, + 0x0023ffff, + 0x0024ffff, + }, + { + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x00020026, + 0x00020026, + 0x00020026, + 0x00020026, + 0x00020027, + 0x00020027, + 0x00020027, + 0x00020027, + 0x00020028, + 0x00020028, + 0x00020028, + 0x00020028, + }, + { + 0x00020043, + 0x00020043, + 0x00020043, + 0x00020043, + 0x00020044, + 0x00020044, + 0x00020044, + 0x00020044, + 0x00020045, + 0x00020045, + 0x00020045, + 0x00020045, + 0x0002004f, + 0x0002004f, + 0x0002004f, + 0x0002004f, + }, + { + 0x00020050, + 0x00020050, + 0x00020050, + 0x00020050, + 0x00020051, + 0x00020051, + 0x00020051, + 0x00020051, + 0x00020052, + 0x00020052, + 0x00020052, + 0x00020052, + 0x00020053, + 0x00020053, + 0x00020053, + 0x00020053, + }, + { + 0x00020029, + 0x00020029, + 0x00020029, + 0x00020029, + 0x00020033, + 0x00020033, + 0x00020033, + 0x00020033, + 0x00020034, + 0x00020034, + 0x00020034, + 0x00020034, + 0x00020035, + 0x00020035, + 0x00020035, + 0x00020035, + }, + { + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x00020018, + 0x00020018, + 0x00020018, + 0x00020018, + 0x00020019, + 0x00020019, + 0x00020019, + 0x00020019, + 0x0002001a, + 0x0002001a, + 0x0002001a, + 0x0002001a, + }, + { + 0x00020009, + 0x00020009, + 0x00020009, + 0x00020009, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x0002000b, + 0x0002000b, + 0x0002000b, + 0x0002000b, + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x0002000c, + }, + { + 0x0002005b, + 0x0002005b, + 0x0002005b, + 0x0002005b, + 0x0002005c, + 0x0002005c, + 0x0002005c, + 0x0002005c, + 0x0002005d, + 0x0002005d, + 0x0002005d, + 0x0002005d, + 0x0002005e, + 0x0002005e, + 0x0002005e, + 0x0002005e, + }, + { + 0x0002005f, + 0x0002005f, + 0x0002005f, + 0x0002005f, + 0x00020060, + 0x00020060, + 0x00020060, + 0x00020060, + 0x00020061, + 0x00020061, + 0x00020061, + 0x00020061, + 0x00020069, + 0x00020069, + 0x00020069, + 0x00020069, + }, + { + 0x00020036, + 0x00020036, + 0x00020036, + 0x00020036, + 0x00020037, + 0x00020037, + 0x00020037, + 0x00020037, + 0x00020041, + 0x00020041, + 0x00020041, + 0x00020041, + 0x00020042, + 0x00020042, + 0x00020042, + 0x00020042, + }, + { + 0x0002006a, + 0x0002006a, + 0x0002006a, + 0x0002006a, + 0x0002006b, + 0x0002006b, + 0x0002006b, + 0x0002006b, + 0x0002006c, + 0x0002006c, + 0x0002006c, + 0x0002006c, + 0x0002006d, + 0x0002006d, + 0x0002006d, + 0x0002006d, + }, + { + 0x0002006e, + 0x0002006e, + 0x0002006e, + 0x0002006e, + 0x0002006f, + 0x0002006f, + 0x0002006f, + 0x0002006f, + 0x00020075, + 0x00020075, + 0x00020075, + 0x00020075, + 0x00020076, + 0x00020076, + 0x00020076, + 0x00020076, + }, + { + 0x00020077, + 0x00020077, + 0x00020077, + 0x00020077, + 0x00020078, + 0x00020078, + 0x00020078, + 0x00020078, + 0x00020079, + 0x00020079, + 0x00020079, + 0x00020079, + 0x0002007a, + 0x0002007a, + 0x0002007a, + 0x0002007a, + }, + { + 0x0002007b, + 0x0002007b, + 0x0002007b, + 0x0002007b, + 0x0002007c, + 0x0002007c, + 0x0002007c, + 0x0002007c, + 0x0002007d, + 0x0002007d, + 0x0002007d, + 0x0002007d, + 0x00020081, + 0x00020081, + 0x00020081, + 0x00020081, + }, + { + 0x00020082, + 0x00020082, + 0x00020082, + 0x00020082, + 0x00020083, + 0x00020083, + 0x00020083, + 0x00020083, + 0x00020084, + 0x00020084, + 0x00020084, + 0x00020084, + 0x00020085, + 0x00020085, + 0x00020085, + 0x00020085, + }, + { + 0x00020086, + 0x00020086, + 0x00020086, + 0x00020086, + 0x00020087, + 0x00020087, + 0x00020087, + 0x00020087, + 0x00020088, + 0x00020088, + 0x00020088, + 0x00020088, + 0x00020089, + 0x00020089, + 0x00020089, + 0x00020089, + }, + { + 0x0002008a, + 0x0002008a, + 0x0002008a, + 0x0002008a, + 0x0002008b, + 0x0002008b, + 0x0002008b, + 0x0002008b, + 0x0002008c, + 0x0002008c, + 0x0002008c, + 0x0002008c, + 0x0002008d, + 0x0002008d, + 0x0002008d, + 0x0002008d, + }, + { + 0x0002008e, + 0x0002008e, + 0x0002008e, + 0x0002008e, + 0x0002008f, + 0x0002008f, + 0x0002008f, + 0x0002008f, + 0x00020090, + 0x00020090, + 0x00020090, + 0x00020090, + 0x00020091, + 0x00020091, + 0x00020091, + 0x00020091, + }, + { + 0x00020092, + 0x00020092, + 0x00020092, + 0x00020092, + 0x00020093, + 0x00020093, + 0x00020093, + 0x00020093, + 0x00020094, + 0x00020094, + 0x00020094, + 0x00020094, + 0x00020095, + 0x00020095, + 0x00020095, + 0x00020095, + }, + { + 0x00020096, + 0x00020096, + 0x00020096, + 0x00020096, + 0x00020097, + 0x00020097, + 0x00020097, + 0x00020097, + 0x00020098, + 0x00020098, + 0x00020098, + 0x00020098, + 0x00020099, + 0x00020099, + 0x00020099, + 0x00020099, + }, + { + 0x0002009a, + 0x0002009a, + 0x0002009a, + 0x0002009a, + 0x0002009b, + 0x0002009b, + 0x0002009b, + 0x0002009b, + 0x0002009c, + 0x0002009c, + 0x0002009c, + 0x0002009c, + 0x0002009d, + 0x0002009d, + 0x0002009d, + 0x0002009d, + }, + { + 0x0002009e, + 0x0002009e, + 0x0002009e, + 0x0002009e, + 0x0002009f, + 0x0002009f, + 0x0002009f, + 0x0002009f, + 0x000200a0, + 0x000200a0, + 0x000200a0, + 0x000200a0, + 0x000200a1, + 0x000200a1, + 0x000200a1, + 0x000200a1, + }, + { + 0x000200a2, + 0x000200a2, + 0x000200a2, + 0x000200a2, + 0x000200a3, + 0x000200a3, + 0x000200a3, + 0x000200a3, + 0x000200a4, + 0x000200a4, + 0x000200a4, + 0x000200a4, + 0x000200a5, + 0x000200a5, + 0x000200a5, + 0x000200a5, + }, + { + 0x000200a6, + 0x000200a6, + 0x000200a6, + 0x000200a6, + 0x000200a7, + 0x000200a7, + 0x000200a7, + 0x000200a7, + 0x000200a8, + 0x000200a8, + 0x000200a8, + 0x000200a8, + 0x000200a9, + 0x000200a9, + 0x000200a9, + 0x000200a9, + }, + { + 0x000200aa, + 0x000200aa, + 0x000200aa, + 0x000200aa, + 0x000200ab, + 0x000200ab, + 0x000200ab, + 0x000200ab, + 0x000200ac, + 0x000200ac, + 0x000200ac, + 0x000200ac, + 0x000200ad, + 0x000200ad, + 0x000200ad, + 0x000200ad, + }, + { + 0x000200ae, + 0x000200ae, + 0x000200ae, + 0x000200ae, + 0x000200af, + 0x000200af, + 0x000200af, + 0x000200af, + 0x000200b0, + 0x000200b0, + 0x000200b0, + 0x000200b0, + 0x000200b1, + 0x000200b1, + 0x000200b1, + 0x000200b1, + }, + { + 0x000200b2, + 0x000200b2, + 0x000200b2, + 0x000200b2, + 0x000200b3, + 0x000200b3, + 0x000200b3, + 0x000200b3, + 0x000200b4, + 0x000200b4, + 0x000200b4, + 0x000200b4, + 0x000200b5, + 0x000200b5, + 0x000200b5, + 0x000200b5, + }, + { + 0x000200b6, + 0x000200b6, + 0x000200b6, + 0x000200b6, + 0x000200b7, + 0x000200b7, + 0x000200b7, + 0x000200b7, + 0x000200b8, + 0x000200b8, + 0x000200b8, + 0x000200b8, + 0x000200b9, + 0x000200b9, + 0x000200b9, + 0x000200b9, + }, + { + 0x000200ba, + 0x000200ba, + 0x000200ba, + 0x000200ba, + 0x000200bb, + 0x000200bb, + 0x000200bb, + 0x000200bb, + 0x000200bc, + 0x000200bc, + 0x000200bc, + 0x000200bc, + 0x000200bd, + 0x000200bd, + 0x000200bd, + 0x000200bd, + }, + { + 0x000200be, + 0x000200be, + 0x000200be, + 0x000200be, + 0x000200bf, + 0x000200bf, + 0x000200bf, + 0x000200bf, + 0x000200c0, + 0x000200c0, + 0x000200c0, + 0x000200c0, + 0x000200c1, + 0x000200c1, + 0x000200c1, + 0x000200c1, + }, }; #endif @@ -694,126 +5222,1669 @@ const uint32_t c_aauiCQMFHuffEnc12[289][2] = #else const uint16_t c_aauiCQMFHuffEnc12[289][2] = #endif -{ - {0x0001, 0x0001}, {0x0004, 0x0004}, {0x0005, 0x0004}, {0x0007, 0x0004}, {0x0008, 0x0002}, {0x000b, 0x0004}, {0x000e, 0x0006}, {0x0010, 0x0009}, - {0x0012, 0x0014}, {0x0013, 0x001f}, {0x0016, 0x0000}, {0x0016, 0x0001}, {0x0016, 0x0002}, {0x0016, 0x0003}, {0x0016, 0x0004}, {0x0016, 0x0005}, - {0x0016, 0x0006}, {0x0004, 0x0005}, {0x0004, 0x0006}, {0x0005, 0x0005}, {0x0006, 0x0003}, {0x0008, 0x0003}, {0x000a, 0x0004}, {0x000d, 0x0006}, - {0x000f, 0x0008}, {0x0011, 0x000c}, {0x0013, 0x0020}, {0x0016, 0x0007}, {0x0015, 0x0063}, {0x0016, 0x0008}, {0x0016, 0x0009}, {0x0016, 0x000a}, - {0x0016, 0x000b}, {0x0016, 0x000c}, {0x0005, 0x0006}, {0x0004, 0x0007}, {0x0005, 0x0007}, {0x0006, 0x0004}, {0x0008, 0x0004}, {0x000b, 0x0005}, - {0x000d, 0x0007}, {0x0010, 0x000a}, {0x0012, 0x0015}, {0x0015, 0x0064}, {0x0016, 0x000d}, {0x0016, 0x000e}, {0x0016, 0x000f}, {0x0016, 0x0010}, - {0x0016, 0x0011}, {0x0016, 0x0012}, {0x0016, 0x0013}, {0x0006, 0x0005}, {0x0006, 0x0006}, {0x0006, 0x0007}, {0x0008, 0x0005}, {0x000a, 0x0005}, - {0x000c, 0x0005}, {0x000e, 0x0007}, {0x0010, 0x000b}, {0x0012, 0x0016}, {0x0014, 0x0037}, {0x0015, 0x0065}, {0x0016, 0x0014}, {0x0016, 0x0015}, - {0x0016, 0x0016}, {0x0016, 0x0017}, {0x0016, 0x0018}, {0x0016, 0x0019}, {0x0008, 0x0006}, {0x0007, 0x0005}, {0x0008, 0x0007}, {0x000a, 0x0006}, - {0x000c, 0x0006}, {0x000e, 0x0008}, {0x0010, 0x000c}, {0x0011, 0x000d}, {0x0013, 0x0021}, {0x0015, 0x0066}, {0x0016, 0x001a}, {0x0016, 0x001b}, - {0x0016, 0x001c}, {0x0016, 0x001d}, {0x0016, 0x001e}, {0x0016, 0x001f}, {0x0016, 0x0020}, {0x000b, 0x0006}, {0x000a, 0x0007}, {0x000b, 0x0007}, - {0x000c, 0x0007}, {0x000e, 0x0009}, {0x000f, 0x0009}, {0x0011, 0x000e}, {0x0013, 0x0022}, {0x0015, 0x0067}, {0x0015, 0x0068}, {0x0016, 0x0021}, - {0x0016, 0x0022}, {0x0016, 0x0023}, {0x0016, 0x0024}, {0x0016, 0x0025}, {0x0016, 0x0026}, {0x0016, 0x0027}, {0x000e, 0x000a}, {0x000d, 0x0008}, - {0x000d, 0x0009}, {0x000e, 0x000b}, {0x000f, 0x000a}, {0x0011, 0x000f}, {0x0013, 0x0023}, {0x0014, 0x0038}, {0x0016, 0x0028}, {0x0016, 0x0029}, - {0x0016, 0x002a}, {0x0016, 0x002b}, {0x0016, 0x002c}, {0x0016, 0x002d}, {0x0016, 0x002e}, {0x0016, 0x002f}, {0x0016, 0x0030}, {0x0010, 0x000d}, - {0x000f, 0x000b}, {0x0010, 0x000e}, {0x0010, 0x000f}, {0x0012, 0x0017}, {0x0013, 0x0024}, {0x0014, 0x0039}, {0x0016, 0x0031}, {0x0016, 0x0032}, - {0x0016, 0x0033}, {0x0016, 0x0034}, {0x0016, 0x0035}, {0x0016, 0x0036}, {0x0016, 0x0037}, {0x0016, 0x0038}, {0x0016, 0x0039}, {0x0016, 0x003a}, - {0x0013, 0x0025}, {0x0011, 0x0010}, {0x0011, 0x0011}, {0x0013, 0x0026}, {0x0013, 0x0027}, {0x0014, 0x003a}, {0x0014, 0x003b}, {0x0016, 0x003b}, - {0x0016, 0x003c}, {0x0016, 0x003d}, {0x0016, 0x003e}, {0x0016, 0x003f}, {0x0016, 0x0040}, {0x0016, 0x0041}, {0x0016, 0x0042}, {0x0016, 0x0043}, - {0x0016, 0x0044}, {0x0015, 0x0069}, {0x0014, 0x003c}, {0x0014, 0x003d}, {0x0015, 0x006a}, {0x0015, 0x006b}, {0x0015, 0x006c}, {0x0016, 0x0045}, - {0x0016, 0x0046}, {0x0016, 0x0047}, {0x0016, 0x0048}, {0x0016, 0x0049}, {0x0016, 0x004a}, {0x0016, 0x004b}, {0x0016, 0x004c}, {0x0016, 0x004d}, - {0x0016, 0x004e}, {0x0016, 0x004f}, {0x0016, 0x0050}, {0x0016, 0x0051}, {0x0015, 0x006d}, {0x0016, 0x0052}, {0x0016, 0x0053}, {0x0016, 0x0054}, - {0x0016, 0x0055}, {0x0016, 0x0056}, {0x0016, 0x0057}, {0x0016, 0x0058}, {0x0016, 0x0059}, {0x0016, 0x005a}, {0x0016, 0x005b}, {0x0016, 0x005c}, - {0x0016, 0x005d}, {0x0016, 0x005e}, {0x0016, 0x005f}, {0x0016, 0x0060}, {0x0016, 0x0061}, {0x0016, 0x0062}, {0x0016, 0x0063}, {0x0016, 0x0064}, - {0x0016, 0x0065}, {0x0016, 0x0066}, {0x0016, 0x0067}, {0x0016, 0x0068}, {0x0016, 0x0069}, {0x0016, 0x006a}, {0x0016, 0x006b}, {0x0016, 0x006c}, - {0x0016, 0x006d}, {0x0016, 0x006e}, {0x0016, 0x006f}, {0x0016, 0x0070}, {0x0016, 0x0071}, {0x0016, 0x0072}, {0x0016, 0x0073}, {0x0016, 0x0074}, - {0x0016, 0x0075}, {0x0016, 0x0076}, {0x0016, 0x0077}, {0x0016, 0x0078}, {0x0016, 0x0079}, {0x0016, 0x007a}, {0x0016, 0x007b}, {0x0016, 0x007c}, - {0x0016, 0x007d}, {0x0016, 0x007e}, {0x0016, 0x007f}, {0x0016, 0x0080}, {0x0016, 0x0081}, {0x0016, 0x0082}, {0x0016, 0x0083}, {0x0016, 0x0084}, - {0x0016, 0x0085}, {0x0016, 0x0086}, {0x0016, 0x0087}, {0x0016, 0x0088}, {0x0016, 0x0089}, {0x0016, 0x008a}, {0x0016, 0x008b}, {0x0016, 0x008c}, - {0x0016, 0x008d}, {0x0016, 0x008e}, {0x0016, 0x008f}, {0x0016, 0x0090}, {0x0016, 0x0091}, {0x0016, 0x0092}, {0x0016, 0x0093}, {0x0016, 0x0094}, - {0x0016, 0x0095}, {0x0016, 0x0096}, {0x0016, 0x0097}, {0x0016, 0x0098}, {0x0016, 0x0099}, {0x0016, 0x009a}, {0x0016, 0x009b}, {0x0016, 0x009c}, - {0x0016, 0x009d}, {0x0016, 0x009e}, {0x0016, 0x009f}, {0x0016, 0x00a0}, {0x0016, 0x00a1}, {0x0016, 0x00a2}, {0x0016, 0x00a3}, {0x0016, 0x00a4}, - {0x0016, 0x00a5}, {0x0016, 0x00a6}, {0x0016, 0x00a7}, {0x0016, 0x00a8}, {0x0016, 0x00a9}, {0x0016, 0x00aa}, {0x0016, 0x00ab}, {0x0016, 0x00ac}, - {0x0016, 0x00ad}, {0x0016, 0x00ae}, {0x0016, 0x00af}, {0x0016, 0x00b0}, {0x0016, 0x00b1}, {0x0016, 0x00b2}, {0x0016, 0x00b3}, {0x0016, 0x00b4}, - {0x0016, 0x00b5}, {0x0016, 0x00b6}, {0x0016, 0x00b7}, {0x0016, 0x00b8}, {0x0016, 0x00b9}, {0x0016, 0x00ba}, {0x0016, 0x00bb}, {0x0016, 0x00bc}, - {0x0016, 0x00bd}, {0x0016, 0x00be}, {0x0016, 0x00bf}, {0x0016, 0x00c0}, {0x0016, 0x00c1}, {0x0016, 0x00c2}, {0x0016, 0x00c3}, {0x0016, 0x00c4}, - {0x0016, 0x00c5}, + { + { 0x0001, 0x0001 }, + { 0x0004, 0x0004 }, + { 0x0005, 0x0004 }, + { 0x0007, 0x0004 }, + { 0x0008, 0x0002 }, + { 0x000b, 0x0004 }, + { 0x000e, 0x0006 }, + { 0x0010, 0x0009 }, + { 0x0012, 0x0014 }, + { 0x0013, 0x001f }, + { 0x0016, 0x0000 }, + { 0x0016, 0x0001 }, + { 0x0016, 0x0002 }, + { 0x0016, 0x0003 }, + { 0x0016, 0x0004 }, + { 0x0016, 0x0005 }, + { 0x0016, 0x0006 }, + { 0x0004, 0x0005 }, + { 0x0004, 0x0006 }, + { 0x0005, 0x0005 }, + { 0x0006, 0x0003 }, + { 0x0008, 0x0003 }, + { 0x000a, 0x0004 }, + { 0x000d, 0x0006 }, + { 0x000f, 0x0008 }, + { 0x0011, 0x000c }, + { 0x0013, 0x0020 }, + { 0x0016, 0x0007 }, + { 0x0015, 0x0063 }, + { 0x0016, 0x0008 }, + { 0x0016, 0x0009 }, + { 0x0016, 0x000a }, + { 0x0016, 0x000b }, + { 0x0016, 0x000c }, + { 0x0005, 0x0006 }, + { 0x0004, 0x0007 }, + { 0x0005, 0x0007 }, + { 0x0006, 0x0004 }, + { 0x0008, 0x0004 }, + { 0x000b, 0x0005 }, + { 0x000d, 0x0007 }, + { 0x0010, 0x000a }, + { 0x0012, 0x0015 }, + { 0x0015, 0x0064 }, + { 0x0016, 0x000d }, + { 0x0016, 0x000e }, + { 0x0016, 0x000f }, + { 0x0016, 0x0010 }, + { 0x0016, 0x0011 }, + { 0x0016, 0x0012 }, + { 0x0016, 0x0013 }, + { 0x0006, 0x0005 }, + { 0x0006, 0x0006 }, + { 0x0006, 0x0007 }, + { 0x0008, 0x0005 }, + { 0x000a, 0x0005 }, + { 0x000c, 0x0005 }, + { 0x000e, 0x0007 }, + { 0x0010, 0x000b }, + { 0x0012, 0x0016 }, + { 0x0014, 0x0037 }, + { 0x0015, 0x0065 }, + { 0x0016, 0x0014 }, + { 0x0016, 0x0015 }, + { 0x0016, 0x0016 }, + { 0x0016, 0x0017 }, + { 0x0016, 0x0018 }, + { 0x0016, 0x0019 }, + { 0x0008, 0x0006 }, + { 0x0007, 0x0005 }, + { 0x0008, 0x0007 }, + { 0x000a, 0x0006 }, + { 0x000c, 0x0006 }, + { 0x000e, 0x0008 }, + { 0x0010, 0x000c }, + { 0x0011, 0x000d }, + { 0x0013, 0x0021 }, + { 0x0015, 0x0066 }, + { 0x0016, 0x001a }, + { 0x0016, 0x001b }, + { 0x0016, 0x001c }, + { 0x0016, 0x001d }, + { 0x0016, 0x001e }, + { 0x0016, 0x001f }, + { 0x0016, 0x0020 }, + { 0x000b, 0x0006 }, + { 0x000a, 0x0007 }, + { 0x000b, 0x0007 }, + { 0x000c, 0x0007 }, + { 0x000e, 0x0009 }, + { 0x000f, 0x0009 }, + { 0x0011, 0x000e }, + { 0x0013, 0x0022 }, + { 0x0015, 0x0067 }, + { 0x0015, 0x0068 }, + { 0x0016, 0x0021 }, + { 0x0016, 0x0022 }, + { 0x0016, 0x0023 }, + { 0x0016, 0x0024 }, + { 0x0016, 0x0025 }, + { 0x0016, 0x0026 }, + { 0x0016, 0x0027 }, + { 0x000e, 0x000a }, + { 0x000d, 0x0008 }, + { 0x000d, 0x0009 }, + { 0x000e, 0x000b }, + { 0x000f, 0x000a }, + { 0x0011, 0x000f }, + { 0x0013, 0x0023 }, + { 0x0014, 0x0038 }, + { 0x0016, 0x0028 }, + { 0x0016, 0x0029 }, + { 0x0016, 0x002a }, + { 0x0016, 0x002b }, + { 0x0016, 0x002c }, + { 0x0016, 0x002d }, + { 0x0016, 0x002e }, + { 0x0016, 0x002f }, + { 0x0016, 0x0030 }, + { 0x0010, 0x000d }, + { 0x000f, 0x000b }, + { 0x0010, 0x000e }, + { 0x0010, 0x000f }, + { 0x0012, 0x0017 }, + { 0x0013, 0x0024 }, + { 0x0014, 0x0039 }, + { 0x0016, 0x0031 }, + { 0x0016, 0x0032 }, + { 0x0016, 0x0033 }, + { 0x0016, 0x0034 }, + { 0x0016, 0x0035 }, + { 0x0016, 0x0036 }, + { 0x0016, 0x0037 }, + { 0x0016, 0x0038 }, + { 0x0016, 0x0039 }, + { 0x0016, 0x003a }, + { 0x0013, 0x0025 }, + { 0x0011, 0x0010 }, + { 0x0011, 0x0011 }, + { 0x0013, 0x0026 }, + { 0x0013, 0x0027 }, + { 0x0014, 0x003a }, + { 0x0014, 0x003b }, + { 0x0016, 0x003b }, + { 0x0016, 0x003c }, + { 0x0016, 0x003d }, + { 0x0016, 0x003e }, + { 0x0016, 0x003f }, + { 0x0016, 0x0040 }, + { 0x0016, 0x0041 }, + { 0x0016, 0x0042 }, + { 0x0016, 0x0043 }, + { 0x0016, 0x0044 }, + { 0x0015, 0x0069 }, + { 0x0014, 0x003c }, + { 0x0014, 0x003d }, + { 0x0015, 0x006a }, + { 0x0015, 0x006b }, + { 0x0015, 0x006c }, + { 0x0016, 0x0045 }, + { 0x0016, 0x0046 }, + { 0x0016, 0x0047 }, + { 0x0016, 0x0048 }, + { 0x0016, 0x0049 }, + { 0x0016, 0x004a }, + { 0x0016, 0x004b }, + { 0x0016, 0x004c }, + { 0x0016, 0x004d }, + { 0x0016, 0x004e }, + { 0x0016, 0x004f }, + { 0x0016, 0x0050 }, + { 0x0016, 0x0051 }, + { 0x0015, 0x006d }, + { 0x0016, 0x0052 }, + { 0x0016, 0x0053 }, + { 0x0016, 0x0054 }, + { 0x0016, 0x0055 }, + { 0x0016, 0x0056 }, + { 0x0016, 0x0057 }, + { 0x0016, 0x0058 }, + { 0x0016, 0x0059 }, + { 0x0016, 0x005a }, + { 0x0016, 0x005b }, + { 0x0016, 0x005c }, + { 0x0016, 0x005d }, + { 0x0016, 0x005e }, + { 0x0016, 0x005f }, + { 0x0016, 0x0060 }, + { 0x0016, 0x0061 }, + { 0x0016, 0x0062 }, + { 0x0016, 0x0063 }, + { 0x0016, 0x0064 }, + { 0x0016, 0x0065 }, + { 0x0016, 0x0066 }, + { 0x0016, 0x0067 }, + { 0x0016, 0x0068 }, + { 0x0016, 0x0069 }, + { 0x0016, 0x006a }, + { 0x0016, 0x006b }, + { 0x0016, 0x006c }, + { 0x0016, 0x006d }, + { 0x0016, 0x006e }, + { 0x0016, 0x006f }, + { 0x0016, 0x0070 }, + { 0x0016, 0x0071 }, + { 0x0016, 0x0072 }, + { 0x0016, 0x0073 }, + { 0x0016, 0x0074 }, + { 0x0016, 0x0075 }, + { 0x0016, 0x0076 }, + { 0x0016, 0x0077 }, + { 0x0016, 0x0078 }, + { 0x0016, 0x0079 }, + { 0x0016, 0x007a }, + { 0x0016, 0x007b }, + { 0x0016, 0x007c }, + { 0x0016, 0x007d }, + { 0x0016, 0x007e }, + { 0x0016, 0x007f }, + { 0x0016, 0x0080 }, + { 0x0016, 0x0081 }, + { 0x0016, 0x0082 }, + { 0x0016, 0x0083 }, + { 0x0016, 0x0084 }, + { 0x0016, 0x0085 }, + { 0x0016, 0x0086 }, + { 0x0016, 0x0087 }, + { 0x0016, 0x0088 }, + { 0x0016, 0x0089 }, + { 0x0016, 0x008a }, + { 0x0016, 0x008b }, + { 0x0016, 0x008c }, + { 0x0016, 0x008d }, + { 0x0016, 0x008e }, + { 0x0016, 0x008f }, + { 0x0016, 0x0090 }, + { 0x0016, 0x0091 }, + { 0x0016, 0x0092 }, + { 0x0016, 0x0093 }, + { 0x0016, 0x0094 }, + { 0x0016, 0x0095 }, + { 0x0016, 0x0096 }, + { 0x0016, 0x0097 }, + { 0x0016, 0x0098 }, + { 0x0016, 0x0099 }, + { 0x0016, 0x009a }, + { 0x0016, 0x009b }, + { 0x0016, 0x009c }, + { 0x0016, 0x009d }, + { 0x0016, 0x009e }, + { 0x0016, 0x009f }, + { 0x0016, 0x00a0 }, + { 0x0016, 0x00a1 }, + { 0x0016, 0x00a2 }, + { 0x0016, 0x00a3 }, + { 0x0016, 0x00a4 }, + { 0x0016, 0x00a5 }, + { 0x0016, 0x00a6 }, + { 0x0016, 0x00a7 }, + { 0x0016, 0x00a8 }, + { 0x0016, 0x00a9 }, + { 0x0016, 0x00aa }, + { 0x0016, 0x00ab }, + { 0x0016, 0x00ac }, + { 0x0016, 0x00ad }, + { 0x0016, 0x00ae }, + { 0x0016, 0x00af }, + { 0x0016, 0x00b0 }, + { 0x0016, 0x00b1 }, + { 0x0016, 0x00b2 }, + { 0x0016, 0x00b3 }, + { 0x0016, 0x00b4 }, + { 0x0016, 0x00b5 }, + { 0x0016, 0x00b6 }, + { 0x0016, 0x00b7 }, + { 0x0016, 0x00b8 }, + { 0x0016, 0x00b9 }, + { 0x0016, 0x00ba }, + { 0x0016, 0x00bb }, + { 0x0016, 0x00bc }, + { 0x0016, 0x00bd }, + { 0x0016, 0x00be }, + { 0x0016, 0x00bf }, + { 0x0016, 0x00c0 }, + { 0x0016, 0x00c1 }, + { 0x0016, 0x00c2 }, + { 0x0016, 0x00c3 }, + { 0x0016, 0x00c4 }, + { 0x0016, 0x00c5 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec12[76][16] = -{ - {0x0003ffff, 0x0004ffff, 0x0001ffff, 0x0002ffff, 0x00000001, 0x00000011, 0x00000012, 0x00000023, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, }, - {0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, }, - {0x0006ffff, 0x0005ffff, 0x00000004, 0x00000015, 0x00000026, 0x00000036, 0x00000044, 0x00000046, 0x00010003, 0x00010003, 0x00010045, 0x00010045, 0x00020014, 0x00020014, 0x00020014, 0x00020014, }, - {0x00020025, 0x00020025, 0x00020025, 0x00020025, 0x00020033, 0x00020033, 0x00020033, 0x00020033, 0x00020034, 0x00020034, 0x00020034, 0x00020034, 0x00020035, 0x00020035, 0x00020035, 0x00020035, }, - {0x00020016, 0x00020016, 0x00020016, 0x00020016, 0x00020037, 0x00020037, 0x00020037, 0x00020037, 0x00020047, 0x00020047, 0x00020047, 0x00020047, 0x00020056, 0x00020056, 0x00020056, 0x00020056, }, - {0x000bffff, 0x0009ffff, 0x000affff, 0x0007ffff, 0x0008ffff, 0x00000038, 0x00000048, 0x00000058, 0x00010005, 0x00010005, 0x00010027, 0x00010027, 0x00010055, 0x00010055, 0x00010057, 0x00010057, }, - {0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, }, - {0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, }, - {0x00010018, 0x00010018, 0x0001005a, 0x0001005a, 0x0001006a, 0x0001006a, 0x00010078, 0x00010078, 0x00020006, 0x00020006, 0x00020006, 0x00020006, 0x00020039, 0x00020039, 0x00020039, 0x00020039, }, - {0x00020049, 0x00020049, 0x00020049, 0x00020049, 0x00020059, 0x00020059, 0x00020059, 0x00020059, 0x00020066, 0x00020066, 0x00020066, 0x00020066, 0x00020069, 0x00020069, 0x00020069, 0x00020069, }, - {0x0018ffff, 0x0029ffff, 0x003affff, 0x0010ffff, 0x0011ffff, 0x000fffff, 0x000cffff, 0x000dffff, 0x000effff, 0x00000007, 0x00000029, 0x0000003a, 0x0000004a, 0x00000077, 0x00000079, 0x0000007a, }, - {0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, }, - {0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, }, - {0x00030089, 0x00030089, 0x00030089, 0x00030089, 0x00030089, 0x00030089, 0x00030089, 0x00030089, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, }, - {0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002003b, 0x0002003b, 0x0002003b, 0x0002003b, 0x0002007b, 0x0002007b, 0x0002007b, 0x0002007b, }, - {0x004bffff, 0x0012ffff, 0x0015ffff, 0x0013ffff, 0x0014ffff, 0x0016ffff, 0x0017ffff, 0x0000003c, 0x0000006d, 0x0000007d, 0x0000008d, 0x0000008e, 0x0000009a, 0x0000009b, 0x00010009, 0x00010009, }, - {0x0001001a, 0x0001001a, 0x0001004c, 0x0001004c, 0x0001005c, 0x0001005c, 0x0001006c, 0x0001006c, 0x0001007c, 0x0001007c, 0x00010088, 0x00010088, 0x0001008b, 0x0001008b, 0x0001008c, 0x0001008c, }, - {0x0002011f, 0x0002011f, 0x0002011f, 0x0002011f, 0x00020120, 0x00020120, 0x00020120, 0x00020120, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, }, - {0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, }, - {0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x00030099, 0x00030099, 0x00030099, 0x00030099, 0x00030099, 0x00030099, 0x00030099, 0x00030099, }, - {0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, }, - {0x0003009c, 0x0003009c, 0x0003009c, 0x0003009c, 0x0003009c, 0x0003009c, 0x0003009c, 0x0003009c, 0x0003009d, 0x0003009d, 0x0003009d, 0x0003009d, 0x0003009d, 0x0003009d, 0x0003009d, 0x0003009d, }, - {0x0003009e, 0x0003009e, 0x0003009e, 0x0003009e, 0x0003009e, 0x0003009e, 0x0003009e, 0x0003009e, 0x000300ac, 0x000300ac, 0x000300ac, 0x000300ac, 0x000300ac, 0x000300ac, 0x000300ac, 0x000300ac, }, - {0x0025ffff, 0x001fffff, 0x0019ffff, 0x0020ffff, 0x001effff, 0x0021ffff, 0x001affff, 0x001bffff, 0x001cffff, 0x001dffff, 0x0022ffff, 0x0023ffff, 0x0024ffff, 0x0026ffff, 0x0027ffff, 0x0028ffff, }, - {0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x00020020, 0x00020020, 0x00020020, 0x00020020, }, - {0x00020042, 0x00020042, 0x00020042, 0x00020042, 0x00020043, 0x00020043, 0x00020043, 0x00020043, 0x0002004e, 0x0002004e, 0x0002004e, 0x0002004e, 0x0002004f, 0x0002004f, 0x0002004f, 0x0002004f, }, - {0x00020050, 0x00020050, 0x00020050, 0x00020050, 0x00020051, 0x00020051, 0x00020051, 0x00020051, 0x00020052, 0x00020052, 0x00020052, 0x00020052, 0x00020053, 0x00020053, 0x00020053, 0x00020053, }, - {0x00020054, 0x00020054, 0x00020054, 0x00020054, 0x0002005f, 0x0002005f, 0x0002005f, 0x0002005f, 0x00020060, 0x00020060, 0x00020060, 0x00020060, 0x00020061, 0x00020061, 0x00020061, 0x00020061, }, - {0x00020062, 0x00020062, 0x00020062, 0x00020062, 0x00020063, 0x00020063, 0x00020063, 0x00020063, 0x00020064, 0x00020064, 0x00020064, 0x00020064, 0x00020065, 0x00020065, 0x00020065, 0x00020065, }, - {0x0002002f, 0x0002002f, 0x0002002f, 0x0002002f, 0x00020030, 0x00020030, 0x00020030, 0x00020030, 0x00020031, 0x00020031, 0x00020031, 0x00020031, 0x00020032, 0x00020032, 0x00020032, 0x00020032, }, - {0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, }, - {0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, }, - {0x0002003e, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002003f, 0x0002003f, 0x0002003f, 0x0002003f, 0x00020040, 0x00020040, 0x00020040, 0x00020040, 0x00020041, 0x00020041, 0x00020041, 0x00020041, }, - {0x0002006e, 0x0002006e, 0x0002006e, 0x0002006e, 0x0002006f, 0x0002006f, 0x0002006f, 0x0002006f, 0x00020070, 0x00020070, 0x00020070, 0x00020070, 0x00020071, 0x00020071, 0x00020071, 0x00020071, }, - {0x00020072, 0x00020072, 0x00020072, 0x00020072, 0x00020073, 0x00020073, 0x00020073, 0x00020073, 0x00020074, 0x00020074, 0x00020074, 0x00020074, 0x00020075, 0x00020075, 0x00020075, 0x00020075, }, - {0x00020076, 0x00020076, 0x00020076, 0x00020076, 0x0002007e, 0x0002007e, 0x0002007e, 0x0002007e, 0x0002007f, 0x0002007f, 0x0002007f, 0x0002007f, 0x00020080, 0x00020080, 0x00020080, 0x00020080, }, - {0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, }, - {0x00020081, 0x00020081, 0x00020081, 0x00020081, 0x00020082, 0x00020082, 0x00020082, 0x00020082, 0x00020083, 0x00020083, 0x00020083, 0x00020083, 0x00020084, 0x00020084, 0x00020084, 0x00020084, }, - {0x00020085, 0x00020085, 0x00020085, 0x00020085, 0x00020086, 0x00020086, 0x00020086, 0x00020086, 0x00020087, 0x00020087, 0x00020087, 0x00020087, 0x0002008f, 0x0002008f, 0x0002008f, 0x0002008f, }, - {0x00020090, 0x00020090, 0x00020090, 0x00020090, 0x00020091, 0x00020091, 0x00020091, 0x00020091, 0x00020092, 0x00020092, 0x00020092, 0x00020092, 0x00020093, 0x00020093, 0x00020093, 0x00020093, }, - {0x002affff, 0x002bffff, 0x002cffff, 0x002dffff, 0x002effff, 0x002fffff, 0x0030ffff, 0x0031ffff, 0x0032ffff, 0x0033ffff, 0x0034ffff, 0x0035ffff, 0x0036ffff, 0x0037ffff, 0x0038ffff, 0x0039ffff, }, - {0x00020094, 0x00020094, 0x00020094, 0x00020094, 0x00020095, 0x00020095, 0x00020095, 0x00020095, 0x00020096, 0x00020096, 0x00020096, 0x00020096, 0x00020097, 0x00020097, 0x00020097, 0x00020097, }, - {0x00020098, 0x00020098, 0x00020098, 0x00020098, 0x0002009f, 0x0002009f, 0x0002009f, 0x0002009f, 0x000200a0, 0x000200a0, 0x000200a0, 0x000200a0, 0x000200a1, 0x000200a1, 0x000200a1, 0x000200a1, }, - {0x000200a2, 0x000200a2, 0x000200a2, 0x000200a2, 0x000200a3, 0x000200a3, 0x000200a3, 0x000200a3, 0x000200a4, 0x000200a4, 0x000200a4, 0x000200a4, 0x000200a5, 0x000200a5, 0x000200a5, 0x000200a5, }, - {0x000200a6, 0x000200a6, 0x000200a6, 0x000200a6, 0x000200a7, 0x000200a7, 0x000200a7, 0x000200a7, 0x000200a8, 0x000200a8, 0x000200a8, 0x000200a8, 0x000200a9, 0x000200a9, 0x000200a9, 0x000200a9, }, - {0x000200aa, 0x000200aa, 0x000200aa, 0x000200aa, 0x000200ab, 0x000200ab, 0x000200ab, 0x000200ab, 0x000200ad, 0x000200ad, 0x000200ad, 0x000200ad, 0x000200ae, 0x000200ae, 0x000200ae, 0x000200ae, }, - {0x000200af, 0x000200af, 0x000200af, 0x000200af, 0x000200b0, 0x000200b0, 0x000200b0, 0x000200b0, 0x000200b1, 0x000200b1, 0x000200b1, 0x000200b1, 0x000200b2, 0x000200b2, 0x000200b2, 0x000200b2, }, - {0x000200b3, 0x000200b3, 0x000200b3, 0x000200b3, 0x000200b4, 0x000200b4, 0x000200b4, 0x000200b4, 0x000200b5, 0x000200b5, 0x000200b5, 0x000200b5, 0x000200b6, 0x000200b6, 0x000200b6, 0x000200b6, }, - {0x000200b7, 0x000200b7, 0x000200b7, 0x000200b7, 0x000200b8, 0x000200b8, 0x000200b8, 0x000200b8, 0x000200b9, 0x000200b9, 0x000200b9, 0x000200b9, 0x000200ba, 0x000200ba, 0x000200ba, 0x000200ba, }, - {0x000200bb, 0x000200bb, 0x000200bb, 0x000200bb, 0x000200bc, 0x000200bc, 0x000200bc, 0x000200bc, 0x000200bd, 0x000200bd, 0x000200bd, 0x000200bd, 0x000200be, 0x000200be, 0x000200be, 0x000200be, }, - {0x000200bf, 0x000200bf, 0x000200bf, 0x000200bf, 0x000200c0, 0x000200c0, 0x000200c0, 0x000200c0, 0x000200c1, 0x000200c1, 0x000200c1, 0x000200c1, 0x000200c2, 0x000200c2, 0x000200c2, 0x000200c2, }, - {0x000200c3, 0x000200c3, 0x000200c3, 0x000200c3, 0x000200c4, 0x000200c4, 0x000200c4, 0x000200c4, 0x000200c5, 0x000200c5, 0x000200c5, 0x000200c5, 0x000200c6, 0x000200c6, 0x000200c6, 0x000200c6, }, - {0x000200c7, 0x000200c7, 0x000200c7, 0x000200c7, 0x000200c8, 0x000200c8, 0x000200c8, 0x000200c8, 0x000200c9, 0x000200c9, 0x000200c9, 0x000200c9, 0x000200ca, 0x000200ca, 0x000200ca, 0x000200ca, }, - {0x000200cb, 0x000200cb, 0x000200cb, 0x000200cb, 0x000200cc, 0x000200cc, 0x000200cc, 0x000200cc, 0x000200cd, 0x000200cd, 0x000200cd, 0x000200cd, 0x000200ce, 0x000200ce, 0x000200ce, 0x000200ce, }, - {0x000200cf, 0x000200cf, 0x000200cf, 0x000200cf, 0x000200d0, 0x000200d0, 0x000200d0, 0x000200d0, 0x000200d1, 0x000200d1, 0x000200d1, 0x000200d1, 0x000200d2, 0x000200d2, 0x000200d2, 0x000200d2, }, - {0x000200d3, 0x000200d3, 0x000200d3, 0x000200d3, 0x000200d4, 0x000200d4, 0x000200d4, 0x000200d4, 0x000200d5, 0x000200d5, 0x000200d5, 0x000200d5, 0x000200d6, 0x000200d6, 0x000200d6, 0x000200d6, }, - {0x000200d7, 0x000200d7, 0x000200d7, 0x000200d7, 0x000200d8, 0x000200d8, 0x000200d8, 0x000200d8, 0x000200d9, 0x000200d9, 0x000200d9, 0x000200d9, 0x000200da, 0x000200da, 0x000200da, 0x000200da, }, - {0x003bffff, 0x003cffff, 0x003dffff, 0x003effff, 0x003fffff, 0x0040ffff, 0x0041ffff, 0x0042ffff, 0x0043ffff, 0x0044ffff, 0x0045ffff, 0x0046ffff, 0x0047ffff, 0x0048ffff, 0x0049ffff, 0x004affff, }, - {0x000200db, 0x000200db, 0x000200db, 0x000200db, 0x000200dc, 0x000200dc, 0x000200dc, 0x000200dc, 0x000200dd, 0x000200dd, 0x000200dd, 0x000200dd, 0x000200de, 0x000200de, 0x000200de, 0x000200de, }, - {0x000200df, 0x000200df, 0x000200df, 0x000200df, 0x000200e0, 0x000200e0, 0x000200e0, 0x000200e0, 0x000200e1, 0x000200e1, 0x000200e1, 0x000200e1, 0x000200e2, 0x000200e2, 0x000200e2, 0x000200e2, }, - {0x000200e3, 0x000200e3, 0x000200e3, 0x000200e3, 0x000200e4, 0x000200e4, 0x000200e4, 0x000200e4, 0x000200e5, 0x000200e5, 0x000200e5, 0x000200e5, 0x000200e6, 0x000200e6, 0x000200e6, 0x000200e6, }, - {0x000200e7, 0x000200e7, 0x000200e7, 0x000200e7, 0x000200e8, 0x000200e8, 0x000200e8, 0x000200e8, 0x000200e9, 0x000200e9, 0x000200e9, 0x000200e9, 0x000200ea, 0x000200ea, 0x000200ea, 0x000200ea, }, - {0x000200eb, 0x000200eb, 0x000200eb, 0x000200eb, 0x000200ec, 0x000200ec, 0x000200ec, 0x000200ec, 0x000200ed, 0x000200ed, 0x000200ed, 0x000200ed, 0x000200ee, 0x000200ee, 0x000200ee, 0x000200ee, }, - {0x000200ef, 0x000200ef, 0x000200ef, 0x000200ef, 0x000200f0, 0x000200f0, 0x000200f0, 0x000200f0, 0x000200f1, 0x000200f1, 0x000200f1, 0x000200f1, 0x000200f2, 0x000200f2, 0x000200f2, 0x000200f2, }, - {0x000200f3, 0x000200f3, 0x000200f3, 0x000200f3, 0x000200f4, 0x000200f4, 0x000200f4, 0x000200f4, 0x000200f5, 0x000200f5, 0x000200f5, 0x000200f5, 0x000200f6, 0x000200f6, 0x000200f6, 0x000200f6, }, - {0x000200f7, 0x000200f7, 0x000200f7, 0x000200f7, 0x000200f8, 0x000200f8, 0x000200f8, 0x000200f8, 0x000200f9, 0x000200f9, 0x000200f9, 0x000200f9, 0x000200fa, 0x000200fa, 0x000200fa, 0x000200fa, }, - {0x000200fb, 0x000200fb, 0x000200fb, 0x000200fb, 0x000200fc, 0x000200fc, 0x000200fc, 0x000200fc, 0x000200fd, 0x000200fd, 0x000200fd, 0x000200fd, 0x000200fe, 0x000200fe, 0x000200fe, 0x000200fe, }, - {0x000200ff, 0x000200ff, 0x000200ff, 0x000200ff, 0x00020100, 0x00020100, 0x00020100, 0x00020100, 0x00020101, 0x00020101, 0x00020101, 0x00020101, 0x00020102, 0x00020102, 0x00020102, 0x00020102, }, - {0x00020103, 0x00020103, 0x00020103, 0x00020103, 0x00020104, 0x00020104, 0x00020104, 0x00020104, 0x00020105, 0x00020105, 0x00020105, 0x00020105, 0x00020106, 0x00020106, 0x00020106, 0x00020106, }, - {0x00020107, 0x00020107, 0x00020107, 0x00020107, 0x00020108, 0x00020108, 0x00020108, 0x00020108, 0x00020109, 0x00020109, 0x00020109, 0x00020109, 0x0002010a, 0x0002010a, 0x0002010a, 0x0002010a, }, - {0x0002010b, 0x0002010b, 0x0002010b, 0x0002010b, 0x0002010c, 0x0002010c, 0x0002010c, 0x0002010c, 0x0002010d, 0x0002010d, 0x0002010d, 0x0002010d, 0x0002010e, 0x0002010e, 0x0002010e, 0x0002010e, }, - {0x0002010f, 0x0002010f, 0x0002010f, 0x0002010f, 0x00020110, 0x00020110, 0x00020110, 0x00020110, 0x00020111, 0x00020111, 0x00020111, 0x00020111, 0x00020112, 0x00020112, 0x00020112, 0x00020112, }, - {0x00020113, 0x00020113, 0x00020113, 0x00020113, 0x00020114, 0x00020114, 0x00020114, 0x00020114, 0x00020115, 0x00020115, 0x00020115, 0x00020115, 0x00020116, 0x00020116, 0x00020116, 0x00020116, }, - {0x00020117, 0x00020117, 0x00020117, 0x00020117, 0x00020118, 0x00020118, 0x00020118, 0x00020118, 0x00020119, 0x00020119, 0x00020119, 0x00020119, 0x0002011a, 0x0002011a, 0x0002011a, 0x0002011a, }, - {0x0002011b, 0x0002011b, 0x0002011b, 0x0002011b, 0x0002011c, 0x0002011c, 0x0002011c, 0x0002011c, 0x0002011d, 0x0002011d, 0x0002011d, 0x0002011d, 0x0002011e, 0x0002011e, 0x0002011e, 0x0002011e, }, +const uint32_t c_aauiCQMFHuffDec12[76][16] = { + { + 0x0003ffff, + 0x0004ffff, + 0x0001ffff, + 0x0002ffff, + 0x00000001, + 0x00000011, + 0x00000012, + 0x00000023, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + }, + { + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + }, + { + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + }, + { + 0x0006ffff, + 0x0005ffff, + 0x00000004, + 0x00000015, + 0x00000026, + 0x00000036, + 0x00000044, + 0x00000046, + 0x00010003, + 0x00010003, + 0x00010045, + 0x00010045, + 0x00020014, + 0x00020014, + 0x00020014, + 0x00020014, + }, + { + 0x00020025, + 0x00020025, + 0x00020025, + 0x00020025, + 0x00020033, + 0x00020033, + 0x00020033, + 0x00020033, + 0x00020034, + 0x00020034, + 0x00020034, + 0x00020034, + 0x00020035, + 0x00020035, + 0x00020035, + 0x00020035, + }, + { + 0x00020016, + 0x00020016, + 0x00020016, + 0x00020016, + 0x00020037, + 0x00020037, + 0x00020037, + 0x00020037, + 0x00020047, + 0x00020047, + 0x00020047, + 0x00020047, + 0x00020056, + 0x00020056, + 0x00020056, + 0x00020056, + }, + { + 0x000bffff, + 0x0009ffff, + 0x000affff, + 0x0007ffff, + 0x0008ffff, + 0x00000038, + 0x00000048, + 0x00000058, + 0x00010005, + 0x00010005, + 0x00010027, + 0x00010027, + 0x00010055, + 0x00010055, + 0x00010057, + 0x00010057, + }, + { + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + }, + { + 0x00030067, + 0x00030067, + 0x00030067, + 0x00030067, + 0x00030067, + 0x00030067, + 0x00030067, + 0x00030067, + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030068, + }, + { + 0x00010018, + 0x00010018, + 0x0001005a, + 0x0001005a, + 0x0001006a, + 0x0001006a, + 0x00010078, + 0x00010078, + 0x00020006, + 0x00020006, + 0x00020006, + 0x00020006, + 0x00020039, + 0x00020039, + 0x00020039, + 0x00020039, + }, + { + 0x00020049, + 0x00020049, + 0x00020049, + 0x00020049, + 0x00020059, + 0x00020059, + 0x00020059, + 0x00020059, + 0x00020066, + 0x00020066, + 0x00020066, + 0x00020066, + 0x00020069, + 0x00020069, + 0x00020069, + 0x00020069, + }, + { + 0x0018ffff, + 0x0029ffff, + 0x003affff, + 0x0010ffff, + 0x0011ffff, + 0x000fffff, + 0x000cffff, + 0x000dffff, + 0x000effff, + 0x00000007, + 0x00000029, + 0x0000003a, + 0x0000004a, + 0x00000077, + 0x00000079, + 0x0000007a, + }, + { + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x0003004b, + 0x0003004b, + 0x0003004b, + 0x0003004b, + 0x0003004b, + 0x0003004b, + 0x0003004b, + 0x0003004b, + }, + { + 0x0003005b, + 0x0003005b, + 0x0003005b, + 0x0003005b, + 0x0003005b, + 0x0003005b, + 0x0003005b, + 0x0003005b, + 0x0003006b, + 0x0003006b, + 0x0003006b, + 0x0003006b, + 0x0003006b, + 0x0003006b, + 0x0003006b, + 0x0003006b, + }, + { + 0x00030089, + 0x00030089, + 0x00030089, + 0x00030089, + 0x00030089, + 0x00030089, + 0x00030089, + 0x00030089, + 0x0003008a, + 0x0003008a, + 0x0003008a, + 0x0003008a, + 0x0003008a, + 0x0003008a, + 0x0003008a, + 0x0003008a, + }, + { + 0x00020008, + 0x00020008, + 0x00020008, + 0x00020008, + 0x0002002a, + 0x0002002a, + 0x0002002a, + 0x0002002a, + 0x0002003b, + 0x0002003b, + 0x0002003b, + 0x0002003b, + 0x0002007b, + 0x0002007b, + 0x0002007b, + 0x0002007b, + }, + { + 0x004bffff, + 0x0012ffff, + 0x0015ffff, + 0x0013ffff, + 0x0014ffff, + 0x0016ffff, + 0x0017ffff, + 0x0000003c, + 0x0000006d, + 0x0000007d, + 0x0000008d, + 0x0000008e, + 0x0000009a, + 0x0000009b, + 0x00010009, + 0x00010009, + }, + { + 0x0001001a, + 0x0001001a, + 0x0001004c, + 0x0001004c, + 0x0001005c, + 0x0001005c, + 0x0001006c, + 0x0001006c, + 0x0001007c, + 0x0001007c, + 0x00010088, + 0x00010088, + 0x0001008b, + 0x0001008b, + 0x0001008c, + 0x0001008c, + }, + { + 0x0002011f, + 0x0002011f, + 0x0002011f, + 0x0002011f, + 0x00020120, + 0x00020120, + 0x00020120, + 0x00020120, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + }, + { + 0x0003004d, + 0x0003004d, + 0x0003004d, + 0x0003004d, + 0x0003004d, + 0x0003004d, + 0x0003004d, + 0x0003004d, + 0x0003005d, + 0x0003005d, + 0x0003005d, + 0x0003005d, + 0x0003005d, + 0x0003005d, + 0x0003005d, + 0x0003005d, + }, + { + 0x0003005e, + 0x0003005e, + 0x0003005e, + 0x0003005e, + 0x0003005e, + 0x0003005e, + 0x0003005e, + 0x0003005e, + 0x00030099, + 0x00030099, + 0x00030099, + 0x00030099, + 0x00030099, + 0x00030099, + 0x00030099, + 0x00030099, + }, + { + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + }, + { + 0x0003009c, + 0x0003009c, + 0x0003009c, + 0x0003009c, + 0x0003009c, + 0x0003009c, + 0x0003009c, + 0x0003009c, + 0x0003009d, + 0x0003009d, + 0x0003009d, + 0x0003009d, + 0x0003009d, + 0x0003009d, + 0x0003009d, + 0x0003009d, + }, + { + 0x0003009e, + 0x0003009e, + 0x0003009e, + 0x0003009e, + 0x0003009e, + 0x0003009e, + 0x0003009e, + 0x0003009e, + 0x000300ac, + 0x000300ac, + 0x000300ac, + 0x000300ac, + 0x000300ac, + 0x000300ac, + 0x000300ac, + 0x000300ac, + }, + { + 0x0025ffff, + 0x001fffff, + 0x0019ffff, + 0x0020ffff, + 0x001effff, + 0x0021ffff, + 0x001affff, + 0x001bffff, + 0x001cffff, + 0x001dffff, + 0x0022ffff, + 0x0023ffff, + 0x0024ffff, + 0x0026ffff, + 0x0027ffff, + 0x0028ffff, + }, + { + 0x0002001d, + 0x0002001d, + 0x0002001d, + 0x0002001d, + 0x0002001e, + 0x0002001e, + 0x0002001e, + 0x0002001e, + 0x0002001f, + 0x0002001f, + 0x0002001f, + 0x0002001f, + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020020, + }, + { + 0x00020042, + 0x00020042, + 0x00020042, + 0x00020042, + 0x00020043, + 0x00020043, + 0x00020043, + 0x00020043, + 0x0002004e, + 0x0002004e, + 0x0002004e, + 0x0002004e, + 0x0002004f, + 0x0002004f, + 0x0002004f, + 0x0002004f, + }, + { + 0x00020050, + 0x00020050, + 0x00020050, + 0x00020050, + 0x00020051, + 0x00020051, + 0x00020051, + 0x00020051, + 0x00020052, + 0x00020052, + 0x00020052, + 0x00020052, + 0x00020053, + 0x00020053, + 0x00020053, + 0x00020053, + }, + { + 0x00020054, + 0x00020054, + 0x00020054, + 0x00020054, + 0x0002005f, + 0x0002005f, + 0x0002005f, + 0x0002005f, + 0x00020060, + 0x00020060, + 0x00020060, + 0x00020060, + 0x00020061, + 0x00020061, + 0x00020061, + 0x00020061, + }, + { + 0x00020062, + 0x00020062, + 0x00020062, + 0x00020062, + 0x00020063, + 0x00020063, + 0x00020063, + 0x00020063, + 0x00020064, + 0x00020064, + 0x00020064, + 0x00020064, + 0x00020065, + 0x00020065, + 0x00020065, + 0x00020065, + }, + { + 0x0002002f, + 0x0002002f, + 0x0002002f, + 0x0002002f, + 0x00020030, + 0x00020030, + 0x00020030, + 0x00020030, + 0x00020031, + 0x00020031, + 0x00020031, + 0x00020031, + 0x00020032, + 0x00020032, + 0x00020032, + 0x00020032, + }, + { + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0002000f, + 0x0002000f, + 0x0002000f, + 0x0002000f, + 0x00020010, + 0x00020010, + 0x00020010, + 0x00020010, + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002001b, + }, + { + 0x00020021, + 0x00020021, + 0x00020021, + 0x00020021, + 0x0002002c, + 0x0002002c, + 0x0002002c, + 0x0002002c, + 0x0002002d, + 0x0002002d, + 0x0002002d, + 0x0002002d, + 0x0002002e, + 0x0002002e, + 0x0002002e, + 0x0002002e, + }, + { + 0x0002003e, + 0x0002003e, + 0x0002003e, + 0x0002003e, + 0x0002003f, + 0x0002003f, + 0x0002003f, + 0x0002003f, + 0x00020040, + 0x00020040, + 0x00020040, + 0x00020040, + 0x00020041, + 0x00020041, + 0x00020041, + 0x00020041, + }, + { + 0x0002006e, + 0x0002006e, + 0x0002006e, + 0x0002006e, + 0x0002006f, + 0x0002006f, + 0x0002006f, + 0x0002006f, + 0x00020070, + 0x00020070, + 0x00020070, + 0x00020070, + 0x00020071, + 0x00020071, + 0x00020071, + 0x00020071, + }, + { + 0x00020072, + 0x00020072, + 0x00020072, + 0x00020072, + 0x00020073, + 0x00020073, + 0x00020073, + 0x00020073, + 0x00020074, + 0x00020074, + 0x00020074, + 0x00020074, + 0x00020075, + 0x00020075, + 0x00020075, + 0x00020075, + }, + { + 0x00020076, + 0x00020076, + 0x00020076, + 0x00020076, + 0x0002007e, + 0x0002007e, + 0x0002007e, + 0x0002007e, + 0x0002007f, + 0x0002007f, + 0x0002007f, + 0x0002007f, + 0x00020080, + 0x00020080, + 0x00020080, + 0x00020080, + }, + { + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x0002000b, + 0x0002000b, + 0x0002000b, + 0x0002000b, + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0002000d, + }, + { + 0x00020081, + 0x00020081, + 0x00020081, + 0x00020081, + 0x00020082, + 0x00020082, + 0x00020082, + 0x00020082, + 0x00020083, + 0x00020083, + 0x00020083, + 0x00020083, + 0x00020084, + 0x00020084, + 0x00020084, + 0x00020084, + }, + { + 0x00020085, + 0x00020085, + 0x00020085, + 0x00020085, + 0x00020086, + 0x00020086, + 0x00020086, + 0x00020086, + 0x00020087, + 0x00020087, + 0x00020087, + 0x00020087, + 0x0002008f, + 0x0002008f, + 0x0002008f, + 0x0002008f, + }, + { + 0x00020090, + 0x00020090, + 0x00020090, + 0x00020090, + 0x00020091, + 0x00020091, + 0x00020091, + 0x00020091, + 0x00020092, + 0x00020092, + 0x00020092, + 0x00020092, + 0x00020093, + 0x00020093, + 0x00020093, + 0x00020093, + }, + { + 0x002affff, + 0x002bffff, + 0x002cffff, + 0x002dffff, + 0x002effff, + 0x002fffff, + 0x0030ffff, + 0x0031ffff, + 0x0032ffff, + 0x0033ffff, + 0x0034ffff, + 0x0035ffff, + 0x0036ffff, + 0x0037ffff, + 0x0038ffff, + 0x0039ffff, + }, + { + 0x00020094, + 0x00020094, + 0x00020094, + 0x00020094, + 0x00020095, + 0x00020095, + 0x00020095, + 0x00020095, + 0x00020096, + 0x00020096, + 0x00020096, + 0x00020096, + 0x00020097, + 0x00020097, + 0x00020097, + 0x00020097, + }, + { + 0x00020098, + 0x00020098, + 0x00020098, + 0x00020098, + 0x0002009f, + 0x0002009f, + 0x0002009f, + 0x0002009f, + 0x000200a0, + 0x000200a0, + 0x000200a0, + 0x000200a0, + 0x000200a1, + 0x000200a1, + 0x000200a1, + 0x000200a1, + }, + { + 0x000200a2, + 0x000200a2, + 0x000200a2, + 0x000200a2, + 0x000200a3, + 0x000200a3, + 0x000200a3, + 0x000200a3, + 0x000200a4, + 0x000200a4, + 0x000200a4, + 0x000200a4, + 0x000200a5, + 0x000200a5, + 0x000200a5, + 0x000200a5, + }, + { + 0x000200a6, + 0x000200a6, + 0x000200a6, + 0x000200a6, + 0x000200a7, + 0x000200a7, + 0x000200a7, + 0x000200a7, + 0x000200a8, + 0x000200a8, + 0x000200a8, + 0x000200a8, + 0x000200a9, + 0x000200a9, + 0x000200a9, + 0x000200a9, + }, + { + 0x000200aa, + 0x000200aa, + 0x000200aa, + 0x000200aa, + 0x000200ab, + 0x000200ab, + 0x000200ab, + 0x000200ab, + 0x000200ad, + 0x000200ad, + 0x000200ad, + 0x000200ad, + 0x000200ae, + 0x000200ae, + 0x000200ae, + 0x000200ae, + }, + { + 0x000200af, + 0x000200af, + 0x000200af, + 0x000200af, + 0x000200b0, + 0x000200b0, + 0x000200b0, + 0x000200b0, + 0x000200b1, + 0x000200b1, + 0x000200b1, + 0x000200b1, + 0x000200b2, + 0x000200b2, + 0x000200b2, + 0x000200b2, + }, + { + 0x000200b3, + 0x000200b3, + 0x000200b3, + 0x000200b3, + 0x000200b4, + 0x000200b4, + 0x000200b4, + 0x000200b4, + 0x000200b5, + 0x000200b5, + 0x000200b5, + 0x000200b5, + 0x000200b6, + 0x000200b6, + 0x000200b6, + 0x000200b6, + }, + { + 0x000200b7, + 0x000200b7, + 0x000200b7, + 0x000200b7, + 0x000200b8, + 0x000200b8, + 0x000200b8, + 0x000200b8, + 0x000200b9, + 0x000200b9, + 0x000200b9, + 0x000200b9, + 0x000200ba, + 0x000200ba, + 0x000200ba, + 0x000200ba, + }, + { + 0x000200bb, + 0x000200bb, + 0x000200bb, + 0x000200bb, + 0x000200bc, + 0x000200bc, + 0x000200bc, + 0x000200bc, + 0x000200bd, + 0x000200bd, + 0x000200bd, + 0x000200bd, + 0x000200be, + 0x000200be, + 0x000200be, + 0x000200be, + }, + { + 0x000200bf, + 0x000200bf, + 0x000200bf, + 0x000200bf, + 0x000200c0, + 0x000200c0, + 0x000200c0, + 0x000200c0, + 0x000200c1, + 0x000200c1, + 0x000200c1, + 0x000200c1, + 0x000200c2, + 0x000200c2, + 0x000200c2, + 0x000200c2, + }, + { + 0x000200c3, + 0x000200c3, + 0x000200c3, + 0x000200c3, + 0x000200c4, + 0x000200c4, + 0x000200c4, + 0x000200c4, + 0x000200c5, + 0x000200c5, + 0x000200c5, + 0x000200c5, + 0x000200c6, + 0x000200c6, + 0x000200c6, + 0x000200c6, + }, + { + 0x000200c7, + 0x000200c7, + 0x000200c7, + 0x000200c7, + 0x000200c8, + 0x000200c8, + 0x000200c8, + 0x000200c8, + 0x000200c9, + 0x000200c9, + 0x000200c9, + 0x000200c9, + 0x000200ca, + 0x000200ca, + 0x000200ca, + 0x000200ca, + }, + { + 0x000200cb, + 0x000200cb, + 0x000200cb, + 0x000200cb, + 0x000200cc, + 0x000200cc, + 0x000200cc, + 0x000200cc, + 0x000200cd, + 0x000200cd, + 0x000200cd, + 0x000200cd, + 0x000200ce, + 0x000200ce, + 0x000200ce, + 0x000200ce, + }, + { + 0x000200cf, + 0x000200cf, + 0x000200cf, + 0x000200cf, + 0x000200d0, + 0x000200d0, + 0x000200d0, + 0x000200d0, + 0x000200d1, + 0x000200d1, + 0x000200d1, + 0x000200d1, + 0x000200d2, + 0x000200d2, + 0x000200d2, + 0x000200d2, + }, + { + 0x000200d3, + 0x000200d3, + 0x000200d3, + 0x000200d3, + 0x000200d4, + 0x000200d4, + 0x000200d4, + 0x000200d4, + 0x000200d5, + 0x000200d5, + 0x000200d5, + 0x000200d5, + 0x000200d6, + 0x000200d6, + 0x000200d6, + 0x000200d6, + }, + { + 0x000200d7, + 0x000200d7, + 0x000200d7, + 0x000200d7, + 0x000200d8, + 0x000200d8, + 0x000200d8, + 0x000200d8, + 0x000200d9, + 0x000200d9, + 0x000200d9, + 0x000200d9, + 0x000200da, + 0x000200da, + 0x000200da, + 0x000200da, + }, + { + 0x003bffff, + 0x003cffff, + 0x003dffff, + 0x003effff, + 0x003fffff, + 0x0040ffff, + 0x0041ffff, + 0x0042ffff, + 0x0043ffff, + 0x0044ffff, + 0x0045ffff, + 0x0046ffff, + 0x0047ffff, + 0x0048ffff, + 0x0049ffff, + 0x004affff, + }, + { + 0x000200db, + 0x000200db, + 0x000200db, + 0x000200db, + 0x000200dc, + 0x000200dc, + 0x000200dc, + 0x000200dc, + 0x000200dd, + 0x000200dd, + 0x000200dd, + 0x000200dd, + 0x000200de, + 0x000200de, + 0x000200de, + 0x000200de, + }, + { + 0x000200df, + 0x000200df, + 0x000200df, + 0x000200df, + 0x000200e0, + 0x000200e0, + 0x000200e0, + 0x000200e0, + 0x000200e1, + 0x000200e1, + 0x000200e1, + 0x000200e1, + 0x000200e2, + 0x000200e2, + 0x000200e2, + 0x000200e2, + }, + { + 0x000200e3, + 0x000200e3, + 0x000200e3, + 0x000200e3, + 0x000200e4, + 0x000200e4, + 0x000200e4, + 0x000200e4, + 0x000200e5, + 0x000200e5, + 0x000200e5, + 0x000200e5, + 0x000200e6, + 0x000200e6, + 0x000200e6, + 0x000200e6, + }, + { + 0x000200e7, + 0x000200e7, + 0x000200e7, + 0x000200e7, + 0x000200e8, + 0x000200e8, + 0x000200e8, + 0x000200e8, + 0x000200e9, + 0x000200e9, + 0x000200e9, + 0x000200e9, + 0x000200ea, + 0x000200ea, + 0x000200ea, + 0x000200ea, + }, + { + 0x000200eb, + 0x000200eb, + 0x000200eb, + 0x000200eb, + 0x000200ec, + 0x000200ec, + 0x000200ec, + 0x000200ec, + 0x000200ed, + 0x000200ed, + 0x000200ed, + 0x000200ed, + 0x000200ee, + 0x000200ee, + 0x000200ee, + 0x000200ee, + }, + { + 0x000200ef, + 0x000200ef, + 0x000200ef, + 0x000200ef, + 0x000200f0, + 0x000200f0, + 0x000200f0, + 0x000200f0, + 0x000200f1, + 0x000200f1, + 0x000200f1, + 0x000200f1, + 0x000200f2, + 0x000200f2, + 0x000200f2, + 0x000200f2, + }, + { + 0x000200f3, + 0x000200f3, + 0x000200f3, + 0x000200f3, + 0x000200f4, + 0x000200f4, + 0x000200f4, + 0x000200f4, + 0x000200f5, + 0x000200f5, + 0x000200f5, + 0x000200f5, + 0x000200f6, + 0x000200f6, + 0x000200f6, + 0x000200f6, + }, + { + 0x000200f7, + 0x000200f7, + 0x000200f7, + 0x000200f7, + 0x000200f8, + 0x000200f8, + 0x000200f8, + 0x000200f8, + 0x000200f9, + 0x000200f9, + 0x000200f9, + 0x000200f9, + 0x000200fa, + 0x000200fa, + 0x000200fa, + 0x000200fa, + }, + { + 0x000200fb, + 0x000200fb, + 0x000200fb, + 0x000200fb, + 0x000200fc, + 0x000200fc, + 0x000200fc, + 0x000200fc, + 0x000200fd, + 0x000200fd, + 0x000200fd, + 0x000200fd, + 0x000200fe, + 0x000200fe, + 0x000200fe, + 0x000200fe, + }, + { + 0x000200ff, + 0x000200ff, + 0x000200ff, + 0x000200ff, + 0x00020100, + 0x00020100, + 0x00020100, + 0x00020100, + 0x00020101, + 0x00020101, + 0x00020101, + 0x00020101, + 0x00020102, + 0x00020102, + 0x00020102, + 0x00020102, + }, + { + 0x00020103, + 0x00020103, + 0x00020103, + 0x00020103, + 0x00020104, + 0x00020104, + 0x00020104, + 0x00020104, + 0x00020105, + 0x00020105, + 0x00020105, + 0x00020105, + 0x00020106, + 0x00020106, + 0x00020106, + 0x00020106, + }, + { + 0x00020107, + 0x00020107, + 0x00020107, + 0x00020107, + 0x00020108, + 0x00020108, + 0x00020108, + 0x00020108, + 0x00020109, + 0x00020109, + 0x00020109, + 0x00020109, + 0x0002010a, + 0x0002010a, + 0x0002010a, + 0x0002010a, + }, + { + 0x0002010b, + 0x0002010b, + 0x0002010b, + 0x0002010b, + 0x0002010c, + 0x0002010c, + 0x0002010c, + 0x0002010c, + 0x0002010d, + 0x0002010d, + 0x0002010d, + 0x0002010d, + 0x0002010e, + 0x0002010e, + 0x0002010e, + 0x0002010e, + }, + { + 0x0002010f, + 0x0002010f, + 0x0002010f, + 0x0002010f, + 0x00020110, + 0x00020110, + 0x00020110, + 0x00020110, + 0x00020111, + 0x00020111, + 0x00020111, + 0x00020111, + 0x00020112, + 0x00020112, + 0x00020112, + 0x00020112, + }, + { + 0x00020113, + 0x00020113, + 0x00020113, + 0x00020113, + 0x00020114, + 0x00020114, + 0x00020114, + 0x00020114, + 0x00020115, + 0x00020115, + 0x00020115, + 0x00020115, + 0x00020116, + 0x00020116, + 0x00020116, + 0x00020116, + }, + { + 0x00020117, + 0x00020117, + 0x00020117, + 0x00020117, + 0x00020118, + 0x00020118, + 0x00020118, + 0x00020118, + 0x00020119, + 0x00020119, + 0x00020119, + 0x00020119, + 0x0002011a, + 0x0002011a, + 0x0002011a, + 0x0002011a, + }, + { + 0x0002011b, + 0x0002011b, + 0x0002011b, + 0x0002011b, + 0x0002011c, + 0x0002011c, + 0x0002011c, + 0x0002011c, + 0x0002011d, + 0x0002011d, + 0x0002011d, + 0x0002011d, + 0x0002011e, + 0x0002011e, + 0x0002011e, + 0x0002011e, + }, }; #endif @@ -822,143 +6893,1938 @@ const uint32_t c_aauiCQMFHuffEnc13[324][2] = #else const uint16_t c_aauiCQMFHuffEnc13[324][2] = #endif -{ - {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0005, 0x0005}, {0x0005, 0x0006}, {0x0006, 0x0004}, {0x0008, 0x0005}, {0x000a, 0x0005}, {0x000c, 0x0007}, - {0x000e, 0x000b}, {0x0010, 0x0011}, {0x0012, 0x002d}, {0x0015, 0x0000}, {0x0014, 0x0035}, {0x0015, 0x0001}, {0x0015, 0x0002}, {0x0015, 0x0003}, - {0x0015, 0x0004}, {0x0015, 0x0005}, {0x0004, 0x0008}, {0x0003, 0x0007}, {0x0004, 0x0009}, {0x0004, 0x000a}, {0x0006, 0x0005}, {0x0008, 0x0006}, - {0x0009, 0x0006}, {0x000c, 0x0008}, {0x000d, 0x0009}, {0x0010, 0x0012}, {0x0011, 0x001a}, {0x0015, 0x0006}, {0x0015, 0x0007}, {0x0015, 0x0008}, - {0x0015, 0x0009}, {0x0015, 0x000a}, {0x0015, 0x000b}, {0x0015, 0x000c}, {0x0005, 0x0007}, {0x0004, 0x000b}, {0x0004, 0x000c}, {0x0005, 0x0008}, - {0x0006, 0x0006}, {0x0008, 0x0007}, {0x000a, 0x0006}, {0x000c, 0x0009}, {0x000e, 0x000c}, {0x0010, 0x0013}, {0x0012, 0x002e}, {0x0015, 0x000d}, - {0x0015, 0x000e}, {0x0015, 0x000f}, {0x0015, 0x0010}, {0x0015, 0x0011}, {0x0015, 0x0012}, {0x0015, 0x0013}, {0x0005, 0x0009}, {0x0004, 0x000d}, - {0x0005, 0x000a}, {0x0006, 0x0007}, {0x0007, 0x0005}, {0x0009, 0x0007}, {0x000b, 0x0008}, {0x000d, 0x000a}, {0x000f, 0x000e}, {0x0010, 0x0014}, - {0x0011, 0x001b}, {0x0014, 0x0036}, {0x0015, 0x0014}, {0x0015, 0x0015}, {0x0015, 0x0016}, {0x0015, 0x0017}, {0x0015, 0x0018}, {0x0015, 0x0019}, - {0x0006, 0x0008}, {0x0005, 0x000b}, {0x0006, 0x0009}, {0x0007, 0x0006}, {0x0009, 0x0008}, {0x000a, 0x0007}, {0x000c, 0x000a}, {0x000e, 0x000d}, - {0x0010, 0x0015}, {0x0011, 0x001c}, {0x0013, 0x0053}, {0x0015, 0x001a}, {0x0015, 0x001b}, {0x0015, 0x001c}, {0x0015, 0x001d}, {0x0015, 0x001e}, - {0x0015, 0x001f}, {0x0015, 0x0020}, {0x0008, 0x0008}, {0x0007, 0x0007}, {0x0008, 0x0009}, {0x0009, 0x0009}, {0x000a, 0x0008}, {0x000c, 0x000b}, - {0x000d, 0x000b}, {0x000f, 0x000f}, {0x0010, 0x0016}, {0x0011, 0x001d}, {0x0014, 0x0037}, {0x0015, 0x0021}, {0x0015, 0x0022}, {0x0015, 0x0023}, - {0x0015, 0x0024}, {0x0015, 0x0025}, {0x0015, 0x0026}, {0x0015, 0x0027}, {0x000a, 0x0009}, {0x000a, 0x000a}, {0x000a, 0x000b}, {0x000b, 0x0009}, - {0x000c, 0x000c}, {0x000d, 0x000c}, {0x000f, 0x0010}, {0x0010, 0x0017}, {0x0012, 0x002f}, {0x0015, 0x0028}, {0x0015, 0x0029}, {0x0015, 0x002a}, - {0x0015, 0x002b}, {0x0015, 0x002c}, {0x0015, 0x002d}, {0x0015, 0x002e}, {0x0015, 0x002f}, {0x0015, 0x0030}, {0x000c, 0x000d}, {0x000c, 0x000e}, - {0x000c, 0x000f}, {0x000d, 0x000d}, {0x000e, 0x000e}, {0x000f, 0x0011}, {0x0010, 0x0018}, {0x0011, 0x001e}, {0x0014, 0x0038}, {0x0015, 0x0031}, - {0x0015, 0x0032}, {0x0015, 0x0033}, {0x0015, 0x0034}, {0x0015, 0x0035}, {0x0015, 0x0036}, {0x0015, 0x0037}, {0x0015, 0x0038}, {0x0015, 0x0039}, - {0x000f, 0x0012}, {0x000e, 0x000f}, {0x000e, 0x0010}, {0x000e, 0x0011}, {0x000f, 0x0013}, {0x0010, 0x0019}, {0x0011, 0x001f}, {0x0013, 0x0054}, - {0x0015, 0x003a}, {0x0014, 0x0039}, {0x0015, 0x003b}, {0x0015, 0x003c}, {0x0015, 0x003d}, {0x0015, 0x003e}, {0x0015, 0x003f}, {0x0015, 0x0040}, - {0x0015, 0x0041}, {0x0015, 0x0042}, {0x0010, 0x001a}, {0x000f, 0x0014}, {0x000f, 0x0015}, {0x0010, 0x001b}, {0x0011, 0x0020}, {0x0012, 0x0030}, - {0x0013, 0x0055}, {0x0015, 0x0043}, {0x0015, 0x0044}, {0x0014, 0x003a}, {0x0015, 0x0045}, {0x0015, 0x0046}, {0x0015, 0x0047}, {0x0015, 0x0048}, - {0x0015, 0x0049}, {0x0015, 0x004a}, {0x0015, 0x004b}, {0x0015, 0x004c}, {0x0012, 0x0031}, {0x0011, 0x0021}, {0x0013, 0x0056}, {0x0013, 0x0057}, - {0x0012, 0x0032}, {0x0015, 0x004d}, {0x0015, 0x004e}, {0x0015, 0x004f}, {0x0015, 0x0050}, {0x0015, 0x0051}, {0x0015, 0x0052}, {0x0015, 0x0053}, - {0x0015, 0x0054}, {0x0015, 0x0055}, {0x0015, 0x0056}, {0x0015, 0x0057}, {0x0015, 0x0058}, {0x0015, 0x0059}, {0x0015, 0x005a}, {0x0014, 0x003b}, - {0x0012, 0x0033}, {0x0013, 0x0058}, {0x0013, 0x0059}, {0x0015, 0x005b}, {0x0015, 0x005c}, {0x0015, 0x005d}, {0x0015, 0x005e}, {0x0015, 0x005f}, - {0x0015, 0x0060}, {0x0015, 0x0061}, {0x0015, 0x0062}, {0x0015, 0x0063}, {0x0015, 0x0064}, {0x0015, 0x0065}, {0x0015, 0x0066}, {0x0015, 0x0067}, - {0x0015, 0x0068}, {0x0015, 0x0069}, {0x0014, 0x003c}, {0x0014, 0x003d}, {0x0014, 0x003e}, {0x0014, 0x003f}, {0x0014, 0x0040}, {0x0014, 0x0041}, - {0x0014, 0x0042}, {0x0014, 0x0043}, {0x0014, 0x0044}, {0x0014, 0x0045}, {0x0014, 0x0046}, {0x0014, 0x0047}, {0x0014, 0x0048}, {0x0014, 0x0049}, - {0x0014, 0x004a}, {0x0014, 0x004b}, {0x0014, 0x004c}, {0x0014, 0x004d}, {0x0014, 0x004e}, {0x0014, 0x004f}, {0x0014, 0x0050}, {0x0014, 0x0051}, - {0x0014, 0x0052}, {0x0014, 0x0053}, {0x0014, 0x0054}, {0x0014, 0x0055}, {0x0014, 0x0056}, {0x0014, 0x0057}, {0x0014, 0x0058}, {0x0014, 0x0059}, - {0x0014, 0x005a}, {0x0014, 0x005b}, {0x0014, 0x005c}, {0x0014, 0x005d}, {0x0014, 0x005e}, {0x0014, 0x005f}, {0x0014, 0x0060}, {0x0014, 0x0061}, - {0x0014, 0x0062}, {0x0014, 0x0063}, {0x0014, 0x0064}, {0x0014, 0x0065}, {0x0014, 0x0066}, {0x0014, 0x0067}, {0x0014, 0x0068}, {0x0014, 0x0069}, - {0x0014, 0x006a}, {0x0014, 0x006b}, {0x0014, 0x006c}, {0x0014, 0x006d}, {0x0014, 0x006e}, {0x0014, 0x006f}, {0x0014, 0x0070}, {0x0014, 0x0071}, - {0x0014, 0x0072}, {0x0014, 0x0073}, {0x0014, 0x0074}, {0x0014, 0x0075}, {0x0014, 0x0076}, {0x0014, 0x0077}, {0x0014, 0x0078}, {0x0014, 0x0079}, - {0x0014, 0x007a}, {0x0014, 0x007b}, {0x0014, 0x007c}, {0x0014, 0x007d}, {0x0014, 0x007e}, {0x0014, 0x007f}, {0x0014, 0x0080}, {0x0014, 0x0081}, - {0x0014, 0x0082}, {0x0014, 0x0083}, {0x0014, 0x0084}, {0x0014, 0x0085}, {0x0014, 0x0086}, {0x0014, 0x0087}, {0x0014, 0x0088}, {0x0014, 0x0089}, - {0x0014, 0x008a}, {0x0014, 0x008b}, {0x0014, 0x008c}, {0x0014, 0x008d}, {0x0014, 0x008e}, {0x0014, 0x008f}, {0x0014, 0x0090}, {0x0014, 0x0091}, - {0x0014, 0x0092}, {0x0014, 0x0093}, {0x0014, 0x0094}, {0x0014, 0x0095}, {0x0014, 0x0096}, {0x0014, 0x0097}, {0x0014, 0x0098}, {0x0014, 0x0099}, - {0x0014, 0x009a}, {0x0014, 0x009b}, {0x0014, 0x009c}, {0x0014, 0x009d}, {0x0014, 0x009e}, {0x0014, 0x009f}, {0x0014, 0x00a0}, {0x0014, 0x00a1}, - {0x0014, 0x00a2}, {0x0014, 0x00a3}, {0x0014, 0x00a4}, {0x0014, 0x00a5}, + { + { 0x0004, 0x0006 }, + { 0x0004, 0x0007 }, + { 0x0005, 0x0005 }, + { 0x0005, 0x0006 }, + { 0x0006, 0x0004 }, + { 0x0008, 0x0005 }, + { 0x000a, 0x0005 }, + { 0x000c, 0x0007 }, + { 0x000e, 0x000b }, + { 0x0010, 0x0011 }, + { 0x0012, 0x002d }, + { 0x0015, 0x0000 }, + { 0x0014, 0x0035 }, + { 0x0015, 0x0001 }, + { 0x0015, 0x0002 }, + { 0x0015, 0x0003 }, + { 0x0015, 0x0004 }, + { 0x0015, 0x0005 }, + { 0x0004, 0x0008 }, + { 0x0003, 0x0007 }, + { 0x0004, 0x0009 }, + { 0x0004, 0x000a }, + { 0x0006, 0x0005 }, + { 0x0008, 0x0006 }, + { 0x0009, 0x0006 }, + { 0x000c, 0x0008 }, + { 0x000d, 0x0009 }, + { 0x0010, 0x0012 }, + { 0x0011, 0x001a }, + { 0x0015, 0x0006 }, + { 0x0015, 0x0007 }, + { 0x0015, 0x0008 }, + { 0x0015, 0x0009 }, + { 0x0015, 0x000a }, + { 0x0015, 0x000b }, + { 0x0015, 0x000c }, + { 0x0005, 0x0007 }, + { 0x0004, 0x000b }, + { 0x0004, 0x000c }, + { 0x0005, 0x0008 }, + { 0x0006, 0x0006 }, + { 0x0008, 0x0007 }, + { 0x000a, 0x0006 }, + { 0x000c, 0x0009 }, + { 0x000e, 0x000c }, + { 0x0010, 0x0013 }, + { 0x0012, 0x002e }, + { 0x0015, 0x000d }, + { 0x0015, 0x000e }, + { 0x0015, 0x000f }, + { 0x0015, 0x0010 }, + { 0x0015, 0x0011 }, + { 0x0015, 0x0012 }, + { 0x0015, 0x0013 }, + { 0x0005, 0x0009 }, + { 0x0004, 0x000d }, + { 0x0005, 0x000a }, + { 0x0006, 0x0007 }, + { 0x0007, 0x0005 }, + { 0x0009, 0x0007 }, + { 0x000b, 0x0008 }, + { 0x000d, 0x000a }, + { 0x000f, 0x000e }, + { 0x0010, 0x0014 }, + { 0x0011, 0x001b }, + { 0x0014, 0x0036 }, + { 0x0015, 0x0014 }, + { 0x0015, 0x0015 }, + { 0x0015, 0x0016 }, + { 0x0015, 0x0017 }, + { 0x0015, 0x0018 }, + { 0x0015, 0x0019 }, + { 0x0006, 0x0008 }, + { 0x0005, 0x000b }, + { 0x0006, 0x0009 }, + { 0x0007, 0x0006 }, + { 0x0009, 0x0008 }, + { 0x000a, 0x0007 }, + { 0x000c, 0x000a }, + { 0x000e, 0x000d }, + { 0x0010, 0x0015 }, + { 0x0011, 0x001c }, + { 0x0013, 0x0053 }, + { 0x0015, 0x001a }, + { 0x0015, 0x001b }, + { 0x0015, 0x001c }, + { 0x0015, 0x001d }, + { 0x0015, 0x001e }, + { 0x0015, 0x001f }, + { 0x0015, 0x0020 }, + { 0x0008, 0x0008 }, + { 0x0007, 0x0007 }, + { 0x0008, 0x0009 }, + { 0x0009, 0x0009 }, + { 0x000a, 0x0008 }, + { 0x000c, 0x000b }, + { 0x000d, 0x000b }, + { 0x000f, 0x000f }, + { 0x0010, 0x0016 }, + { 0x0011, 0x001d }, + { 0x0014, 0x0037 }, + { 0x0015, 0x0021 }, + { 0x0015, 0x0022 }, + { 0x0015, 0x0023 }, + { 0x0015, 0x0024 }, + { 0x0015, 0x0025 }, + { 0x0015, 0x0026 }, + { 0x0015, 0x0027 }, + { 0x000a, 0x0009 }, + { 0x000a, 0x000a }, + { 0x000a, 0x000b }, + { 0x000b, 0x0009 }, + { 0x000c, 0x000c }, + { 0x000d, 0x000c }, + { 0x000f, 0x0010 }, + { 0x0010, 0x0017 }, + { 0x0012, 0x002f }, + { 0x0015, 0x0028 }, + { 0x0015, 0x0029 }, + { 0x0015, 0x002a }, + { 0x0015, 0x002b }, + { 0x0015, 0x002c }, + { 0x0015, 0x002d }, + { 0x0015, 0x002e }, + { 0x0015, 0x002f }, + { 0x0015, 0x0030 }, + { 0x000c, 0x000d }, + { 0x000c, 0x000e }, + { 0x000c, 0x000f }, + { 0x000d, 0x000d }, + { 0x000e, 0x000e }, + { 0x000f, 0x0011 }, + { 0x0010, 0x0018 }, + { 0x0011, 0x001e }, + { 0x0014, 0x0038 }, + { 0x0015, 0x0031 }, + { 0x0015, 0x0032 }, + { 0x0015, 0x0033 }, + { 0x0015, 0x0034 }, + { 0x0015, 0x0035 }, + { 0x0015, 0x0036 }, + { 0x0015, 0x0037 }, + { 0x0015, 0x0038 }, + { 0x0015, 0x0039 }, + { 0x000f, 0x0012 }, + { 0x000e, 0x000f }, + { 0x000e, 0x0010 }, + { 0x000e, 0x0011 }, + { 0x000f, 0x0013 }, + { 0x0010, 0x0019 }, + { 0x0011, 0x001f }, + { 0x0013, 0x0054 }, + { 0x0015, 0x003a }, + { 0x0014, 0x0039 }, + { 0x0015, 0x003b }, + { 0x0015, 0x003c }, + { 0x0015, 0x003d }, + { 0x0015, 0x003e }, + { 0x0015, 0x003f }, + { 0x0015, 0x0040 }, + { 0x0015, 0x0041 }, + { 0x0015, 0x0042 }, + { 0x0010, 0x001a }, + { 0x000f, 0x0014 }, + { 0x000f, 0x0015 }, + { 0x0010, 0x001b }, + { 0x0011, 0x0020 }, + { 0x0012, 0x0030 }, + { 0x0013, 0x0055 }, + { 0x0015, 0x0043 }, + { 0x0015, 0x0044 }, + { 0x0014, 0x003a }, + { 0x0015, 0x0045 }, + { 0x0015, 0x0046 }, + { 0x0015, 0x0047 }, + { 0x0015, 0x0048 }, + { 0x0015, 0x0049 }, + { 0x0015, 0x004a }, + { 0x0015, 0x004b }, + { 0x0015, 0x004c }, + { 0x0012, 0x0031 }, + { 0x0011, 0x0021 }, + { 0x0013, 0x0056 }, + { 0x0013, 0x0057 }, + { 0x0012, 0x0032 }, + { 0x0015, 0x004d }, + { 0x0015, 0x004e }, + { 0x0015, 0x004f }, + { 0x0015, 0x0050 }, + { 0x0015, 0x0051 }, + { 0x0015, 0x0052 }, + { 0x0015, 0x0053 }, + { 0x0015, 0x0054 }, + { 0x0015, 0x0055 }, + { 0x0015, 0x0056 }, + { 0x0015, 0x0057 }, + { 0x0015, 0x0058 }, + { 0x0015, 0x0059 }, + { 0x0015, 0x005a }, + { 0x0014, 0x003b }, + { 0x0012, 0x0033 }, + { 0x0013, 0x0058 }, + { 0x0013, 0x0059 }, + { 0x0015, 0x005b }, + { 0x0015, 0x005c }, + { 0x0015, 0x005d }, + { 0x0015, 0x005e }, + { 0x0015, 0x005f }, + { 0x0015, 0x0060 }, + { 0x0015, 0x0061 }, + { 0x0015, 0x0062 }, + { 0x0015, 0x0063 }, + { 0x0015, 0x0064 }, + { 0x0015, 0x0065 }, + { 0x0015, 0x0066 }, + { 0x0015, 0x0067 }, + { 0x0015, 0x0068 }, + { 0x0015, 0x0069 }, + { 0x0014, 0x003c }, + { 0x0014, 0x003d }, + { 0x0014, 0x003e }, + { 0x0014, 0x003f }, + { 0x0014, 0x0040 }, + { 0x0014, 0x0041 }, + { 0x0014, 0x0042 }, + { 0x0014, 0x0043 }, + { 0x0014, 0x0044 }, + { 0x0014, 0x0045 }, + { 0x0014, 0x0046 }, + { 0x0014, 0x0047 }, + { 0x0014, 0x0048 }, + { 0x0014, 0x0049 }, + { 0x0014, 0x004a }, + { 0x0014, 0x004b }, + { 0x0014, 0x004c }, + { 0x0014, 0x004d }, + { 0x0014, 0x004e }, + { 0x0014, 0x004f }, + { 0x0014, 0x0050 }, + { 0x0014, 0x0051 }, + { 0x0014, 0x0052 }, + { 0x0014, 0x0053 }, + { 0x0014, 0x0054 }, + { 0x0014, 0x0055 }, + { 0x0014, 0x0056 }, + { 0x0014, 0x0057 }, + { 0x0014, 0x0058 }, + { 0x0014, 0x0059 }, + { 0x0014, 0x005a }, + { 0x0014, 0x005b }, + { 0x0014, 0x005c }, + { 0x0014, 0x005d }, + { 0x0014, 0x005e }, + { 0x0014, 0x005f }, + { 0x0014, 0x0060 }, + { 0x0014, 0x0061 }, + { 0x0014, 0x0062 }, + { 0x0014, 0x0063 }, + { 0x0014, 0x0064 }, + { 0x0014, 0x0065 }, + { 0x0014, 0x0066 }, + { 0x0014, 0x0067 }, + { 0x0014, 0x0068 }, + { 0x0014, 0x0069 }, + { 0x0014, 0x006a }, + { 0x0014, 0x006b }, + { 0x0014, 0x006c }, + { 0x0014, 0x006d }, + { 0x0014, 0x006e }, + { 0x0014, 0x006f }, + { 0x0014, 0x0070 }, + { 0x0014, 0x0071 }, + { 0x0014, 0x0072 }, + { 0x0014, 0x0073 }, + { 0x0014, 0x0074 }, + { 0x0014, 0x0075 }, + { 0x0014, 0x0076 }, + { 0x0014, 0x0077 }, + { 0x0014, 0x0078 }, + { 0x0014, 0x0079 }, + { 0x0014, 0x007a }, + { 0x0014, 0x007b }, + { 0x0014, 0x007c }, + { 0x0014, 0x007d }, + { 0x0014, 0x007e }, + { 0x0014, 0x007f }, + { 0x0014, 0x0080 }, + { 0x0014, 0x0081 }, + { 0x0014, 0x0082 }, + { 0x0014, 0x0083 }, + { 0x0014, 0x0084 }, + { 0x0014, 0x0085 }, + { 0x0014, 0x0086 }, + { 0x0014, 0x0087 }, + { 0x0014, 0x0088 }, + { 0x0014, 0x0089 }, + { 0x0014, 0x008a }, + { 0x0014, 0x008b }, + { 0x0014, 0x008c }, + { 0x0014, 0x008d }, + { 0x0014, 0x008e }, + { 0x0014, 0x008f }, + { 0x0014, 0x0090 }, + { 0x0014, 0x0091 }, + { 0x0014, 0x0092 }, + { 0x0014, 0x0093 }, + { 0x0014, 0x0094 }, + { 0x0014, 0x0095 }, + { 0x0014, 0x0096 }, + { 0x0014, 0x0097 }, + { 0x0014, 0x0098 }, + { 0x0014, 0x0099 }, + { 0x0014, 0x009a }, + { 0x0014, 0x009b }, + { 0x0014, 0x009c }, + { 0x0014, 0x009d }, + { 0x0014, 0x009e }, + { 0x0014, 0x009f }, + { 0x0014, 0x00a0 }, + { 0x0014, 0x00a1 }, + { 0x0014, 0x00a2 }, + { 0x0014, 0x00a3 }, + { 0x0014, 0x00a4 }, + { 0x0014, 0x00a5 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec13[89][16] = -{ - {0x0006ffff, 0x0005ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x00000000, 0x00000001, 0x00000012, 0x00000014, 0x00000015, 0x00000025, 0x00000026, 0x00000037, 0x00010013, 0x00010013, }, - {0x00020048, 0x00020048, 0x00020048, 0x00020048, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, }, - {0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, }, - {0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, }, - {0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, }, - {0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x00020016, 0x00020016, 0x00020016, 0x00020016, 0x00020028, 0x00020028, 0x00020028, 0x00020028, 0x00020039, 0x00020039, 0x00020039, 0x00020039, }, - {0x000bffff, 0x0009ffff, 0x000affff, 0x0007ffff, 0x0008ffff, 0x00000005, 0x00000017, 0x00000029, 0x0000005a, 0x0000005c, 0x0001003a, 0x0001003a, 0x0001004b, 0x0001004b, 0x0001005b, 0x0001005b, }, - {0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, }, - {0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, }, - {0x0001003c, 0x0001003c, 0x0001006f, 0x0001006f, 0x00020006, 0x00020006, 0x00020006, 0x00020006, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002004d, 0x0002004d, 0x0002004d, 0x0002004d, }, - {0x0002005e, 0x0002005e, 0x0002005e, 0x0002005e, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006d, 0x0002006d, 0x0002006d, 0x0002006d, 0x0002006e, 0x0002006e, 0x0002006e, 0x0002006e, }, - {0x0012ffff, 0x0011ffff, 0x0010ffff, 0x000fffff, 0x000dffff, 0x000cffff, 0x000effff, 0x00000007, 0x00000019, 0x0000002b, 0x0000004e, 0x0000005f, 0x00000070, 0x0000007e, 0x0000007f, 0x00000080, }, - {0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, }, - {0x00020092, 0x00020092, 0x00020092, 0x00020092, 0x00020093, 0x00020093, 0x00020093, 0x00020093, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, }, - {0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, }, - {0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002004f, 0x0002004f, 0x0002004f, 0x0002004f, 0x00020082, 0x00020082, 0x00020082, 0x00020082, 0x00020091, 0x00020091, 0x00020091, 0x00020091, }, - {0x00010072, 0x00010072, 0x00010083, 0x00010083, 0x00010090, 0x00010090, 0x00010094, 0x00010094, 0x000100a3, 0x000100a3, 0x000100a4, 0x000100a4, 0x00020008, 0x00020008, 0x00020008, 0x00020008, }, - {0x0016ffff, 0x00000009, 0x0000001b, 0x0000002d, 0x0000003f, 0x00000050, 0x00000062, 0x00000073, 0x00000084, 0x00000095, 0x000000a2, 0x000000a5, 0x0001003e, 0x0001003e, 0x00010061, 0x00010061, }, - {0x0021ffff, 0x0024ffff, 0x003dffff, 0x001affff, 0x001bffff, 0x001cffff, 0x001dffff, 0x001effff, 0x001fffff, 0x0020ffff, 0x0019ffff, 0x0017ffff, 0x0018ffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, }, - {0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, }, - {0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, }, - {0x00030085, 0x00030085, 0x00030085, 0x00030085, 0x00030085, 0x00030085, 0x00030085, 0x00030085, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, }, - {0x000300a6, 0x000300a6, 0x000300a6, 0x000300a6, 0x000300a6, 0x000300a6, 0x000300a6, 0x000300a6, 0x000300b5, 0x000300b5, 0x000300b5, 0x000300b5, 0x000300b5, 0x000300b5, 0x000300b5, 0x000300b5, }, - {0x000100c9, 0x000100c9, 0x000100ca, 0x000100ca, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, 0x00020074, 0x00020074, 0x00020074, 0x00020074, }, - {0x000200a7, 0x000200a7, 0x000200a7, 0x000200a7, 0x000200b4, 0x000200b4, 0x000200b4, 0x000200b4, 0x000200b8, 0x000200b8, 0x000200b8, 0x000200b8, 0x000200c8, 0x000200c8, 0x000200c8, 0x000200c8, }, - {0x0000013e, 0x0000013f, 0x00000140, 0x00000141, 0x00000142, 0x00000143, 0x00010052, 0x00010052, 0x00010097, 0x00010097, 0x000100a8, 0x000100a8, 0x000100b6, 0x000100b6, 0x000100b7, 0x000100b7, }, - {0x0054ffff, 0x0055ffff, 0x0056ffff, 0x0057ffff, 0x0058ffff, 0x0000000c, 0x00000041, 0x00000064, 0x00000086, 0x00000099, 0x000000ab, 0x000000c7, 0x000000da, 0x000000db, 0x000000dc, 0x000000dd, }, - {0x000000de, 0x000000df, 0x000000e0, 0x000000e1, 0x000000e2, 0x000000e3, 0x000000e4, 0x000000e5, 0x000000e6, 0x000000e7, 0x000000e8, 0x000000e9, 0x000000ea, 0x000000eb, 0x000000ec, 0x000000ed, }, - {0x000000ee, 0x000000ef, 0x000000f0, 0x000000f1, 0x000000f2, 0x000000f3, 0x000000f4, 0x000000f5, 0x000000f6, 0x000000f7, 0x000000f8, 0x000000f9, 0x000000fa, 0x000000fb, 0x000000fc, 0x000000fd, }, - {0x000000fe, 0x000000ff, 0x00000100, 0x00000101, 0x00000102, 0x00000103, 0x00000104, 0x00000105, 0x00000106, 0x00000107, 0x00000108, 0x00000109, 0x0000010a, 0x0000010b, 0x0000010c, 0x0000010d, }, - {0x0000010e, 0x0000010f, 0x00000110, 0x00000111, 0x00000112, 0x00000113, 0x00000114, 0x00000115, 0x00000116, 0x00000117, 0x00000118, 0x00000119, 0x0000011a, 0x0000011b, 0x0000011c, 0x0000011d, }, - {0x0000011e, 0x0000011f, 0x00000120, 0x00000121, 0x00000122, 0x00000123, 0x00000124, 0x00000125, 0x00000126, 0x00000127, 0x00000128, 0x00000129, 0x0000012a, 0x0000012b, 0x0000012c, 0x0000012d, }, - {0x0000012e, 0x0000012f, 0x00000130, 0x00000131, 0x00000132, 0x00000133, 0x00000134, 0x00000135, 0x00000136, 0x00000137, 0x00000138, 0x00000139, 0x0000013a, 0x0000013b, 0x0000013c, 0x0000013d, }, - {0x0026ffff, 0x002dffff, 0x0037ffff, 0x0023ffff, 0x0044ffff, 0x002effff, 0x003affff, 0x0022ffff, 0x002cffff, 0x0035ffff, 0x002fffff, 0x0036ffff, 0x0040ffff, 0x0049ffff, 0x0030ffff, 0x0038ffff, }, - {0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, }, - {0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, }, - {0x0041ffff, 0x004affff, 0x0042ffff, 0x0025ffff, 0x0027ffff, 0x0028ffff, 0x0029ffff, 0x002affff, 0x002bffff, 0x0031ffff, 0x0032ffff, 0x0033ffff, 0x0034ffff, 0x0039ffff, 0x003bffff, 0x003cffff, }, - {0x0003006a, 0x0003006a, 0x0003006a, 0x0003006a, 0x0003006a, 0x0003006a, 0x0003006a, 0x0003006a, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, }, - {0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, }, - {0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, }, - {0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, }, - {0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, }, - {0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007c, 0x0003007c, 0x0003007c, 0x0003007c, 0x0003007c, 0x0003007c, 0x0003007c, 0x0003007c, }, - {0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x00030087, 0x00030087, 0x00030087, 0x00030087, 0x00030087, 0x00030087, 0x00030087, 0x00030087, }, - {0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, }, - {0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, - {0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, }, - {0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, }, - {0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, }, - {0x00030088, 0x00030088, 0x00030088, 0x00030088, 0x00030088, 0x00030088, 0x00030088, 0x00030088, 0x00030089, 0x00030089, 0x00030089, 0x00030089, 0x00030089, 0x00030089, 0x00030089, 0x00030089, }, - {0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008b, 0x0003008b, 0x0003008b, 0x0003008b, 0x0003008b, 0x0003008b, 0x0003008b, 0x0003008b, }, - {0x0003008c, 0x0003008c, 0x0003008c, 0x0003008c, 0x0003008c, 0x0003008c, 0x0003008c, 0x0003008c, 0x0003008d, 0x0003008d, 0x0003008d, 0x0003008d, 0x0003008d, 0x0003008d, 0x0003008d, 0x0003008d, }, - {0x0003008e, 0x0003008e, 0x0003008e, 0x0003008e, 0x0003008e, 0x0003008e, 0x0003008e, 0x0003008e, 0x0003008f, 0x0003008f, 0x0003008f, 0x0003008f, 0x0003008f, 0x0003008f, 0x0003008f, 0x0003008f, }, - {0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, }, - {0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, }, - {0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, - {0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, }, - {0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x0003009a, 0x0003009a, 0x0003009a, 0x0003009a, 0x0003009a, 0x0003009a, 0x0003009a, 0x0003009a, }, - {0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, }, - {0x0003009b, 0x0003009b, 0x0003009b, 0x0003009b, 0x0003009b, 0x0003009b, 0x0003009b, 0x0003009b, 0x0003009c, 0x0003009c, 0x0003009c, 0x0003009c, 0x0003009c, 0x0003009c, 0x0003009c, 0x0003009c, }, - {0x0003009d, 0x0003009d, 0x0003009d, 0x0003009d, 0x0003009d, 0x0003009d, 0x0003009d, 0x0003009d, 0x0003009e, 0x0003009e, 0x0003009e, 0x0003009e, 0x0003009e, 0x0003009e, 0x0003009e, 0x0003009e, }, - {0x003effff, 0x003fffff, 0x0043ffff, 0x0045ffff, 0x0046ffff, 0x0047ffff, 0x0048ffff, 0x004bffff, 0x004cffff, 0x004dffff, 0x004effff, 0x004fffff, 0x0050ffff, 0x0051ffff, 0x0052ffff, 0x0053ffff, }, - {0x0003009f, 0x0003009f, 0x0003009f, 0x0003009f, 0x0003009f, 0x0003009f, 0x0003009f, 0x0003009f, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, }, - {0x000300a1, 0x000300a1, 0x000300a1, 0x000300a1, 0x000300a1, 0x000300a1, 0x000300a1, 0x000300a1, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, }, - {0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, }, - {0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, 0x00030065, }, - {0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, }, - {0x000300aa, 0x000300aa, 0x000300aa, 0x000300aa, 0x000300aa, 0x000300aa, 0x000300aa, 0x000300aa, 0x000300ac, 0x000300ac, 0x000300ac, 0x000300ac, 0x000300ac, 0x000300ac, 0x000300ac, 0x000300ac, }, - {0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, }, - {0x000300ad, 0x000300ad, 0x000300ad, 0x000300ad, 0x000300ad, 0x000300ad, 0x000300ad, 0x000300ad, 0x000300ae, 0x000300ae, 0x000300ae, 0x000300ae, 0x000300ae, 0x000300ae, 0x000300ae, 0x000300ae, }, - {0x000300af, 0x000300af, 0x000300af, 0x000300af, 0x000300af, 0x000300af, 0x000300af, 0x000300af, 0x000300b0, 0x000300b0, 0x000300b0, 0x000300b0, 0x000300b0, 0x000300b0, 0x000300b0, 0x000300b0, }, - {0x000300b1, 0x000300b1, 0x000300b1, 0x000300b1, 0x000300b1, 0x000300b1, 0x000300b1, 0x000300b1, 0x000300b2, 0x000300b2, 0x000300b2, 0x000300b2, 0x000300b2, 0x000300b2, 0x000300b2, 0x000300b2, }, - {0x000300b3, 0x000300b3, 0x000300b3, 0x000300b3, 0x000300b3, 0x000300b3, 0x000300b3, 0x000300b3, 0x000300b9, 0x000300b9, 0x000300b9, 0x000300b9, 0x000300b9, 0x000300b9, 0x000300b9, 0x000300b9, }, - {0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, }, - {0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, }, - {0x000300ba, 0x000300ba, 0x000300ba, 0x000300ba, 0x000300ba, 0x000300ba, 0x000300ba, 0x000300ba, 0x000300bb, 0x000300bb, 0x000300bb, 0x000300bb, 0x000300bb, 0x000300bb, 0x000300bb, 0x000300bb, }, - {0x000300bc, 0x000300bc, 0x000300bc, 0x000300bc, 0x000300bc, 0x000300bc, 0x000300bc, 0x000300bc, 0x000300bd, 0x000300bd, 0x000300bd, 0x000300bd, 0x000300bd, 0x000300bd, 0x000300bd, 0x000300bd, }, - {0x000300be, 0x000300be, 0x000300be, 0x000300be, 0x000300be, 0x000300be, 0x000300be, 0x000300be, 0x000300bf, 0x000300bf, 0x000300bf, 0x000300bf, 0x000300bf, 0x000300bf, 0x000300bf, 0x000300bf, }, - {0x000300c0, 0x000300c0, 0x000300c0, 0x000300c0, 0x000300c0, 0x000300c0, 0x000300c0, 0x000300c0, 0x000300c1, 0x000300c1, 0x000300c1, 0x000300c1, 0x000300c1, 0x000300c1, 0x000300c1, 0x000300c1, }, - {0x000300c2, 0x000300c2, 0x000300c2, 0x000300c2, 0x000300c2, 0x000300c2, 0x000300c2, 0x000300c2, 0x000300c3, 0x000300c3, 0x000300c3, 0x000300c3, 0x000300c3, 0x000300c3, 0x000300c3, 0x000300c3, }, - {0x000300c4, 0x000300c4, 0x000300c4, 0x000300c4, 0x000300c4, 0x000300c4, 0x000300c4, 0x000300c4, 0x000300c5, 0x000300c5, 0x000300c5, 0x000300c5, 0x000300c5, 0x000300c5, 0x000300c5, 0x000300c5, }, - {0x000300c6, 0x000300c6, 0x000300c6, 0x000300c6, 0x000300c6, 0x000300c6, 0x000300c6, 0x000300c6, 0x000300cb, 0x000300cb, 0x000300cb, 0x000300cb, 0x000300cb, 0x000300cb, 0x000300cb, 0x000300cb, }, - {0x000300cc, 0x000300cc, 0x000300cc, 0x000300cc, 0x000300cc, 0x000300cc, 0x000300cc, 0x000300cc, 0x000300cd, 0x000300cd, 0x000300cd, 0x000300cd, 0x000300cd, 0x000300cd, 0x000300cd, 0x000300cd, }, - {0x000300ce, 0x000300ce, 0x000300ce, 0x000300ce, 0x000300ce, 0x000300ce, 0x000300ce, 0x000300ce, 0x000300cf, 0x000300cf, 0x000300cf, 0x000300cf, 0x000300cf, 0x000300cf, 0x000300cf, 0x000300cf, }, - {0x000300d0, 0x000300d0, 0x000300d0, 0x000300d0, 0x000300d0, 0x000300d0, 0x000300d0, 0x000300d0, 0x000300d1, 0x000300d1, 0x000300d1, 0x000300d1, 0x000300d1, 0x000300d1, 0x000300d1, 0x000300d1, }, - {0x000300d2, 0x000300d2, 0x000300d2, 0x000300d2, 0x000300d2, 0x000300d2, 0x000300d2, 0x000300d2, 0x000300d3, 0x000300d3, 0x000300d3, 0x000300d3, 0x000300d3, 0x000300d3, 0x000300d3, 0x000300d3, }, - {0x000300d4, 0x000300d4, 0x000300d4, 0x000300d4, 0x000300d4, 0x000300d4, 0x000300d4, 0x000300d4, 0x000300d5, 0x000300d5, 0x000300d5, 0x000300d5, 0x000300d5, 0x000300d5, 0x000300d5, 0x000300d5, }, - {0x000300d6, 0x000300d6, 0x000300d6, 0x000300d6, 0x000300d6, 0x000300d6, 0x000300d6, 0x000300d6, 0x000300d7, 0x000300d7, 0x000300d7, 0x000300d7, 0x000300d7, 0x000300d7, 0x000300d7, 0x000300d7, }, - {0x000300d8, 0x000300d8, 0x000300d8, 0x000300d8, 0x000300d8, 0x000300d8, 0x000300d8, 0x000300d8, 0x000300d9, 0x000300d9, 0x000300d9, 0x000300d9, 0x000300d9, 0x000300d9, 0x000300d9, 0x000300d9, }, +const uint32_t c_aauiCQMFHuffDec13[89][16] = { + { + 0x0006ffff, + 0x0005ffff, + 0x0001ffff, + 0x0002ffff, + 0x0003ffff, + 0x0004ffff, + 0x00000000, + 0x00000001, + 0x00000012, + 0x00000014, + 0x00000015, + 0x00000025, + 0x00000026, + 0x00000037, + 0x00010013, + 0x00010013, + }, + { + 0x00020048, + 0x00020048, + 0x00020048, + 0x00020048, + 0x0002004a, + 0x0002004a, + 0x0002004a, + 0x0002004a, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + }, + { + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + }, + { + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + }, + { + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + }, + { + 0x00020004, + 0x00020004, + 0x00020004, + 0x00020004, + 0x00020016, + 0x00020016, + 0x00020016, + 0x00020016, + 0x00020028, + 0x00020028, + 0x00020028, + 0x00020028, + 0x00020039, + 0x00020039, + 0x00020039, + 0x00020039, + }, + { + 0x000bffff, + 0x0009ffff, + 0x000affff, + 0x0007ffff, + 0x0008ffff, + 0x00000005, + 0x00000017, + 0x00000029, + 0x0000005a, + 0x0000005c, + 0x0001003a, + 0x0001003a, + 0x0001004b, + 0x0001004b, + 0x0001005b, + 0x0001005b, + }, + { + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + }, + { + 0x0003004c, + 0x0003004c, + 0x0003004c, + 0x0003004c, + 0x0003004c, + 0x0003004c, + 0x0003004c, + 0x0003004c, + 0x0003005d, + 0x0003005d, + 0x0003005d, + 0x0003005d, + 0x0003005d, + 0x0003005d, + 0x0003005d, + 0x0003005d, + }, + { + 0x0001003c, + 0x0001003c, + 0x0001006f, + 0x0001006f, + 0x00020006, + 0x00020006, + 0x00020006, + 0x00020006, + 0x0002002a, + 0x0002002a, + 0x0002002a, + 0x0002002a, + 0x0002004d, + 0x0002004d, + 0x0002004d, + 0x0002004d, + }, + { + 0x0002005e, + 0x0002005e, + 0x0002005e, + 0x0002005e, + 0x0002006c, + 0x0002006c, + 0x0002006c, + 0x0002006c, + 0x0002006d, + 0x0002006d, + 0x0002006d, + 0x0002006d, + 0x0002006e, + 0x0002006e, + 0x0002006e, + 0x0002006e, + }, + { + 0x0012ffff, + 0x0011ffff, + 0x0010ffff, + 0x000fffff, + 0x000dffff, + 0x000cffff, + 0x000effff, + 0x00000007, + 0x00000019, + 0x0000002b, + 0x0000004e, + 0x0000005f, + 0x00000070, + 0x0000007e, + 0x0000007f, + 0x00000080, + }, + { + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x00030060, + 0x00030060, + 0x00030060, + 0x00030060, + 0x00030060, + 0x00030060, + 0x00030060, + 0x00030060, + }, + { + 0x00020092, + 0x00020092, + 0x00020092, + 0x00020092, + 0x00020093, + 0x00020093, + 0x00020093, + 0x00020093, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + }, + { + 0x00030071, + 0x00030071, + 0x00030071, + 0x00030071, + 0x00030071, + 0x00030071, + 0x00030071, + 0x00030071, + 0x00030081, + 0x00030081, + 0x00030081, + 0x00030081, + 0x00030081, + 0x00030081, + 0x00030081, + 0x00030081, + }, + { + 0x0002002c, + 0x0002002c, + 0x0002002c, + 0x0002002c, + 0x0002004f, + 0x0002004f, + 0x0002004f, + 0x0002004f, + 0x00020082, + 0x00020082, + 0x00020082, + 0x00020082, + 0x00020091, + 0x00020091, + 0x00020091, + 0x00020091, + }, + { + 0x00010072, + 0x00010072, + 0x00010083, + 0x00010083, + 0x00010090, + 0x00010090, + 0x00010094, + 0x00010094, + 0x000100a3, + 0x000100a3, + 0x000100a4, + 0x000100a4, + 0x00020008, + 0x00020008, + 0x00020008, + 0x00020008, + }, + { + 0x0016ffff, + 0x00000009, + 0x0000001b, + 0x0000002d, + 0x0000003f, + 0x00000050, + 0x00000062, + 0x00000073, + 0x00000084, + 0x00000095, + 0x000000a2, + 0x000000a5, + 0x0001003e, + 0x0001003e, + 0x00010061, + 0x00010061, + }, + { + 0x0021ffff, + 0x0024ffff, + 0x003dffff, + 0x001affff, + 0x001bffff, + 0x001cffff, + 0x001dffff, + 0x001effff, + 0x001fffff, + 0x0020ffff, + 0x0019ffff, + 0x0017ffff, + 0x0018ffff, + 0x0013ffff, + 0x0014ffff, + 0x0015ffff, + }, + { + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x00030040, + 0x00030040, + 0x00030040, + 0x00030040, + 0x00030040, + 0x00030040, + 0x00030040, + 0x00030040, + }, + { + 0x00030051, + 0x00030051, + 0x00030051, + 0x00030051, + 0x00030051, + 0x00030051, + 0x00030051, + 0x00030051, + 0x00030063, + 0x00030063, + 0x00030063, + 0x00030063, + 0x00030063, + 0x00030063, + 0x00030063, + 0x00030063, + }, + { + 0x00030085, + 0x00030085, + 0x00030085, + 0x00030085, + 0x00030085, + 0x00030085, + 0x00030085, + 0x00030085, + 0x00030096, + 0x00030096, + 0x00030096, + 0x00030096, + 0x00030096, + 0x00030096, + 0x00030096, + 0x00030096, + }, + { + 0x000300a6, + 0x000300a6, + 0x000300a6, + 0x000300a6, + 0x000300a6, + 0x000300a6, + 0x000300a6, + 0x000300a6, + 0x000300b5, + 0x000300b5, + 0x000300b5, + 0x000300b5, + 0x000300b5, + 0x000300b5, + 0x000300b5, + 0x000300b5, + }, + { + 0x000100c9, + 0x000100c9, + 0x000100ca, + 0x000100ca, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x0002002e, + 0x0002002e, + 0x0002002e, + 0x0002002e, + 0x00020074, + 0x00020074, + 0x00020074, + 0x00020074, + }, + { + 0x000200a7, + 0x000200a7, + 0x000200a7, + 0x000200a7, + 0x000200b4, + 0x000200b4, + 0x000200b4, + 0x000200b4, + 0x000200b8, + 0x000200b8, + 0x000200b8, + 0x000200b8, + 0x000200c8, + 0x000200c8, + 0x000200c8, + 0x000200c8, + }, + { + 0x0000013e, + 0x0000013f, + 0x00000140, + 0x00000141, + 0x00000142, + 0x00000143, + 0x00010052, + 0x00010052, + 0x00010097, + 0x00010097, + 0x000100a8, + 0x000100a8, + 0x000100b6, + 0x000100b6, + 0x000100b7, + 0x000100b7, + }, + { + 0x0054ffff, + 0x0055ffff, + 0x0056ffff, + 0x0057ffff, + 0x0058ffff, + 0x0000000c, + 0x00000041, + 0x00000064, + 0x00000086, + 0x00000099, + 0x000000ab, + 0x000000c7, + 0x000000da, + 0x000000db, + 0x000000dc, + 0x000000dd, + }, + { + 0x000000de, + 0x000000df, + 0x000000e0, + 0x000000e1, + 0x000000e2, + 0x000000e3, + 0x000000e4, + 0x000000e5, + 0x000000e6, + 0x000000e7, + 0x000000e8, + 0x000000e9, + 0x000000ea, + 0x000000eb, + 0x000000ec, + 0x000000ed, + }, + { + 0x000000ee, + 0x000000ef, + 0x000000f0, + 0x000000f1, + 0x000000f2, + 0x000000f3, + 0x000000f4, + 0x000000f5, + 0x000000f6, + 0x000000f7, + 0x000000f8, + 0x000000f9, + 0x000000fa, + 0x000000fb, + 0x000000fc, + 0x000000fd, + }, + { + 0x000000fe, + 0x000000ff, + 0x00000100, + 0x00000101, + 0x00000102, + 0x00000103, + 0x00000104, + 0x00000105, + 0x00000106, + 0x00000107, + 0x00000108, + 0x00000109, + 0x0000010a, + 0x0000010b, + 0x0000010c, + 0x0000010d, + }, + { + 0x0000010e, + 0x0000010f, + 0x00000110, + 0x00000111, + 0x00000112, + 0x00000113, + 0x00000114, + 0x00000115, + 0x00000116, + 0x00000117, + 0x00000118, + 0x00000119, + 0x0000011a, + 0x0000011b, + 0x0000011c, + 0x0000011d, + }, + { + 0x0000011e, + 0x0000011f, + 0x00000120, + 0x00000121, + 0x00000122, + 0x00000123, + 0x00000124, + 0x00000125, + 0x00000126, + 0x00000127, + 0x00000128, + 0x00000129, + 0x0000012a, + 0x0000012b, + 0x0000012c, + 0x0000012d, + }, + { + 0x0000012e, + 0x0000012f, + 0x00000130, + 0x00000131, + 0x00000132, + 0x00000133, + 0x00000134, + 0x00000135, + 0x00000136, + 0x00000137, + 0x00000138, + 0x00000139, + 0x0000013a, + 0x0000013b, + 0x0000013c, + 0x0000013d, + }, + { + 0x0026ffff, + 0x002dffff, + 0x0037ffff, + 0x0023ffff, + 0x0044ffff, + 0x002effff, + 0x003affff, + 0x0022ffff, + 0x002cffff, + 0x0035ffff, + 0x002fffff, + 0x0036ffff, + 0x0040ffff, + 0x0049ffff, + 0x0030ffff, + 0x0038ffff, + }, + { + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030031, + }, + { + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + }, + { + 0x0041ffff, + 0x004affff, + 0x0042ffff, + 0x0025ffff, + 0x0027ffff, + 0x0028ffff, + 0x0029ffff, + 0x002affff, + 0x002bffff, + 0x0031ffff, + 0x0032ffff, + 0x0033ffff, + 0x0034ffff, + 0x0039ffff, + 0x003bffff, + 0x003cffff, + }, + { + 0x0003006a, + 0x0003006a, + 0x0003006a, + 0x0003006a, + 0x0003006a, + 0x0003006a, + 0x0003006a, + 0x0003006a, + 0x0003006b, + 0x0003006b, + 0x0003006b, + 0x0003006b, + 0x0003006b, + 0x0003006b, + 0x0003006b, + 0x0003006b, + }, + { + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + }, + { + 0x00030075, + 0x00030075, + 0x00030075, + 0x00030075, + 0x00030075, + 0x00030075, + 0x00030075, + 0x00030075, + 0x00030076, + 0x00030076, + 0x00030076, + 0x00030076, + 0x00030076, + 0x00030076, + 0x00030076, + 0x00030076, + }, + { + 0x00030077, + 0x00030077, + 0x00030077, + 0x00030077, + 0x00030077, + 0x00030077, + 0x00030077, + 0x00030077, + 0x00030078, + 0x00030078, + 0x00030078, + 0x00030078, + 0x00030078, + 0x00030078, + 0x00030078, + 0x00030078, + }, + { + 0x00030079, + 0x00030079, + 0x00030079, + 0x00030079, + 0x00030079, + 0x00030079, + 0x00030079, + 0x00030079, + 0x0003007a, + 0x0003007a, + 0x0003007a, + 0x0003007a, + 0x0003007a, + 0x0003007a, + 0x0003007a, + 0x0003007a, + }, + { + 0x0003007b, + 0x0003007b, + 0x0003007b, + 0x0003007b, + 0x0003007b, + 0x0003007b, + 0x0003007b, + 0x0003007b, + 0x0003007c, + 0x0003007c, + 0x0003007c, + 0x0003007c, + 0x0003007c, + 0x0003007c, + 0x0003007c, + 0x0003007c, + }, + { + 0x0003007d, + 0x0003007d, + 0x0003007d, + 0x0003007d, + 0x0003007d, + 0x0003007d, + 0x0003007d, + 0x0003007d, + 0x00030087, + 0x00030087, + 0x00030087, + 0x00030087, + 0x00030087, + 0x00030087, + 0x00030087, + 0x00030087, + }, + { + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + }, + { + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + }, + { + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + }, + { + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030043, + }, + { + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030056, + 0x00030056, + 0x00030056, + 0x00030056, + 0x00030056, + 0x00030056, + 0x00030056, + 0x00030056, + }, + { + 0x00030088, + 0x00030088, + 0x00030088, + 0x00030088, + 0x00030088, + 0x00030088, + 0x00030088, + 0x00030088, + 0x00030089, + 0x00030089, + 0x00030089, + 0x00030089, + 0x00030089, + 0x00030089, + 0x00030089, + 0x00030089, + }, + { + 0x0003008a, + 0x0003008a, + 0x0003008a, + 0x0003008a, + 0x0003008a, + 0x0003008a, + 0x0003008a, + 0x0003008a, + 0x0003008b, + 0x0003008b, + 0x0003008b, + 0x0003008b, + 0x0003008b, + 0x0003008b, + 0x0003008b, + 0x0003008b, + }, + { + 0x0003008c, + 0x0003008c, + 0x0003008c, + 0x0003008c, + 0x0003008c, + 0x0003008c, + 0x0003008c, + 0x0003008c, + 0x0003008d, + 0x0003008d, + 0x0003008d, + 0x0003008d, + 0x0003008d, + 0x0003008d, + 0x0003008d, + 0x0003008d, + }, + { + 0x0003008e, + 0x0003008e, + 0x0003008e, + 0x0003008e, + 0x0003008e, + 0x0003008e, + 0x0003008e, + 0x0003008e, + 0x0003008f, + 0x0003008f, + 0x0003008f, + 0x0003008f, + 0x0003008f, + 0x0003008f, + 0x0003008f, + 0x0003008f, + }, + { + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + }, + { + 0x00030044, + 0x00030044, + 0x00030044, + 0x00030044, + 0x00030044, + 0x00030044, + 0x00030044, + 0x00030044, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + }, + { + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + }, + { + 0x00030057, + 0x00030057, + 0x00030057, + 0x00030057, + 0x00030057, + 0x00030057, + 0x00030057, + 0x00030057, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + }, + { + 0x00030098, + 0x00030098, + 0x00030098, + 0x00030098, + 0x00030098, + 0x00030098, + 0x00030098, + 0x00030098, + 0x0003009a, + 0x0003009a, + 0x0003009a, + 0x0003009a, + 0x0003009a, + 0x0003009a, + 0x0003009a, + 0x0003009a, + }, + { + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + }, + { + 0x0003009b, + 0x0003009b, + 0x0003009b, + 0x0003009b, + 0x0003009b, + 0x0003009b, + 0x0003009b, + 0x0003009b, + 0x0003009c, + 0x0003009c, + 0x0003009c, + 0x0003009c, + 0x0003009c, + 0x0003009c, + 0x0003009c, + 0x0003009c, + }, + { + 0x0003009d, + 0x0003009d, + 0x0003009d, + 0x0003009d, + 0x0003009d, + 0x0003009d, + 0x0003009d, + 0x0003009d, + 0x0003009e, + 0x0003009e, + 0x0003009e, + 0x0003009e, + 0x0003009e, + 0x0003009e, + 0x0003009e, + 0x0003009e, + }, + { + 0x003effff, + 0x003fffff, + 0x0043ffff, + 0x0045ffff, + 0x0046ffff, + 0x0047ffff, + 0x0048ffff, + 0x004bffff, + 0x004cffff, + 0x004dffff, + 0x004effff, + 0x004fffff, + 0x0050ffff, + 0x0051ffff, + 0x0052ffff, + 0x0053ffff, + }, + { + 0x0003009f, + 0x0003009f, + 0x0003009f, + 0x0003009f, + 0x0003009f, + 0x0003009f, + 0x0003009f, + 0x0003009f, + 0x000300a0, + 0x000300a0, + 0x000300a0, + 0x000300a0, + 0x000300a0, + 0x000300a0, + 0x000300a0, + 0x000300a0, + }, + { + 0x000300a1, + 0x000300a1, + 0x000300a1, + 0x000300a1, + 0x000300a1, + 0x000300a1, + 0x000300a1, + 0x000300a1, + 0x000300a9, + 0x000300a9, + 0x000300a9, + 0x000300a9, + 0x000300a9, + 0x000300a9, + 0x000300a9, + 0x000300a9, + }, + { + 0x00030046, + 0x00030046, + 0x00030046, + 0x00030046, + 0x00030046, + 0x00030046, + 0x00030046, + 0x00030046, + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030047, + }, + { + 0x00030059, + 0x00030059, + 0x00030059, + 0x00030059, + 0x00030059, + 0x00030059, + 0x00030059, + 0x00030059, + 0x00030065, + 0x00030065, + 0x00030065, + 0x00030065, + 0x00030065, + 0x00030065, + 0x00030065, + 0x00030065, + }, + { + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030069, + 0x00030069, + 0x00030069, + 0x00030069, + 0x00030069, + 0x00030069, + 0x00030069, + 0x00030069, + }, + { + 0x000300aa, + 0x000300aa, + 0x000300aa, + 0x000300aa, + 0x000300aa, + 0x000300aa, + 0x000300aa, + 0x000300aa, + 0x000300ac, + 0x000300ac, + 0x000300ac, + 0x000300ac, + 0x000300ac, + 0x000300ac, + 0x000300ac, + 0x000300ac, + }, + { + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + }, + { + 0x000300ad, + 0x000300ad, + 0x000300ad, + 0x000300ad, + 0x000300ad, + 0x000300ad, + 0x000300ad, + 0x000300ad, + 0x000300ae, + 0x000300ae, + 0x000300ae, + 0x000300ae, + 0x000300ae, + 0x000300ae, + 0x000300ae, + 0x000300ae, + }, + { + 0x000300af, + 0x000300af, + 0x000300af, + 0x000300af, + 0x000300af, + 0x000300af, + 0x000300af, + 0x000300af, + 0x000300b0, + 0x000300b0, + 0x000300b0, + 0x000300b0, + 0x000300b0, + 0x000300b0, + 0x000300b0, + 0x000300b0, + }, + { + 0x000300b1, + 0x000300b1, + 0x000300b1, + 0x000300b1, + 0x000300b1, + 0x000300b1, + 0x000300b1, + 0x000300b1, + 0x000300b2, + 0x000300b2, + 0x000300b2, + 0x000300b2, + 0x000300b2, + 0x000300b2, + 0x000300b2, + 0x000300b2, + }, + { + 0x000300b3, + 0x000300b3, + 0x000300b3, + 0x000300b3, + 0x000300b3, + 0x000300b3, + 0x000300b3, + 0x000300b3, + 0x000300b9, + 0x000300b9, + 0x000300b9, + 0x000300b9, + 0x000300b9, + 0x000300b9, + 0x000300b9, + 0x000300b9, + }, + { + 0x00030053, + 0x00030053, + 0x00030053, + 0x00030053, + 0x00030053, + 0x00030053, + 0x00030053, + 0x00030053, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + }, + { + 0x00030066, + 0x00030066, + 0x00030066, + 0x00030066, + 0x00030066, + 0x00030066, + 0x00030066, + 0x00030066, + 0x00030067, + 0x00030067, + 0x00030067, + 0x00030067, + 0x00030067, + 0x00030067, + 0x00030067, + 0x00030067, + }, + { + 0x000300ba, + 0x000300ba, + 0x000300ba, + 0x000300ba, + 0x000300ba, + 0x000300ba, + 0x000300ba, + 0x000300ba, + 0x000300bb, + 0x000300bb, + 0x000300bb, + 0x000300bb, + 0x000300bb, + 0x000300bb, + 0x000300bb, + 0x000300bb, + }, + { + 0x000300bc, + 0x000300bc, + 0x000300bc, + 0x000300bc, + 0x000300bc, + 0x000300bc, + 0x000300bc, + 0x000300bc, + 0x000300bd, + 0x000300bd, + 0x000300bd, + 0x000300bd, + 0x000300bd, + 0x000300bd, + 0x000300bd, + 0x000300bd, + }, + { + 0x000300be, + 0x000300be, + 0x000300be, + 0x000300be, + 0x000300be, + 0x000300be, + 0x000300be, + 0x000300be, + 0x000300bf, + 0x000300bf, + 0x000300bf, + 0x000300bf, + 0x000300bf, + 0x000300bf, + 0x000300bf, + 0x000300bf, + }, + { + 0x000300c0, + 0x000300c0, + 0x000300c0, + 0x000300c0, + 0x000300c0, + 0x000300c0, + 0x000300c0, + 0x000300c0, + 0x000300c1, + 0x000300c1, + 0x000300c1, + 0x000300c1, + 0x000300c1, + 0x000300c1, + 0x000300c1, + 0x000300c1, + }, + { + 0x000300c2, + 0x000300c2, + 0x000300c2, + 0x000300c2, + 0x000300c2, + 0x000300c2, + 0x000300c2, + 0x000300c2, + 0x000300c3, + 0x000300c3, + 0x000300c3, + 0x000300c3, + 0x000300c3, + 0x000300c3, + 0x000300c3, + 0x000300c3, + }, + { + 0x000300c4, + 0x000300c4, + 0x000300c4, + 0x000300c4, + 0x000300c4, + 0x000300c4, + 0x000300c4, + 0x000300c4, + 0x000300c5, + 0x000300c5, + 0x000300c5, + 0x000300c5, + 0x000300c5, + 0x000300c5, + 0x000300c5, + 0x000300c5, + }, + { + 0x000300c6, + 0x000300c6, + 0x000300c6, + 0x000300c6, + 0x000300c6, + 0x000300c6, + 0x000300c6, + 0x000300c6, + 0x000300cb, + 0x000300cb, + 0x000300cb, + 0x000300cb, + 0x000300cb, + 0x000300cb, + 0x000300cb, + 0x000300cb, + }, + { + 0x000300cc, + 0x000300cc, + 0x000300cc, + 0x000300cc, + 0x000300cc, + 0x000300cc, + 0x000300cc, + 0x000300cc, + 0x000300cd, + 0x000300cd, + 0x000300cd, + 0x000300cd, + 0x000300cd, + 0x000300cd, + 0x000300cd, + 0x000300cd, + }, + { + 0x000300ce, + 0x000300ce, + 0x000300ce, + 0x000300ce, + 0x000300ce, + 0x000300ce, + 0x000300ce, + 0x000300ce, + 0x000300cf, + 0x000300cf, + 0x000300cf, + 0x000300cf, + 0x000300cf, + 0x000300cf, + 0x000300cf, + 0x000300cf, + }, + { + 0x000300d0, + 0x000300d0, + 0x000300d0, + 0x000300d0, + 0x000300d0, + 0x000300d0, + 0x000300d0, + 0x000300d0, + 0x000300d1, + 0x000300d1, + 0x000300d1, + 0x000300d1, + 0x000300d1, + 0x000300d1, + 0x000300d1, + 0x000300d1, + }, + { + 0x000300d2, + 0x000300d2, + 0x000300d2, + 0x000300d2, + 0x000300d2, + 0x000300d2, + 0x000300d2, + 0x000300d2, + 0x000300d3, + 0x000300d3, + 0x000300d3, + 0x000300d3, + 0x000300d3, + 0x000300d3, + 0x000300d3, + 0x000300d3, + }, + { + 0x000300d4, + 0x000300d4, + 0x000300d4, + 0x000300d4, + 0x000300d4, + 0x000300d4, + 0x000300d4, + 0x000300d4, + 0x000300d5, + 0x000300d5, + 0x000300d5, + 0x000300d5, + 0x000300d5, + 0x000300d5, + 0x000300d5, + 0x000300d5, + }, + { + 0x000300d6, + 0x000300d6, + 0x000300d6, + 0x000300d6, + 0x000300d6, + 0x000300d6, + 0x000300d6, + 0x000300d6, + 0x000300d7, + 0x000300d7, + 0x000300d7, + 0x000300d7, + 0x000300d7, + 0x000300d7, + 0x000300d7, + 0x000300d7, + }, + { + 0x000300d8, + 0x000300d8, + 0x000300d8, + 0x000300d8, + 0x000300d8, + 0x000300d8, + 0x000300d8, + 0x000300d8, + 0x000300d9, + 0x000300d9, + 0x000300d9, + 0x000300d9, + 0x000300d9, + 0x000300d9, + 0x000300d9, + 0x000300d9, + }, }; #endif @@ -967,115 +8833,1365 @@ const uint32_t c_aauiCQMFHuffEnc14[400][2] = #else const uint16_t c_aauiCQMFHuffEnc14[400][2] = #endif -{ - {0x0005, 0x0007}, {0x0004, 0x0009}, {0x0005, 0x0008}, {0x0005, 0x0009}, {0x0006, 0x0006}, {0x0007, 0x0006}, {0x0009, 0x0007}, {0x000b, 0x0008}, - {0x000d, 0x000c}, {0x000f, 0x0013}, {0x0010, 0x001b}, {0x0013, 0x0082}, {0x0013, 0x0083}, {0x0014, 0x0000}, {0x0014, 0x0001}, {0x0014, 0x0002}, - {0x0014, 0x0003}, {0x0014, 0x0004}, {0x0014, 0x0005}, {0x0014, 0x0006}, {0x0004, 0x000a}, {0x0004, 0x000b}, {0x0004, 0x000c}, {0x0005, 0x000a}, - {0x0005, 0x000b}, {0x0006, 0x0007}, {0x0008, 0x0006}, {0x000a, 0x0007}, {0x000c, 0x000a}, {0x000e, 0x000e}, {0x000f, 0x0014}, {0x0011, 0x002a}, - {0x0012, 0x004a}, {0x0013, 0x0084}, {0x0014, 0x0007}, {0x0014, 0x0008}, {0x0014, 0x0009}, {0x0014, 0x000a}, {0x0014, 0x000b}, {0x0014, 0x000c}, - {0x0005, 0x000c}, {0x0004, 0x000d}, {0x0004, 0x000e}, {0x0005, 0x000d}, {0x0006, 0x0008}, {0x0007, 0x0007}, {0x0008, 0x0007}, {0x000a, 0x0008}, - {0x000c, 0x000b}, {0x000e, 0x000f}, {0x000f, 0x0015}, {0x0012, 0x004b}, {0x0013, 0x0085}, {0x0014, 0x000d}, {0x0014, 0x000e}, {0x0014, 0x000f}, - {0x0014, 0x0010}, {0x0014, 0x0011}, {0x0014, 0x0012}, {0x0014, 0x0013}, {0x0005, 0x000e}, {0x0004, 0x000f}, {0x0005, 0x000f}, {0x0005, 0x0010}, - {0x0006, 0x0009}, {0x0008, 0x0008}, {0x0009, 0x0008}, {0x000b, 0x0009}, {0x000d, 0x000d}, {0x000e, 0x0010}, {0x0010, 0x001c}, {0x0011, 0x002b}, - {0x0014, 0x0014}, {0x0014, 0x0015}, {0x0014, 0x0016}, {0x0014, 0x0017}, {0x0014, 0x0018}, {0x0014, 0x0019}, {0x0014, 0x001a}, {0x0014, 0x001b}, - {0x0006, 0x000a}, {0x0005, 0x0011}, {0x0006, 0x000b}, {0x0006, 0x000c}, {0x0007, 0x0008}, {0x0008, 0x0009}, {0x000a, 0x0009}, {0x000c, 0x000c}, - {0x000e, 0x0011}, {0x000f, 0x0016}, {0x0010, 0x001d}, {0x0012, 0x004c}, {0x0014, 0x001c}, {0x0014, 0x001d}, {0x0014, 0x001e}, {0x0014, 0x001f}, - {0x0014, 0x0020}, {0x0014, 0x0021}, {0x0014, 0x0022}, {0x0014, 0x0023}, {0x0007, 0x0009}, {0x0006, 0x000d}, {0x0007, 0x000a}, {0x0007, 0x000b}, - {0x0009, 0x0009}, {0x000a, 0x000a}, {0x000b, 0x000a}, {0x000d, 0x000e}, {0x000f, 0x0017}, {0x0011, 0x002c}, {0x0010, 0x001e}, {0x0014, 0x0024}, - {0x0014, 0x0025}, {0x0014, 0x0026}, {0x0014, 0x0027}, {0x0014, 0x0028}, {0x0014, 0x0029}, {0x0014, 0x002a}, {0x0014, 0x002b}, {0x0014, 0x002c}, - {0x0009, 0x000a}, {0x0008, 0x000a}, {0x0008, 0x000b}, {0x0009, 0x000b}, {0x000a, 0x000b}, {0x000b, 0x000b}, {0x000d, 0x000f}, {0x000e, 0x0012}, - {0x000f, 0x0018}, {0x0011, 0x002d}, {0x0011, 0x002e}, {0x0013, 0x0086}, {0x0014, 0x002d}, {0x0014, 0x002e}, {0x0014, 0x002f}, {0x0014, 0x0030}, - {0x0014, 0x0031}, {0x0014, 0x0032}, {0x0014, 0x0033}, {0x0014, 0x0034}, {0x000b, 0x000c}, {0x000a, 0x000c}, {0x000a, 0x000d}, {0x000b, 0x000d}, - {0x000c, 0x000d}, {0x000d, 0x0010}, {0x000e, 0x0013}, {0x000f, 0x0019}, {0x0010, 0x001f}, {0x0013, 0x0087}, {0x0014, 0x0035}, {0x0014, 0x0036}, - {0x0013, 0x0088}, {0x0014, 0x0037}, {0x0014, 0x0038}, {0x0014, 0x0039}, {0x0014, 0x003a}, {0x0014, 0x003b}, {0x0014, 0x003c}, {0x0014, 0x003d}, - {0x000d, 0x0011}, {0x000c, 0x000e}, {0x000c, 0x000f}, {0x000d, 0x0012}, {0x000d, 0x0013}, {0x000e, 0x0014}, {0x0010, 0x0020}, {0x0010, 0x0021}, - {0x0012, 0x004d}, {0x0011, 0x002f}, {0x0014, 0x003e}, {0x0014, 0x003f}, {0x0014, 0x0040}, {0x0014, 0x0041}, {0x0014, 0x0042}, {0x0014, 0x0043}, - {0x0014, 0x0044}, {0x0014, 0x0045}, {0x0014, 0x0046}, {0x0014, 0x0047}, {0x000f, 0x001a}, {0x000e, 0x0015}, {0x000e, 0x0016}, {0x000e, 0x0017}, - {0x000f, 0x001b}, {0x0011, 0x0030}, {0x0011, 0x0031}, {0x0013, 0x0089}, {0x0013, 0x008a}, {0x0013, 0x008b}, {0x0014, 0x0048}, {0x0014, 0x0049}, - {0x0014, 0x004a}, {0x0014, 0x004b}, {0x0014, 0x004c}, {0x0014, 0x004d}, {0x0014, 0x004e}, {0x0014, 0x004f}, {0x0014, 0x0050}, {0x0014, 0x0051}, - {0x0010, 0x0022}, {0x0010, 0x0023}, {0x0010, 0x0024}, {0x0010, 0x0025}, {0x0011, 0x0032}, {0x0011, 0x0033}, {0x0012, 0x004e}, {0x0012, 0x004f}, - {0x0014, 0x0052}, {0x0013, 0x008c}, {0x0013, 0x008d}, {0x0014, 0x0053}, {0x0014, 0x0054}, {0x0014, 0x0055}, {0x0014, 0x0056}, {0x0014, 0x0057}, - {0x0014, 0x0058}, {0x0014, 0x0059}, {0x0014, 0x005a}, {0x0014, 0x005b}, {0x0011, 0x0034}, {0x0011, 0x0035}, {0x0012, 0x0050}, {0x0012, 0x0051}, - {0x0013, 0x008e}, {0x0014, 0x005c}, {0x0014, 0x005d}, {0x0014, 0x005e}, {0x0014, 0x005f}, {0x0014, 0x0060}, {0x0014, 0x0061}, {0x0014, 0x0062}, - {0x0014, 0x0063}, {0x0014, 0x0064}, {0x0014, 0x0065}, {0x0014, 0x0066}, {0x0014, 0x0067}, {0x0014, 0x0068}, {0x0014, 0x0069}, {0x0014, 0x006a}, - {0x0012, 0x0052}, {0x0013, 0x008f}, {0x0013, 0x0090}, {0x0014, 0x006b}, {0x0013, 0x0091}, {0x0014, 0x006c}, {0x0014, 0x006d}, {0x0014, 0x006e}, - {0x0014, 0x006f}, {0x0014, 0x0070}, {0x0014, 0x0071}, {0x0014, 0x0072}, {0x0014, 0x0073}, {0x0014, 0x0074}, {0x0014, 0x0075}, {0x0014, 0x0076}, - {0x0014, 0x0077}, {0x0014, 0x0078}, {0x0014, 0x0079}, {0x0014, 0x007a}, {0x0014, 0x007b}, {0x0014, 0x007c}, {0x0013, 0x0092}, {0x0012, 0x0053}, - {0x0014, 0x007d}, {0x0014, 0x007e}, {0x0014, 0x007f}, {0x0014, 0x0080}, {0x0014, 0x0081}, {0x0014, 0x0082}, {0x0014, 0x0083}, {0x0014, 0x0084}, - {0x0014, 0x0085}, {0x0014, 0x0086}, {0x0014, 0x0087}, {0x0014, 0x0088}, {0x0014, 0x0089}, {0x0014, 0x008a}, {0x0014, 0x008b}, {0x0014, 0x008c}, - {0x0014, 0x008d}, {0x0014, 0x008e}, {0x0013, 0x0093}, {0x0014, 0x008f}, {0x0014, 0x0090}, {0x0014, 0x0091}, {0x0014, 0x0092}, {0x0014, 0x0093}, - {0x0014, 0x0094}, {0x0014, 0x0095}, {0x0014, 0x0096}, {0x0014, 0x0097}, {0x0014, 0x0098}, {0x0014, 0x0099}, {0x0014, 0x009a}, {0x0014, 0x009b}, - {0x0014, 0x009c}, {0x0014, 0x009d}, {0x0014, 0x009e}, {0x0014, 0x009f}, {0x0014, 0x00a0}, {0x0014, 0x00a1}, {0x0014, 0x00a2}, {0x0014, 0x00a3}, - {0x0014, 0x00a4}, {0x0014, 0x00a5}, {0x0014, 0x00a6}, {0x0014, 0x00a7}, {0x0014, 0x00a8}, {0x0014, 0x00a9}, {0x0014, 0x00aa}, {0x0014, 0x00ab}, - {0x0014, 0x00ac}, {0x0014, 0x00ad}, {0x0014, 0x00ae}, {0x0014, 0x00af}, {0x0014, 0x00b0}, {0x0014, 0x00b1}, {0x0014, 0x00b2}, {0x0014, 0x00b3}, - {0x0014, 0x00b4}, {0x0014, 0x00b5}, {0x0014, 0x00b6}, {0x0014, 0x00b7}, {0x0014, 0x00b8}, {0x0014, 0x00b9}, {0x0014, 0x00ba}, {0x0014, 0x00bb}, - {0x0014, 0x00bc}, {0x0014, 0x00bd}, {0x0014, 0x00be}, {0x0014, 0x00bf}, {0x0014, 0x00c0}, {0x0014, 0x00c1}, {0x0014, 0x00c2}, {0x0014, 0x00c3}, - {0x0014, 0x00c4}, {0x0014, 0x00c5}, {0x0014, 0x00c6}, {0x0014, 0x00c7}, {0x0014, 0x00c8}, {0x0014, 0x00c9}, {0x0014, 0x00ca}, {0x0014, 0x00cb}, - {0x0014, 0x00cc}, {0x0014, 0x00cd}, {0x0014, 0x00ce}, {0x0014, 0x00cf}, {0x0014, 0x00d0}, {0x0014, 0x00d1}, {0x0014, 0x00d2}, {0x0014, 0x00d3}, - {0x0014, 0x00d4}, {0x0014, 0x00d5}, {0x0014, 0x00d6}, {0x0014, 0x00d7}, {0x0014, 0x00d8}, {0x0014, 0x00d9}, {0x0014, 0x00da}, {0x0014, 0x00db}, - {0x0014, 0x00dc}, {0x0014, 0x00dd}, {0x0014, 0x00de}, {0x0014, 0x00df}, {0x0014, 0x00e0}, {0x0014, 0x00e1}, {0x0014, 0x00e2}, {0x0014, 0x00e3}, - {0x0014, 0x00e4}, {0x0014, 0x00e5}, {0x0014, 0x00e6}, {0x0014, 0x00e7}, {0x0014, 0x00e8}, {0x0014, 0x00e9}, {0x0014, 0x00ea}, {0x0014, 0x00eb}, - {0x0014, 0x00ec}, {0x0014, 0x00ed}, {0x0014, 0x00ee}, {0x0014, 0x00ef}, {0x0014, 0x00f0}, {0x0014, 0x00f1}, {0x0014, 0x00f2}, {0x0014, 0x00f3}, - {0x0014, 0x00f4}, {0x0014, 0x00f5}, {0x0014, 0x00f6}, {0x0014, 0x00f7}, {0x0014, 0x00f8}, {0x0014, 0x00f9}, {0x0014, 0x00fa}, {0x0014, 0x00fb}, - {0x0014, 0x00fc}, {0x0014, 0x00fd}, {0x0014, 0x00fe}, {0x0014, 0x00ff}, {0x0014, 0x0100}, {0x0014, 0x0101}, {0x0014, 0x0102}, {0x0014, 0x0103}, -}; + { + { 0x0005, 0x0007 }, + { 0x0004, 0x0009 }, + { 0x0005, 0x0008 }, + { 0x0005, 0x0009 }, + { 0x0006, 0x0006 }, + { 0x0007, 0x0006 }, + { 0x0009, 0x0007 }, + { 0x000b, 0x0008 }, + { 0x000d, 0x000c }, + { 0x000f, 0x0013 }, + { 0x0010, 0x001b }, + { 0x0013, 0x0082 }, + { 0x0013, 0x0083 }, + { 0x0014, 0x0000 }, + { 0x0014, 0x0001 }, + { 0x0014, 0x0002 }, + { 0x0014, 0x0003 }, + { 0x0014, 0x0004 }, + { 0x0014, 0x0005 }, + { 0x0014, 0x0006 }, + { 0x0004, 0x000a }, + { 0x0004, 0x000b }, + { 0x0004, 0x000c }, + { 0x0005, 0x000a }, + { 0x0005, 0x000b }, + { 0x0006, 0x0007 }, + { 0x0008, 0x0006 }, + { 0x000a, 0x0007 }, + { 0x000c, 0x000a }, + { 0x000e, 0x000e }, + { 0x000f, 0x0014 }, + { 0x0011, 0x002a }, + { 0x0012, 0x004a }, + { 0x0013, 0x0084 }, + { 0x0014, 0x0007 }, + { 0x0014, 0x0008 }, + { 0x0014, 0x0009 }, + { 0x0014, 0x000a }, + { 0x0014, 0x000b }, + { 0x0014, 0x000c }, + { 0x0005, 0x000c }, + { 0x0004, 0x000d }, + { 0x0004, 0x000e }, + { 0x0005, 0x000d }, + { 0x0006, 0x0008 }, + { 0x0007, 0x0007 }, + { 0x0008, 0x0007 }, + { 0x000a, 0x0008 }, + { 0x000c, 0x000b }, + { 0x000e, 0x000f }, + { 0x000f, 0x0015 }, + { 0x0012, 0x004b }, + { 0x0013, 0x0085 }, + { 0x0014, 0x000d }, + { 0x0014, 0x000e }, + { 0x0014, 0x000f }, + { 0x0014, 0x0010 }, + { 0x0014, 0x0011 }, + { 0x0014, 0x0012 }, + { 0x0014, 0x0013 }, + { 0x0005, 0x000e }, + { 0x0004, 0x000f }, + { 0x0005, 0x000f }, + { 0x0005, 0x0010 }, + { 0x0006, 0x0009 }, + { 0x0008, 0x0008 }, + { 0x0009, 0x0008 }, + { 0x000b, 0x0009 }, + { 0x000d, 0x000d }, + { 0x000e, 0x0010 }, + { 0x0010, 0x001c }, + { 0x0011, 0x002b }, + { 0x0014, 0x0014 }, + { 0x0014, 0x0015 }, + { 0x0014, 0x0016 }, + { 0x0014, 0x0017 }, + { 0x0014, 0x0018 }, + { 0x0014, 0x0019 }, + { 0x0014, 0x001a }, + { 0x0014, 0x001b }, + { 0x0006, 0x000a }, + { 0x0005, 0x0011 }, + { 0x0006, 0x000b }, + { 0x0006, 0x000c }, + { 0x0007, 0x0008 }, + { 0x0008, 0x0009 }, + { 0x000a, 0x0009 }, + { 0x000c, 0x000c }, + { 0x000e, 0x0011 }, + { 0x000f, 0x0016 }, + { 0x0010, 0x001d }, + { 0x0012, 0x004c }, + { 0x0014, 0x001c }, + { 0x0014, 0x001d }, + { 0x0014, 0x001e }, + { 0x0014, 0x001f }, + { 0x0014, 0x0020 }, + { 0x0014, 0x0021 }, + { 0x0014, 0x0022 }, + { 0x0014, 0x0023 }, + { 0x0007, 0x0009 }, + { 0x0006, 0x000d }, + { 0x0007, 0x000a }, + { 0x0007, 0x000b }, + { 0x0009, 0x0009 }, + { 0x000a, 0x000a }, + { 0x000b, 0x000a }, + { 0x000d, 0x000e }, + { 0x000f, 0x0017 }, + { 0x0011, 0x002c }, + { 0x0010, 0x001e }, + { 0x0014, 0x0024 }, + { 0x0014, 0x0025 }, + { 0x0014, 0x0026 }, + { 0x0014, 0x0027 }, + { 0x0014, 0x0028 }, + { 0x0014, 0x0029 }, + { 0x0014, 0x002a }, + { 0x0014, 0x002b }, + { 0x0014, 0x002c }, + { 0x0009, 0x000a }, + { 0x0008, 0x000a }, + { 0x0008, 0x000b }, + { 0x0009, 0x000b }, + { 0x000a, 0x000b }, + { 0x000b, 0x000b }, + { 0x000d, 0x000f }, + { 0x000e, 0x0012 }, + { 0x000f, 0x0018 }, + { 0x0011, 0x002d }, + { 0x0011, 0x002e }, + { 0x0013, 0x0086 }, + { 0x0014, 0x002d }, + { 0x0014, 0x002e }, + { 0x0014, 0x002f }, + { 0x0014, 0x0030 }, + { 0x0014, 0x0031 }, + { 0x0014, 0x0032 }, + { 0x0014, 0x0033 }, + { 0x0014, 0x0034 }, + { 0x000b, 0x000c }, + { 0x000a, 0x000c }, + { 0x000a, 0x000d }, + { 0x000b, 0x000d }, + { 0x000c, 0x000d }, + { 0x000d, 0x0010 }, + { 0x000e, 0x0013 }, + { 0x000f, 0x0019 }, + { 0x0010, 0x001f }, + { 0x0013, 0x0087 }, + { 0x0014, 0x0035 }, + { 0x0014, 0x0036 }, + { 0x0013, 0x0088 }, + { 0x0014, 0x0037 }, + { 0x0014, 0x0038 }, + { 0x0014, 0x0039 }, + { 0x0014, 0x003a }, + { 0x0014, 0x003b }, + { 0x0014, 0x003c }, + { 0x0014, 0x003d }, + { 0x000d, 0x0011 }, + { 0x000c, 0x000e }, + { 0x000c, 0x000f }, + { 0x000d, 0x0012 }, + { 0x000d, 0x0013 }, + { 0x000e, 0x0014 }, + { 0x0010, 0x0020 }, + { 0x0010, 0x0021 }, + { 0x0012, 0x004d }, + { 0x0011, 0x002f }, + { 0x0014, 0x003e }, + { 0x0014, 0x003f }, + { 0x0014, 0x0040 }, + { 0x0014, 0x0041 }, + { 0x0014, 0x0042 }, + { 0x0014, 0x0043 }, + { 0x0014, 0x0044 }, + { 0x0014, 0x0045 }, + { 0x0014, 0x0046 }, + { 0x0014, 0x0047 }, + { 0x000f, 0x001a }, + { 0x000e, 0x0015 }, + { 0x000e, 0x0016 }, + { 0x000e, 0x0017 }, + { 0x000f, 0x001b }, + { 0x0011, 0x0030 }, + { 0x0011, 0x0031 }, + { 0x0013, 0x0089 }, + { 0x0013, 0x008a }, + { 0x0013, 0x008b }, + { 0x0014, 0x0048 }, + { 0x0014, 0x0049 }, + { 0x0014, 0x004a }, + { 0x0014, 0x004b }, + { 0x0014, 0x004c }, + { 0x0014, 0x004d }, + { 0x0014, 0x004e }, + { 0x0014, 0x004f }, + { 0x0014, 0x0050 }, + { 0x0014, 0x0051 }, + { 0x0010, 0x0022 }, + { 0x0010, 0x0023 }, + { 0x0010, 0x0024 }, + { 0x0010, 0x0025 }, + { 0x0011, 0x0032 }, + { 0x0011, 0x0033 }, + { 0x0012, 0x004e }, + { 0x0012, 0x004f }, + { 0x0014, 0x0052 }, + { 0x0013, 0x008c }, + { 0x0013, 0x008d }, + { 0x0014, 0x0053 }, + { 0x0014, 0x0054 }, + { 0x0014, 0x0055 }, + { 0x0014, 0x0056 }, + { 0x0014, 0x0057 }, + { 0x0014, 0x0058 }, + { 0x0014, 0x0059 }, + { 0x0014, 0x005a }, + { 0x0014, 0x005b }, + { 0x0011, 0x0034 }, + { 0x0011, 0x0035 }, + { 0x0012, 0x0050 }, + { 0x0012, 0x0051 }, + { 0x0013, 0x008e }, + { 0x0014, 0x005c }, + { 0x0014, 0x005d }, + { 0x0014, 0x005e }, + { 0x0014, 0x005f }, + { 0x0014, 0x0060 }, + { 0x0014, 0x0061 }, + { 0x0014, 0x0062 }, + { 0x0014, 0x0063 }, + { 0x0014, 0x0064 }, + { 0x0014, 0x0065 }, + { 0x0014, 0x0066 }, + { 0x0014, 0x0067 }, + { 0x0014, 0x0068 }, + { 0x0014, 0x0069 }, + { 0x0014, 0x006a }, + { 0x0012, 0x0052 }, + { 0x0013, 0x008f }, + { 0x0013, 0x0090 }, + { 0x0014, 0x006b }, + { 0x0013, 0x0091 }, + { 0x0014, 0x006c }, + { 0x0014, 0x006d }, + { 0x0014, 0x006e }, + { 0x0014, 0x006f }, + { 0x0014, 0x0070 }, + { 0x0014, 0x0071 }, + { 0x0014, 0x0072 }, + { 0x0014, 0x0073 }, + { 0x0014, 0x0074 }, + { 0x0014, 0x0075 }, + { 0x0014, 0x0076 }, + { 0x0014, 0x0077 }, + { 0x0014, 0x0078 }, + { 0x0014, 0x0079 }, + { 0x0014, 0x007a }, + { 0x0014, 0x007b }, + { 0x0014, 0x007c }, + { 0x0013, 0x0092 }, + { 0x0012, 0x0053 }, + { 0x0014, 0x007d }, + { 0x0014, 0x007e }, + { 0x0014, 0x007f }, + { 0x0014, 0x0080 }, + { 0x0014, 0x0081 }, + { 0x0014, 0x0082 }, + { 0x0014, 0x0083 }, + { 0x0014, 0x0084 }, + { 0x0014, 0x0085 }, + { 0x0014, 0x0086 }, + { 0x0014, 0x0087 }, + { 0x0014, 0x0088 }, + { 0x0014, 0x0089 }, + { 0x0014, 0x008a }, + { 0x0014, 0x008b }, + { 0x0014, 0x008c }, + { 0x0014, 0x008d }, + { 0x0014, 0x008e }, + { 0x0013, 0x0093 }, + { 0x0014, 0x008f }, + { 0x0014, 0x0090 }, + { 0x0014, 0x0091 }, + { 0x0014, 0x0092 }, + { 0x0014, 0x0093 }, + { 0x0014, 0x0094 }, + { 0x0014, 0x0095 }, + { 0x0014, 0x0096 }, + { 0x0014, 0x0097 }, + { 0x0014, 0x0098 }, + { 0x0014, 0x0099 }, + { 0x0014, 0x009a }, + { 0x0014, 0x009b }, + { 0x0014, 0x009c }, + { 0x0014, 0x009d }, + { 0x0014, 0x009e }, + { 0x0014, 0x009f }, + { 0x0014, 0x00a0 }, + { 0x0014, 0x00a1 }, + { 0x0014, 0x00a2 }, + { 0x0014, 0x00a3 }, + { 0x0014, 0x00a4 }, + { 0x0014, 0x00a5 }, + { 0x0014, 0x00a6 }, + { 0x0014, 0x00a7 }, + { 0x0014, 0x00a8 }, + { 0x0014, 0x00a9 }, + { 0x0014, 0x00aa }, + { 0x0014, 0x00ab }, + { 0x0014, 0x00ac }, + { 0x0014, 0x00ad }, + { 0x0014, 0x00ae }, + { 0x0014, 0x00af }, + { 0x0014, 0x00b0 }, + { 0x0014, 0x00b1 }, + { 0x0014, 0x00b2 }, + { 0x0014, 0x00b3 }, + { 0x0014, 0x00b4 }, + { 0x0014, 0x00b5 }, + { 0x0014, 0x00b6 }, + { 0x0014, 0x00b7 }, + { 0x0014, 0x00b8 }, + { 0x0014, 0x00b9 }, + { 0x0014, 0x00ba }, + { 0x0014, 0x00bb }, + { 0x0014, 0x00bc }, + { 0x0014, 0x00bd }, + { 0x0014, 0x00be }, + { 0x0014, 0x00bf }, + { 0x0014, 0x00c0 }, + { 0x0014, 0x00c1 }, + { 0x0014, 0x00c2 }, + { 0x0014, 0x00c3 }, + { 0x0014, 0x00c4 }, + { 0x0014, 0x00c5 }, + { 0x0014, 0x00c6 }, + { 0x0014, 0x00c7 }, + { 0x0014, 0x00c8 }, + { 0x0014, 0x00c9 }, + { 0x0014, 0x00ca }, + { 0x0014, 0x00cb }, + { 0x0014, 0x00cc }, + { 0x0014, 0x00cd }, + { 0x0014, 0x00ce }, + { 0x0014, 0x00cf }, + { 0x0014, 0x00d0 }, + { 0x0014, 0x00d1 }, + { 0x0014, 0x00d2 }, + { 0x0014, 0x00d3 }, + { 0x0014, 0x00d4 }, + { 0x0014, 0x00d5 }, + { 0x0014, 0x00d6 }, + { 0x0014, 0x00d7 }, + { 0x0014, 0x00d8 }, + { 0x0014, 0x00d9 }, + { 0x0014, 0x00da }, + { 0x0014, 0x00db }, + { 0x0014, 0x00dc }, + { 0x0014, 0x00dd }, + { 0x0014, 0x00de }, + { 0x0014, 0x00df }, + { 0x0014, 0x00e0 }, + { 0x0014, 0x00e1 }, + { 0x0014, 0x00e2 }, + { 0x0014, 0x00e3 }, + { 0x0014, 0x00e4 }, + { 0x0014, 0x00e5 }, + { 0x0014, 0x00e6 }, + { 0x0014, 0x00e7 }, + { 0x0014, 0x00e8 }, + { 0x0014, 0x00e9 }, + { 0x0014, 0x00ea }, + { 0x0014, 0x00eb }, + { 0x0014, 0x00ec }, + { 0x0014, 0x00ed }, + { 0x0014, 0x00ee }, + { 0x0014, 0x00ef }, + { 0x0014, 0x00f0 }, + { 0x0014, 0x00f1 }, + { 0x0014, 0x00f2 }, + { 0x0014, 0x00f3 }, + { 0x0014, 0x00f4 }, + { 0x0014, 0x00f5 }, + { 0x0014, 0x00f6 }, + { 0x0014, 0x00f7 }, + { 0x0014, 0x00f8 }, + { 0x0014, 0x00f9 }, + { 0x0014, 0x00fa }, + { 0x0014, 0x00fb }, + { 0x0014, 0x00fc }, + { 0x0014, 0x00fd }, + { 0x0014, 0x00fe }, + { 0x0014, 0x00ff }, + { 0x0014, 0x0100 }, + { 0x0014, 0x0101 }, + { 0x0014, 0x0102 }, + { 0x0014, 0x0103 }, + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec14[53][16] = -{ - {0x0009ffff, 0x0007ffff, 0x0008ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x00000001, 0x00000014, 0x00000015, 0x00000016, 0x00000029, 0x0000002a, 0x0000003d, }, - {0x00020053, 0x00020053, 0x00020053, 0x00020053, 0x00020065, 0x00020065, 0x00020065, 0x00020065, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, }, - {0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, }, - {0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, }, - {0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, }, - {0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, }, - {0x00010054, 0x00010054, 0x00010064, 0x00010064, 0x00010066, 0x00010066, 0x00010067, 0x00010067, 0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x00020019, 0x00020019, 0x00020019, 0x00020019, }, - {0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, 0x00020040, 0x00020040, 0x00020040, 0x00020040, 0x00020050, 0x00020050, 0x00020050, 0x00020050, 0x00020052, 0x00020052, 0x00020052, 0x00020052, }, - {0x000fffff, 0x000dffff, 0x000effff, 0x000affff, 0x000bffff, 0x000cffff, 0x0000001a, 0x0000002e, 0x00000041, 0x00000055, 0x00000079, 0x0000007a, 0x00010005, 0x00010005, 0x0001002d, 0x0001002d, }, - {0x0002008d, 0x0002008d, 0x0002008d, 0x0002008d, 0x0002008e, 0x0002008e, 0x0002008e, 0x0002008e, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, - {0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, }, - {0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, }, - {0x00010007, 0x00010007, 0x00010043, 0x00010043, 0x0001006a, 0x0001006a, 0x0001007d, 0x0001007d, 0x0001008c, 0x0001008c, 0x0001008f, 0x0001008f, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, }, - {0x0002002f, 0x0002002f, 0x0002002f, 0x0002002f, 0x00020056, 0x00020056, 0x00020056, 0x00020056, 0x00020069, 0x00020069, 0x00020069, 0x00020069, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007c, }, - {0x0024ffff, 0x0018ffff, 0x0017ffff, 0x0015ffff, 0x0014ffff, 0x0016ffff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0000001c, 0x00000030, 0x00000057, 0x00000090, 0x000000a1, 0x000000a2, }, - {0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, }, - {0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003006b, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, }, - {0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, }, - {0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a4, 0x000300a4, 0x000300a4, 0x000300a4, 0x000300a4, 0x000300a4, 0x000300a4, 0x000300a4, }, - {0x00020045, 0x00020045, 0x00020045, 0x00020045, 0x00020058, 0x00020058, 0x00020058, 0x00020058, 0x0002007f, 0x0002007f, 0x0002007f, 0x0002007f, 0x00020092, 0x00020092, 0x00020092, 0x00020092, }, - {0x00010080, 0x00010080, 0x00010093, 0x00010093, 0x000100b4, 0x000100b4, 0x000100b8, 0x000100b8, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, 0x00020031, 0x00020031, 0x00020031, 0x00020031, }, - {0x000200a5, 0x000200a5, 0x000200a5, 0x000200a5, 0x000200b5, 0x000200b5, 0x000200b5, 0x000200b5, 0x000200b6, 0x000200b6, 0x000200b6, 0x000200b6, 0x000200b7, 0x000200b7, 0x000200b7, 0x000200b7, }, - {0x000000a6, 0x000000a7, 0x000000c8, 0x000000c9, 0x000000ca, 0x000000cb, 0x00010009, 0x00010009, 0x0001001e, 0x0001001e, 0x00010032, 0x00010032, 0x00010059, 0x00010059, 0x0001006c, 0x0001006c, }, - {0x0022ffff, 0x0023ffff, 0x001fffff, 0x0020ffff, 0x0021ffff, 0x0019ffff, 0x001affff, 0x001bffff, 0x001cffff, 0x001dffff, 0x001effff, 0x0000000a, 0x00000046, 0x0000005a, 0x0000006e, 0x00000094, }, - {0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, }, - {0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, 0x00030081, }, - {0x00030082, 0x00030082, 0x00030082, 0x00030082, 0x00030082, 0x00030082, 0x00030082, 0x00030082, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, }, - {0x000300b9, 0x000300b9, 0x000300b9, 0x000300b9, 0x000300b9, 0x000300b9, 0x000300b9, 0x000300b9, 0x000300ba, 0x000300ba, 0x000300ba, 0x000300ba, 0x000300ba, 0x000300ba, 0x000300ba, 0x000300ba, }, - {0x000300cc, 0x000300cc, 0x000300cc, 0x000300cc, 0x000300cc, 0x000300cc, 0x000300cc, 0x000300cc, 0x000300cd, 0x000300cd, 0x000300cd, 0x000300cd, 0x000300cd, 0x000300cd, 0x000300cd, 0x000300cd, }, - {0x000300dc, 0x000300dc, 0x000300dc, 0x000300dc, 0x000300dc, 0x000300dc, 0x000300dc, 0x000300dc, 0x000300dd, 0x000300dd, 0x000300dd, 0x000300dd, 0x000300dd, 0x000300dd, 0x000300dd, 0x000300dd, }, - {0x000100f2, 0x000100f2, 0x000100f4, 0x000100f4, 0x00010106, 0x00010106, 0x0001011a, 0x0001011a, 0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020033, 0x00020033, 0x00020033, 0x00020033, }, - {0x0002005b, 0x0002005b, 0x0002005b, 0x0002005b, 0x000200a8, 0x000200a8, 0x000200a8, 0x000200a8, 0x000200ce, 0x000200ce, 0x000200ce, 0x000200ce, 0x000200cf, 0x000200cf, 0x000200cf, 0x000200cf, }, - {0x000200de, 0x000200de, 0x000200de, 0x000200de, 0x000200df, 0x000200df, 0x000200df, 0x000200df, 0x000200f0, 0x000200f0, 0x000200f0, 0x000200f0, 0x00020107, 0x00020107, 0x00020107, 0x00020107, }, - {0x0000018c, 0x0000018d, 0x0000018e, 0x0000018f, 0x0001000b, 0x0001000b, 0x0001000c, 0x0001000c, 0x00010021, 0x00010021, 0x00010034, 0x00010034, 0x00010083, 0x00010083, 0x00010095, 0x00010095, }, - {0x00010098, 0x00010098, 0x000100bb, 0x000100bb, 0x000100bc, 0x000100bc, 0x000100bd, 0x000100bd, 0x000100d1, 0x000100d1, 0x000100d2, 0x000100d2, 0x000100e0, 0x000100e0, 0x000100f1, 0x000100f1, }, - {0x0025ffff, 0x0026ffff, 0x0028ffff, 0x0027ffff, 0x0029ffff, 0x002affff, 0x002bffff, 0x002cffff, 0x002dffff, 0x002effff, 0x002fffff, 0x0030ffff, 0x0031ffff, 0x0032ffff, 0x0033ffff, 0x0034ffff, }, - {0x0000000d, 0x0000000e, 0x0000000f, 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000026, 0x00000027, 0x00000035, 0x00000036, 0x00000037, }, - {0x00000038, 0x00000039, 0x0000003a, 0x0000003b, 0x00000048, 0x00000049, 0x0000004a, 0x0000004b, 0x0000004c, 0x0000004d, 0x0000004e, 0x0000004f, 0x0000005c, 0x0000005d, 0x0000005e, 0x0000005f, }, - {0x00000087, 0x00000088, 0x00000089, 0x0000008a, 0x0000008b, 0x00000096, 0x00000097, 0x00000099, 0x0000009a, 0x0000009b, 0x0000009c, 0x0000009d, 0x0000009e, 0x0000009f, 0x000000aa, 0x000000ab, }, - {0x00000060, 0x00000061, 0x00000062, 0x00000063, 0x0000006f, 0x00000070, 0x00000071, 0x00000072, 0x00000073, 0x00000074, 0x00000075, 0x00000076, 0x00000077, 0x00000084, 0x00000085, 0x00000086, }, - {0x000000ac, 0x000000ad, 0x000000ae, 0x000000af, 0x000000b0, 0x000000b1, 0x000000b2, 0x000000b3, 0x000000be, 0x000000bf, 0x000000c0, 0x000000c1, 0x000000c2, 0x000000c3, 0x000000c4, 0x000000c5, }, - {0x000000c6, 0x000000c7, 0x000000d0, 0x000000d3, 0x000000d4, 0x000000d5, 0x000000d6, 0x000000d7, 0x000000d8, 0x000000d9, 0x000000da, 0x000000db, 0x000000e1, 0x000000e2, 0x000000e3, 0x000000e4, }, - {0x000000e5, 0x000000e6, 0x000000e7, 0x000000e8, 0x000000e9, 0x000000ea, 0x000000eb, 0x000000ec, 0x000000ed, 0x000000ee, 0x000000ef, 0x000000f3, 0x000000f5, 0x000000f6, 0x000000f7, 0x000000f8, }, - {0x000000f9, 0x000000fa, 0x000000fb, 0x000000fc, 0x000000fd, 0x000000fe, 0x000000ff, 0x00000100, 0x00000101, 0x00000102, 0x00000103, 0x00000104, 0x00000105, 0x00000108, 0x00000109, 0x0000010a, }, - {0x0000010b, 0x0000010c, 0x0000010d, 0x0000010e, 0x0000010f, 0x00000110, 0x00000111, 0x00000112, 0x00000113, 0x00000114, 0x00000115, 0x00000116, 0x00000117, 0x00000118, 0x00000119, 0x0000011b, }, - {0x0000011c, 0x0000011d, 0x0000011e, 0x0000011f, 0x00000120, 0x00000121, 0x00000122, 0x00000123, 0x00000124, 0x00000125, 0x00000126, 0x00000127, 0x00000128, 0x00000129, 0x0000012a, 0x0000012b, }, - {0x0000012c, 0x0000012d, 0x0000012e, 0x0000012f, 0x00000130, 0x00000131, 0x00000132, 0x00000133, 0x00000134, 0x00000135, 0x00000136, 0x00000137, 0x00000138, 0x00000139, 0x0000013a, 0x0000013b, }, - {0x0000013c, 0x0000013d, 0x0000013e, 0x0000013f, 0x00000140, 0x00000141, 0x00000142, 0x00000143, 0x00000144, 0x00000145, 0x00000146, 0x00000147, 0x00000148, 0x00000149, 0x0000014a, 0x0000014b, }, - {0x0000014c, 0x0000014d, 0x0000014e, 0x0000014f, 0x00000150, 0x00000151, 0x00000152, 0x00000153, 0x00000154, 0x00000155, 0x00000156, 0x00000157, 0x00000158, 0x00000159, 0x0000015a, 0x0000015b, }, - {0x0000015c, 0x0000015d, 0x0000015e, 0x0000015f, 0x00000160, 0x00000161, 0x00000162, 0x00000163, 0x00000164, 0x00000165, 0x00000166, 0x00000167, 0x00000168, 0x00000169, 0x0000016a, 0x0000016b, }, - {0x0000016c, 0x0000016d, 0x0000016e, 0x0000016f, 0x00000170, 0x00000171, 0x00000172, 0x00000173, 0x00000174, 0x00000175, 0x00000176, 0x00000177, 0x00000178, 0x00000179, 0x0000017a, 0x0000017b, }, - {0x0000017c, 0x0000017d, 0x0000017e, 0x0000017f, 0x00000180, 0x00000181, 0x00000182, 0x00000183, 0x00000184, 0x00000185, 0x00000186, 0x00000187, 0x00000188, 0x00000189, 0x0000018a, 0x0000018b, }, +const uint32_t c_aauiCQMFHuffDec14[53][16] = { + { + 0x0009ffff, + 0x0007ffff, + 0x0008ffff, + 0x0001ffff, + 0x0002ffff, + 0x0003ffff, + 0x0004ffff, + 0x0005ffff, + 0x0006ffff, + 0x00000001, + 0x00000014, + 0x00000015, + 0x00000016, + 0x00000029, + 0x0000002a, + 0x0000003d, + }, + { + 0x00020053, + 0x00020053, + 0x00020053, + 0x00020053, + 0x00020065, + 0x00020065, + 0x00020065, + 0x00020065, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + }, + { + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + }, + { + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + }, + { + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + }, + { + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + }, + { + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x00030051, + 0x00030051, + 0x00030051, + 0x00030051, + 0x00030051, + 0x00030051, + 0x00030051, + 0x00030051, + }, + { + 0x00010054, + 0x00010054, + 0x00010064, + 0x00010064, + 0x00010066, + 0x00010066, + 0x00010067, + 0x00010067, + 0x00020004, + 0x00020004, + 0x00020004, + 0x00020004, + 0x00020019, + 0x00020019, + 0x00020019, + 0x00020019, + }, + { + 0x0002002c, + 0x0002002c, + 0x0002002c, + 0x0002002c, + 0x00020040, + 0x00020040, + 0x00020040, + 0x00020040, + 0x00020050, + 0x00020050, + 0x00020050, + 0x00020050, + 0x00020052, + 0x00020052, + 0x00020052, + 0x00020052, + }, + { + 0x000fffff, + 0x000dffff, + 0x000effff, + 0x000affff, + 0x000bffff, + 0x000cffff, + 0x0000001a, + 0x0000002e, + 0x00000041, + 0x00000055, + 0x00000079, + 0x0000007a, + 0x00010005, + 0x00010005, + 0x0001002d, + 0x0001002d, + }, + { + 0x0002008d, + 0x0002008d, + 0x0002008d, + 0x0002008d, + 0x0002008e, + 0x0002008e, + 0x0002008e, + 0x0002008e, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + }, + { + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030068, + }, + { + 0x00030078, + 0x00030078, + 0x00030078, + 0x00030078, + 0x00030078, + 0x00030078, + 0x00030078, + 0x00030078, + 0x0003007b, + 0x0003007b, + 0x0003007b, + 0x0003007b, + 0x0003007b, + 0x0003007b, + 0x0003007b, + 0x0003007b, + }, + { + 0x00010007, + 0x00010007, + 0x00010043, + 0x00010043, + 0x0001006a, + 0x0001006a, + 0x0001007d, + 0x0001007d, + 0x0001008c, + 0x0001008c, + 0x0001008f, + 0x0001008f, + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002001b, + }, + { + 0x0002002f, + 0x0002002f, + 0x0002002f, + 0x0002002f, + 0x00020056, + 0x00020056, + 0x00020056, + 0x00020056, + 0x00020069, + 0x00020069, + 0x00020069, + 0x00020069, + 0x0002007c, + 0x0002007c, + 0x0002007c, + 0x0002007c, + }, + { + 0x0024ffff, + 0x0018ffff, + 0x0017ffff, + 0x0015ffff, + 0x0014ffff, + 0x0016ffff, + 0x0010ffff, + 0x0011ffff, + 0x0012ffff, + 0x0013ffff, + 0x0000001c, + 0x00000030, + 0x00000057, + 0x00000090, + 0x000000a1, + 0x000000a2, + }, + { + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030044, + 0x00030044, + 0x00030044, + 0x00030044, + 0x00030044, + 0x00030044, + 0x00030044, + 0x00030044, + }, + { + 0x0003006b, + 0x0003006b, + 0x0003006b, + 0x0003006b, + 0x0003006b, + 0x0003006b, + 0x0003006b, + 0x0003006b, + 0x0003007e, + 0x0003007e, + 0x0003007e, + 0x0003007e, + 0x0003007e, + 0x0003007e, + 0x0003007e, + 0x0003007e, + }, + { + 0x00030091, + 0x00030091, + 0x00030091, + 0x00030091, + 0x00030091, + 0x00030091, + 0x00030091, + 0x00030091, + 0x000300a0, + 0x000300a0, + 0x000300a0, + 0x000300a0, + 0x000300a0, + 0x000300a0, + 0x000300a0, + 0x000300a0, + }, + { + 0x000300a3, + 0x000300a3, + 0x000300a3, + 0x000300a3, + 0x000300a3, + 0x000300a3, + 0x000300a3, + 0x000300a3, + 0x000300a4, + 0x000300a4, + 0x000300a4, + 0x000300a4, + 0x000300a4, + 0x000300a4, + 0x000300a4, + 0x000300a4, + }, + { + 0x00020045, + 0x00020045, + 0x00020045, + 0x00020045, + 0x00020058, + 0x00020058, + 0x00020058, + 0x00020058, + 0x0002007f, + 0x0002007f, + 0x0002007f, + 0x0002007f, + 0x00020092, + 0x00020092, + 0x00020092, + 0x00020092, + }, + { + 0x00010080, + 0x00010080, + 0x00010093, + 0x00010093, + 0x000100b4, + 0x000100b4, + 0x000100b8, + 0x000100b8, + 0x0002001d, + 0x0002001d, + 0x0002001d, + 0x0002001d, + 0x00020031, + 0x00020031, + 0x00020031, + 0x00020031, + }, + { + 0x000200a5, + 0x000200a5, + 0x000200a5, + 0x000200a5, + 0x000200b5, + 0x000200b5, + 0x000200b5, + 0x000200b5, + 0x000200b6, + 0x000200b6, + 0x000200b6, + 0x000200b6, + 0x000200b7, + 0x000200b7, + 0x000200b7, + 0x000200b7, + }, + { + 0x000000a6, + 0x000000a7, + 0x000000c8, + 0x000000c9, + 0x000000ca, + 0x000000cb, + 0x00010009, + 0x00010009, + 0x0001001e, + 0x0001001e, + 0x00010032, + 0x00010032, + 0x00010059, + 0x00010059, + 0x0001006c, + 0x0001006c, + }, + { + 0x0022ffff, + 0x0023ffff, + 0x001fffff, + 0x0020ffff, + 0x0021ffff, + 0x0019ffff, + 0x001affff, + 0x001bffff, + 0x001cffff, + 0x001dffff, + 0x001effff, + 0x0000000a, + 0x00000046, + 0x0000005a, + 0x0000006e, + 0x00000094, + }, + { + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030047, + }, + { + 0x0003006d, + 0x0003006d, + 0x0003006d, + 0x0003006d, + 0x0003006d, + 0x0003006d, + 0x0003006d, + 0x0003006d, + 0x00030081, + 0x00030081, + 0x00030081, + 0x00030081, + 0x00030081, + 0x00030081, + 0x00030081, + 0x00030081, + }, + { + 0x00030082, + 0x00030082, + 0x00030082, + 0x00030082, + 0x00030082, + 0x00030082, + 0x00030082, + 0x00030082, + 0x000300a9, + 0x000300a9, + 0x000300a9, + 0x000300a9, + 0x000300a9, + 0x000300a9, + 0x000300a9, + 0x000300a9, + }, + { + 0x000300b9, + 0x000300b9, + 0x000300b9, + 0x000300b9, + 0x000300b9, + 0x000300b9, + 0x000300b9, + 0x000300b9, + 0x000300ba, + 0x000300ba, + 0x000300ba, + 0x000300ba, + 0x000300ba, + 0x000300ba, + 0x000300ba, + 0x000300ba, + }, + { + 0x000300cc, + 0x000300cc, + 0x000300cc, + 0x000300cc, + 0x000300cc, + 0x000300cc, + 0x000300cc, + 0x000300cc, + 0x000300cd, + 0x000300cd, + 0x000300cd, + 0x000300cd, + 0x000300cd, + 0x000300cd, + 0x000300cd, + 0x000300cd, + }, + { + 0x000300dc, + 0x000300dc, + 0x000300dc, + 0x000300dc, + 0x000300dc, + 0x000300dc, + 0x000300dc, + 0x000300dc, + 0x000300dd, + 0x000300dd, + 0x000300dd, + 0x000300dd, + 0x000300dd, + 0x000300dd, + 0x000300dd, + 0x000300dd, + }, + { + 0x000100f2, + 0x000100f2, + 0x000100f4, + 0x000100f4, + 0x00010106, + 0x00010106, + 0x0001011a, + 0x0001011a, + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020033, + 0x00020033, + 0x00020033, + 0x00020033, + }, + { + 0x0002005b, + 0x0002005b, + 0x0002005b, + 0x0002005b, + 0x000200a8, + 0x000200a8, + 0x000200a8, + 0x000200a8, + 0x000200ce, + 0x000200ce, + 0x000200ce, + 0x000200ce, + 0x000200cf, + 0x000200cf, + 0x000200cf, + 0x000200cf, + }, + { + 0x000200de, + 0x000200de, + 0x000200de, + 0x000200de, + 0x000200df, + 0x000200df, + 0x000200df, + 0x000200df, + 0x000200f0, + 0x000200f0, + 0x000200f0, + 0x000200f0, + 0x00020107, + 0x00020107, + 0x00020107, + 0x00020107, + }, + { + 0x0000018c, + 0x0000018d, + 0x0000018e, + 0x0000018f, + 0x0001000b, + 0x0001000b, + 0x0001000c, + 0x0001000c, + 0x00010021, + 0x00010021, + 0x00010034, + 0x00010034, + 0x00010083, + 0x00010083, + 0x00010095, + 0x00010095, + }, + { + 0x00010098, + 0x00010098, + 0x000100bb, + 0x000100bb, + 0x000100bc, + 0x000100bc, + 0x000100bd, + 0x000100bd, + 0x000100d1, + 0x000100d1, + 0x000100d2, + 0x000100d2, + 0x000100e0, + 0x000100e0, + 0x000100f1, + 0x000100f1, + }, + { + 0x0025ffff, + 0x0026ffff, + 0x0028ffff, + 0x0027ffff, + 0x0029ffff, + 0x002affff, + 0x002bffff, + 0x002cffff, + 0x002dffff, + 0x002effff, + 0x002fffff, + 0x0030ffff, + 0x0031ffff, + 0x0032ffff, + 0x0033ffff, + 0x0034ffff, + }, + { + 0x0000000d, + 0x0000000e, + 0x0000000f, + 0x00000010, + 0x00000011, + 0x00000012, + 0x00000013, + 0x00000022, + 0x00000023, + 0x00000024, + 0x00000025, + 0x00000026, + 0x00000027, + 0x00000035, + 0x00000036, + 0x00000037, + }, + { + 0x00000038, + 0x00000039, + 0x0000003a, + 0x0000003b, + 0x00000048, + 0x00000049, + 0x0000004a, + 0x0000004b, + 0x0000004c, + 0x0000004d, + 0x0000004e, + 0x0000004f, + 0x0000005c, + 0x0000005d, + 0x0000005e, + 0x0000005f, + }, + { + 0x00000087, + 0x00000088, + 0x00000089, + 0x0000008a, + 0x0000008b, + 0x00000096, + 0x00000097, + 0x00000099, + 0x0000009a, + 0x0000009b, + 0x0000009c, + 0x0000009d, + 0x0000009e, + 0x0000009f, + 0x000000aa, + 0x000000ab, + }, + { + 0x00000060, + 0x00000061, + 0x00000062, + 0x00000063, + 0x0000006f, + 0x00000070, + 0x00000071, + 0x00000072, + 0x00000073, + 0x00000074, + 0x00000075, + 0x00000076, + 0x00000077, + 0x00000084, + 0x00000085, + 0x00000086, + }, + { + 0x000000ac, + 0x000000ad, + 0x000000ae, + 0x000000af, + 0x000000b0, + 0x000000b1, + 0x000000b2, + 0x000000b3, + 0x000000be, + 0x000000bf, + 0x000000c0, + 0x000000c1, + 0x000000c2, + 0x000000c3, + 0x000000c4, + 0x000000c5, + }, + { + 0x000000c6, + 0x000000c7, + 0x000000d0, + 0x000000d3, + 0x000000d4, + 0x000000d5, + 0x000000d6, + 0x000000d7, + 0x000000d8, + 0x000000d9, + 0x000000da, + 0x000000db, + 0x000000e1, + 0x000000e2, + 0x000000e3, + 0x000000e4, + }, + { + 0x000000e5, + 0x000000e6, + 0x000000e7, + 0x000000e8, + 0x000000e9, + 0x000000ea, + 0x000000eb, + 0x000000ec, + 0x000000ed, + 0x000000ee, + 0x000000ef, + 0x000000f3, + 0x000000f5, + 0x000000f6, + 0x000000f7, + 0x000000f8, + }, + { + 0x000000f9, + 0x000000fa, + 0x000000fb, + 0x000000fc, + 0x000000fd, + 0x000000fe, + 0x000000ff, + 0x00000100, + 0x00000101, + 0x00000102, + 0x00000103, + 0x00000104, + 0x00000105, + 0x00000108, + 0x00000109, + 0x0000010a, + }, + { + 0x0000010b, + 0x0000010c, + 0x0000010d, + 0x0000010e, + 0x0000010f, + 0x00000110, + 0x00000111, + 0x00000112, + 0x00000113, + 0x00000114, + 0x00000115, + 0x00000116, + 0x00000117, + 0x00000118, + 0x00000119, + 0x0000011b, + }, + { + 0x0000011c, + 0x0000011d, + 0x0000011e, + 0x0000011f, + 0x00000120, + 0x00000121, + 0x00000122, + 0x00000123, + 0x00000124, + 0x00000125, + 0x00000126, + 0x00000127, + 0x00000128, + 0x00000129, + 0x0000012a, + 0x0000012b, + }, + { + 0x0000012c, + 0x0000012d, + 0x0000012e, + 0x0000012f, + 0x00000130, + 0x00000131, + 0x00000132, + 0x00000133, + 0x00000134, + 0x00000135, + 0x00000136, + 0x00000137, + 0x00000138, + 0x00000139, + 0x0000013a, + 0x0000013b, + }, + { + 0x0000013c, + 0x0000013d, + 0x0000013e, + 0x0000013f, + 0x00000140, + 0x00000141, + 0x00000142, + 0x00000143, + 0x00000144, + 0x00000145, + 0x00000146, + 0x00000147, + 0x00000148, + 0x00000149, + 0x0000014a, + 0x0000014b, + }, + { + 0x0000014c, + 0x0000014d, + 0x0000014e, + 0x0000014f, + 0x00000150, + 0x00000151, + 0x00000152, + 0x00000153, + 0x00000154, + 0x00000155, + 0x00000156, + 0x00000157, + 0x00000158, + 0x00000159, + 0x0000015a, + 0x0000015b, + }, + { + 0x0000015c, + 0x0000015d, + 0x0000015e, + 0x0000015f, + 0x00000160, + 0x00000161, + 0x00000162, + 0x00000163, + 0x00000164, + 0x00000165, + 0x00000166, + 0x00000167, + 0x00000168, + 0x00000169, + 0x0000016a, + 0x0000016b, + }, + { + 0x0000016c, + 0x0000016d, + 0x0000016e, + 0x0000016f, + 0x00000170, + 0x00000171, + 0x00000172, + 0x00000173, + 0x00000174, + 0x00000175, + 0x00000176, + 0x00000177, + 0x00000178, + 0x00000179, + 0x0000017a, + 0x0000017b, + }, + { + 0x0000017c, + 0x0000017d, + 0x0000017e, + 0x0000017f, + 0x00000180, + 0x00000181, + 0x00000182, + 0x00000183, + 0x00000184, + 0x00000185, + 0x00000186, + 0x00000187, + 0x00000188, + 0x00000189, + 0x0000018a, + 0x0000018b, + }, }; #endif @@ -1084,157 +10200,1901 @@ const uint32_t c_aauiCQMFHuffEnc15[576][2] = #else const uint16_t c_aauiCQMFHuffEnc15[576][2] = #endif -{ - {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0005, 0x000c}, {0x0006, 0x0009}, {0x0006, 0x000a}, {0x0007, 0x0008}, {0x0008, 0x0009}, {0x0009, 0x0008}, - {0x000b, 0x000b}, {0x000d, 0x000e}, {0x000e, 0x0011}, {0x000f, 0x001a}, {0x0012, 0x006e}, {0x0014, 0x0000}, {0x0013, 0x00cc}, {0x0014, 0x0001}, - {0x0014, 0x0002}, {0x0014, 0x0003}, {0x0014, 0x0004}, {0x0014, 0x0005}, {0x0014, 0x0006}, {0x0014, 0x0007}, {0x0014, 0x0008}, {0x0014, 0x0009}, - {0x0005, 0x000d}, {0x0004, 0x000c}, {0x0004, 0x000d}, {0x0005, 0x000e}, {0x0005, 0x000f}, {0x0006, 0x000b}, {0x0007, 0x0009}, {0x0008, 0x000a}, - {0x000a, 0x000a}, {0x000c, 0x000c}, {0x000d, 0x000f}, {0x000f, 0x001b}, {0x0011, 0x003d}, {0x0011, 0x003e}, {0x0013, 0x00cd}, {0x0014, 0x000a}, - {0x0014, 0x000b}, {0x0014, 0x000c}, {0x0014, 0x000d}, {0x0014, 0x000e}, {0x0014, 0x000f}, {0x0014, 0x0010}, {0x0014, 0x0011}, {0x0014, 0x0012}, - {0x0005, 0x0010}, {0x0004, 0x000e}, {0x0004, 0x000f}, {0x0005, 0x0011}, {0x0005, 0x0012}, {0x0006, 0x000c}, {0x0007, 0x000a}, {0x0009, 0x0009}, - {0x000a, 0x000b}, {0x000c, 0x000d}, {0x000e, 0x0012}, {0x0010, 0x0027}, {0x0011, 0x003f}, {0x0012, 0x006f}, {0x0014, 0x0013}, {0x0014, 0x0014}, - {0x0014, 0x0015}, {0x0014, 0x0016}, {0x0014, 0x0017}, {0x0014, 0x0018}, {0x0014, 0x0019}, {0x0014, 0x001a}, {0x0014, 0x001b}, {0x0014, 0x001c}, - {0x0006, 0x000d}, {0x0005, 0x0013}, {0x0005, 0x0014}, {0x0005, 0x0015}, {0x0006, 0x000e}, {0x0007, 0x000b}, {0x0008, 0x000b}, {0x0009, 0x000a}, - {0x000b, 0x000c}, {0x000c, 0x000e}, {0x000e, 0x0013}, {0x000f, 0x001c}, {0x0011, 0x0040}, {0x0012, 0x0070}, {0x0014, 0x001d}, {0x0014, 0x001e}, - {0x0014, 0x001f}, {0x0014, 0x0020}, {0x0014, 0x0021}, {0x0014, 0x0022}, {0x0014, 0x0023}, {0x0014, 0x0024}, {0x0014, 0x0025}, {0x0014, 0x0026}, - {0x0006, 0x000f}, {0x0005, 0x0016}, {0x0005, 0x0017}, {0x0006, 0x0010}, {0x0006, 0x0011}, {0x0007, 0x000c}, {0x0009, 0x000b}, {0x000a, 0x000c}, - {0x000b, 0x000d}, {0x000d, 0x0010}, {0x000e, 0x0014}, {0x0010, 0x0028}, {0x0011, 0x0041}, {0x0013, 0x00ce}, {0x0014, 0x0027}, {0x0014, 0x0028}, - {0x0014, 0x0029}, {0x0014, 0x002a}, {0x0014, 0x002b}, {0x0014, 0x002c}, {0x0014, 0x002d}, {0x0014, 0x002e}, {0x0014, 0x002f}, {0x0014, 0x0030}, - {0x0007, 0x000d}, {0x0006, 0x0012}, {0x0006, 0x0013}, {0x0007, 0x000e}, {0x0007, 0x000f}, {0x0008, 0x000c}, {0x0009, 0x000c}, {0x000b, 0x000e}, - {0x000c, 0x000f}, {0x000e, 0x0015}, {0x0010, 0x0029}, {0x0011, 0x0042}, {0x0014, 0x0031}, {0x0014, 0x0032}, {0x0014, 0x0033}, {0x0014, 0x0034}, - {0x0014, 0x0035}, {0x0014, 0x0036}, {0x0014, 0x0037}, {0x0014, 0x0038}, {0x0014, 0x0039}, {0x0014, 0x003a}, {0x0014, 0x003b}, {0x0014, 0x003c}, - {0x0008, 0x000d}, {0x0007, 0x0010}, {0x0007, 0x0011}, {0x0008, 0x000e}, {0x0009, 0x000d}, {0x0009, 0x000e}, {0x000b, 0x000f}, {0x000c, 0x0010}, - {0x000d, 0x0011}, {0x000f, 0x001d}, {0x0010, 0x002a}, {0x0011, 0x0043}, {0x0014, 0x003d}, {0x0013, 0x00cf}, {0x0014, 0x003e}, {0x0014, 0x003f}, - {0x0014, 0x0040}, {0x0014, 0x0041}, {0x0014, 0x0042}, {0x0014, 0x0043}, {0x0014, 0x0044}, {0x0014, 0x0045}, {0x0014, 0x0046}, {0x0014, 0x0047}, - {0x0009, 0x000f}, {0x0008, 0x000f}, {0x0009, 0x0010}, {0x0009, 0x0011}, {0x000a, 0x000d}, {0x000b, 0x0010}, {0x000c, 0x0011}, {0x000d, 0x0012}, - {0x000e, 0x0016}, {0x0010, 0x002b}, {0x0011, 0x0044}, {0x0012, 0x0071}, {0x0014, 0x0048}, {0x0014, 0x0049}, {0x0014, 0x004a}, {0x0014, 0x004b}, - {0x0014, 0x004c}, {0x0014, 0x004d}, {0x0014, 0x004e}, {0x0014, 0x004f}, {0x0014, 0x0050}, {0x0014, 0x0051}, {0x0014, 0x0052}, {0x0014, 0x0053}, - {0x000b, 0x0011}, {0x000a, 0x000e}, {0x000a, 0x000f}, {0x000b, 0x0012}, {0x000b, 0x0013}, {0x000c, 0x0012}, {0x000d, 0x0013}, {0x000e, 0x0017}, - {0x0010, 0x002c}, {0x0012, 0x0072}, {0x0011, 0x0045}, {0x0013, 0x00d0}, {0x0013, 0x00d1}, {0x0014, 0x0054}, {0x0014, 0x0055}, {0x0014, 0x0056}, - {0x0014, 0x0057}, {0x0014, 0x0058}, {0x0014, 0x0059}, {0x0014, 0x005a}, {0x0014, 0x005b}, {0x0014, 0x005c}, {0x0014, 0x005d}, {0x0014, 0x005e}, - {0x000c, 0x0013}, {0x000c, 0x0014}, {0x000c, 0x0015}, {0x000d, 0x0014}, {0x000d, 0x0015}, {0x000e, 0x0018}, {0x000f, 0x001e}, {0x0010, 0x002d}, - {0x0011, 0x0046}, {0x0011, 0x0047}, {0x0011, 0x0048}, {0x0014, 0x005f}, {0x0014, 0x0060}, {0x0014, 0x0061}, {0x0014, 0x0062}, {0x0014, 0x0063}, - {0x0014, 0x0064}, {0x0014, 0x0065}, {0x0014, 0x0066}, {0x0014, 0x0067}, {0x0014, 0x0068}, {0x0014, 0x0069}, {0x0014, 0x006a}, {0x0014, 0x006b}, - {0x000e, 0x0019}, {0x000d, 0x0016}, {0x000d, 0x0017}, {0x000e, 0x001a}, {0x000e, 0x001b}, {0x000f, 0x001f}, {0x0010, 0x002e}, {0x0011, 0x0049}, - {0x0012, 0x0073}, {0x0014, 0x006c}, {0x0014, 0x006d}, {0x0014, 0x006e}, {0x0014, 0x006f}, {0x0014, 0x0070}, {0x0014, 0x0071}, {0x0014, 0x0072}, - {0x0014, 0x0073}, {0x0014, 0x0074}, {0x0014, 0x0075}, {0x0014, 0x0076}, {0x0014, 0x0077}, {0x0014, 0x0078}, {0x0014, 0x0079}, {0x0014, 0x007a}, - {0x0010, 0x002f}, {0x000f, 0x0020}, {0x0010, 0x0030}, {0x000f, 0x0021}, {0x0010, 0x0031}, {0x0011, 0x004a}, {0x0011, 0x004b}, {0x0012, 0x0074}, - {0x0014, 0x007b}, {0x0014, 0x007c}, {0x0013, 0x00d2}, {0x0014, 0x007d}, {0x0014, 0x007e}, {0x0014, 0x007f}, {0x0014, 0x0080}, {0x0014, 0x0081}, - {0x0014, 0x0082}, {0x0014, 0x0083}, {0x0014, 0x0084}, {0x0014, 0x0085}, {0x0014, 0x0086}, {0x0014, 0x0087}, {0x0014, 0x0088}, {0x0014, 0x0089}, - {0x0012, 0x0075}, {0x0010, 0x0032}, {0x0010, 0x0033}, {0x0011, 0x004c}, {0x0011, 0x004d}, {0x0013, 0x00d3}, {0x0013, 0x00d4}, {0x0012, 0x0076}, - {0x0013, 0x00d5}, {0x0014, 0x008a}, {0x0014, 0x008b}, {0x0014, 0x008c}, {0x0014, 0x008d}, {0x0014, 0x008e}, {0x0014, 0x008f}, {0x0014, 0x0090}, - {0x0014, 0x0091}, {0x0014, 0x0092}, {0x0014, 0x0093}, {0x0014, 0x0094}, {0x0014, 0x0095}, {0x0014, 0x0096}, {0x0014, 0x0097}, {0x0014, 0x0098}, - {0x0013, 0x00d6}, {0x0013, 0x00d7}, {0x0012, 0x0077}, {0x0012, 0x0078}, {0x0014, 0x0099}, {0x0014, 0x009a}, {0x0013, 0x00d8}, {0x0014, 0x009b}, - {0x0014, 0x009c}, {0x0014, 0x009d}, {0x0014, 0x009e}, {0x0014, 0x009f}, {0x0014, 0x00a0}, {0x0014, 0x00a1}, {0x0014, 0x00a2}, {0x0014, 0x00a3}, - {0x0014, 0x00a4}, {0x0014, 0x00a5}, {0x0014, 0x00a6}, {0x0014, 0x00a7}, {0x0014, 0x00a8}, {0x0014, 0x00a9}, {0x0014, 0x00aa}, {0x0014, 0x00ab}, - {0x0014, 0x00ac}, {0x0014, 0x00ad}, {0x0014, 0x00ae}, {0x0014, 0x00af}, {0x0012, 0x0079}, {0x0014, 0x00b0}, {0x0014, 0x00b1}, {0x0014, 0x00b2}, - {0x0014, 0x00b3}, {0x0014, 0x00b4}, {0x0014, 0x00b5}, {0x0014, 0x00b6}, {0x0014, 0x00b7}, {0x0014, 0x00b8}, {0x0014, 0x00b9}, {0x0014, 0x00ba}, - {0x0014, 0x00bb}, {0x0014, 0x00bc}, {0x0014, 0x00bd}, {0x0014, 0x00be}, {0x0014, 0x00bf}, {0x0014, 0x00c0}, {0x0014, 0x00c1}, {0x0014, 0x00c2}, - {0x0014, 0x00c3}, {0x0014, 0x00c4}, {0x0014, 0x00c5}, {0x0014, 0x00c6}, {0x0013, 0x00d9}, {0x0013, 0x00da}, {0x0014, 0x00c7}, {0x0014, 0x00c8}, - {0x0014, 0x00c9}, {0x0014, 0x00ca}, {0x0014, 0x00cb}, {0x0014, 0x00cc}, {0x0014, 0x00cd}, {0x0014, 0x00ce}, {0x0014, 0x00cf}, {0x0014, 0x00d0}, - {0x0014, 0x00d1}, {0x0014, 0x00d2}, {0x0014, 0x00d3}, {0x0014, 0x00d4}, {0x0014, 0x00d5}, {0x0014, 0x00d6}, {0x0014, 0x00d7}, {0x0014, 0x00d8}, - {0x0014, 0x00d9}, {0x0014, 0x00da}, {0x0014, 0x00db}, {0x0014, 0x00dc}, {0x0014, 0x00dd}, {0x0014, 0x00de}, {0x0014, 0x00df}, {0x0014, 0x00e0}, - {0x0014, 0x00e1}, {0x0014, 0x00e2}, {0x0014, 0x00e3}, {0x0014, 0x00e4}, {0x0014, 0x00e5}, {0x0014, 0x00e6}, {0x0014, 0x00e7}, {0x0014, 0x00e8}, - {0x0014, 0x00e9}, {0x0014, 0x00ea}, {0x0014, 0x00eb}, {0x0014, 0x00ec}, {0x0014, 0x00ed}, {0x0014, 0x00ee}, {0x0014, 0x00ef}, {0x0014, 0x00f0}, - {0x0014, 0x00f1}, {0x0014, 0x00f2}, {0x0014, 0x00f3}, {0x0014, 0x00f4}, {0x0014, 0x00f5}, {0x0014, 0x00f6}, {0x0014, 0x00f7}, {0x0014, 0x00f8}, - {0x0014, 0x00f9}, {0x0014, 0x00fa}, {0x0014, 0x00fb}, {0x0014, 0x00fc}, {0x0014, 0x00fd}, {0x0014, 0x00fe}, {0x0014, 0x00ff}, {0x0014, 0x0100}, - {0x0014, 0x0101}, {0x0014, 0x0102}, {0x0014, 0x0103}, {0x0014, 0x0104}, {0x0014, 0x0105}, {0x0014, 0x0106}, {0x0014, 0x0107}, {0x0014, 0x0108}, - {0x0014, 0x0109}, {0x0014, 0x010a}, {0x0014, 0x010b}, {0x0014, 0x010c}, {0x0014, 0x010d}, {0x0014, 0x010e}, {0x0014, 0x010f}, {0x0014, 0x0110}, - {0x0014, 0x0111}, {0x0014, 0x0112}, {0x0014, 0x0113}, {0x0014, 0x0114}, {0x0014, 0x0115}, {0x0014, 0x0116}, {0x0014, 0x0117}, {0x0014, 0x0118}, - {0x0014, 0x0119}, {0x0014, 0x011a}, {0x0014, 0x011b}, {0x0014, 0x011c}, {0x0014, 0x011d}, {0x0014, 0x011e}, {0x0014, 0x011f}, {0x0014, 0x0120}, - {0x0014, 0x0121}, {0x0014, 0x0122}, {0x0014, 0x0123}, {0x0014, 0x0124}, {0x0014, 0x0125}, {0x0014, 0x0126}, {0x0014, 0x0127}, {0x0014, 0x0128}, - {0x0014, 0x0129}, {0x0014, 0x012a}, {0x0014, 0x012b}, {0x0014, 0x012c}, {0x0014, 0x012d}, {0x0014, 0x012e}, {0x0014, 0x012f}, {0x0014, 0x0130}, - {0x0014, 0x0131}, {0x0014, 0x0132}, {0x0014, 0x0133}, {0x0014, 0x0134}, {0x0014, 0x0135}, {0x0014, 0x0136}, {0x0014, 0x0137}, {0x0014, 0x0138}, - {0x0014, 0x0139}, {0x0014, 0x013a}, {0x0014, 0x013b}, {0x0014, 0x013c}, {0x0014, 0x013d}, {0x0014, 0x013e}, {0x0014, 0x013f}, {0x0014, 0x0140}, - {0x0014, 0x0141}, {0x0014, 0x0142}, {0x0014, 0x0143}, {0x0014, 0x0144}, {0x0014, 0x0145}, {0x0014, 0x0146}, {0x0014, 0x0147}, {0x0014, 0x0148}, - {0x0014, 0x0149}, {0x0014, 0x014a}, {0x0014, 0x014b}, {0x0014, 0x014c}, {0x0014, 0x014d}, {0x0014, 0x014e}, {0x0014, 0x014f}, {0x0014, 0x0150}, - {0x0014, 0x0151}, {0x0014, 0x0152}, {0x0014, 0x0153}, {0x0014, 0x0154}, {0x0014, 0x0155}, {0x0014, 0x0156}, {0x0014, 0x0157}, {0x0014, 0x0158}, - {0x0014, 0x0159}, {0x0014, 0x015a}, {0x0014, 0x015b}, {0x0014, 0x015c}, {0x0014, 0x015d}, {0x0014, 0x015e}, {0x0014, 0x015f}, {0x0014, 0x0160}, - {0x0014, 0x0161}, {0x0014, 0x0162}, {0x0014, 0x0163}, {0x0014, 0x0164}, {0x0014, 0x0165}, {0x0014, 0x0166}, {0x0014, 0x0167}, {0x0014, 0x0168}, - {0x0014, 0x0169}, {0x0014, 0x016a}, {0x0014, 0x016b}, {0x0014, 0x016c}, {0x0014, 0x016d}, {0x0014, 0x016e}, {0x0014, 0x016f}, {0x0014, 0x0170}, - {0x0014, 0x0171}, {0x0014, 0x0172}, {0x0014, 0x0173}, {0x0014, 0x0174}, {0x0014, 0x0175}, {0x0014, 0x0176}, {0x0014, 0x0177}, {0x0014, 0x0178}, - {0x0014, 0x0179}, {0x0014, 0x017a}, {0x0014, 0x017b}, {0x0014, 0x017c}, {0x0014, 0x017d}, {0x0014, 0x017e}, {0x0014, 0x017f}, {0x0014, 0x0180}, - {0x0014, 0x0181}, {0x0014, 0x0182}, {0x0014, 0x0183}, {0x0014, 0x0184}, {0x0014, 0x0185}, {0x0014, 0x0186}, {0x0014, 0x0187}, {0x0014, 0x0188}, - {0x0014, 0x0189}, {0x0014, 0x018a}, {0x0014, 0x018b}, {0x0014, 0x018c}, {0x0014, 0x018d}, {0x0014, 0x018e}, {0x0014, 0x018f}, {0x0014, 0x0190}, - {0x0014, 0x0191}, {0x0014, 0x0192}, {0x0014, 0x0193}, {0x0014, 0x0194}, {0x0014, 0x0195}, {0x0014, 0x0196}, {0x0014, 0x0197}, {0x0013, 0x00db}, -}; + { + { 0x0005, 0x000a }, + { 0x0005, 0x000b }, + { 0x0005, 0x000c }, + { 0x0006, 0x0009 }, + { 0x0006, 0x000a }, + { 0x0007, 0x0008 }, + { 0x0008, 0x0009 }, + { 0x0009, 0x0008 }, + { 0x000b, 0x000b }, + { 0x000d, 0x000e }, + { 0x000e, 0x0011 }, + { 0x000f, 0x001a }, + { 0x0012, 0x006e }, + { 0x0014, 0x0000 }, + { 0x0013, 0x00cc }, + { 0x0014, 0x0001 }, + { 0x0014, 0x0002 }, + { 0x0014, 0x0003 }, + { 0x0014, 0x0004 }, + { 0x0014, 0x0005 }, + { 0x0014, 0x0006 }, + { 0x0014, 0x0007 }, + { 0x0014, 0x0008 }, + { 0x0014, 0x0009 }, + { 0x0005, 0x000d }, + { 0x0004, 0x000c }, + { 0x0004, 0x000d }, + { 0x0005, 0x000e }, + { 0x0005, 0x000f }, + { 0x0006, 0x000b }, + { 0x0007, 0x0009 }, + { 0x0008, 0x000a }, + { 0x000a, 0x000a }, + { 0x000c, 0x000c }, + { 0x000d, 0x000f }, + { 0x000f, 0x001b }, + { 0x0011, 0x003d }, + { 0x0011, 0x003e }, + { 0x0013, 0x00cd }, + { 0x0014, 0x000a }, + { 0x0014, 0x000b }, + { 0x0014, 0x000c }, + { 0x0014, 0x000d }, + { 0x0014, 0x000e }, + { 0x0014, 0x000f }, + { 0x0014, 0x0010 }, + { 0x0014, 0x0011 }, + { 0x0014, 0x0012 }, + { 0x0005, 0x0010 }, + { 0x0004, 0x000e }, + { 0x0004, 0x000f }, + { 0x0005, 0x0011 }, + { 0x0005, 0x0012 }, + { 0x0006, 0x000c }, + { 0x0007, 0x000a }, + { 0x0009, 0x0009 }, + { 0x000a, 0x000b }, + { 0x000c, 0x000d }, + { 0x000e, 0x0012 }, + { 0x0010, 0x0027 }, + { 0x0011, 0x003f }, + { 0x0012, 0x006f }, + { 0x0014, 0x0013 }, + { 0x0014, 0x0014 }, + { 0x0014, 0x0015 }, + { 0x0014, 0x0016 }, + { 0x0014, 0x0017 }, + { 0x0014, 0x0018 }, + { 0x0014, 0x0019 }, + { 0x0014, 0x001a }, + { 0x0014, 0x001b }, + { 0x0014, 0x001c }, + { 0x0006, 0x000d }, + { 0x0005, 0x0013 }, + { 0x0005, 0x0014 }, + { 0x0005, 0x0015 }, + { 0x0006, 0x000e }, + { 0x0007, 0x000b }, + { 0x0008, 0x000b }, + { 0x0009, 0x000a }, + { 0x000b, 0x000c }, + { 0x000c, 0x000e }, + { 0x000e, 0x0013 }, + { 0x000f, 0x001c }, + { 0x0011, 0x0040 }, + { 0x0012, 0x0070 }, + { 0x0014, 0x001d }, + { 0x0014, 0x001e }, + { 0x0014, 0x001f }, + { 0x0014, 0x0020 }, + { 0x0014, 0x0021 }, + { 0x0014, 0x0022 }, + { 0x0014, 0x0023 }, + { 0x0014, 0x0024 }, + { 0x0014, 0x0025 }, + { 0x0014, 0x0026 }, + { 0x0006, 0x000f }, + { 0x0005, 0x0016 }, + { 0x0005, 0x0017 }, + { 0x0006, 0x0010 }, + { 0x0006, 0x0011 }, + { 0x0007, 0x000c }, + { 0x0009, 0x000b }, + { 0x000a, 0x000c }, + { 0x000b, 0x000d }, + { 0x000d, 0x0010 }, + { 0x000e, 0x0014 }, + { 0x0010, 0x0028 }, + { 0x0011, 0x0041 }, + { 0x0013, 0x00ce }, + { 0x0014, 0x0027 }, + { 0x0014, 0x0028 }, + { 0x0014, 0x0029 }, + { 0x0014, 0x002a }, + { 0x0014, 0x002b }, + { 0x0014, 0x002c }, + { 0x0014, 0x002d }, + { 0x0014, 0x002e }, + { 0x0014, 0x002f }, + { 0x0014, 0x0030 }, + { 0x0007, 0x000d }, + { 0x0006, 0x0012 }, + { 0x0006, 0x0013 }, + { 0x0007, 0x000e }, + { 0x0007, 0x000f }, + { 0x0008, 0x000c }, + { 0x0009, 0x000c }, + { 0x000b, 0x000e }, + { 0x000c, 0x000f }, + { 0x000e, 0x0015 }, + { 0x0010, 0x0029 }, + { 0x0011, 0x0042 }, + { 0x0014, 0x0031 }, + { 0x0014, 0x0032 }, + { 0x0014, 0x0033 }, + { 0x0014, 0x0034 }, + { 0x0014, 0x0035 }, + { 0x0014, 0x0036 }, + { 0x0014, 0x0037 }, + { 0x0014, 0x0038 }, + { 0x0014, 0x0039 }, + { 0x0014, 0x003a }, + { 0x0014, 0x003b }, + { 0x0014, 0x003c }, + { 0x0008, 0x000d }, + { 0x0007, 0x0010 }, + { 0x0007, 0x0011 }, + { 0x0008, 0x000e }, + { 0x0009, 0x000d }, + { 0x0009, 0x000e }, + { 0x000b, 0x000f }, + { 0x000c, 0x0010 }, + { 0x000d, 0x0011 }, + { 0x000f, 0x001d }, + { 0x0010, 0x002a }, + { 0x0011, 0x0043 }, + { 0x0014, 0x003d }, + { 0x0013, 0x00cf }, + { 0x0014, 0x003e }, + { 0x0014, 0x003f }, + { 0x0014, 0x0040 }, + { 0x0014, 0x0041 }, + { 0x0014, 0x0042 }, + { 0x0014, 0x0043 }, + { 0x0014, 0x0044 }, + { 0x0014, 0x0045 }, + { 0x0014, 0x0046 }, + { 0x0014, 0x0047 }, + { 0x0009, 0x000f }, + { 0x0008, 0x000f }, + { 0x0009, 0x0010 }, + { 0x0009, 0x0011 }, + { 0x000a, 0x000d }, + { 0x000b, 0x0010 }, + { 0x000c, 0x0011 }, + { 0x000d, 0x0012 }, + { 0x000e, 0x0016 }, + { 0x0010, 0x002b }, + { 0x0011, 0x0044 }, + { 0x0012, 0x0071 }, + { 0x0014, 0x0048 }, + { 0x0014, 0x0049 }, + { 0x0014, 0x004a }, + { 0x0014, 0x004b }, + { 0x0014, 0x004c }, + { 0x0014, 0x004d }, + { 0x0014, 0x004e }, + { 0x0014, 0x004f }, + { 0x0014, 0x0050 }, + { 0x0014, 0x0051 }, + { 0x0014, 0x0052 }, + { 0x0014, 0x0053 }, + { 0x000b, 0x0011 }, + { 0x000a, 0x000e }, + { 0x000a, 0x000f }, + { 0x000b, 0x0012 }, + { 0x000b, 0x0013 }, + { 0x000c, 0x0012 }, + { 0x000d, 0x0013 }, + { 0x000e, 0x0017 }, + { 0x0010, 0x002c }, + { 0x0012, 0x0072 }, + { 0x0011, 0x0045 }, + { 0x0013, 0x00d0 }, + { 0x0013, 0x00d1 }, + { 0x0014, 0x0054 }, + { 0x0014, 0x0055 }, + { 0x0014, 0x0056 }, + { 0x0014, 0x0057 }, + { 0x0014, 0x0058 }, + { 0x0014, 0x0059 }, + { 0x0014, 0x005a }, + { 0x0014, 0x005b }, + { 0x0014, 0x005c }, + { 0x0014, 0x005d }, + { 0x0014, 0x005e }, + { 0x000c, 0x0013 }, + { 0x000c, 0x0014 }, + { 0x000c, 0x0015 }, + { 0x000d, 0x0014 }, + { 0x000d, 0x0015 }, + { 0x000e, 0x0018 }, + { 0x000f, 0x001e }, + { 0x0010, 0x002d }, + { 0x0011, 0x0046 }, + { 0x0011, 0x0047 }, + { 0x0011, 0x0048 }, + { 0x0014, 0x005f }, + { 0x0014, 0x0060 }, + { 0x0014, 0x0061 }, + { 0x0014, 0x0062 }, + { 0x0014, 0x0063 }, + { 0x0014, 0x0064 }, + { 0x0014, 0x0065 }, + { 0x0014, 0x0066 }, + { 0x0014, 0x0067 }, + { 0x0014, 0x0068 }, + { 0x0014, 0x0069 }, + { 0x0014, 0x006a }, + { 0x0014, 0x006b }, + { 0x000e, 0x0019 }, + { 0x000d, 0x0016 }, + { 0x000d, 0x0017 }, + { 0x000e, 0x001a }, + { 0x000e, 0x001b }, + { 0x000f, 0x001f }, + { 0x0010, 0x002e }, + { 0x0011, 0x0049 }, + { 0x0012, 0x0073 }, + { 0x0014, 0x006c }, + { 0x0014, 0x006d }, + { 0x0014, 0x006e }, + { 0x0014, 0x006f }, + { 0x0014, 0x0070 }, + { 0x0014, 0x0071 }, + { 0x0014, 0x0072 }, + { 0x0014, 0x0073 }, + { 0x0014, 0x0074 }, + { 0x0014, 0x0075 }, + { 0x0014, 0x0076 }, + { 0x0014, 0x0077 }, + { 0x0014, 0x0078 }, + { 0x0014, 0x0079 }, + { 0x0014, 0x007a }, + { 0x0010, 0x002f }, + { 0x000f, 0x0020 }, + { 0x0010, 0x0030 }, + { 0x000f, 0x0021 }, + { 0x0010, 0x0031 }, + { 0x0011, 0x004a }, + { 0x0011, 0x004b }, + { 0x0012, 0x0074 }, + { 0x0014, 0x007b }, + { 0x0014, 0x007c }, + { 0x0013, 0x00d2 }, + { 0x0014, 0x007d }, + { 0x0014, 0x007e }, + { 0x0014, 0x007f }, + { 0x0014, 0x0080 }, + { 0x0014, 0x0081 }, + { 0x0014, 0x0082 }, + { 0x0014, 0x0083 }, + { 0x0014, 0x0084 }, + { 0x0014, 0x0085 }, + { 0x0014, 0x0086 }, + { 0x0014, 0x0087 }, + { 0x0014, 0x0088 }, + { 0x0014, 0x0089 }, + { 0x0012, 0x0075 }, + { 0x0010, 0x0032 }, + { 0x0010, 0x0033 }, + { 0x0011, 0x004c }, + { 0x0011, 0x004d }, + { 0x0013, 0x00d3 }, + { 0x0013, 0x00d4 }, + { 0x0012, 0x0076 }, + { 0x0013, 0x00d5 }, + { 0x0014, 0x008a }, + { 0x0014, 0x008b }, + { 0x0014, 0x008c }, + { 0x0014, 0x008d }, + { 0x0014, 0x008e }, + { 0x0014, 0x008f }, + { 0x0014, 0x0090 }, + { 0x0014, 0x0091 }, + { 0x0014, 0x0092 }, + { 0x0014, 0x0093 }, + { 0x0014, 0x0094 }, + { 0x0014, 0x0095 }, + { 0x0014, 0x0096 }, + { 0x0014, 0x0097 }, + { 0x0014, 0x0098 }, + { 0x0013, 0x00d6 }, + { 0x0013, 0x00d7 }, + { 0x0012, 0x0077 }, + { 0x0012, 0x0078 }, + { 0x0014, 0x0099 }, + { 0x0014, 0x009a }, + { 0x0013, 0x00d8 }, + { 0x0014, 0x009b }, + { 0x0014, 0x009c }, + { 0x0014, 0x009d }, + { 0x0014, 0x009e }, + { 0x0014, 0x009f }, + { 0x0014, 0x00a0 }, + { 0x0014, 0x00a1 }, + { 0x0014, 0x00a2 }, + { 0x0014, 0x00a3 }, + { 0x0014, 0x00a4 }, + { 0x0014, 0x00a5 }, + { 0x0014, 0x00a6 }, + { 0x0014, 0x00a7 }, + { 0x0014, 0x00a8 }, + { 0x0014, 0x00a9 }, + { 0x0014, 0x00aa }, + { 0x0014, 0x00ab }, + { 0x0014, 0x00ac }, + { 0x0014, 0x00ad }, + { 0x0014, 0x00ae }, + { 0x0014, 0x00af }, + { 0x0012, 0x0079 }, + { 0x0014, 0x00b0 }, + { 0x0014, 0x00b1 }, + { 0x0014, 0x00b2 }, + { 0x0014, 0x00b3 }, + { 0x0014, 0x00b4 }, + { 0x0014, 0x00b5 }, + { 0x0014, 0x00b6 }, + { 0x0014, 0x00b7 }, + { 0x0014, 0x00b8 }, + { 0x0014, 0x00b9 }, + { 0x0014, 0x00ba }, + { 0x0014, 0x00bb }, + { 0x0014, 0x00bc }, + { 0x0014, 0x00bd }, + { 0x0014, 0x00be }, + { 0x0014, 0x00bf }, + { 0x0014, 0x00c0 }, + { 0x0014, 0x00c1 }, + { 0x0014, 0x00c2 }, + { 0x0014, 0x00c3 }, + { 0x0014, 0x00c4 }, + { 0x0014, 0x00c5 }, + { 0x0014, 0x00c6 }, + { 0x0013, 0x00d9 }, + { 0x0013, 0x00da }, + { 0x0014, 0x00c7 }, + { 0x0014, 0x00c8 }, + { 0x0014, 0x00c9 }, + { 0x0014, 0x00ca }, + { 0x0014, 0x00cb }, + { 0x0014, 0x00cc }, + { 0x0014, 0x00cd }, + { 0x0014, 0x00ce }, + { 0x0014, 0x00cf }, + { 0x0014, 0x00d0 }, + { 0x0014, 0x00d1 }, + { 0x0014, 0x00d2 }, + { 0x0014, 0x00d3 }, + { 0x0014, 0x00d4 }, + { 0x0014, 0x00d5 }, + { 0x0014, 0x00d6 }, + { 0x0014, 0x00d7 }, + { 0x0014, 0x00d8 }, + { 0x0014, 0x00d9 }, + { 0x0014, 0x00da }, + { 0x0014, 0x00db }, + { 0x0014, 0x00dc }, + { 0x0014, 0x00dd }, + { 0x0014, 0x00de }, + { 0x0014, 0x00df }, + { 0x0014, 0x00e0 }, + { 0x0014, 0x00e1 }, + { 0x0014, 0x00e2 }, + { 0x0014, 0x00e3 }, + { 0x0014, 0x00e4 }, + { 0x0014, 0x00e5 }, + { 0x0014, 0x00e6 }, + { 0x0014, 0x00e7 }, + { 0x0014, 0x00e8 }, + { 0x0014, 0x00e9 }, + { 0x0014, 0x00ea }, + { 0x0014, 0x00eb }, + { 0x0014, 0x00ec }, + { 0x0014, 0x00ed }, + { 0x0014, 0x00ee }, + { 0x0014, 0x00ef }, + { 0x0014, 0x00f0 }, + { 0x0014, 0x00f1 }, + { 0x0014, 0x00f2 }, + { 0x0014, 0x00f3 }, + { 0x0014, 0x00f4 }, + { 0x0014, 0x00f5 }, + { 0x0014, 0x00f6 }, + { 0x0014, 0x00f7 }, + { 0x0014, 0x00f8 }, + { 0x0014, 0x00f9 }, + { 0x0014, 0x00fa }, + { 0x0014, 0x00fb }, + { 0x0014, 0x00fc }, + { 0x0014, 0x00fd }, + { 0x0014, 0x00fe }, + { 0x0014, 0x00ff }, + { 0x0014, 0x0100 }, + { 0x0014, 0x0101 }, + { 0x0014, 0x0102 }, + { 0x0014, 0x0103 }, + { 0x0014, 0x0104 }, + { 0x0014, 0x0105 }, + { 0x0014, 0x0106 }, + { 0x0014, 0x0107 }, + { 0x0014, 0x0108 }, + { 0x0014, 0x0109 }, + { 0x0014, 0x010a }, + { 0x0014, 0x010b }, + { 0x0014, 0x010c }, + { 0x0014, 0x010d }, + { 0x0014, 0x010e }, + { 0x0014, 0x010f }, + { 0x0014, 0x0110 }, + { 0x0014, 0x0111 }, + { 0x0014, 0x0112 }, + { 0x0014, 0x0113 }, + { 0x0014, 0x0114 }, + { 0x0014, 0x0115 }, + { 0x0014, 0x0116 }, + { 0x0014, 0x0117 }, + { 0x0014, 0x0118 }, + { 0x0014, 0x0119 }, + { 0x0014, 0x011a }, + { 0x0014, 0x011b }, + { 0x0014, 0x011c }, + { 0x0014, 0x011d }, + { 0x0014, 0x011e }, + { 0x0014, 0x011f }, + { 0x0014, 0x0120 }, + { 0x0014, 0x0121 }, + { 0x0014, 0x0122 }, + { 0x0014, 0x0123 }, + { 0x0014, 0x0124 }, + { 0x0014, 0x0125 }, + { 0x0014, 0x0126 }, + { 0x0014, 0x0127 }, + { 0x0014, 0x0128 }, + { 0x0014, 0x0129 }, + { 0x0014, 0x012a }, + { 0x0014, 0x012b }, + { 0x0014, 0x012c }, + { 0x0014, 0x012d }, + { 0x0014, 0x012e }, + { 0x0014, 0x012f }, + { 0x0014, 0x0130 }, + { 0x0014, 0x0131 }, + { 0x0014, 0x0132 }, + { 0x0014, 0x0133 }, + { 0x0014, 0x0134 }, + { 0x0014, 0x0135 }, + { 0x0014, 0x0136 }, + { 0x0014, 0x0137 }, + { 0x0014, 0x0138 }, + { 0x0014, 0x0139 }, + { 0x0014, 0x013a }, + { 0x0014, 0x013b }, + { 0x0014, 0x013c }, + { 0x0014, 0x013d }, + { 0x0014, 0x013e }, + { 0x0014, 0x013f }, + { 0x0014, 0x0140 }, + { 0x0014, 0x0141 }, + { 0x0014, 0x0142 }, + { 0x0014, 0x0143 }, + { 0x0014, 0x0144 }, + { 0x0014, 0x0145 }, + { 0x0014, 0x0146 }, + { 0x0014, 0x0147 }, + { 0x0014, 0x0148 }, + { 0x0014, 0x0149 }, + { 0x0014, 0x014a }, + { 0x0014, 0x014b }, + { 0x0014, 0x014c }, + { 0x0014, 0x014d }, + { 0x0014, 0x014e }, + { 0x0014, 0x014f }, + { 0x0014, 0x0150 }, + { 0x0014, 0x0151 }, + { 0x0014, 0x0152 }, + { 0x0014, 0x0153 }, + { 0x0014, 0x0154 }, + { 0x0014, 0x0155 }, + { 0x0014, 0x0156 }, + { 0x0014, 0x0157 }, + { 0x0014, 0x0158 }, + { 0x0014, 0x0159 }, + { 0x0014, 0x015a }, + { 0x0014, 0x015b }, + { 0x0014, 0x015c }, + { 0x0014, 0x015d }, + { 0x0014, 0x015e }, + { 0x0014, 0x015f }, + { 0x0014, 0x0160 }, + { 0x0014, 0x0161 }, + { 0x0014, 0x0162 }, + { 0x0014, 0x0163 }, + { 0x0014, 0x0164 }, + { 0x0014, 0x0165 }, + { 0x0014, 0x0166 }, + { 0x0014, 0x0167 }, + { 0x0014, 0x0168 }, + { 0x0014, 0x0169 }, + { 0x0014, 0x016a }, + { 0x0014, 0x016b }, + { 0x0014, 0x016c }, + { 0x0014, 0x016d }, + { 0x0014, 0x016e }, + { 0x0014, 0x016f }, + { 0x0014, 0x0170 }, + { 0x0014, 0x0171 }, + { 0x0014, 0x0172 }, + { 0x0014, 0x0173 }, + { 0x0014, 0x0174 }, + { 0x0014, 0x0175 }, + { 0x0014, 0x0176 }, + { 0x0014, 0x0177 }, + { 0x0014, 0x0178 }, + { 0x0014, 0x0179 }, + { 0x0014, 0x017a }, + { 0x0014, 0x017b }, + { 0x0014, 0x017c }, + { 0x0014, 0x017d }, + { 0x0014, 0x017e }, + { 0x0014, 0x017f }, + { 0x0014, 0x0180 }, + { 0x0014, 0x0181 }, + { 0x0014, 0x0182 }, + { 0x0014, 0x0183 }, + { 0x0014, 0x0184 }, + { 0x0014, 0x0185 }, + { 0x0014, 0x0186 }, + { 0x0014, 0x0187 }, + { 0x0014, 0x0188 }, + { 0x0014, 0x0189 }, + { 0x0014, 0x018a }, + { 0x0014, 0x018b }, + { 0x0014, 0x018c }, + { 0x0014, 0x018d }, + { 0x0014, 0x018e }, + { 0x0014, 0x018f }, + { 0x0014, 0x0190 }, + { 0x0014, 0x0191 }, + { 0x0014, 0x0192 }, + { 0x0014, 0x0193 }, + { 0x0014, 0x0194 }, + { 0x0014, 0x0195 }, + { 0x0014, 0x0196 }, + { 0x0014, 0x0197 }, + { 0x0013, 0x00db }, + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec15[73][16] = -{ - {0x000cffff, 0x000bffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x0002ffff, 0x0001ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x00000019, 0x0000001a, 0x00000031, 0x00000032, }, - {0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, }, - {0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, }, - {0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, }, - {0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, }, - {0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, }, - {0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, }, - {0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030062, 0x00030062, 0x00030062, 0x00030062, 0x00030062, 0x00030062, 0x00030062, 0x00030062, }, - {0x00010091, 0x00010091, 0x00010092, 0x00010092, 0x00020003, 0x00020003, 0x00020003, 0x00020003, 0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, }, - {0x00020035, 0x00020035, 0x00020035, 0x00020035, 0x00020048, 0x00020048, 0x00020048, 0x00020048, 0x0002004c, 0x0002004c, 0x0002004c, 0x0002004c, 0x00020060, 0x00020060, 0x00020060, 0x00020060, }, - {0x00020063, 0x00020063, 0x00020063, 0x00020063, 0x00020064, 0x00020064, 0x00020064, 0x00020064, 0x00020079, 0x00020079, 0x00020079, 0x00020079, 0x0002007a, 0x0002007a, 0x0002007a, 0x0002007a, }, - {0x00010005, 0x00010005, 0x0001001e, 0x0001001e, 0x00010036, 0x00010036, 0x0001004d, 0x0001004d, 0x00010065, 0x00010065, 0x00010078, 0x00010078, 0x0001007b, 0x0001007b, 0x0001007c, 0x0001007c, }, - {0x0015ffff, 0x0014ffff, 0x0012ffff, 0x0013ffff, 0x000dffff, 0x000effff, 0x000fffff, 0x0010ffff, 0x0011ffff, 0x00000006, 0x0000001f, 0x0000004e, 0x0000007d, 0x00000090, 0x00000093, 0x000000a9, }, - {0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, }, - {0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, }, - {0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, }, - {0x00030095, 0x00030095, 0x00030095, 0x00030095, 0x00030095, 0x00030095, 0x00030095, 0x00030095, 0x000300a8, 0x000300a8, 0x000300a8, 0x000300a8, 0x000300a8, 0x000300a8, 0x000300a8, 0x000300a8, }, - {0x000300aa, 0x000300aa, 0x000300aa, 0x000300aa, 0x000300aa, 0x000300aa, 0x000300aa, 0x000300aa, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, }, - {0x000100ad, 0x000100ad, 0x000100c0, 0x000100c0, 0x000100c3, 0x000100c3, 0x000100c4, 0x000100c4, 0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020038, 0x00020038, 0x00020038, 0x00020038, }, - {0x00020067, 0x00020067, 0x00020067, 0x00020067, 0x000200ac, 0x000200ac, 0x000200ac, 0x000200ac, 0x000200c1, 0x000200c1, 0x000200c1, 0x000200c1, 0x000200c2, 0x000200c2, 0x000200c2, 0x000200c2, }, - {0x00000097, 0x000000ae, 0x000000c5, 0x000000d8, 0x000000d9, 0x000000da, 0x00010008, 0x00010008, 0x00010050, 0x00010050, 0x00010068, 0x00010068, 0x0001007f, 0x0001007f, 0x00010096, 0x00010096, }, - {0x002fffff, 0x0020ffff, 0x001fffff, 0x001effff, 0x001bffff, 0x001cffff, 0x001dffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x0019ffff, 0x001affff, 0x00000021, 0x00000039, 0x00000051, 0x00000080, }, - {0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, }, - {0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, }, - {0x000300af, 0x000300af, 0x000300af, 0x000300af, 0x000300af, 0x000300af, 0x000300af, 0x000300af, 0x000300c6, 0x000300c6, 0x000300c6, 0x000300c6, 0x000300c6, 0x000300c6, 0x000300c6, 0x000300c6, }, - {0x000300db, 0x000300db, 0x000300db, 0x000300db, 0x000300db, 0x000300db, 0x000300db, 0x000300db, 0x000300dc, 0x000300dc, 0x000300dc, 0x000300dc, 0x000300dc, 0x000300dc, 0x000300dc, 0x000300dc, }, - {0x000300f1, 0x000300f1, 0x000300f1, 0x000300f1, 0x000300f1, 0x000300f1, 0x000300f1, 0x000300f1, 0x000300f2, 0x000300f2, 0x000300f2, 0x000300f2, 0x000300f2, 0x000300f2, 0x000300f2, 0x000300f2, }, - {0x00010109, 0x00010109, 0x0001010b, 0x0001010b, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002003a, 0x0002003a, 0x0002003a, 0x0002003a, 0x00020052, 0x00020052, 0x00020052, 0x00020052, }, - {0x0002006a, 0x0002006a, 0x0002006a, 0x0002006a, 0x00020081, 0x00020081, 0x00020081, 0x00020081, 0x000200b0, 0x000200b0, 0x000200b0, 0x000200b0, 0x000200c7, 0x000200c7, 0x000200c7, 0x000200c7, }, - {0x000200dd, 0x000200dd, 0x000200dd, 0x000200dd, 0x000200f0, 0x000200f0, 0x000200f0, 0x000200f0, 0x000200f3, 0x000200f3, 0x000200f3, 0x000200f3, 0x000200f4, 0x000200f4, 0x000200f4, 0x000200f4, }, - {0x0000010a, 0x0000010c, 0x00000121, 0x00000122, 0x0001000b, 0x0001000b, 0x00010023, 0x00010023, 0x00010053, 0x00010053, 0x00010099, 0x00010099, 0x000100de, 0x000100de, 0x000100f5, 0x000100f5, }, - {0x0024ffff, 0x0022ffff, 0x0025ffff, 0x0026ffff, 0x0027ffff, 0x0028ffff, 0x0029ffff, 0x0000003b, 0x0000006b, 0x00000082, 0x0000009a, 0x000000b1, 0x000000c8, 0x000000df, 0x000000f6, 0x00000108, }, - {0x0040ffff, 0x0041ffff, 0x0042ffff, 0x0043ffff, 0x0044ffff, 0x0045ffff, 0x0046ffff, 0x0047ffff, 0x0048ffff, 0x002dffff, 0x002effff, 0x002affff, 0x002bffff, 0x002cffff, 0x0021ffff, 0x0023ffff, }, - {0x0002013b, 0x0002013b, 0x0002013b, 0x0002013b, 0x00020154, 0x00020154, 0x00020154, 0x00020154, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, }, - {0x00030083, 0x00030083, 0x00030083, 0x00030083, 0x00030083, 0x00030083, 0x00030083, 0x00030083, 0x0003009b, 0x0003009b, 0x0003009b, 0x0003009b, 0x0003009b, 0x0003009b, 0x0003009b, 0x0003009b, }, - {0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, }, - {0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x0003006c, 0x0003006c, 0x0003006c, 0x0003006c, 0x0003006c, 0x0003006c, 0x0003006c, 0x0003006c, }, - {0x000300b2, 0x000300b2, 0x000300b2, 0x000300b2, 0x000300b2, 0x000300b2, 0x000300b2, 0x000300b2, 0x000300ca, 0x000300ca, 0x000300ca, 0x000300ca, 0x000300ca, 0x000300ca, 0x000300ca, 0x000300ca, }, - {0x000300e0, 0x000300e0, 0x000300e0, 0x000300e0, 0x000300e0, 0x000300e0, 0x000300e0, 0x000300e0, 0x000300e1, 0x000300e1, 0x000300e1, 0x000300e1, 0x000300e1, 0x000300e1, 0x000300e1, 0x000300e1, }, - {0x000300e2, 0x000300e2, 0x000300e2, 0x000300e2, 0x000300e2, 0x000300e2, 0x000300e2, 0x000300e2, 0x000300f7, 0x000300f7, 0x000300f7, 0x000300f7, 0x000300f7, 0x000300f7, 0x000300f7, 0x000300f7, }, - {0x0003010d, 0x0003010d, 0x0003010d, 0x0003010d, 0x0003010d, 0x0003010d, 0x0003010d, 0x0003010d, 0x0003010e, 0x0003010e, 0x0003010e, 0x0003010e, 0x0003010e, 0x0003010e, 0x0003010e, 0x0003010e, }, - {0x00030123, 0x00030123, 0x00030123, 0x00030123, 0x00030123, 0x00030123, 0x00030123, 0x00030123, 0x00030124, 0x00030124, 0x00030124, 0x00030124, 0x00030124, 0x00030124, 0x00030124, 0x00030124, }, - {0x0001013e, 0x0001013e, 0x0001016c, 0x0001016c, 0x0001016d, 0x0001016d, 0x0001023f, 0x0001023f, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003d, }, - {0x00020055, 0x00020055, 0x00020055, 0x00020055, 0x000200b3, 0x000200b3, 0x000200b3, 0x000200b3, 0x000200c9, 0x000200c9, 0x000200c9, 0x000200c9, 0x000200f8, 0x000200f8, 0x000200f8, 0x000200f8, }, - {0x0002010f, 0x0002010f, 0x0002010f, 0x0002010f, 0x00020120, 0x00020120, 0x00020120, 0x00020120, 0x00020127, 0x00020127, 0x00020127, 0x00020127, 0x0002013a, 0x0002013a, 0x0002013a, 0x0002013a, }, - {0x00000237, 0x00000238, 0x00000239, 0x0000023a, 0x0000023b, 0x0000023c, 0x0000023d, 0x0000023e, 0x0001000e, 0x0001000e, 0x00010026, 0x00010026, 0x0001006d, 0x0001006d, 0x0001009d, 0x0001009d, }, - {0x000100cb, 0x000100cb, 0x000100cc, 0x000100cc, 0x00010112, 0x00010112, 0x00010125, 0x00010125, 0x00010126, 0x00010126, 0x00010128, 0x00010128, 0x00010138, 0x00010138, 0x00010139, 0x00010139, }, - {0x0030ffff, 0x0031ffff, 0x0032ffff, 0x0033ffff, 0x0034ffff, 0x0035ffff, 0x0036ffff, 0x0037ffff, 0x0038ffff, 0x0039ffff, 0x003affff, 0x003bffff, 0x003cffff, 0x003dffff, 0x003effff, 0x003fffff, }, - {0x0000000d, 0x0000000f, 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000014, 0x00000015, 0x00000016, 0x00000017, 0x00000027, 0x00000028, 0x00000029, 0x0000002a, 0x0000002b, 0x0000002c, }, - {0x0000002d, 0x0000002e, 0x0000002f, 0x0000003e, 0x0000003f, 0x00000040, 0x00000041, 0x00000042, 0x00000043, 0x00000044, 0x00000045, 0x00000046, 0x00000047, 0x00000056, 0x00000057, 0x00000058, }, - {0x00000059, 0x0000005a, 0x0000005b, 0x0000005c, 0x0000005d, 0x0000005e, 0x0000005f, 0x0000006e, 0x0000006f, 0x00000070, 0x00000071, 0x00000072, 0x00000073, 0x00000074, 0x00000075, 0x00000076, }, - {0x00000077, 0x00000084, 0x00000085, 0x00000086, 0x00000087, 0x00000088, 0x00000089, 0x0000008a, 0x0000008b, 0x0000008c, 0x0000008d, 0x0000008e, 0x0000008f, 0x0000009c, 0x0000009e, 0x0000009f, }, - {0x000000a0, 0x000000a1, 0x000000a2, 0x000000a3, 0x000000a4, 0x000000a5, 0x000000a6, 0x000000a7, 0x000000b4, 0x000000b5, 0x000000b6, 0x000000b7, 0x000000b8, 0x000000b9, 0x000000ba, 0x000000bb, }, - {0x000000bc, 0x000000bd, 0x000000be, 0x000000bf, 0x000000cd, 0x000000ce, 0x000000cf, 0x000000d0, 0x000000d1, 0x000000d2, 0x000000d3, 0x000000d4, 0x000000d5, 0x000000d6, 0x000000d7, 0x000000e3, }, - {0x000000e4, 0x000000e5, 0x000000e6, 0x000000e7, 0x000000e8, 0x000000e9, 0x000000ea, 0x000000eb, 0x000000ec, 0x000000ed, 0x000000ee, 0x000000ef, 0x000000f9, 0x000000fa, 0x000000fb, 0x000000fc, }, - {0x000000fd, 0x000000fe, 0x000000ff, 0x00000100, 0x00000101, 0x00000102, 0x00000103, 0x00000104, 0x00000105, 0x00000106, 0x00000107, 0x00000110, 0x00000111, 0x00000113, 0x00000114, 0x00000115, }, - {0x00000116, 0x00000117, 0x00000118, 0x00000119, 0x0000011a, 0x0000011b, 0x0000011c, 0x0000011d, 0x0000011e, 0x0000011f, 0x00000129, 0x0000012a, 0x0000012b, 0x0000012c, 0x0000012d, 0x0000012e, }, - {0x0000012f, 0x00000130, 0x00000131, 0x00000132, 0x00000133, 0x00000134, 0x00000135, 0x00000136, 0x00000137, 0x0000013c, 0x0000013d, 0x0000013f, 0x00000140, 0x00000141, 0x00000142, 0x00000143, }, - {0x00000144, 0x00000145, 0x00000146, 0x00000147, 0x00000148, 0x00000149, 0x0000014a, 0x0000014b, 0x0000014c, 0x0000014d, 0x0000014e, 0x0000014f, 0x00000150, 0x00000151, 0x00000152, 0x00000153, }, - {0x00000155, 0x00000156, 0x00000157, 0x00000158, 0x00000159, 0x0000015a, 0x0000015b, 0x0000015c, 0x0000015d, 0x0000015e, 0x0000015f, 0x00000160, 0x00000161, 0x00000162, 0x00000163, 0x00000164, }, - {0x00000165, 0x00000166, 0x00000167, 0x00000168, 0x00000169, 0x0000016a, 0x0000016b, 0x0000016e, 0x0000016f, 0x00000170, 0x00000171, 0x00000172, 0x00000173, 0x00000174, 0x00000175, 0x00000176, }, - {0x00000177, 0x00000178, 0x00000179, 0x0000017a, 0x0000017b, 0x0000017c, 0x0000017d, 0x0000017e, 0x0000017f, 0x00000180, 0x00000181, 0x00000182, 0x00000183, 0x00000184, 0x00000185, 0x00000186, }, - {0x00000187, 0x00000188, 0x00000189, 0x0000018a, 0x0000018b, 0x0000018c, 0x0000018d, 0x0000018e, 0x0000018f, 0x00000190, 0x00000191, 0x00000192, 0x00000193, 0x00000194, 0x00000195, 0x00000196, }, - {0x00000197, 0x00000198, 0x00000199, 0x0000019a, 0x0000019b, 0x0000019c, 0x0000019d, 0x0000019e, 0x0000019f, 0x000001a0, 0x000001a1, 0x000001a2, 0x000001a3, 0x000001a4, 0x000001a5, 0x000001a6, }, - {0x000001a7, 0x000001a8, 0x000001a9, 0x000001aa, 0x000001ab, 0x000001ac, 0x000001ad, 0x000001ae, 0x000001af, 0x000001b0, 0x000001b1, 0x000001b2, 0x000001b3, 0x000001b4, 0x000001b5, 0x000001b6, }, - {0x000001b7, 0x000001b8, 0x000001b9, 0x000001ba, 0x000001bb, 0x000001bc, 0x000001bd, 0x000001be, 0x000001bf, 0x000001c0, 0x000001c1, 0x000001c2, 0x000001c3, 0x000001c4, 0x000001c5, 0x000001c6, }, - {0x000001c7, 0x000001c8, 0x000001c9, 0x000001ca, 0x000001cb, 0x000001cc, 0x000001cd, 0x000001ce, 0x000001cf, 0x000001d0, 0x000001d1, 0x000001d2, 0x000001d3, 0x000001d4, 0x000001d5, 0x000001d6, }, - {0x000001d7, 0x000001d8, 0x000001d9, 0x000001da, 0x000001db, 0x000001dc, 0x000001dd, 0x000001de, 0x000001df, 0x000001e0, 0x000001e1, 0x000001e2, 0x000001e3, 0x000001e4, 0x000001e5, 0x000001e6, }, - {0x000001e7, 0x000001e8, 0x000001e9, 0x000001ea, 0x000001eb, 0x000001ec, 0x000001ed, 0x000001ee, 0x000001ef, 0x000001f0, 0x000001f1, 0x000001f2, 0x000001f3, 0x000001f4, 0x000001f5, 0x000001f6, }, - {0x000001f7, 0x000001f8, 0x000001f9, 0x000001fa, 0x000001fb, 0x000001fc, 0x000001fd, 0x000001fe, 0x000001ff, 0x00000200, 0x00000201, 0x00000202, 0x00000203, 0x00000204, 0x00000205, 0x00000206, }, - {0x00000207, 0x00000208, 0x00000209, 0x0000020a, 0x0000020b, 0x0000020c, 0x0000020d, 0x0000020e, 0x0000020f, 0x00000210, 0x00000211, 0x00000212, 0x00000213, 0x00000214, 0x00000215, 0x00000216, }, - {0x00000217, 0x00000218, 0x00000219, 0x0000021a, 0x0000021b, 0x0000021c, 0x0000021d, 0x0000021e, 0x0000021f, 0x00000220, 0x00000221, 0x00000222, 0x00000223, 0x00000224, 0x00000225, 0x00000226, }, - {0x00000227, 0x00000228, 0x00000229, 0x0000022a, 0x0000022b, 0x0000022c, 0x0000022d, 0x0000022e, 0x0000022f, 0x00000230, 0x00000231, 0x00000232, 0x00000233, 0x00000234, 0x00000235, 0x00000236, }, +const uint32_t c_aauiCQMFHuffDec15[73][16] = { + { + 0x000cffff, + 0x000bffff, + 0x0008ffff, + 0x0009ffff, + 0x000affff, + 0x0002ffff, + 0x0001ffff, + 0x0003ffff, + 0x0004ffff, + 0x0005ffff, + 0x0006ffff, + 0x0007ffff, + 0x00000019, + 0x0000001a, + 0x00000031, + 0x00000032, + }, + { + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + }, + { + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030001, + 0x00030001, + 0x00030001, + 0x00030001, + 0x00030001, + 0x00030001, + 0x00030001, + 0x00030001, + }, + { + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + }, + { + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + }, + { + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + }, + { + 0x0003004a, + 0x0003004a, + 0x0003004a, + 0x0003004a, + 0x0003004a, + 0x0003004a, + 0x0003004a, + 0x0003004a, + 0x0003004b, + 0x0003004b, + 0x0003004b, + 0x0003004b, + 0x0003004b, + 0x0003004b, + 0x0003004b, + 0x0003004b, + }, + { + 0x00030061, + 0x00030061, + 0x00030061, + 0x00030061, + 0x00030061, + 0x00030061, + 0x00030061, + 0x00030061, + 0x00030062, + 0x00030062, + 0x00030062, + 0x00030062, + 0x00030062, + 0x00030062, + 0x00030062, + 0x00030062, + }, + { + 0x00010091, + 0x00010091, + 0x00010092, + 0x00010092, + 0x00020003, + 0x00020003, + 0x00020003, + 0x00020003, + 0x00020004, + 0x00020004, + 0x00020004, + 0x00020004, + 0x0002001d, + 0x0002001d, + 0x0002001d, + 0x0002001d, + }, + { + 0x00020035, + 0x00020035, + 0x00020035, + 0x00020035, + 0x00020048, + 0x00020048, + 0x00020048, + 0x00020048, + 0x0002004c, + 0x0002004c, + 0x0002004c, + 0x0002004c, + 0x00020060, + 0x00020060, + 0x00020060, + 0x00020060, + }, + { + 0x00020063, + 0x00020063, + 0x00020063, + 0x00020063, + 0x00020064, + 0x00020064, + 0x00020064, + 0x00020064, + 0x00020079, + 0x00020079, + 0x00020079, + 0x00020079, + 0x0002007a, + 0x0002007a, + 0x0002007a, + 0x0002007a, + }, + { + 0x00010005, + 0x00010005, + 0x0001001e, + 0x0001001e, + 0x00010036, + 0x00010036, + 0x0001004d, + 0x0001004d, + 0x00010065, + 0x00010065, + 0x00010078, + 0x00010078, + 0x0001007b, + 0x0001007b, + 0x0001007c, + 0x0001007c, + }, + { + 0x0015ffff, + 0x0014ffff, + 0x0012ffff, + 0x0013ffff, + 0x000dffff, + 0x000effff, + 0x000fffff, + 0x0010ffff, + 0x0011ffff, + 0x00000006, + 0x0000001f, + 0x0000004e, + 0x0000007d, + 0x00000090, + 0x00000093, + 0x000000a9, + }, + { + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + }, + { + 0x0003004f, + 0x0003004f, + 0x0003004f, + 0x0003004f, + 0x0003004f, + 0x0003004f, + 0x0003004f, + 0x0003004f, + 0x00030066, + 0x00030066, + 0x00030066, + 0x00030066, + 0x00030066, + 0x00030066, + 0x00030066, + 0x00030066, + }, + { + 0x0003007e, + 0x0003007e, + 0x0003007e, + 0x0003007e, + 0x0003007e, + 0x0003007e, + 0x0003007e, + 0x0003007e, + 0x00030094, + 0x00030094, + 0x00030094, + 0x00030094, + 0x00030094, + 0x00030094, + 0x00030094, + 0x00030094, + }, + { + 0x00030095, + 0x00030095, + 0x00030095, + 0x00030095, + 0x00030095, + 0x00030095, + 0x00030095, + 0x00030095, + 0x000300a8, + 0x000300a8, + 0x000300a8, + 0x000300a8, + 0x000300a8, + 0x000300a8, + 0x000300a8, + 0x000300a8, + }, + { + 0x000300aa, + 0x000300aa, + 0x000300aa, + 0x000300aa, + 0x000300aa, + 0x000300aa, + 0x000300aa, + 0x000300aa, + 0x000300ab, + 0x000300ab, + 0x000300ab, + 0x000300ab, + 0x000300ab, + 0x000300ab, + 0x000300ab, + 0x000300ab, + }, + { + 0x000100ad, + 0x000100ad, + 0x000100c0, + 0x000100c0, + 0x000100c3, + 0x000100c3, + 0x000100c4, + 0x000100c4, + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020038, + 0x00020038, + 0x00020038, + 0x00020038, + }, + { + 0x00020067, + 0x00020067, + 0x00020067, + 0x00020067, + 0x000200ac, + 0x000200ac, + 0x000200ac, + 0x000200ac, + 0x000200c1, + 0x000200c1, + 0x000200c1, + 0x000200c1, + 0x000200c2, + 0x000200c2, + 0x000200c2, + 0x000200c2, + }, + { + 0x00000097, + 0x000000ae, + 0x000000c5, + 0x000000d8, + 0x000000d9, + 0x000000da, + 0x00010008, + 0x00010008, + 0x00010050, + 0x00010050, + 0x00010068, + 0x00010068, + 0x0001007f, + 0x0001007f, + 0x00010096, + 0x00010096, + }, + { + 0x002fffff, + 0x0020ffff, + 0x001fffff, + 0x001effff, + 0x001bffff, + 0x001cffff, + 0x001dffff, + 0x0016ffff, + 0x0017ffff, + 0x0018ffff, + 0x0019ffff, + 0x001affff, + 0x00000021, + 0x00000039, + 0x00000051, + 0x00000080, + }, + { + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + }, + { + 0x00030069, + 0x00030069, + 0x00030069, + 0x00030069, + 0x00030069, + 0x00030069, + 0x00030069, + 0x00030069, + 0x00030098, + 0x00030098, + 0x00030098, + 0x00030098, + 0x00030098, + 0x00030098, + 0x00030098, + 0x00030098, + }, + { + 0x000300af, + 0x000300af, + 0x000300af, + 0x000300af, + 0x000300af, + 0x000300af, + 0x000300af, + 0x000300af, + 0x000300c6, + 0x000300c6, + 0x000300c6, + 0x000300c6, + 0x000300c6, + 0x000300c6, + 0x000300c6, + 0x000300c6, + }, + { + 0x000300db, + 0x000300db, + 0x000300db, + 0x000300db, + 0x000300db, + 0x000300db, + 0x000300db, + 0x000300db, + 0x000300dc, + 0x000300dc, + 0x000300dc, + 0x000300dc, + 0x000300dc, + 0x000300dc, + 0x000300dc, + 0x000300dc, + }, + { + 0x000300f1, + 0x000300f1, + 0x000300f1, + 0x000300f1, + 0x000300f1, + 0x000300f1, + 0x000300f1, + 0x000300f1, + 0x000300f2, + 0x000300f2, + 0x000300f2, + 0x000300f2, + 0x000300f2, + 0x000300f2, + 0x000300f2, + 0x000300f2, + }, + { + 0x00010109, + 0x00010109, + 0x0001010b, + 0x0001010b, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x0002003a, + 0x0002003a, + 0x0002003a, + 0x0002003a, + 0x00020052, + 0x00020052, + 0x00020052, + 0x00020052, + }, + { + 0x0002006a, + 0x0002006a, + 0x0002006a, + 0x0002006a, + 0x00020081, + 0x00020081, + 0x00020081, + 0x00020081, + 0x000200b0, + 0x000200b0, + 0x000200b0, + 0x000200b0, + 0x000200c7, + 0x000200c7, + 0x000200c7, + 0x000200c7, + }, + { + 0x000200dd, + 0x000200dd, + 0x000200dd, + 0x000200dd, + 0x000200f0, + 0x000200f0, + 0x000200f0, + 0x000200f0, + 0x000200f3, + 0x000200f3, + 0x000200f3, + 0x000200f3, + 0x000200f4, + 0x000200f4, + 0x000200f4, + 0x000200f4, + }, + { + 0x0000010a, + 0x0000010c, + 0x00000121, + 0x00000122, + 0x0001000b, + 0x0001000b, + 0x00010023, + 0x00010023, + 0x00010053, + 0x00010053, + 0x00010099, + 0x00010099, + 0x000100de, + 0x000100de, + 0x000100f5, + 0x000100f5, + }, + { + 0x0024ffff, + 0x0022ffff, + 0x0025ffff, + 0x0026ffff, + 0x0027ffff, + 0x0028ffff, + 0x0029ffff, + 0x0000003b, + 0x0000006b, + 0x00000082, + 0x0000009a, + 0x000000b1, + 0x000000c8, + 0x000000df, + 0x000000f6, + 0x00000108, + }, + { + 0x0040ffff, + 0x0041ffff, + 0x0042ffff, + 0x0043ffff, + 0x0044ffff, + 0x0045ffff, + 0x0046ffff, + 0x0047ffff, + 0x0048ffff, + 0x002dffff, + 0x002effff, + 0x002affff, + 0x002bffff, + 0x002cffff, + 0x0021ffff, + 0x0023ffff, + }, + { + 0x0002013b, + 0x0002013b, + 0x0002013b, + 0x0002013b, + 0x00020154, + 0x00020154, + 0x00020154, + 0x00020154, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + }, + { + 0x00030083, + 0x00030083, + 0x00030083, + 0x00030083, + 0x00030083, + 0x00030083, + 0x00030083, + 0x00030083, + 0x0003009b, + 0x0003009b, + 0x0003009b, + 0x0003009b, + 0x0003009b, + 0x0003009b, + 0x0003009b, + 0x0003009b, + }, + { + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + }, + { + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x0003006c, + 0x0003006c, + 0x0003006c, + 0x0003006c, + 0x0003006c, + 0x0003006c, + 0x0003006c, + 0x0003006c, + }, + { + 0x000300b2, + 0x000300b2, + 0x000300b2, + 0x000300b2, + 0x000300b2, + 0x000300b2, + 0x000300b2, + 0x000300b2, + 0x000300ca, + 0x000300ca, + 0x000300ca, + 0x000300ca, + 0x000300ca, + 0x000300ca, + 0x000300ca, + 0x000300ca, + }, + { + 0x000300e0, + 0x000300e0, + 0x000300e0, + 0x000300e0, + 0x000300e0, + 0x000300e0, + 0x000300e0, + 0x000300e0, + 0x000300e1, + 0x000300e1, + 0x000300e1, + 0x000300e1, + 0x000300e1, + 0x000300e1, + 0x000300e1, + 0x000300e1, + }, + { + 0x000300e2, + 0x000300e2, + 0x000300e2, + 0x000300e2, + 0x000300e2, + 0x000300e2, + 0x000300e2, + 0x000300e2, + 0x000300f7, + 0x000300f7, + 0x000300f7, + 0x000300f7, + 0x000300f7, + 0x000300f7, + 0x000300f7, + 0x000300f7, + }, + { + 0x0003010d, + 0x0003010d, + 0x0003010d, + 0x0003010d, + 0x0003010d, + 0x0003010d, + 0x0003010d, + 0x0003010d, + 0x0003010e, + 0x0003010e, + 0x0003010e, + 0x0003010e, + 0x0003010e, + 0x0003010e, + 0x0003010e, + 0x0003010e, + }, + { + 0x00030123, + 0x00030123, + 0x00030123, + 0x00030123, + 0x00030123, + 0x00030123, + 0x00030123, + 0x00030123, + 0x00030124, + 0x00030124, + 0x00030124, + 0x00030124, + 0x00030124, + 0x00030124, + 0x00030124, + 0x00030124, + }, + { + 0x0001013e, + 0x0001013e, + 0x0001016c, + 0x0001016c, + 0x0001016d, + 0x0001016d, + 0x0001023f, + 0x0001023f, + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x0002003d, + 0x0002003d, + 0x0002003d, + 0x0002003d, + }, + { + 0x00020055, + 0x00020055, + 0x00020055, + 0x00020055, + 0x000200b3, + 0x000200b3, + 0x000200b3, + 0x000200b3, + 0x000200c9, + 0x000200c9, + 0x000200c9, + 0x000200c9, + 0x000200f8, + 0x000200f8, + 0x000200f8, + 0x000200f8, + }, + { + 0x0002010f, + 0x0002010f, + 0x0002010f, + 0x0002010f, + 0x00020120, + 0x00020120, + 0x00020120, + 0x00020120, + 0x00020127, + 0x00020127, + 0x00020127, + 0x00020127, + 0x0002013a, + 0x0002013a, + 0x0002013a, + 0x0002013a, + }, + { + 0x00000237, + 0x00000238, + 0x00000239, + 0x0000023a, + 0x0000023b, + 0x0000023c, + 0x0000023d, + 0x0000023e, + 0x0001000e, + 0x0001000e, + 0x00010026, + 0x00010026, + 0x0001006d, + 0x0001006d, + 0x0001009d, + 0x0001009d, + }, + { + 0x000100cb, + 0x000100cb, + 0x000100cc, + 0x000100cc, + 0x00010112, + 0x00010112, + 0x00010125, + 0x00010125, + 0x00010126, + 0x00010126, + 0x00010128, + 0x00010128, + 0x00010138, + 0x00010138, + 0x00010139, + 0x00010139, + }, + { + 0x0030ffff, + 0x0031ffff, + 0x0032ffff, + 0x0033ffff, + 0x0034ffff, + 0x0035ffff, + 0x0036ffff, + 0x0037ffff, + 0x0038ffff, + 0x0039ffff, + 0x003affff, + 0x003bffff, + 0x003cffff, + 0x003dffff, + 0x003effff, + 0x003fffff, + }, + { + 0x0000000d, + 0x0000000f, + 0x00000010, + 0x00000011, + 0x00000012, + 0x00000013, + 0x00000014, + 0x00000015, + 0x00000016, + 0x00000017, + 0x00000027, + 0x00000028, + 0x00000029, + 0x0000002a, + 0x0000002b, + 0x0000002c, + }, + { + 0x0000002d, + 0x0000002e, + 0x0000002f, + 0x0000003e, + 0x0000003f, + 0x00000040, + 0x00000041, + 0x00000042, + 0x00000043, + 0x00000044, + 0x00000045, + 0x00000046, + 0x00000047, + 0x00000056, + 0x00000057, + 0x00000058, + }, + { + 0x00000059, + 0x0000005a, + 0x0000005b, + 0x0000005c, + 0x0000005d, + 0x0000005e, + 0x0000005f, + 0x0000006e, + 0x0000006f, + 0x00000070, + 0x00000071, + 0x00000072, + 0x00000073, + 0x00000074, + 0x00000075, + 0x00000076, + }, + { + 0x00000077, + 0x00000084, + 0x00000085, + 0x00000086, + 0x00000087, + 0x00000088, + 0x00000089, + 0x0000008a, + 0x0000008b, + 0x0000008c, + 0x0000008d, + 0x0000008e, + 0x0000008f, + 0x0000009c, + 0x0000009e, + 0x0000009f, + }, + { + 0x000000a0, + 0x000000a1, + 0x000000a2, + 0x000000a3, + 0x000000a4, + 0x000000a5, + 0x000000a6, + 0x000000a7, + 0x000000b4, + 0x000000b5, + 0x000000b6, + 0x000000b7, + 0x000000b8, + 0x000000b9, + 0x000000ba, + 0x000000bb, + }, + { + 0x000000bc, + 0x000000bd, + 0x000000be, + 0x000000bf, + 0x000000cd, + 0x000000ce, + 0x000000cf, + 0x000000d0, + 0x000000d1, + 0x000000d2, + 0x000000d3, + 0x000000d4, + 0x000000d5, + 0x000000d6, + 0x000000d7, + 0x000000e3, + }, + { + 0x000000e4, + 0x000000e5, + 0x000000e6, + 0x000000e7, + 0x000000e8, + 0x000000e9, + 0x000000ea, + 0x000000eb, + 0x000000ec, + 0x000000ed, + 0x000000ee, + 0x000000ef, + 0x000000f9, + 0x000000fa, + 0x000000fb, + 0x000000fc, + }, + { + 0x000000fd, + 0x000000fe, + 0x000000ff, + 0x00000100, + 0x00000101, + 0x00000102, + 0x00000103, + 0x00000104, + 0x00000105, + 0x00000106, + 0x00000107, + 0x00000110, + 0x00000111, + 0x00000113, + 0x00000114, + 0x00000115, + }, + { + 0x00000116, + 0x00000117, + 0x00000118, + 0x00000119, + 0x0000011a, + 0x0000011b, + 0x0000011c, + 0x0000011d, + 0x0000011e, + 0x0000011f, + 0x00000129, + 0x0000012a, + 0x0000012b, + 0x0000012c, + 0x0000012d, + 0x0000012e, + }, + { + 0x0000012f, + 0x00000130, + 0x00000131, + 0x00000132, + 0x00000133, + 0x00000134, + 0x00000135, + 0x00000136, + 0x00000137, + 0x0000013c, + 0x0000013d, + 0x0000013f, + 0x00000140, + 0x00000141, + 0x00000142, + 0x00000143, + }, + { + 0x00000144, + 0x00000145, + 0x00000146, + 0x00000147, + 0x00000148, + 0x00000149, + 0x0000014a, + 0x0000014b, + 0x0000014c, + 0x0000014d, + 0x0000014e, + 0x0000014f, + 0x00000150, + 0x00000151, + 0x00000152, + 0x00000153, + }, + { + 0x00000155, + 0x00000156, + 0x00000157, + 0x00000158, + 0x00000159, + 0x0000015a, + 0x0000015b, + 0x0000015c, + 0x0000015d, + 0x0000015e, + 0x0000015f, + 0x00000160, + 0x00000161, + 0x00000162, + 0x00000163, + 0x00000164, + }, + { + 0x00000165, + 0x00000166, + 0x00000167, + 0x00000168, + 0x00000169, + 0x0000016a, + 0x0000016b, + 0x0000016e, + 0x0000016f, + 0x00000170, + 0x00000171, + 0x00000172, + 0x00000173, + 0x00000174, + 0x00000175, + 0x00000176, + }, + { + 0x00000177, + 0x00000178, + 0x00000179, + 0x0000017a, + 0x0000017b, + 0x0000017c, + 0x0000017d, + 0x0000017e, + 0x0000017f, + 0x00000180, + 0x00000181, + 0x00000182, + 0x00000183, + 0x00000184, + 0x00000185, + 0x00000186, + }, + { + 0x00000187, + 0x00000188, + 0x00000189, + 0x0000018a, + 0x0000018b, + 0x0000018c, + 0x0000018d, + 0x0000018e, + 0x0000018f, + 0x00000190, + 0x00000191, + 0x00000192, + 0x00000193, + 0x00000194, + 0x00000195, + 0x00000196, + }, + { + 0x00000197, + 0x00000198, + 0x00000199, + 0x0000019a, + 0x0000019b, + 0x0000019c, + 0x0000019d, + 0x0000019e, + 0x0000019f, + 0x000001a0, + 0x000001a1, + 0x000001a2, + 0x000001a3, + 0x000001a4, + 0x000001a5, + 0x000001a6, + }, + { + 0x000001a7, + 0x000001a8, + 0x000001a9, + 0x000001aa, + 0x000001ab, + 0x000001ac, + 0x000001ad, + 0x000001ae, + 0x000001af, + 0x000001b0, + 0x000001b1, + 0x000001b2, + 0x000001b3, + 0x000001b4, + 0x000001b5, + 0x000001b6, + }, + { + 0x000001b7, + 0x000001b8, + 0x000001b9, + 0x000001ba, + 0x000001bb, + 0x000001bc, + 0x000001bd, + 0x000001be, + 0x000001bf, + 0x000001c0, + 0x000001c1, + 0x000001c2, + 0x000001c3, + 0x000001c4, + 0x000001c5, + 0x000001c6, + }, + { + 0x000001c7, + 0x000001c8, + 0x000001c9, + 0x000001ca, + 0x000001cb, + 0x000001cc, + 0x000001cd, + 0x000001ce, + 0x000001cf, + 0x000001d0, + 0x000001d1, + 0x000001d2, + 0x000001d3, + 0x000001d4, + 0x000001d5, + 0x000001d6, + }, + { + 0x000001d7, + 0x000001d8, + 0x000001d9, + 0x000001da, + 0x000001db, + 0x000001dc, + 0x000001dd, + 0x000001de, + 0x000001df, + 0x000001e0, + 0x000001e1, + 0x000001e2, + 0x000001e3, + 0x000001e4, + 0x000001e5, + 0x000001e6, + }, + { + 0x000001e7, + 0x000001e8, + 0x000001e9, + 0x000001ea, + 0x000001eb, + 0x000001ec, + 0x000001ed, + 0x000001ee, + 0x000001ef, + 0x000001f0, + 0x000001f1, + 0x000001f2, + 0x000001f3, + 0x000001f4, + 0x000001f5, + 0x000001f6, + }, + { + 0x000001f7, + 0x000001f8, + 0x000001f9, + 0x000001fa, + 0x000001fb, + 0x000001fc, + 0x000001fd, + 0x000001fe, + 0x000001ff, + 0x00000200, + 0x00000201, + 0x00000202, + 0x00000203, + 0x00000204, + 0x00000205, + 0x00000206, + }, + { + 0x00000207, + 0x00000208, + 0x00000209, + 0x0000020a, + 0x0000020b, + 0x0000020c, + 0x0000020d, + 0x0000020e, + 0x0000020f, + 0x00000210, + 0x00000211, + 0x00000212, + 0x00000213, + 0x00000214, + 0x00000215, + 0x00000216, + }, + { + 0x00000217, + 0x00000218, + 0x00000219, + 0x0000021a, + 0x0000021b, + 0x0000021c, + 0x0000021d, + 0x0000021e, + 0x0000021f, + 0x00000220, + 0x00000221, + 0x00000222, + 0x00000223, + 0x00000224, + 0x00000225, + 0x00000226, + }, + { + 0x00000227, + 0x00000228, + 0x00000229, + 0x0000022a, + 0x0000022b, + 0x0000022c, + 0x0000022d, + 0x0000022e, + 0x0000022f, + 0x00000230, + 0x00000231, + 0x00000232, + 0x00000233, + 0x00000234, + 0x00000235, + 0x00000236, + }, }; #endif @@ -1243,190 +12103,2271 @@ const uint32_t c_aauiCQMFHuffEnc16[729][2] = #else const uint16_t c_aauiCQMFHuffEnc16[729][2] = #endif -{ - {0x0006, 0x000d}, {0x0005, 0x0010}, {0x0006, 0x000e}, {0x0006, 0x000f}, {0x0006, 0x0010}, {0x0007, 0x000a}, {0x0007, 0x000b}, {0x0008, 0x000a}, - {0x0009, 0x000b}, {0x000b, 0x000d}, {0x000c, 0x000e}, {0x000e, 0x0016}, {0x0010, 0x002d}, {0x0011, 0x0051}, {0x0012, 0x008c}, {0x0014, 0x0000}, - {0x0014, 0x0001}, {0x0014, 0x0002}, {0x0014, 0x0003}, {0x0014, 0x0004}, {0x0014, 0x0005}, {0x0014, 0x0006}, {0x0014, 0x0007}, {0x0014, 0x0008}, - {0x0014, 0x0009}, {0x0014, 0x000a}, {0x0014, 0x000b}, {0x0005, 0x0011}, {0x0004, 0x000f}, {0x0005, 0x0012}, {0x0005, 0x0013}, {0x0005, 0x0014}, - {0x0006, 0x0011}, {0x0006, 0x0012}, {0x0007, 0x000c}, {0x0008, 0x000b}, {0x000a, 0x000c}, {0x000b, 0x000e}, {0x000d, 0x0010}, {0x000e, 0x0017}, - {0x000f, 0x001c}, {0x0013, 0x010b}, {0x0013, 0x010c}, {0x0014, 0x000c}, {0x0014, 0x000d}, {0x0014, 0x000e}, {0x0014, 0x000f}, {0x0014, 0x0010}, - {0x0014, 0x0011}, {0x0014, 0x0012}, {0x0014, 0x0013}, {0x0014, 0x0014}, {0x0014, 0x0015}, {0x0014, 0x0016}, {0x0006, 0x0013}, {0x0005, 0x0015}, - {0x0005, 0x0016}, {0x0005, 0x0017}, {0x0005, 0x0018}, {0x0006, 0x0014}, {0x0007, 0x000d}, {0x0007, 0x000e}, {0x0009, 0x000c}, {0x000a, 0x000d}, - {0x000c, 0x000f}, {0x000d, 0x0011}, {0x000f, 0x001d}, {0x0011, 0x0052}, {0x0012, 0x008d}, {0x0012, 0x008e}, {0x0014, 0x0017}, {0x0014, 0x0018}, - {0x0014, 0x0019}, {0x0014, 0x001a}, {0x0014, 0x001b}, {0x0014, 0x001c}, {0x0014, 0x001d}, {0x0014, 0x001e}, {0x0014, 0x001f}, {0x0014, 0x0020}, - {0x0014, 0x0021}, {0x0006, 0x0015}, {0x0005, 0x0019}, {0x0005, 0x001a}, {0x0005, 0x001b}, {0x0006, 0x0016}, {0x0006, 0x0017}, {0x0007, 0x000f}, - {0x0008, 0x000c}, {0x0009, 0x000d}, {0x000b, 0x000f}, {0x000c, 0x0010}, {0x000d, 0x0012}, {0x000f, 0x001e}, {0x0012, 0x008f}, {0x0014, 0x0022}, - {0x0014, 0x0023}, {0x0014, 0x0024}, {0x0014, 0x0025}, {0x0014, 0x0026}, {0x0014, 0x0027}, {0x0014, 0x0028}, {0x0014, 0x0029}, {0x0014, 0x002a}, - {0x0014, 0x002b}, {0x0014, 0x002c}, {0x0014, 0x002d}, {0x0014, 0x002e}, {0x0006, 0x0018}, {0x0005, 0x001c}, {0x0005, 0x001d}, {0x0006, 0x0019}, - {0x0006, 0x001a}, {0x0007, 0x0010}, {0x0007, 0x0011}, {0x0008, 0x000d}, {0x000a, 0x000e}, {0x000b, 0x0010}, {0x000c, 0x0011}, {0x000e, 0x0018}, - {0x0010, 0x002e}, {0x0012, 0x0090}, {0x0013, 0x010d}, {0x0013, 0x010e}, {0x0014, 0x002f}, {0x0014, 0x0030}, {0x0014, 0x0031}, {0x0014, 0x0032}, - {0x0014, 0x0033}, {0x0014, 0x0034}, {0x0014, 0x0035}, {0x0014, 0x0036}, {0x0014, 0x0037}, {0x0014, 0x0038}, {0x0014, 0x0039}, {0x0007, 0x0012}, - {0x0006, 0x001b}, {0x0006, 0x001c}, {0x0006, 0x001d}, {0x0007, 0x0013}, {0x0007, 0x0014}, {0x0008, 0x000e}, {0x0009, 0x000e}, {0x000b, 0x0011}, - {0x000c, 0x0012}, {0x000d, 0x0013}, {0x000e, 0x0019}, {0x0010, 0x002f}, {0x0012, 0x0091}, {0x0014, 0x003a}, {0x0014, 0x003b}, {0x0014, 0x003c}, - {0x0014, 0x003d}, {0x0014, 0x003e}, {0x0014, 0x003f}, {0x0014, 0x0040}, {0x0014, 0x0041}, {0x0014, 0x0042}, {0x0014, 0x0043}, {0x0014, 0x0044}, - {0x0014, 0x0045}, {0x0014, 0x0046}, {0x0007, 0x0015}, {0x0006, 0x001e}, {0x0006, 0x001f}, {0x0007, 0x0016}, {0x0007, 0x0017}, {0x0008, 0x000f}, - {0x0009, 0x000f}, {0x000a, 0x000f}, {0x000b, 0x0012}, {0x000d, 0x0014}, {0x000e, 0x001a}, {0x000f, 0x001f}, {0x0013, 0x010f}, {0x0011, 0x0053}, - {0x0014, 0x0047}, {0x0014, 0x0048}, {0x0014, 0x0049}, {0x0014, 0x004a}, {0x0014, 0x004b}, {0x0014, 0x004c}, {0x0014, 0x004d}, {0x0014, 0x004e}, - {0x0014, 0x004f}, {0x0014, 0x0050}, {0x0014, 0x0051}, {0x0014, 0x0052}, {0x0014, 0x0053}, {0x0008, 0x0010}, {0x0007, 0x0018}, {0x0007, 0x0019}, - {0x0008, 0x0011}, {0x0008, 0x0012}, {0x0009, 0x0010}, {0x000a, 0x0010}, {0x000b, 0x0013}, {0x000c, 0x0013}, {0x000e, 0x001b}, {0x000f, 0x0020}, - {0x0010, 0x0030}, {0x0012, 0x0092}, {0x0014, 0x0054}, {0x0014, 0x0055}, {0x0014, 0x0056}, {0x0014, 0x0057}, {0x0014, 0x0058}, {0x0014, 0x0059}, - {0x0014, 0x005a}, {0x0014, 0x005b}, {0x0014, 0x005c}, {0x0014, 0x005d}, {0x0014, 0x005e}, {0x0014, 0x005f}, {0x0014, 0x0060}, {0x0014, 0x0061}, - {0x0009, 0x0011}, {0x0008, 0x0013}, {0x0009, 0x0012}, {0x0009, 0x0013}, {0x000a, 0x0011}, {0x000a, 0x0012}, {0x000b, 0x0014}, {0x000c, 0x0014}, - {0x000d, 0x0015}, {0x000e, 0x001c}, {0x000f, 0x0021}, {0x0013, 0x0110}, {0x0012, 0x0093}, {0x0012, 0x0094}, {0x0014, 0x0062}, {0x0014, 0x0063}, - {0x0014, 0x0064}, {0x0014, 0x0065}, {0x0014, 0x0066}, {0x0014, 0x0067}, {0x0014, 0x0068}, {0x0014, 0x0069}, {0x0014, 0x006a}, {0x0014, 0x006b}, - {0x0014, 0x006c}, {0x0014, 0x006d}, {0x0014, 0x006e}, {0x000b, 0x0015}, {0x000a, 0x0013}, {0x000a, 0x0014}, {0x000a, 0x0015}, {0x000b, 0x0016}, - {0x000c, 0x0015}, {0x000d, 0x0016}, {0x000d, 0x0017}, {0x000f, 0x0022}, {0x0010, 0x0031}, {0x0012, 0x0095}, {0x0012, 0x0096}, {0x0014, 0x006f}, - {0x0013, 0x0111}, {0x0014, 0x0070}, {0x0014, 0x0071}, {0x0014, 0x0072}, {0x0014, 0x0073}, {0x0014, 0x0074}, {0x0014, 0x0075}, {0x0014, 0x0076}, - {0x0014, 0x0077}, {0x0014, 0x0078}, {0x0014, 0x0079}, {0x0014, 0x007a}, {0x0014, 0x007b}, {0x0014, 0x007c}, {0x000c, 0x0016}, {0x000b, 0x0017}, - {0x000c, 0x0017}, {0x000c, 0x0018}, {0x000c, 0x0019}, {0x000d, 0x0018}, {0x000e, 0x001d}, {0x000f, 0x0023}, {0x000f, 0x0024}, {0x0011, 0x0054}, - {0x0012, 0x0097}, {0x0014, 0x007d}, {0x0014, 0x007e}, {0x0014, 0x007f}, {0x0014, 0x0080}, {0x0014, 0x0081}, {0x0014, 0x0082}, {0x0014, 0x0083}, - {0x0014, 0x0084}, {0x0014, 0x0085}, {0x0014, 0x0086}, {0x0014, 0x0087}, {0x0014, 0x0088}, {0x0014, 0x0089}, {0x0014, 0x008a}, {0x0014, 0x008b}, - {0x0014, 0x008c}, {0x000e, 0x001e}, {0x000d, 0x0019}, {0x000d, 0x001a}, {0x000d, 0x001b}, {0x000e, 0x001f}, {0x000f, 0x0025}, {0x000f, 0x0026}, - {0x0010, 0x0032}, {0x0010, 0x0033}, {0x0012, 0x0098}, {0x0013, 0x0112}, {0x0014, 0x008d}, {0x0014, 0x008e}, {0x0014, 0x008f}, {0x0014, 0x0090}, - {0x0014, 0x0091}, {0x0014, 0x0092}, {0x0014, 0x0093}, {0x0014, 0x0094}, {0x0014, 0x0095}, {0x0014, 0x0096}, {0x0014, 0x0097}, {0x0014, 0x0098}, - {0x0014, 0x0099}, {0x0014, 0x009a}, {0x0014, 0x009b}, {0x0014, 0x009c}, {0x000f, 0x0027}, {0x000f, 0x0028}, {0x000f, 0x0029}, {0x000f, 0x002a}, - {0x0010, 0x0034}, {0x000f, 0x002b}, {0x0011, 0x0055}, {0x0012, 0x0099}, {0x0012, 0x009a}, {0x0012, 0x009b}, {0x0014, 0x009d}, {0x0013, 0x0113}, - {0x0014, 0x009e}, {0x0014, 0x009f}, {0x0014, 0x00a0}, {0x0014, 0x00a1}, {0x0014, 0x00a2}, {0x0014, 0x00a3}, {0x0014, 0x00a4}, {0x0014, 0x00a5}, - {0x0014, 0x00a6}, {0x0014, 0x00a7}, {0x0014, 0x00a8}, {0x0014, 0x00a9}, {0x0014, 0x00aa}, {0x0014, 0x00ab}, {0x0014, 0x00ac}, {0x0011, 0x0056}, - {0x0010, 0x0035}, {0x0010, 0x0036}, {0x0010, 0x0037}, {0x0011, 0x0057}, {0x0012, 0x009c}, {0x0012, 0x009d}, {0x0012, 0x009e}, {0x0014, 0x00ad}, - {0x0014, 0x00ae}, {0x0014, 0x00af}, {0x0014, 0x00b0}, {0x0014, 0x00b1}, {0x0014, 0x00b2}, {0x0014, 0x00b3}, {0x0014, 0x00b4}, {0x0014, 0x00b5}, - {0x0014, 0x00b6}, {0x0014, 0x00b7}, {0x0014, 0x00b8}, {0x0014, 0x00b9}, {0x0014, 0x00ba}, {0x0014, 0x00bb}, {0x0014, 0x00bc}, {0x0014, 0x00bd}, - {0x0014, 0x00be}, {0x0014, 0x00bf}, {0x0012, 0x009f}, {0x0011, 0x0058}, {0x0012, 0x00a0}, {0x0014, 0x00c0}, {0x0011, 0x0059}, {0x0013, 0x0114}, - {0x0012, 0x00a1}, {0x0014, 0x00c1}, {0x0013, 0x0115}, {0x0014, 0x00c2}, {0x0014, 0x00c3}, {0x0014, 0x00c4}, {0x0014, 0x00c5}, {0x0014, 0x00c6}, - {0x0014, 0x00c7}, {0x0014, 0x00c8}, {0x0014, 0x00c9}, {0x0014, 0x00ca}, {0x0014, 0x00cb}, {0x0014, 0x00cc}, {0x0014, 0x00cd}, {0x0014, 0x00ce}, - {0x0014, 0x00cf}, {0x0014, 0x00d0}, {0x0014, 0x00d1}, {0x0014, 0x00d2}, {0x0014, 0x00d3}, {0x0014, 0x00d4}, {0x0014, 0x00d5}, {0x0014, 0x00d6}, - {0x0014, 0x00d7}, {0x0014, 0x00d8}, {0x0014, 0x00d9}, {0x0014, 0x00da}, {0x0014, 0x00db}, {0x0014, 0x00dc}, {0x0014, 0x00dd}, {0x0014, 0x00de}, - {0x0014, 0x00df}, {0x0014, 0x00e0}, {0x0014, 0x00e1}, {0x0014, 0x00e2}, {0x0014, 0x00e3}, {0x0014, 0x00e4}, {0x0014, 0x00e5}, {0x0014, 0x00e6}, - {0x0014, 0x00e7}, {0x0014, 0x00e8}, {0x0014, 0x00e9}, {0x0014, 0x00ea}, {0x0014, 0x00eb}, {0x0014, 0x00ec}, {0x0014, 0x00ed}, {0x0014, 0x00ee}, - {0x0014, 0x00ef}, {0x0014, 0x00f0}, {0x0014, 0x00f1}, {0x0014, 0x00f2}, {0x0014, 0x00f3}, {0x0014, 0x00f4}, {0x0014, 0x00f5}, {0x0014, 0x00f6}, - {0x0014, 0x00f7}, {0x0014, 0x00f8}, {0x0014, 0x00f9}, {0x0014, 0x00fa}, {0x0014, 0x00fb}, {0x0014, 0x00fc}, {0x0014, 0x00fd}, {0x0014, 0x00fe}, - {0x0014, 0x00ff}, {0x0014, 0x0100}, {0x0014, 0x0101}, {0x0014, 0x0102}, {0x0014, 0x0103}, {0x0014, 0x0104}, {0x0014, 0x0105}, {0x0014, 0x0106}, - {0x0014, 0x0107}, {0x0014, 0x0108}, {0x0014, 0x0109}, {0x0014, 0x010a}, {0x0014, 0x010b}, {0x0014, 0x010c}, {0x0014, 0x010d}, {0x0014, 0x010e}, - {0x0014, 0x010f}, {0x0014, 0x0110}, {0x0014, 0x0111}, {0x0014, 0x0112}, {0x0014, 0x0113}, {0x0014, 0x0114}, {0x0014, 0x0115}, {0x0014, 0x0116}, - {0x0014, 0x0117}, {0x0014, 0x0118}, {0x0014, 0x0119}, {0x0014, 0x011a}, {0x0014, 0x011b}, {0x0014, 0x011c}, {0x0014, 0x011d}, {0x0014, 0x011e}, - {0x0014, 0x011f}, {0x0014, 0x0120}, {0x0014, 0x0121}, {0x0014, 0x0122}, {0x0014, 0x0123}, {0x0014, 0x0124}, {0x0014, 0x0125}, {0x0013, 0x0116}, - {0x0014, 0x0126}, {0x0014, 0x0127}, {0x0014, 0x0128}, {0x0014, 0x0129}, {0x0014, 0x012a}, {0x0014, 0x012b}, {0x0014, 0x012c}, {0x0014, 0x012d}, - {0x0014, 0x012e}, {0x0014, 0x012f}, {0x0014, 0x0130}, {0x0014, 0x0131}, {0x0014, 0x0132}, {0x0014, 0x0133}, {0x0014, 0x0134}, {0x0014, 0x0135}, - {0x0014, 0x0136}, {0x0014, 0x0137}, {0x0014, 0x0138}, {0x0014, 0x0139}, {0x0014, 0x013a}, {0x0014, 0x013b}, {0x0014, 0x013c}, {0x0014, 0x013d}, - {0x0014, 0x013e}, {0x0014, 0x013f}, {0x0014, 0x0140}, {0x0014, 0x0141}, {0x0014, 0x0142}, {0x0014, 0x0143}, {0x0014, 0x0144}, {0x0014, 0x0145}, - {0x0014, 0x0146}, {0x0014, 0x0147}, {0x0014, 0x0148}, {0x0014, 0x0149}, {0x0014, 0x014a}, {0x0014, 0x014b}, {0x0014, 0x014c}, {0x0014, 0x014d}, - {0x0014, 0x014e}, {0x0014, 0x014f}, {0x0014, 0x0150}, {0x0014, 0x0151}, {0x0014, 0x0152}, {0x0014, 0x0153}, {0x0014, 0x0154}, {0x0014, 0x0155}, - {0x0014, 0x0156}, {0x0014, 0x0157}, {0x0014, 0x0158}, {0x0014, 0x0159}, {0x0014, 0x015a}, {0x0014, 0x015b}, {0x0014, 0x015c}, {0x0014, 0x015d}, - {0x0014, 0x015e}, {0x0014, 0x015f}, {0x0014, 0x0160}, {0x0014, 0x0161}, {0x0014, 0x0162}, {0x0014, 0x0163}, {0x0014, 0x0164}, {0x0014, 0x0165}, - {0x0014, 0x0166}, {0x0014, 0x0167}, {0x0014, 0x0168}, {0x0014, 0x0169}, {0x0014, 0x016a}, {0x0014, 0x016b}, {0x0014, 0x016c}, {0x0014, 0x016d}, - {0x0014, 0x016e}, {0x0014, 0x016f}, {0x0014, 0x0170}, {0x0014, 0x0171}, {0x0014, 0x0172}, {0x0014, 0x0173}, {0x0014, 0x0174}, {0x0014, 0x0175}, - {0x0014, 0x0176}, {0x0014, 0x0177}, {0x0014, 0x0178}, {0x0014, 0x0179}, {0x0014, 0x017a}, {0x0014, 0x017b}, {0x0014, 0x017c}, {0x0014, 0x017d}, - {0x0014, 0x017e}, {0x0014, 0x017f}, {0x0014, 0x0180}, {0x0014, 0x0181}, {0x0014, 0x0182}, {0x0014, 0x0183}, {0x0014, 0x0184}, {0x0014, 0x0185}, - {0x0014, 0x0186}, {0x0014, 0x0187}, {0x0014, 0x0188}, {0x0014, 0x0189}, {0x0014, 0x018a}, {0x0014, 0x018b}, {0x0014, 0x018c}, {0x0014, 0x018d}, - {0x0014, 0x018e}, {0x0014, 0x018f}, {0x0014, 0x0190}, {0x0014, 0x0191}, {0x0014, 0x0192}, {0x0014, 0x0193}, {0x0014, 0x0194}, {0x0014, 0x0195}, - {0x0014, 0x0196}, {0x0014, 0x0197}, {0x0014, 0x0198}, {0x0014, 0x0199}, {0x0014, 0x019a}, {0x0014, 0x019b}, {0x0014, 0x019c}, {0x0014, 0x019d}, - {0x0014, 0x019e}, {0x0014, 0x019f}, {0x0014, 0x01a0}, {0x0014, 0x01a1}, {0x0014, 0x01a2}, {0x0014, 0x01a3}, {0x0014, 0x01a4}, {0x0014, 0x01a5}, - {0x0014, 0x01a6}, {0x0014, 0x01a7}, {0x0014, 0x01a8}, {0x0014, 0x01a9}, {0x0014, 0x01aa}, {0x0014, 0x01ab}, {0x0014, 0x01ac}, {0x0014, 0x01ad}, - {0x0014, 0x01ae}, {0x0014, 0x01af}, {0x0014, 0x01b0}, {0x0014, 0x01b1}, {0x0014, 0x01b2}, {0x0014, 0x01b3}, {0x0014, 0x01b4}, {0x0014, 0x01b5}, - {0x0014, 0x01b6}, {0x0014, 0x01b7}, {0x0014, 0x01b8}, {0x0014, 0x01b9}, {0x0014, 0x01ba}, {0x0014, 0x01bb}, {0x0014, 0x01bc}, {0x0014, 0x01bd}, - {0x0014, 0x01be}, {0x0014, 0x01bf}, {0x0014, 0x01c0}, {0x0014, 0x01c1}, {0x0014, 0x01c2}, {0x0014, 0x01c3}, {0x0014, 0x01c4}, {0x0014, 0x01c5}, - {0x0014, 0x01c6}, {0x0014, 0x01c7}, {0x0014, 0x01c8}, {0x0014, 0x01c9}, {0x0014, 0x01ca}, {0x0014, 0x01cb}, {0x0014, 0x01cc}, {0x0014, 0x01cd}, - {0x0014, 0x01ce}, {0x0014, 0x01cf}, {0x0014, 0x01d0}, {0x0014, 0x01d1}, {0x0014, 0x01d2}, {0x0014, 0x01d3}, {0x0014, 0x01d4}, {0x0014, 0x01d5}, - {0x0014, 0x01d6}, {0x0014, 0x01d7}, {0x0014, 0x01d8}, {0x0014, 0x01d9}, {0x0014, 0x01da}, {0x0014, 0x01db}, {0x0014, 0x01dc}, {0x0014, 0x01dd}, - {0x0014, 0x01de}, {0x0014, 0x01df}, {0x0014, 0x01e0}, {0x0014, 0x01e1}, {0x0014, 0x01e2}, {0x0014, 0x01e3}, {0x0014, 0x01e4}, {0x0014, 0x01e5}, - {0x0014, 0x01e6}, {0x0014, 0x01e7}, {0x0014, 0x01e8}, {0x0014, 0x01e9}, {0x0014, 0x01ea}, {0x0014, 0x01eb}, {0x0014, 0x01ec}, {0x0014, 0x01ed}, - {0x0014, 0x01ee}, {0x0014, 0x01ef}, {0x0014, 0x01f0}, {0x0014, 0x01f1}, {0x0014, 0x01f2}, {0x0014, 0x01f3}, {0x0014, 0x01f4}, {0x0014, 0x01f5}, - {0x0014, 0x01f6}, {0x0014, 0x01f7}, {0x0014, 0x01f8}, {0x0014, 0x01f9}, {0x0014, 0x01fa}, {0x0014, 0x01fb}, {0x0014, 0x01fc}, {0x0014, 0x01fd}, - {0x0014, 0x01fe}, {0x0014, 0x01ff}, {0x0014, 0x0200}, {0x0014, 0x0201}, {0x0014, 0x0202}, {0x0014, 0x0203}, {0x0014, 0x0204}, {0x0014, 0x0205}, - {0x0014, 0x0206}, {0x0014, 0x0207}, {0x0014, 0x0208}, {0x0014, 0x0209}, {0x0014, 0x020a}, {0x0014, 0x020b}, {0x0014, 0x020c}, {0x0014, 0x020d}, - {0x0014, 0x020e}, {0x0014, 0x020f}, {0x0014, 0x0210}, {0x0014, 0x0211}, {0x0014, 0x0212}, {0x0014, 0x0213}, {0x0014, 0x0214}, {0x0014, 0x0215}, - {0x0013, 0x0117}, + { + { 0x0006, 0x000d }, + { 0x0005, 0x0010 }, + { 0x0006, 0x000e }, + { 0x0006, 0x000f }, + { 0x0006, 0x0010 }, + { 0x0007, 0x000a }, + { 0x0007, 0x000b }, + { 0x0008, 0x000a }, + { 0x0009, 0x000b }, + { 0x000b, 0x000d }, + { 0x000c, 0x000e }, + { 0x000e, 0x0016 }, + { 0x0010, 0x002d }, + { 0x0011, 0x0051 }, + { 0x0012, 0x008c }, + { 0x0014, 0x0000 }, + { 0x0014, 0x0001 }, + { 0x0014, 0x0002 }, + { 0x0014, 0x0003 }, + { 0x0014, 0x0004 }, + { 0x0014, 0x0005 }, + { 0x0014, 0x0006 }, + { 0x0014, 0x0007 }, + { 0x0014, 0x0008 }, + { 0x0014, 0x0009 }, + { 0x0014, 0x000a }, + { 0x0014, 0x000b }, + { 0x0005, 0x0011 }, + { 0x0004, 0x000f }, + { 0x0005, 0x0012 }, + { 0x0005, 0x0013 }, + { 0x0005, 0x0014 }, + { 0x0006, 0x0011 }, + { 0x0006, 0x0012 }, + { 0x0007, 0x000c }, + { 0x0008, 0x000b }, + { 0x000a, 0x000c }, + { 0x000b, 0x000e }, + { 0x000d, 0x0010 }, + { 0x000e, 0x0017 }, + { 0x000f, 0x001c }, + { 0x0013, 0x010b }, + { 0x0013, 0x010c }, + { 0x0014, 0x000c }, + { 0x0014, 0x000d }, + { 0x0014, 0x000e }, + { 0x0014, 0x000f }, + { 0x0014, 0x0010 }, + { 0x0014, 0x0011 }, + { 0x0014, 0x0012 }, + { 0x0014, 0x0013 }, + { 0x0014, 0x0014 }, + { 0x0014, 0x0015 }, + { 0x0014, 0x0016 }, + { 0x0006, 0x0013 }, + { 0x0005, 0x0015 }, + { 0x0005, 0x0016 }, + { 0x0005, 0x0017 }, + { 0x0005, 0x0018 }, + { 0x0006, 0x0014 }, + { 0x0007, 0x000d }, + { 0x0007, 0x000e }, + { 0x0009, 0x000c }, + { 0x000a, 0x000d }, + { 0x000c, 0x000f }, + { 0x000d, 0x0011 }, + { 0x000f, 0x001d }, + { 0x0011, 0x0052 }, + { 0x0012, 0x008d }, + { 0x0012, 0x008e }, + { 0x0014, 0x0017 }, + { 0x0014, 0x0018 }, + { 0x0014, 0x0019 }, + { 0x0014, 0x001a }, + { 0x0014, 0x001b }, + { 0x0014, 0x001c }, + { 0x0014, 0x001d }, + { 0x0014, 0x001e }, + { 0x0014, 0x001f }, + { 0x0014, 0x0020 }, + { 0x0014, 0x0021 }, + { 0x0006, 0x0015 }, + { 0x0005, 0x0019 }, + { 0x0005, 0x001a }, + { 0x0005, 0x001b }, + { 0x0006, 0x0016 }, + { 0x0006, 0x0017 }, + { 0x0007, 0x000f }, + { 0x0008, 0x000c }, + { 0x0009, 0x000d }, + { 0x000b, 0x000f }, + { 0x000c, 0x0010 }, + { 0x000d, 0x0012 }, + { 0x000f, 0x001e }, + { 0x0012, 0x008f }, + { 0x0014, 0x0022 }, + { 0x0014, 0x0023 }, + { 0x0014, 0x0024 }, + { 0x0014, 0x0025 }, + { 0x0014, 0x0026 }, + { 0x0014, 0x0027 }, + { 0x0014, 0x0028 }, + { 0x0014, 0x0029 }, + { 0x0014, 0x002a }, + { 0x0014, 0x002b }, + { 0x0014, 0x002c }, + { 0x0014, 0x002d }, + { 0x0014, 0x002e }, + { 0x0006, 0x0018 }, + { 0x0005, 0x001c }, + { 0x0005, 0x001d }, + { 0x0006, 0x0019 }, + { 0x0006, 0x001a }, + { 0x0007, 0x0010 }, + { 0x0007, 0x0011 }, + { 0x0008, 0x000d }, + { 0x000a, 0x000e }, + { 0x000b, 0x0010 }, + { 0x000c, 0x0011 }, + { 0x000e, 0x0018 }, + { 0x0010, 0x002e }, + { 0x0012, 0x0090 }, + { 0x0013, 0x010d }, + { 0x0013, 0x010e }, + { 0x0014, 0x002f }, + { 0x0014, 0x0030 }, + { 0x0014, 0x0031 }, + { 0x0014, 0x0032 }, + { 0x0014, 0x0033 }, + { 0x0014, 0x0034 }, + { 0x0014, 0x0035 }, + { 0x0014, 0x0036 }, + { 0x0014, 0x0037 }, + { 0x0014, 0x0038 }, + { 0x0014, 0x0039 }, + { 0x0007, 0x0012 }, + { 0x0006, 0x001b }, + { 0x0006, 0x001c }, + { 0x0006, 0x001d }, + { 0x0007, 0x0013 }, + { 0x0007, 0x0014 }, + { 0x0008, 0x000e }, + { 0x0009, 0x000e }, + { 0x000b, 0x0011 }, + { 0x000c, 0x0012 }, + { 0x000d, 0x0013 }, + { 0x000e, 0x0019 }, + { 0x0010, 0x002f }, + { 0x0012, 0x0091 }, + { 0x0014, 0x003a }, + { 0x0014, 0x003b }, + { 0x0014, 0x003c }, + { 0x0014, 0x003d }, + { 0x0014, 0x003e }, + { 0x0014, 0x003f }, + { 0x0014, 0x0040 }, + { 0x0014, 0x0041 }, + { 0x0014, 0x0042 }, + { 0x0014, 0x0043 }, + { 0x0014, 0x0044 }, + { 0x0014, 0x0045 }, + { 0x0014, 0x0046 }, + { 0x0007, 0x0015 }, + { 0x0006, 0x001e }, + { 0x0006, 0x001f }, + { 0x0007, 0x0016 }, + { 0x0007, 0x0017 }, + { 0x0008, 0x000f }, + { 0x0009, 0x000f }, + { 0x000a, 0x000f }, + { 0x000b, 0x0012 }, + { 0x000d, 0x0014 }, + { 0x000e, 0x001a }, + { 0x000f, 0x001f }, + { 0x0013, 0x010f }, + { 0x0011, 0x0053 }, + { 0x0014, 0x0047 }, + { 0x0014, 0x0048 }, + { 0x0014, 0x0049 }, + { 0x0014, 0x004a }, + { 0x0014, 0x004b }, + { 0x0014, 0x004c }, + { 0x0014, 0x004d }, + { 0x0014, 0x004e }, + { 0x0014, 0x004f }, + { 0x0014, 0x0050 }, + { 0x0014, 0x0051 }, + { 0x0014, 0x0052 }, + { 0x0014, 0x0053 }, + { 0x0008, 0x0010 }, + { 0x0007, 0x0018 }, + { 0x0007, 0x0019 }, + { 0x0008, 0x0011 }, + { 0x0008, 0x0012 }, + { 0x0009, 0x0010 }, + { 0x000a, 0x0010 }, + { 0x000b, 0x0013 }, + { 0x000c, 0x0013 }, + { 0x000e, 0x001b }, + { 0x000f, 0x0020 }, + { 0x0010, 0x0030 }, + { 0x0012, 0x0092 }, + { 0x0014, 0x0054 }, + { 0x0014, 0x0055 }, + { 0x0014, 0x0056 }, + { 0x0014, 0x0057 }, + { 0x0014, 0x0058 }, + { 0x0014, 0x0059 }, + { 0x0014, 0x005a }, + { 0x0014, 0x005b }, + { 0x0014, 0x005c }, + { 0x0014, 0x005d }, + { 0x0014, 0x005e }, + { 0x0014, 0x005f }, + { 0x0014, 0x0060 }, + { 0x0014, 0x0061 }, + { 0x0009, 0x0011 }, + { 0x0008, 0x0013 }, + { 0x0009, 0x0012 }, + { 0x0009, 0x0013 }, + { 0x000a, 0x0011 }, + { 0x000a, 0x0012 }, + { 0x000b, 0x0014 }, + { 0x000c, 0x0014 }, + { 0x000d, 0x0015 }, + { 0x000e, 0x001c }, + { 0x000f, 0x0021 }, + { 0x0013, 0x0110 }, + { 0x0012, 0x0093 }, + { 0x0012, 0x0094 }, + { 0x0014, 0x0062 }, + { 0x0014, 0x0063 }, + { 0x0014, 0x0064 }, + { 0x0014, 0x0065 }, + { 0x0014, 0x0066 }, + { 0x0014, 0x0067 }, + { 0x0014, 0x0068 }, + { 0x0014, 0x0069 }, + { 0x0014, 0x006a }, + { 0x0014, 0x006b }, + { 0x0014, 0x006c }, + { 0x0014, 0x006d }, + { 0x0014, 0x006e }, + { 0x000b, 0x0015 }, + { 0x000a, 0x0013 }, + { 0x000a, 0x0014 }, + { 0x000a, 0x0015 }, + { 0x000b, 0x0016 }, + { 0x000c, 0x0015 }, + { 0x000d, 0x0016 }, + { 0x000d, 0x0017 }, + { 0x000f, 0x0022 }, + { 0x0010, 0x0031 }, + { 0x0012, 0x0095 }, + { 0x0012, 0x0096 }, + { 0x0014, 0x006f }, + { 0x0013, 0x0111 }, + { 0x0014, 0x0070 }, + { 0x0014, 0x0071 }, + { 0x0014, 0x0072 }, + { 0x0014, 0x0073 }, + { 0x0014, 0x0074 }, + { 0x0014, 0x0075 }, + { 0x0014, 0x0076 }, + { 0x0014, 0x0077 }, + { 0x0014, 0x0078 }, + { 0x0014, 0x0079 }, + { 0x0014, 0x007a }, + { 0x0014, 0x007b }, + { 0x0014, 0x007c }, + { 0x000c, 0x0016 }, + { 0x000b, 0x0017 }, + { 0x000c, 0x0017 }, + { 0x000c, 0x0018 }, + { 0x000c, 0x0019 }, + { 0x000d, 0x0018 }, + { 0x000e, 0x001d }, + { 0x000f, 0x0023 }, + { 0x000f, 0x0024 }, + { 0x0011, 0x0054 }, + { 0x0012, 0x0097 }, + { 0x0014, 0x007d }, + { 0x0014, 0x007e }, + { 0x0014, 0x007f }, + { 0x0014, 0x0080 }, + { 0x0014, 0x0081 }, + { 0x0014, 0x0082 }, + { 0x0014, 0x0083 }, + { 0x0014, 0x0084 }, + { 0x0014, 0x0085 }, + { 0x0014, 0x0086 }, + { 0x0014, 0x0087 }, + { 0x0014, 0x0088 }, + { 0x0014, 0x0089 }, + { 0x0014, 0x008a }, + { 0x0014, 0x008b }, + { 0x0014, 0x008c }, + { 0x000e, 0x001e }, + { 0x000d, 0x0019 }, + { 0x000d, 0x001a }, + { 0x000d, 0x001b }, + { 0x000e, 0x001f }, + { 0x000f, 0x0025 }, + { 0x000f, 0x0026 }, + { 0x0010, 0x0032 }, + { 0x0010, 0x0033 }, + { 0x0012, 0x0098 }, + { 0x0013, 0x0112 }, + { 0x0014, 0x008d }, + { 0x0014, 0x008e }, + { 0x0014, 0x008f }, + { 0x0014, 0x0090 }, + { 0x0014, 0x0091 }, + { 0x0014, 0x0092 }, + { 0x0014, 0x0093 }, + { 0x0014, 0x0094 }, + { 0x0014, 0x0095 }, + { 0x0014, 0x0096 }, + { 0x0014, 0x0097 }, + { 0x0014, 0x0098 }, + { 0x0014, 0x0099 }, + { 0x0014, 0x009a }, + { 0x0014, 0x009b }, + { 0x0014, 0x009c }, + { 0x000f, 0x0027 }, + { 0x000f, 0x0028 }, + { 0x000f, 0x0029 }, + { 0x000f, 0x002a }, + { 0x0010, 0x0034 }, + { 0x000f, 0x002b }, + { 0x0011, 0x0055 }, + { 0x0012, 0x0099 }, + { 0x0012, 0x009a }, + { 0x0012, 0x009b }, + { 0x0014, 0x009d }, + { 0x0013, 0x0113 }, + { 0x0014, 0x009e }, + { 0x0014, 0x009f }, + { 0x0014, 0x00a0 }, + { 0x0014, 0x00a1 }, + { 0x0014, 0x00a2 }, + { 0x0014, 0x00a3 }, + { 0x0014, 0x00a4 }, + { 0x0014, 0x00a5 }, + { 0x0014, 0x00a6 }, + { 0x0014, 0x00a7 }, + { 0x0014, 0x00a8 }, + { 0x0014, 0x00a9 }, + { 0x0014, 0x00aa }, + { 0x0014, 0x00ab }, + { 0x0014, 0x00ac }, + { 0x0011, 0x0056 }, + { 0x0010, 0x0035 }, + { 0x0010, 0x0036 }, + { 0x0010, 0x0037 }, + { 0x0011, 0x0057 }, + { 0x0012, 0x009c }, + { 0x0012, 0x009d }, + { 0x0012, 0x009e }, + { 0x0014, 0x00ad }, + { 0x0014, 0x00ae }, + { 0x0014, 0x00af }, + { 0x0014, 0x00b0 }, + { 0x0014, 0x00b1 }, + { 0x0014, 0x00b2 }, + { 0x0014, 0x00b3 }, + { 0x0014, 0x00b4 }, + { 0x0014, 0x00b5 }, + { 0x0014, 0x00b6 }, + { 0x0014, 0x00b7 }, + { 0x0014, 0x00b8 }, + { 0x0014, 0x00b9 }, + { 0x0014, 0x00ba }, + { 0x0014, 0x00bb }, + { 0x0014, 0x00bc }, + { 0x0014, 0x00bd }, + { 0x0014, 0x00be }, + { 0x0014, 0x00bf }, + { 0x0012, 0x009f }, + { 0x0011, 0x0058 }, + { 0x0012, 0x00a0 }, + { 0x0014, 0x00c0 }, + { 0x0011, 0x0059 }, + { 0x0013, 0x0114 }, + { 0x0012, 0x00a1 }, + { 0x0014, 0x00c1 }, + { 0x0013, 0x0115 }, + { 0x0014, 0x00c2 }, + { 0x0014, 0x00c3 }, + { 0x0014, 0x00c4 }, + { 0x0014, 0x00c5 }, + { 0x0014, 0x00c6 }, + { 0x0014, 0x00c7 }, + { 0x0014, 0x00c8 }, + { 0x0014, 0x00c9 }, + { 0x0014, 0x00ca }, + { 0x0014, 0x00cb }, + { 0x0014, 0x00cc }, + { 0x0014, 0x00cd }, + { 0x0014, 0x00ce }, + { 0x0014, 0x00cf }, + { 0x0014, 0x00d0 }, + { 0x0014, 0x00d1 }, + { 0x0014, 0x00d2 }, + { 0x0014, 0x00d3 }, + { 0x0014, 0x00d4 }, + { 0x0014, 0x00d5 }, + { 0x0014, 0x00d6 }, + { 0x0014, 0x00d7 }, + { 0x0014, 0x00d8 }, + { 0x0014, 0x00d9 }, + { 0x0014, 0x00da }, + { 0x0014, 0x00db }, + { 0x0014, 0x00dc }, + { 0x0014, 0x00dd }, + { 0x0014, 0x00de }, + { 0x0014, 0x00df }, + { 0x0014, 0x00e0 }, + { 0x0014, 0x00e1 }, + { 0x0014, 0x00e2 }, + { 0x0014, 0x00e3 }, + { 0x0014, 0x00e4 }, + { 0x0014, 0x00e5 }, + { 0x0014, 0x00e6 }, + { 0x0014, 0x00e7 }, + { 0x0014, 0x00e8 }, + { 0x0014, 0x00e9 }, + { 0x0014, 0x00ea }, + { 0x0014, 0x00eb }, + { 0x0014, 0x00ec }, + { 0x0014, 0x00ed }, + { 0x0014, 0x00ee }, + { 0x0014, 0x00ef }, + { 0x0014, 0x00f0 }, + { 0x0014, 0x00f1 }, + { 0x0014, 0x00f2 }, + { 0x0014, 0x00f3 }, + { 0x0014, 0x00f4 }, + { 0x0014, 0x00f5 }, + { 0x0014, 0x00f6 }, + { 0x0014, 0x00f7 }, + { 0x0014, 0x00f8 }, + { 0x0014, 0x00f9 }, + { 0x0014, 0x00fa }, + { 0x0014, 0x00fb }, + { 0x0014, 0x00fc }, + { 0x0014, 0x00fd }, + { 0x0014, 0x00fe }, + { 0x0014, 0x00ff }, + { 0x0014, 0x0100 }, + { 0x0014, 0x0101 }, + { 0x0014, 0x0102 }, + { 0x0014, 0x0103 }, + { 0x0014, 0x0104 }, + { 0x0014, 0x0105 }, + { 0x0014, 0x0106 }, + { 0x0014, 0x0107 }, + { 0x0014, 0x0108 }, + { 0x0014, 0x0109 }, + { 0x0014, 0x010a }, + { 0x0014, 0x010b }, + { 0x0014, 0x010c }, + { 0x0014, 0x010d }, + { 0x0014, 0x010e }, + { 0x0014, 0x010f }, + { 0x0014, 0x0110 }, + { 0x0014, 0x0111 }, + { 0x0014, 0x0112 }, + { 0x0014, 0x0113 }, + { 0x0014, 0x0114 }, + { 0x0014, 0x0115 }, + { 0x0014, 0x0116 }, + { 0x0014, 0x0117 }, + { 0x0014, 0x0118 }, + { 0x0014, 0x0119 }, + { 0x0014, 0x011a }, + { 0x0014, 0x011b }, + { 0x0014, 0x011c }, + { 0x0014, 0x011d }, + { 0x0014, 0x011e }, + { 0x0014, 0x011f }, + { 0x0014, 0x0120 }, + { 0x0014, 0x0121 }, + { 0x0014, 0x0122 }, + { 0x0014, 0x0123 }, + { 0x0014, 0x0124 }, + { 0x0014, 0x0125 }, + { 0x0013, 0x0116 }, + { 0x0014, 0x0126 }, + { 0x0014, 0x0127 }, + { 0x0014, 0x0128 }, + { 0x0014, 0x0129 }, + { 0x0014, 0x012a }, + { 0x0014, 0x012b }, + { 0x0014, 0x012c }, + { 0x0014, 0x012d }, + { 0x0014, 0x012e }, + { 0x0014, 0x012f }, + { 0x0014, 0x0130 }, + { 0x0014, 0x0131 }, + { 0x0014, 0x0132 }, + { 0x0014, 0x0133 }, + { 0x0014, 0x0134 }, + { 0x0014, 0x0135 }, + { 0x0014, 0x0136 }, + { 0x0014, 0x0137 }, + { 0x0014, 0x0138 }, + { 0x0014, 0x0139 }, + { 0x0014, 0x013a }, + { 0x0014, 0x013b }, + { 0x0014, 0x013c }, + { 0x0014, 0x013d }, + { 0x0014, 0x013e }, + { 0x0014, 0x013f }, + { 0x0014, 0x0140 }, + { 0x0014, 0x0141 }, + { 0x0014, 0x0142 }, + { 0x0014, 0x0143 }, + { 0x0014, 0x0144 }, + { 0x0014, 0x0145 }, + { 0x0014, 0x0146 }, + { 0x0014, 0x0147 }, + { 0x0014, 0x0148 }, + { 0x0014, 0x0149 }, + { 0x0014, 0x014a }, + { 0x0014, 0x014b }, + { 0x0014, 0x014c }, + { 0x0014, 0x014d }, + { 0x0014, 0x014e }, + { 0x0014, 0x014f }, + { 0x0014, 0x0150 }, + { 0x0014, 0x0151 }, + { 0x0014, 0x0152 }, + { 0x0014, 0x0153 }, + { 0x0014, 0x0154 }, + { 0x0014, 0x0155 }, + { 0x0014, 0x0156 }, + { 0x0014, 0x0157 }, + { 0x0014, 0x0158 }, + { 0x0014, 0x0159 }, + { 0x0014, 0x015a }, + { 0x0014, 0x015b }, + { 0x0014, 0x015c }, + { 0x0014, 0x015d }, + { 0x0014, 0x015e }, + { 0x0014, 0x015f }, + { 0x0014, 0x0160 }, + { 0x0014, 0x0161 }, + { 0x0014, 0x0162 }, + { 0x0014, 0x0163 }, + { 0x0014, 0x0164 }, + { 0x0014, 0x0165 }, + { 0x0014, 0x0166 }, + { 0x0014, 0x0167 }, + { 0x0014, 0x0168 }, + { 0x0014, 0x0169 }, + { 0x0014, 0x016a }, + { 0x0014, 0x016b }, + { 0x0014, 0x016c }, + { 0x0014, 0x016d }, + { 0x0014, 0x016e }, + { 0x0014, 0x016f }, + { 0x0014, 0x0170 }, + { 0x0014, 0x0171 }, + { 0x0014, 0x0172 }, + { 0x0014, 0x0173 }, + { 0x0014, 0x0174 }, + { 0x0014, 0x0175 }, + { 0x0014, 0x0176 }, + { 0x0014, 0x0177 }, + { 0x0014, 0x0178 }, + { 0x0014, 0x0179 }, + { 0x0014, 0x017a }, + { 0x0014, 0x017b }, + { 0x0014, 0x017c }, + { 0x0014, 0x017d }, + { 0x0014, 0x017e }, + { 0x0014, 0x017f }, + { 0x0014, 0x0180 }, + { 0x0014, 0x0181 }, + { 0x0014, 0x0182 }, + { 0x0014, 0x0183 }, + { 0x0014, 0x0184 }, + { 0x0014, 0x0185 }, + { 0x0014, 0x0186 }, + { 0x0014, 0x0187 }, + { 0x0014, 0x0188 }, + { 0x0014, 0x0189 }, + { 0x0014, 0x018a }, + { 0x0014, 0x018b }, + { 0x0014, 0x018c }, + { 0x0014, 0x018d }, + { 0x0014, 0x018e }, + { 0x0014, 0x018f }, + { 0x0014, 0x0190 }, + { 0x0014, 0x0191 }, + { 0x0014, 0x0192 }, + { 0x0014, 0x0193 }, + { 0x0014, 0x0194 }, + { 0x0014, 0x0195 }, + { 0x0014, 0x0196 }, + { 0x0014, 0x0197 }, + { 0x0014, 0x0198 }, + { 0x0014, 0x0199 }, + { 0x0014, 0x019a }, + { 0x0014, 0x019b }, + { 0x0014, 0x019c }, + { 0x0014, 0x019d }, + { 0x0014, 0x019e }, + { 0x0014, 0x019f }, + { 0x0014, 0x01a0 }, + { 0x0014, 0x01a1 }, + { 0x0014, 0x01a2 }, + { 0x0014, 0x01a3 }, + { 0x0014, 0x01a4 }, + { 0x0014, 0x01a5 }, + { 0x0014, 0x01a6 }, + { 0x0014, 0x01a7 }, + { 0x0014, 0x01a8 }, + { 0x0014, 0x01a9 }, + { 0x0014, 0x01aa }, + { 0x0014, 0x01ab }, + { 0x0014, 0x01ac }, + { 0x0014, 0x01ad }, + { 0x0014, 0x01ae }, + { 0x0014, 0x01af }, + { 0x0014, 0x01b0 }, + { 0x0014, 0x01b1 }, + { 0x0014, 0x01b2 }, + { 0x0014, 0x01b3 }, + { 0x0014, 0x01b4 }, + { 0x0014, 0x01b5 }, + { 0x0014, 0x01b6 }, + { 0x0014, 0x01b7 }, + { 0x0014, 0x01b8 }, + { 0x0014, 0x01b9 }, + { 0x0014, 0x01ba }, + { 0x0014, 0x01bb }, + { 0x0014, 0x01bc }, + { 0x0014, 0x01bd }, + { 0x0014, 0x01be }, + { 0x0014, 0x01bf }, + { 0x0014, 0x01c0 }, + { 0x0014, 0x01c1 }, + { 0x0014, 0x01c2 }, + { 0x0014, 0x01c3 }, + { 0x0014, 0x01c4 }, + { 0x0014, 0x01c5 }, + { 0x0014, 0x01c6 }, + { 0x0014, 0x01c7 }, + { 0x0014, 0x01c8 }, + { 0x0014, 0x01c9 }, + { 0x0014, 0x01ca }, + { 0x0014, 0x01cb }, + { 0x0014, 0x01cc }, + { 0x0014, 0x01cd }, + { 0x0014, 0x01ce }, + { 0x0014, 0x01cf }, + { 0x0014, 0x01d0 }, + { 0x0014, 0x01d1 }, + { 0x0014, 0x01d2 }, + { 0x0014, 0x01d3 }, + { 0x0014, 0x01d4 }, + { 0x0014, 0x01d5 }, + { 0x0014, 0x01d6 }, + { 0x0014, 0x01d7 }, + { 0x0014, 0x01d8 }, + { 0x0014, 0x01d9 }, + { 0x0014, 0x01da }, + { 0x0014, 0x01db }, + { 0x0014, 0x01dc }, + { 0x0014, 0x01dd }, + { 0x0014, 0x01de }, + { 0x0014, 0x01df }, + { 0x0014, 0x01e0 }, + { 0x0014, 0x01e1 }, + { 0x0014, 0x01e2 }, + { 0x0014, 0x01e3 }, + { 0x0014, 0x01e4 }, + { 0x0014, 0x01e5 }, + { 0x0014, 0x01e6 }, + { 0x0014, 0x01e7 }, + { 0x0014, 0x01e8 }, + { 0x0014, 0x01e9 }, + { 0x0014, 0x01ea }, + { 0x0014, 0x01eb }, + { 0x0014, 0x01ec }, + { 0x0014, 0x01ed }, + { 0x0014, 0x01ee }, + { 0x0014, 0x01ef }, + { 0x0014, 0x01f0 }, + { 0x0014, 0x01f1 }, + { 0x0014, 0x01f2 }, + { 0x0014, 0x01f3 }, + { 0x0014, 0x01f4 }, + { 0x0014, 0x01f5 }, + { 0x0014, 0x01f6 }, + { 0x0014, 0x01f7 }, + { 0x0014, 0x01f8 }, + { 0x0014, 0x01f9 }, + { 0x0014, 0x01fa }, + { 0x0014, 0x01fb }, + { 0x0014, 0x01fc }, + { 0x0014, 0x01fd }, + { 0x0014, 0x01fe }, + { 0x0014, 0x01ff }, + { 0x0014, 0x0200 }, + { 0x0014, 0x0201 }, + { 0x0014, 0x0202 }, + { 0x0014, 0x0203 }, + { 0x0014, 0x0204 }, + { 0x0014, 0x0205 }, + { 0x0014, 0x0206 }, + { 0x0014, 0x0207 }, + { 0x0014, 0x0208 }, + { 0x0014, 0x0209 }, + { 0x0014, 0x020a }, + { 0x0014, 0x020b }, + { 0x0014, 0x020c }, + { 0x0014, 0x020d }, + { 0x0014, 0x020e }, + { 0x0014, 0x020f }, + { 0x0014, 0x0210 }, + { 0x0014, 0x0211 }, + { 0x0014, 0x0212 }, + { 0x0014, 0x0213 }, + { 0x0014, 0x0214 }, + { 0x0014, 0x0215 }, + { 0x0013, 0x0117 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec16[85][16] = -{ - {0x000fffff, 0x000dffff, 0x000effff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0000001c, }, - {0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, }, - {0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, }, - {0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, }, - {0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, }, - {0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, }, - {0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, }, - {0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006e, 0x0003006e, 0x0003006e, 0x0003006e, 0x0003006e, 0x0003006e, 0x0003006e, 0x0003006e, }, - {0x000100be, 0x000100be, 0x000100bf, 0x000100bf, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x00020003, 0x00020003, 0x00020003, 0x00020003, }, - {0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020036, 0x00020036, 0x00020036, 0x00020036, }, - {0x0002003b, 0x0002003b, 0x0002003b, 0x0002003b, 0x00020051, 0x00020051, 0x00020051, 0x00020051, 0x00020055, 0x00020055, 0x00020055, 0x00020055, 0x00020056, 0x00020056, 0x00020056, 0x00020056, }, - {0x0002006c, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006f, 0x0002006f, 0x0002006f, 0x0002006f, 0x00020070, 0x00020070, 0x00020070, 0x00020070, 0x00020088, 0x00020088, 0x00020088, 0x00020088, }, - {0x00020089, 0x00020089, 0x00020089, 0x00020089, 0x0002008a, 0x0002008a, 0x0002008a, 0x0002008a, 0x000200a3, 0x000200a3, 0x000200a3, 0x000200a3, 0x000200a4, 0x000200a4, 0x000200a4, 0x000200a4, }, - {0x000000bd, 0x000000c0, 0x000000c1, 0x000000d9, 0x00010005, 0x00010005, 0x00010006, 0x00010006, 0x00010022, 0x00010022, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, 0x00010057, 0x00010057, }, - {0x00010071, 0x00010071, 0x00010072, 0x00010072, 0x00010087, 0x00010087, 0x0001008b, 0x0001008b, 0x0001008c, 0x0001008c, 0x000100a2, 0x000100a2, 0x000100a5, 0x000100a5, 0x000100a6, 0x000100a6, }, - {0x0019ffff, 0x0017ffff, 0x0018ffff, 0x0015ffff, 0x0016ffff, 0x0012ffff, 0x0010ffff, 0x0011ffff, 0x0013ffff, 0x0014ffff, 0x00000007, 0x00000023, 0x00000058, 0x00000073, 0x0000008d, 0x000000a7, }, - {0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, }, - {0x0003008e, 0x0003008e, 0x0003008e, 0x0003008e, 0x0003008e, 0x0003008e, 0x0003008e, 0x0003008e, 0x000300a8, 0x000300a8, 0x000300a8, 0x000300a8, 0x000300a8, 0x000300a8, 0x000300a8, 0x000300a8, }, - {0x000200f5, 0x000200f5, 0x000200f5, 0x000200f5, 0x000200f6, 0x000200f6, 0x000200f6, 0x000200f6, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, }, - {0x000300c2, 0x000300c2, 0x000300c2, 0x000300c2, 0x000300c2, 0x000300c2, 0x000300c2, 0x000300c2, 0x000300d8, 0x000300d8, 0x000300d8, 0x000300d8, 0x000300d8, 0x000300d8, 0x000300d8, 0x000300d8, }, - {0x000300da, 0x000300da, 0x000300da, 0x000300da, 0x000300da, 0x000300da, 0x000300da, 0x000300da, 0x000300db, 0x000300db, 0x000300db, 0x000300db, 0x000300db, 0x000300db, 0x000300db, 0x000300db, }, - {0x00020024, 0x00020024, 0x00020024, 0x00020024, 0x0002003f, 0x0002003f, 0x0002003f, 0x0002003f, 0x00020074, 0x00020074, 0x00020074, 0x00020074, 0x000200a9, 0x000200a9, 0x000200a9, 0x000200a9, }, - {0x000200c3, 0x000200c3, 0x000200c3, 0x000200c3, 0x000200dc, 0x000200dc, 0x000200dc, 0x000200dc, 0x000200dd, 0x000200dd, 0x000200dd, 0x000200dd, 0x000200f4, 0x000200f4, 0x000200f4, 0x000200f4, }, - {0x0000005b, 0x00000076, 0x00000090, 0x000000c5, 0x000000df, 0x000000f8, 0x0000010e, 0x00000110, 0x00000111, 0x00000112, 0x00010009, 0x00010009, 0x00010025, 0x00010025, 0x0001005a, 0x0001005a, }, - {0x00010075, 0x00010075, 0x0001008f, 0x0001008f, 0x000100aa, 0x000100aa, 0x000100c4, 0x000100c4, 0x000100de, 0x000100de, 0x000100f3, 0x000100f3, 0x000100f7, 0x000100f7, 0x0001010f, 0x0001010f, }, - {0x0032ffff, 0x0043ffff, 0x0025ffff, 0x0023ffff, 0x0024ffff, 0x0021ffff, 0x0020ffff, 0x0022ffff, 0x001cffff, 0x001affff, 0x001bffff, 0x001dffff, 0x001effff, 0x001fffff, 0x0000000a, 0x00000040, }, - {0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, }, - {0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300e0, 0x000300e0, 0x000300e0, 0x000300e0, 0x000300e0, 0x000300e0, 0x000300e0, 0x000300e0, }, - {0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, }, - {0x000300f9, 0x000300f9, 0x000300f9, 0x000300f9, 0x000300f9, 0x000300f9, 0x000300f9, 0x000300f9, 0x000300fa, 0x000300fa, 0x000300fa, 0x000300fa, 0x000300fa, 0x000300fa, 0x000300fa, 0x000300fa, }, - {0x00030113, 0x00030113, 0x00030113, 0x00030113, 0x00030113, 0x00030113, 0x00030113, 0x00030113, 0x0003012a, 0x0003012a, 0x0003012a, 0x0003012a, 0x0003012a, 0x0003012a, 0x0003012a, 0x0003012a, }, - {0x0003012b, 0x0003012b, 0x0003012b, 0x0003012b, 0x0003012b, 0x0003012b, 0x0003012b, 0x0003012b, 0x0003012c, 0x0003012c, 0x0003012c, 0x0003012c, 0x0003012c, 0x0003012c, 0x0003012c, 0x0003012c, }, - {0x00020077, 0x00020077, 0x00020077, 0x00020077, 0x00020092, 0x00020092, 0x00020092, 0x00020092, 0x000200ac, 0x000200ac, 0x000200ac, 0x000200ac, 0x000200c6, 0x000200c6, 0x000200c6, 0x000200c6, }, - {0x00010145, 0x00010145, 0x00010146, 0x00010146, 0x00010147, 0x00010147, 0x00010149, 0x00010149, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, 0x00020027, 0x00020027, 0x00020027, 0x00020027, }, - {0x000200e1, 0x000200e1, 0x000200e1, 0x000200e1, 0x00020114, 0x00020114, 0x00020114, 0x00020114, 0x00020129, 0x00020129, 0x00020129, 0x00020129, 0x0002012d, 0x0002012d, 0x0002012d, 0x0002012d, }, - {0x000000c8, 0x000000fc, 0x00000130, 0x00000131, 0x00000148, 0x00000160, 0x00000161, 0x00000162, 0x00010028, 0x00010028, 0x00010042, 0x00010042, 0x0001005d, 0x0001005d, 0x000100ad, 0x000100ad, }, - {0x000100c7, 0x000100c7, 0x000100e2, 0x000100e2, 0x000100fb, 0x000100fb, 0x00010115, 0x00010115, 0x00010116, 0x00010116, 0x0001012e, 0x0001012e, 0x0001012f, 0x0001012f, 0x00010144, 0x00010144, }, - {0x0054ffff, 0x0031ffff, 0x0030ffff, 0x002bffff, 0x002cffff, 0x002dffff, 0x002effff, 0x002fffff, 0x0027ffff, 0x0026ffff, 0x0028ffff, 0x0029ffff, 0x002affff, 0x0000000c, 0x00000078, 0x00000093, }, - {0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x000300af, 0x000300af, 0x000300af, 0x000300af, 0x000300af, 0x000300af, 0x000300af, 0x000300af, }, - {0x0002017c, 0x0002017c, 0x0002017c, 0x0002017c, 0x00020180, 0x00020180, 0x00020180, 0x00020180, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, }, - {0x00030117, 0x00030117, 0x00030117, 0x00030117, 0x00030117, 0x00030117, 0x00030117, 0x00030117, 0x0003014a, 0x0003014a, 0x0003014a, 0x0003014a, 0x0003014a, 0x0003014a, 0x0003014a, 0x0003014a, }, - {0x0003015f, 0x0003015f, 0x0003015f, 0x0003015f, 0x0003015f, 0x0003015f, 0x0003015f, 0x0003015f, 0x00030163, 0x00030163, 0x00030163, 0x00030163, 0x00030163, 0x00030163, 0x00030163, 0x00030163, }, - {0x0003017b, 0x0003017b, 0x0003017b, 0x0003017b, 0x0003017b, 0x0003017b, 0x0003017b, 0x0003017b, 0x0003017e, 0x0003017e, 0x0003017e, 0x0003017e, 0x0003017e, 0x0003017e, 0x0003017e, 0x0003017e, }, - {0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x00020044, 0x00020044, 0x00020044, 0x00020044, 0x00020045, 0x00020045, 0x00020045, 0x00020045, 0x0002005e, 0x0002005e, 0x0002005e, 0x0002005e, }, - {0x00020079, 0x00020079, 0x00020079, 0x00020079, 0x00020094, 0x00020094, 0x00020094, 0x00020094, 0x000200c9, 0x000200c9, 0x000200c9, 0x000200c9, 0x000200e4, 0x000200e4, 0x000200e4, 0x000200e4, }, - {0x000200e5, 0x000200e5, 0x000200e5, 0x000200e5, 0x000200fd, 0x000200fd, 0x000200fd, 0x000200fd, 0x000200fe, 0x000200fe, 0x000200fe, 0x000200fe, 0x00020118, 0x00020118, 0x00020118, 0x00020118, }, - {0x00020132, 0x00020132, 0x00020132, 0x00020132, 0x0002014b, 0x0002014b, 0x0002014b, 0x0002014b, 0x0002014c, 0x0002014c, 0x0002014c, 0x0002014c, 0x0002014d, 0x0002014d, 0x0002014d, 0x0002014d, }, - {0x00020164, 0x00020164, 0x00020164, 0x00020164, 0x00020165, 0x00020165, 0x00020165, 0x00020165, 0x00020166, 0x00020166, 0x00020166, 0x00020166, 0x0002017a, 0x0002017a, 0x0002017a, 0x0002017a, }, - {0x000100e3, 0x000100e3, 0x00010100, 0x00010100, 0x00010133, 0x00010133, 0x0001014f, 0x0001014f, 0x0001017f, 0x0001017f, 0x00010182, 0x00010182, 0x000101e7, 0x000101e7, 0x000102d8, 0x000102d8, }, - {0x000002d2, 0x000002d3, 0x000002d4, 0x000002d5, 0x000002d6, 0x000002d7, 0x00010029, 0x00010029, 0x0001002a, 0x0001002a, 0x0001007a, 0x0001007a, 0x0001007b, 0x0001007b, 0x000100ae, 0x000100ae, }, - {0x0034ffff, 0x0033ffff, 0x0035ffff, 0x0036ffff, 0x0039ffff, 0x0037ffff, 0x0038ffff, 0x003affff, 0x003bffff, 0x003cffff, 0x003dffff, 0x003effff, 0x003fffff, 0x0040ffff, 0x0041ffff, 0x0042ffff, }, - {0x0000002f, 0x00000030, 0x00000031, 0x00000032, 0x00000033, 0x00000034, 0x00000035, 0x00000046, 0x00000047, 0x00000048, 0x00000049, 0x0000004a, 0x0000004b, 0x0000004c, 0x0000004d, 0x0000004e, }, - {0x0000000f, 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000014, 0x00000015, 0x00000016, 0x00000017, 0x00000018, 0x00000019, 0x0000001a, 0x0000002b, 0x0000002c, 0x0000002d, 0x0000002e, }, - {0x0000004f, 0x00000050, 0x0000005f, 0x00000060, 0x00000061, 0x00000062, 0x00000063, 0x00000064, 0x00000065, 0x00000066, 0x00000067, 0x00000068, 0x00000069, 0x0000006a, 0x0000006b, 0x0000007c, }, - {0x0000007d, 0x0000007e, 0x0000007f, 0x00000080, 0x00000081, 0x00000082, 0x00000083, 0x00000084, 0x00000085, 0x00000086, 0x00000095, 0x00000096, 0x00000097, 0x00000098, 0x00000099, 0x0000009a, }, - {0x000000b9, 0x000000ba, 0x000000bb, 0x000000bc, 0x000000ca, 0x000000cb, 0x000000cc, 0x000000cd, 0x000000ce, 0x000000cf, 0x000000d0, 0x000000d1, 0x000000d2, 0x000000d3, 0x000000d4, 0x000000d5, }, - {0x000000d6, 0x000000d7, 0x000000e6, 0x000000e7, 0x000000e8, 0x000000e9, 0x000000ea, 0x000000eb, 0x000000ec, 0x000000ed, 0x000000ee, 0x000000ef, 0x000000f0, 0x000000f1, 0x000000f2, 0x000000ff, }, - {0x0000009b, 0x0000009c, 0x0000009d, 0x0000009e, 0x0000009f, 0x000000a0, 0x000000a1, 0x000000b0, 0x000000b1, 0x000000b2, 0x000000b3, 0x000000b4, 0x000000b5, 0x000000b6, 0x000000b7, 0x000000b8, }, - {0x00000101, 0x00000102, 0x00000103, 0x00000104, 0x00000105, 0x00000106, 0x00000107, 0x00000108, 0x00000109, 0x0000010a, 0x0000010b, 0x0000010c, 0x0000010d, 0x00000119, 0x0000011a, 0x0000011b, }, - {0x0000011c, 0x0000011d, 0x0000011e, 0x0000011f, 0x00000120, 0x00000121, 0x00000122, 0x00000123, 0x00000124, 0x00000125, 0x00000126, 0x00000127, 0x00000128, 0x00000134, 0x00000135, 0x00000136, }, - {0x00000137, 0x00000138, 0x00000139, 0x0000013a, 0x0000013b, 0x0000013c, 0x0000013d, 0x0000013e, 0x0000013f, 0x00000140, 0x00000141, 0x00000142, 0x00000143, 0x0000014e, 0x00000150, 0x00000151, }, - {0x00000152, 0x00000153, 0x00000154, 0x00000155, 0x00000156, 0x00000157, 0x00000158, 0x00000159, 0x0000015a, 0x0000015b, 0x0000015c, 0x0000015d, 0x0000015e, 0x00000167, 0x00000168, 0x00000169, }, - {0x0000016a, 0x0000016b, 0x0000016c, 0x0000016d, 0x0000016e, 0x0000016f, 0x00000170, 0x00000171, 0x00000172, 0x00000173, 0x00000174, 0x00000175, 0x00000176, 0x00000177, 0x00000178, 0x00000179, }, - {0x0000017d, 0x00000181, 0x00000183, 0x00000184, 0x00000185, 0x00000186, 0x00000187, 0x00000188, 0x00000189, 0x0000018a, 0x0000018b, 0x0000018c, 0x0000018d, 0x0000018e, 0x0000018f, 0x00000190, }, - {0x00000191, 0x00000192, 0x00000193, 0x00000194, 0x00000195, 0x00000196, 0x00000197, 0x00000198, 0x00000199, 0x0000019a, 0x0000019b, 0x0000019c, 0x0000019d, 0x0000019e, 0x0000019f, 0x000001a0, }, - {0x000001a1, 0x000001a2, 0x000001a3, 0x000001a4, 0x000001a5, 0x000001a6, 0x000001a7, 0x000001a8, 0x000001a9, 0x000001aa, 0x000001ab, 0x000001ac, 0x000001ad, 0x000001ae, 0x000001af, 0x000001b0, }, - {0x000001b1, 0x000001b2, 0x000001b3, 0x000001b4, 0x000001b5, 0x000001b6, 0x000001b7, 0x000001b8, 0x000001b9, 0x000001ba, 0x000001bb, 0x000001bc, 0x000001bd, 0x000001be, 0x000001bf, 0x000001c0, }, - {0x0044ffff, 0x0045ffff, 0x0046ffff, 0x0047ffff, 0x0048ffff, 0x0049ffff, 0x004affff, 0x004bffff, 0x004cffff, 0x004dffff, 0x004effff, 0x004fffff, 0x0050ffff, 0x0051ffff, 0x0052ffff, 0x0053ffff, }, - {0x000001c1, 0x000001c2, 0x000001c3, 0x000001c4, 0x000001c5, 0x000001c6, 0x000001c7, 0x000001c8, 0x000001c9, 0x000001ca, 0x000001cb, 0x000001cc, 0x000001cd, 0x000001ce, 0x000001cf, 0x000001d0, }, - {0x000001d1, 0x000001d2, 0x000001d3, 0x000001d4, 0x000001d5, 0x000001d6, 0x000001d7, 0x000001d8, 0x000001d9, 0x000001da, 0x000001db, 0x000001dc, 0x000001dd, 0x000001de, 0x000001df, 0x000001e0, }, - {0x000001e1, 0x000001e2, 0x000001e3, 0x000001e4, 0x000001e5, 0x000001e6, 0x000001e8, 0x000001e9, 0x000001ea, 0x000001eb, 0x000001ec, 0x000001ed, 0x000001ee, 0x000001ef, 0x000001f0, 0x000001f1, }, - {0x000001f2, 0x000001f3, 0x000001f4, 0x000001f5, 0x000001f6, 0x000001f7, 0x000001f8, 0x000001f9, 0x000001fa, 0x000001fb, 0x000001fc, 0x000001fd, 0x000001fe, 0x000001ff, 0x00000200, 0x00000201, }, - {0x00000202, 0x00000203, 0x00000204, 0x00000205, 0x00000206, 0x00000207, 0x00000208, 0x00000209, 0x0000020a, 0x0000020b, 0x0000020c, 0x0000020d, 0x0000020e, 0x0000020f, 0x00000210, 0x00000211, }, - {0x00000212, 0x00000213, 0x00000214, 0x00000215, 0x00000216, 0x00000217, 0x00000218, 0x00000219, 0x0000021a, 0x0000021b, 0x0000021c, 0x0000021d, 0x0000021e, 0x0000021f, 0x00000220, 0x00000221, }, - {0x00000222, 0x00000223, 0x00000224, 0x00000225, 0x00000226, 0x00000227, 0x00000228, 0x00000229, 0x0000022a, 0x0000022b, 0x0000022c, 0x0000022d, 0x0000022e, 0x0000022f, 0x00000230, 0x00000231, }, - {0x00000232, 0x00000233, 0x00000234, 0x00000235, 0x00000236, 0x00000237, 0x00000238, 0x00000239, 0x0000023a, 0x0000023b, 0x0000023c, 0x0000023d, 0x0000023e, 0x0000023f, 0x00000240, 0x00000241, }, - {0x00000242, 0x00000243, 0x00000244, 0x00000245, 0x00000246, 0x00000247, 0x00000248, 0x00000249, 0x0000024a, 0x0000024b, 0x0000024c, 0x0000024d, 0x0000024e, 0x0000024f, 0x00000250, 0x00000251, }, - {0x00000252, 0x00000253, 0x00000254, 0x00000255, 0x00000256, 0x00000257, 0x00000258, 0x00000259, 0x0000025a, 0x0000025b, 0x0000025c, 0x0000025d, 0x0000025e, 0x0000025f, 0x00000260, 0x00000261, }, - {0x00000262, 0x00000263, 0x00000264, 0x00000265, 0x00000266, 0x00000267, 0x00000268, 0x00000269, 0x0000026a, 0x0000026b, 0x0000026c, 0x0000026d, 0x0000026e, 0x0000026f, 0x00000270, 0x00000271, }, - {0x00000272, 0x00000273, 0x00000274, 0x00000275, 0x00000276, 0x00000277, 0x00000278, 0x00000279, 0x0000027a, 0x0000027b, 0x0000027c, 0x0000027d, 0x0000027e, 0x0000027f, 0x00000280, 0x00000281, }, - {0x00000282, 0x00000283, 0x00000284, 0x00000285, 0x00000286, 0x00000287, 0x00000288, 0x00000289, 0x0000028a, 0x0000028b, 0x0000028c, 0x0000028d, 0x0000028e, 0x0000028f, 0x00000290, 0x00000291, }, - {0x00000292, 0x00000293, 0x00000294, 0x00000295, 0x00000296, 0x00000297, 0x00000298, 0x00000299, 0x0000029a, 0x0000029b, 0x0000029c, 0x0000029d, 0x0000029e, 0x0000029f, 0x000002a0, 0x000002a1, }, - {0x000002a2, 0x000002a3, 0x000002a4, 0x000002a5, 0x000002a6, 0x000002a7, 0x000002a8, 0x000002a9, 0x000002aa, 0x000002ab, 0x000002ac, 0x000002ad, 0x000002ae, 0x000002af, 0x000002b0, 0x000002b1, }, - {0x000002b2, 0x000002b3, 0x000002b4, 0x000002b5, 0x000002b6, 0x000002b7, 0x000002b8, 0x000002b9, 0x000002ba, 0x000002bb, 0x000002bc, 0x000002bd, 0x000002be, 0x000002bf, 0x000002c0, 0x000002c1, }, - {0x000002c2, 0x000002c3, 0x000002c4, 0x000002c5, 0x000002c6, 0x000002c7, 0x000002c8, 0x000002c9, 0x000002ca, 0x000002cb, 0x000002cc, 0x000002cd, 0x000002ce, 0x000002cf, 0x000002d0, 0x000002d1, }, +const uint32_t c_aauiCQMFHuffDec16[85][16] = { + { + 0x000fffff, + 0x000dffff, + 0x000effff, + 0x0008ffff, + 0x0009ffff, + 0x000affff, + 0x000bffff, + 0x000cffff, + 0x0001ffff, + 0x0002ffff, + 0x0003ffff, + 0x0004ffff, + 0x0005ffff, + 0x0006ffff, + 0x0007ffff, + 0x0000001c, + }, + { + 0x00030001, + 0x00030001, + 0x00030001, + 0x00030001, + 0x00030001, + 0x00030001, + 0x00030001, + 0x00030001, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + }, + { + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + }, + { + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + }, + { + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + }, + { + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x00030052, + 0x00030052, + 0x00030052, + 0x00030052, + 0x00030052, + 0x00030052, + 0x00030052, + 0x00030052, + }, + { + 0x00030053, + 0x00030053, + 0x00030053, + 0x00030053, + 0x00030053, + 0x00030053, + 0x00030053, + 0x00030053, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + }, + { + 0x0003006d, + 0x0003006d, + 0x0003006d, + 0x0003006d, + 0x0003006d, + 0x0003006d, + 0x0003006d, + 0x0003006d, + 0x0003006e, + 0x0003006e, + 0x0003006e, + 0x0003006e, + 0x0003006e, + 0x0003006e, + 0x0003006e, + 0x0003006e, + }, + { + 0x000100be, + 0x000100be, + 0x000100bf, + 0x000100bf, + 0x00020000, + 0x00020000, + 0x00020000, + 0x00020000, + 0x00020002, + 0x00020002, + 0x00020002, + 0x00020002, + 0x00020003, + 0x00020003, + 0x00020003, + 0x00020003, + }, + { + 0x00020004, + 0x00020004, + 0x00020004, + 0x00020004, + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020021, + 0x00020021, + 0x00020021, + 0x00020021, + 0x00020036, + 0x00020036, + 0x00020036, + 0x00020036, + }, + { + 0x0002003b, + 0x0002003b, + 0x0002003b, + 0x0002003b, + 0x00020051, + 0x00020051, + 0x00020051, + 0x00020051, + 0x00020055, + 0x00020055, + 0x00020055, + 0x00020055, + 0x00020056, + 0x00020056, + 0x00020056, + 0x00020056, + }, + { + 0x0002006c, + 0x0002006c, + 0x0002006c, + 0x0002006c, + 0x0002006f, + 0x0002006f, + 0x0002006f, + 0x0002006f, + 0x00020070, + 0x00020070, + 0x00020070, + 0x00020070, + 0x00020088, + 0x00020088, + 0x00020088, + 0x00020088, + }, + { + 0x00020089, + 0x00020089, + 0x00020089, + 0x00020089, + 0x0002008a, + 0x0002008a, + 0x0002008a, + 0x0002008a, + 0x000200a3, + 0x000200a3, + 0x000200a3, + 0x000200a3, + 0x000200a4, + 0x000200a4, + 0x000200a4, + 0x000200a4, + }, + { + 0x000000bd, + 0x000000c0, + 0x000000c1, + 0x000000d9, + 0x00010005, + 0x00010005, + 0x00010006, + 0x00010006, + 0x00010022, + 0x00010022, + 0x0001003c, + 0x0001003c, + 0x0001003d, + 0x0001003d, + 0x00010057, + 0x00010057, + }, + { + 0x00010071, + 0x00010071, + 0x00010072, + 0x00010072, + 0x00010087, + 0x00010087, + 0x0001008b, + 0x0001008b, + 0x0001008c, + 0x0001008c, + 0x000100a2, + 0x000100a2, + 0x000100a5, + 0x000100a5, + 0x000100a6, + 0x000100a6, + }, + { + 0x0019ffff, + 0x0017ffff, + 0x0018ffff, + 0x0015ffff, + 0x0016ffff, + 0x0012ffff, + 0x0010ffff, + 0x0011ffff, + 0x0013ffff, + 0x0014ffff, + 0x00000007, + 0x00000023, + 0x00000058, + 0x00000073, + 0x0000008d, + 0x000000a7, + }, + { + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x00030059, + 0x00030059, + 0x00030059, + 0x00030059, + 0x00030059, + 0x00030059, + 0x00030059, + 0x00030059, + }, + { + 0x0003008e, + 0x0003008e, + 0x0003008e, + 0x0003008e, + 0x0003008e, + 0x0003008e, + 0x0003008e, + 0x0003008e, + 0x000300a8, + 0x000300a8, + 0x000300a8, + 0x000300a8, + 0x000300a8, + 0x000300a8, + 0x000300a8, + 0x000300a8, + }, + { + 0x000200f5, + 0x000200f5, + 0x000200f5, + 0x000200f5, + 0x000200f6, + 0x000200f6, + 0x000200f6, + 0x000200f6, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + }, + { + 0x000300c2, + 0x000300c2, + 0x000300c2, + 0x000300c2, + 0x000300c2, + 0x000300c2, + 0x000300c2, + 0x000300c2, + 0x000300d8, + 0x000300d8, + 0x000300d8, + 0x000300d8, + 0x000300d8, + 0x000300d8, + 0x000300d8, + 0x000300d8, + }, + { + 0x000300da, + 0x000300da, + 0x000300da, + 0x000300da, + 0x000300da, + 0x000300da, + 0x000300da, + 0x000300da, + 0x000300db, + 0x000300db, + 0x000300db, + 0x000300db, + 0x000300db, + 0x000300db, + 0x000300db, + 0x000300db, + }, + { + 0x00020024, + 0x00020024, + 0x00020024, + 0x00020024, + 0x0002003f, + 0x0002003f, + 0x0002003f, + 0x0002003f, + 0x00020074, + 0x00020074, + 0x00020074, + 0x00020074, + 0x000200a9, + 0x000200a9, + 0x000200a9, + 0x000200a9, + }, + { + 0x000200c3, + 0x000200c3, + 0x000200c3, + 0x000200c3, + 0x000200dc, + 0x000200dc, + 0x000200dc, + 0x000200dc, + 0x000200dd, + 0x000200dd, + 0x000200dd, + 0x000200dd, + 0x000200f4, + 0x000200f4, + 0x000200f4, + 0x000200f4, + }, + { + 0x0000005b, + 0x00000076, + 0x00000090, + 0x000000c5, + 0x000000df, + 0x000000f8, + 0x0000010e, + 0x00000110, + 0x00000111, + 0x00000112, + 0x00010009, + 0x00010009, + 0x00010025, + 0x00010025, + 0x0001005a, + 0x0001005a, + }, + { + 0x00010075, + 0x00010075, + 0x0001008f, + 0x0001008f, + 0x000100aa, + 0x000100aa, + 0x000100c4, + 0x000100c4, + 0x000100de, + 0x000100de, + 0x000100f3, + 0x000100f3, + 0x000100f7, + 0x000100f7, + 0x0001010f, + 0x0001010f, + }, + { + 0x0032ffff, + 0x0043ffff, + 0x0025ffff, + 0x0023ffff, + 0x0024ffff, + 0x0021ffff, + 0x0020ffff, + 0x0022ffff, + 0x001cffff, + 0x001affff, + 0x001bffff, + 0x001dffff, + 0x001effff, + 0x001fffff, + 0x0000000a, + 0x00000040, + }, + { + 0x0003005c, + 0x0003005c, + 0x0003005c, + 0x0003005c, + 0x0003005c, + 0x0003005c, + 0x0003005c, + 0x0003005c, + 0x00030091, + 0x00030091, + 0x00030091, + 0x00030091, + 0x00030091, + 0x00030091, + 0x00030091, + 0x00030091, + }, + { + 0x000300ab, + 0x000300ab, + 0x000300ab, + 0x000300ab, + 0x000300ab, + 0x000300ab, + 0x000300ab, + 0x000300ab, + 0x000300e0, + 0x000300e0, + 0x000300e0, + 0x000300e0, + 0x000300e0, + 0x000300e0, + 0x000300e0, + 0x000300e0, + }, + { + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030041, + 0x00030041, + 0x00030041, + 0x00030041, + 0x00030041, + 0x00030041, + 0x00030041, + 0x00030041, + }, + { + 0x000300f9, + 0x000300f9, + 0x000300f9, + 0x000300f9, + 0x000300f9, + 0x000300f9, + 0x000300f9, + 0x000300f9, + 0x000300fa, + 0x000300fa, + 0x000300fa, + 0x000300fa, + 0x000300fa, + 0x000300fa, + 0x000300fa, + 0x000300fa, + }, + { + 0x00030113, + 0x00030113, + 0x00030113, + 0x00030113, + 0x00030113, + 0x00030113, + 0x00030113, + 0x00030113, + 0x0003012a, + 0x0003012a, + 0x0003012a, + 0x0003012a, + 0x0003012a, + 0x0003012a, + 0x0003012a, + 0x0003012a, + }, + { + 0x0003012b, + 0x0003012b, + 0x0003012b, + 0x0003012b, + 0x0003012b, + 0x0003012b, + 0x0003012b, + 0x0003012b, + 0x0003012c, + 0x0003012c, + 0x0003012c, + 0x0003012c, + 0x0003012c, + 0x0003012c, + 0x0003012c, + 0x0003012c, + }, + { + 0x00020077, + 0x00020077, + 0x00020077, + 0x00020077, + 0x00020092, + 0x00020092, + 0x00020092, + 0x00020092, + 0x000200ac, + 0x000200ac, + 0x000200ac, + 0x000200ac, + 0x000200c6, + 0x000200c6, + 0x000200c6, + 0x000200c6, + }, + { + 0x00010145, + 0x00010145, + 0x00010146, + 0x00010146, + 0x00010147, + 0x00010147, + 0x00010149, + 0x00010149, + 0x0002000b, + 0x0002000b, + 0x0002000b, + 0x0002000b, + 0x00020027, + 0x00020027, + 0x00020027, + 0x00020027, + }, + { + 0x000200e1, + 0x000200e1, + 0x000200e1, + 0x000200e1, + 0x00020114, + 0x00020114, + 0x00020114, + 0x00020114, + 0x00020129, + 0x00020129, + 0x00020129, + 0x00020129, + 0x0002012d, + 0x0002012d, + 0x0002012d, + 0x0002012d, + }, + { + 0x000000c8, + 0x000000fc, + 0x00000130, + 0x00000131, + 0x00000148, + 0x00000160, + 0x00000161, + 0x00000162, + 0x00010028, + 0x00010028, + 0x00010042, + 0x00010042, + 0x0001005d, + 0x0001005d, + 0x000100ad, + 0x000100ad, + }, + { + 0x000100c7, + 0x000100c7, + 0x000100e2, + 0x000100e2, + 0x000100fb, + 0x000100fb, + 0x00010115, + 0x00010115, + 0x00010116, + 0x00010116, + 0x0001012e, + 0x0001012e, + 0x0001012f, + 0x0001012f, + 0x00010144, + 0x00010144, + }, + { + 0x0054ffff, + 0x0031ffff, + 0x0030ffff, + 0x002bffff, + 0x002cffff, + 0x002dffff, + 0x002effff, + 0x002fffff, + 0x0027ffff, + 0x0026ffff, + 0x0028ffff, + 0x0029ffff, + 0x002affff, + 0x0000000c, + 0x00000078, + 0x00000093, + }, + { + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030043, + 0x000300af, + 0x000300af, + 0x000300af, + 0x000300af, + 0x000300af, + 0x000300af, + 0x000300af, + 0x000300af, + }, + { + 0x0002017c, + 0x0002017c, + 0x0002017c, + 0x0002017c, + 0x00020180, + 0x00020180, + 0x00020180, + 0x00020180, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + }, + { + 0x00030117, + 0x00030117, + 0x00030117, + 0x00030117, + 0x00030117, + 0x00030117, + 0x00030117, + 0x00030117, + 0x0003014a, + 0x0003014a, + 0x0003014a, + 0x0003014a, + 0x0003014a, + 0x0003014a, + 0x0003014a, + 0x0003014a, + }, + { + 0x0003015f, + 0x0003015f, + 0x0003015f, + 0x0003015f, + 0x0003015f, + 0x0003015f, + 0x0003015f, + 0x0003015f, + 0x00030163, + 0x00030163, + 0x00030163, + 0x00030163, + 0x00030163, + 0x00030163, + 0x00030163, + 0x00030163, + }, + { + 0x0003017b, + 0x0003017b, + 0x0003017b, + 0x0003017b, + 0x0003017b, + 0x0003017b, + 0x0003017b, + 0x0003017b, + 0x0003017e, + 0x0003017e, + 0x0003017e, + 0x0003017e, + 0x0003017e, + 0x0003017e, + 0x0003017e, + 0x0003017e, + }, + { + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x00020044, + 0x00020044, + 0x00020044, + 0x00020044, + 0x00020045, + 0x00020045, + 0x00020045, + 0x00020045, + 0x0002005e, + 0x0002005e, + 0x0002005e, + 0x0002005e, + }, + { + 0x00020079, + 0x00020079, + 0x00020079, + 0x00020079, + 0x00020094, + 0x00020094, + 0x00020094, + 0x00020094, + 0x000200c9, + 0x000200c9, + 0x000200c9, + 0x000200c9, + 0x000200e4, + 0x000200e4, + 0x000200e4, + 0x000200e4, + }, + { + 0x000200e5, + 0x000200e5, + 0x000200e5, + 0x000200e5, + 0x000200fd, + 0x000200fd, + 0x000200fd, + 0x000200fd, + 0x000200fe, + 0x000200fe, + 0x000200fe, + 0x000200fe, + 0x00020118, + 0x00020118, + 0x00020118, + 0x00020118, + }, + { + 0x00020132, + 0x00020132, + 0x00020132, + 0x00020132, + 0x0002014b, + 0x0002014b, + 0x0002014b, + 0x0002014b, + 0x0002014c, + 0x0002014c, + 0x0002014c, + 0x0002014c, + 0x0002014d, + 0x0002014d, + 0x0002014d, + 0x0002014d, + }, + { + 0x00020164, + 0x00020164, + 0x00020164, + 0x00020164, + 0x00020165, + 0x00020165, + 0x00020165, + 0x00020165, + 0x00020166, + 0x00020166, + 0x00020166, + 0x00020166, + 0x0002017a, + 0x0002017a, + 0x0002017a, + 0x0002017a, + }, + { + 0x000100e3, + 0x000100e3, + 0x00010100, + 0x00010100, + 0x00010133, + 0x00010133, + 0x0001014f, + 0x0001014f, + 0x0001017f, + 0x0001017f, + 0x00010182, + 0x00010182, + 0x000101e7, + 0x000101e7, + 0x000102d8, + 0x000102d8, + }, + { + 0x000002d2, + 0x000002d3, + 0x000002d4, + 0x000002d5, + 0x000002d6, + 0x000002d7, + 0x00010029, + 0x00010029, + 0x0001002a, + 0x0001002a, + 0x0001007a, + 0x0001007a, + 0x0001007b, + 0x0001007b, + 0x000100ae, + 0x000100ae, + }, + { + 0x0034ffff, + 0x0033ffff, + 0x0035ffff, + 0x0036ffff, + 0x0039ffff, + 0x0037ffff, + 0x0038ffff, + 0x003affff, + 0x003bffff, + 0x003cffff, + 0x003dffff, + 0x003effff, + 0x003fffff, + 0x0040ffff, + 0x0041ffff, + 0x0042ffff, + }, + { + 0x0000002f, + 0x00000030, + 0x00000031, + 0x00000032, + 0x00000033, + 0x00000034, + 0x00000035, + 0x00000046, + 0x00000047, + 0x00000048, + 0x00000049, + 0x0000004a, + 0x0000004b, + 0x0000004c, + 0x0000004d, + 0x0000004e, + }, + { + 0x0000000f, + 0x00000010, + 0x00000011, + 0x00000012, + 0x00000013, + 0x00000014, + 0x00000015, + 0x00000016, + 0x00000017, + 0x00000018, + 0x00000019, + 0x0000001a, + 0x0000002b, + 0x0000002c, + 0x0000002d, + 0x0000002e, + }, + { + 0x0000004f, + 0x00000050, + 0x0000005f, + 0x00000060, + 0x00000061, + 0x00000062, + 0x00000063, + 0x00000064, + 0x00000065, + 0x00000066, + 0x00000067, + 0x00000068, + 0x00000069, + 0x0000006a, + 0x0000006b, + 0x0000007c, + }, + { + 0x0000007d, + 0x0000007e, + 0x0000007f, + 0x00000080, + 0x00000081, + 0x00000082, + 0x00000083, + 0x00000084, + 0x00000085, + 0x00000086, + 0x00000095, + 0x00000096, + 0x00000097, + 0x00000098, + 0x00000099, + 0x0000009a, + }, + { + 0x000000b9, + 0x000000ba, + 0x000000bb, + 0x000000bc, + 0x000000ca, + 0x000000cb, + 0x000000cc, + 0x000000cd, + 0x000000ce, + 0x000000cf, + 0x000000d0, + 0x000000d1, + 0x000000d2, + 0x000000d3, + 0x000000d4, + 0x000000d5, + }, + { + 0x000000d6, + 0x000000d7, + 0x000000e6, + 0x000000e7, + 0x000000e8, + 0x000000e9, + 0x000000ea, + 0x000000eb, + 0x000000ec, + 0x000000ed, + 0x000000ee, + 0x000000ef, + 0x000000f0, + 0x000000f1, + 0x000000f2, + 0x000000ff, + }, + { + 0x0000009b, + 0x0000009c, + 0x0000009d, + 0x0000009e, + 0x0000009f, + 0x000000a0, + 0x000000a1, + 0x000000b0, + 0x000000b1, + 0x000000b2, + 0x000000b3, + 0x000000b4, + 0x000000b5, + 0x000000b6, + 0x000000b7, + 0x000000b8, + }, + { + 0x00000101, + 0x00000102, + 0x00000103, + 0x00000104, + 0x00000105, + 0x00000106, + 0x00000107, + 0x00000108, + 0x00000109, + 0x0000010a, + 0x0000010b, + 0x0000010c, + 0x0000010d, + 0x00000119, + 0x0000011a, + 0x0000011b, + }, + { + 0x0000011c, + 0x0000011d, + 0x0000011e, + 0x0000011f, + 0x00000120, + 0x00000121, + 0x00000122, + 0x00000123, + 0x00000124, + 0x00000125, + 0x00000126, + 0x00000127, + 0x00000128, + 0x00000134, + 0x00000135, + 0x00000136, + }, + { + 0x00000137, + 0x00000138, + 0x00000139, + 0x0000013a, + 0x0000013b, + 0x0000013c, + 0x0000013d, + 0x0000013e, + 0x0000013f, + 0x00000140, + 0x00000141, + 0x00000142, + 0x00000143, + 0x0000014e, + 0x00000150, + 0x00000151, + }, + { + 0x00000152, + 0x00000153, + 0x00000154, + 0x00000155, + 0x00000156, + 0x00000157, + 0x00000158, + 0x00000159, + 0x0000015a, + 0x0000015b, + 0x0000015c, + 0x0000015d, + 0x0000015e, + 0x00000167, + 0x00000168, + 0x00000169, + }, + { + 0x0000016a, + 0x0000016b, + 0x0000016c, + 0x0000016d, + 0x0000016e, + 0x0000016f, + 0x00000170, + 0x00000171, + 0x00000172, + 0x00000173, + 0x00000174, + 0x00000175, + 0x00000176, + 0x00000177, + 0x00000178, + 0x00000179, + }, + { + 0x0000017d, + 0x00000181, + 0x00000183, + 0x00000184, + 0x00000185, + 0x00000186, + 0x00000187, + 0x00000188, + 0x00000189, + 0x0000018a, + 0x0000018b, + 0x0000018c, + 0x0000018d, + 0x0000018e, + 0x0000018f, + 0x00000190, + }, + { + 0x00000191, + 0x00000192, + 0x00000193, + 0x00000194, + 0x00000195, + 0x00000196, + 0x00000197, + 0x00000198, + 0x00000199, + 0x0000019a, + 0x0000019b, + 0x0000019c, + 0x0000019d, + 0x0000019e, + 0x0000019f, + 0x000001a0, + }, + { + 0x000001a1, + 0x000001a2, + 0x000001a3, + 0x000001a4, + 0x000001a5, + 0x000001a6, + 0x000001a7, + 0x000001a8, + 0x000001a9, + 0x000001aa, + 0x000001ab, + 0x000001ac, + 0x000001ad, + 0x000001ae, + 0x000001af, + 0x000001b0, + }, + { + 0x000001b1, + 0x000001b2, + 0x000001b3, + 0x000001b4, + 0x000001b5, + 0x000001b6, + 0x000001b7, + 0x000001b8, + 0x000001b9, + 0x000001ba, + 0x000001bb, + 0x000001bc, + 0x000001bd, + 0x000001be, + 0x000001bf, + 0x000001c0, + }, + { + 0x0044ffff, + 0x0045ffff, + 0x0046ffff, + 0x0047ffff, + 0x0048ffff, + 0x0049ffff, + 0x004affff, + 0x004bffff, + 0x004cffff, + 0x004dffff, + 0x004effff, + 0x004fffff, + 0x0050ffff, + 0x0051ffff, + 0x0052ffff, + 0x0053ffff, + }, + { + 0x000001c1, + 0x000001c2, + 0x000001c3, + 0x000001c4, + 0x000001c5, + 0x000001c6, + 0x000001c7, + 0x000001c8, + 0x000001c9, + 0x000001ca, + 0x000001cb, + 0x000001cc, + 0x000001cd, + 0x000001ce, + 0x000001cf, + 0x000001d0, + }, + { + 0x000001d1, + 0x000001d2, + 0x000001d3, + 0x000001d4, + 0x000001d5, + 0x000001d6, + 0x000001d7, + 0x000001d8, + 0x000001d9, + 0x000001da, + 0x000001db, + 0x000001dc, + 0x000001dd, + 0x000001de, + 0x000001df, + 0x000001e0, + }, + { + 0x000001e1, + 0x000001e2, + 0x000001e3, + 0x000001e4, + 0x000001e5, + 0x000001e6, + 0x000001e8, + 0x000001e9, + 0x000001ea, + 0x000001eb, + 0x000001ec, + 0x000001ed, + 0x000001ee, + 0x000001ef, + 0x000001f0, + 0x000001f1, + }, + { + 0x000001f2, + 0x000001f3, + 0x000001f4, + 0x000001f5, + 0x000001f6, + 0x000001f7, + 0x000001f8, + 0x000001f9, + 0x000001fa, + 0x000001fb, + 0x000001fc, + 0x000001fd, + 0x000001fe, + 0x000001ff, + 0x00000200, + 0x00000201, + }, + { + 0x00000202, + 0x00000203, + 0x00000204, + 0x00000205, + 0x00000206, + 0x00000207, + 0x00000208, + 0x00000209, + 0x0000020a, + 0x0000020b, + 0x0000020c, + 0x0000020d, + 0x0000020e, + 0x0000020f, + 0x00000210, + 0x00000211, + }, + { + 0x00000212, + 0x00000213, + 0x00000214, + 0x00000215, + 0x00000216, + 0x00000217, + 0x00000218, + 0x00000219, + 0x0000021a, + 0x0000021b, + 0x0000021c, + 0x0000021d, + 0x0000021e, + 0x0000021f, + 0x00000220, + 0x00000221, + }, + { + 0x00000222, + 0x00000223, + 0x00000224, + 0x00000225, + 0x00000226, + 0x00000227, + 0x00000228, + 0x00000229, + 0x0000022a, + 0x0000022b, + 0x0000022c, + 0x0000022d, + 0x0000022e, + 0x0000022f, + 0x00000230, + 0x00000231, + }, + { + 0x00000232, + 0x00000233, + 0x00000234, + 0x00000235, + 0x00000236, + 0x00000237, + 0x00000238, + 0x00000239, + 0x0000023a, + 0x0000023b, + 0x0000023c, + 0x0000023d, + 0x0000023e, + 0x0000023f, + 0x00000240, + 0x00000241, + }, + { + 0x00000242, + 0x00000243, + 0x00000244, + 0x00000245, + 0x00000246, + 0x00000247, + 0x00000248, + 0x00000249, + 0x0000024a, + 0x0000024b, + 0x0000024c, + 0x0000024d, + 0x0000024e, + 0x0000024f, + 0x00000250, + 0x00000251, + }, + { + 0x00000252, + 0x00000253, + 0x00000254, + 0x00000255, + 0x00000256, + 0x00000257, + 0x00000258, + 0x00000259, + 0x0000025a, + 0x0000025b, + 0x0000025c, + 0x0000025d, + 0x0000025e, + 0x0000025f, + 0x00000260, + 0x00000261, + }, + { + 0x00000262, + 0x00000263, + 0x00000264, + 0x00000265, + 0x00000266, + 0x00000267, + 0x00000268, + 0x00000269, + 0x0000026a, + 0x0000026b, + 0x0000026c, + 0x0000026d, + 0x0000026e, + 0x0000026f, + 0x00000270, + 0x00000271, + }, + { + 0x00000272, + 0x00000273, + 0x00000274, + 0x00000275, + 0x00000276, + 0x00000277, + 0x00000278, + 0x00000279, + 0x0000027a, + 0x0000027b, + 0x0000027c, + 0x0000027d, + 0x0000027e, + 0x0000027f, + 0x00000280, + 0x00000281, + }, + { + 0x00000282, + 0x00000283, + 0x00000284, + 0x00000285, + 0x00000286, + 0x00000287, + 0x00000288, + 0x00000289, + 0x0000028a, + 0x0000028b, + 0x0000028c, + 0x0000028d, + 0x0000028e, + 0x0000028f, + 0x00000290, + 0x00000291, + }, + { + 0x00000292, + 0x00000293, + 0x00000294, + 0x00000295, + 0x00000296, + 0x00000297, + 0x00000298, + 0x00000299, + 0x0000029a, + 0x0000029b, + 0x0000029c, + 0x0000029d, + 0x0000029e, + 0x0000029f, + 0x000002a0, + 0x000002a1, + }, + { + 0x000002a2, + 0x000002a3, + 0x000002a4, + 0x000002a5, + 0x000002a6, + 0x000002a7, + 0x000002a8, + 0x000002a9, + 0x000002aa, + 0x000002ab, + 0x000002ac, + 0x000002ad, + 0x000002ae, + 0x000002af, + 0x000002b0, + 0x000002b1, + }, + { + 0x000002b2, + 0x000002b3, + 0x000002b4, + 0x000002b5, + 0x000002b6, + 0x000002b7, + 0x000002b8, + 0x000002b9, + 0x000002ba, + 0x000002bb, + 0x000002bc, + 0x000002bd, + 0x000002be, + 0x000002bf, + 0x000002c0, + 0x000002c1, + }, + { + 0x000002c2, + 0x000002c3, + 0x000002c4, + 0x000002c5, + 0x000002c6, + 0x000002c7, + 0x000002c8, + 0x000002c9, + 0x000002ca, + 0x000002cb, + 0x000002cc, + 0x000002cd, + 0x000002ce, + 0x000002cf, + 0x000002d0, + 0x000002d1, + }, }; #endif @@ -1435,198 +14376,2415 @@ const uint32_t c_aauiCQMFHuffEnc17[729][2] = #else const uint16_t c_aauiCQMFHuffEnc17[729][2] = #endif -{ - {0x0006, 0x0012}, {0x0006, 0x0013}, {0x0006, 0x0014}, {0x0006, 0x0015}, {0x0007, 0x000f}, {0x0007, 0x0010}, {0x0007, 0x0011}, {0x0008, 0x000e}, - {0x0008, 0x000f}, {0x0009, 0x000f}, {0x000a, 0x000f}, {0x000c, 0x0011}, {0x000d, 0x0014}, {0x000e, 0x0017}, {0x0010, 0x002d}, {0x0011, 0x004c}, - {0x0012, 0x008a}, {0x0014, 0x0000}, {0x0014, 0x0001}, {0x0014, 0x0002}, {0x0014, 0x0003}, {0x0014, 0x0004}, {0x0014, 0x0005}, {0x0014, 0x0006}, - {0x0014, 0x0007}, {0x0014, 0x0008}, {0x0014, 0x0009}, {0x0006, 0x0016}, {0x0005, 0x0018}, {0x0005, 0x0019}, {0x0005, 0x001a}, {0x0006, 0x0017}, - {0x0006, 0x0018}, {0x0006, 0x0019}, {0x0007, 0x0012}, {0x0007, 0x0013}, {0x0008, 0x0010}, {0x000a, 0x0010}, {0x000b, 0x0011}, {0x000c, 0x0012}, - {0x000e, 0x0018}, {0x000f, 0x0020}, {0x0011, 0x004d}, {0x0013, 0x00e4}, {0x0014, 0x000a}, {0x0014, 0x000b}, {0x0014, 0x000c}, {0x0014, 0x000d}, - {0x0014, 0x000e}, {0x0014, 0x000f}, {0x0014, 0x0010}, {0x0014, 0x0011}, {0x0014, 0x0012}, {0x0014, 0x0013}, {0x0006, 0x001a}, {0x0005, 0x001b}, - {0x0005, 0x001c}, {0x0005, 0x001d}, {0x0006, 0x001b}, {0x0006, 0x001c}, {0x0006, 0x001d}, {0x0007, 0x0014}, {0x0008, 0x0011}, {0x0009, 0x0010}, - {0x000a, 0x0011}, {0x000b, 0x0012}, {0x000c, 0x0013}, {0x000e, 0x0019}, {0x000f, 0x0021}, {0x0010, 0x002e}, {0x0013, 0x00e5}, {0x0013, 0x00e6}, - {0x0014, 0x0014}, {0x0014, 0x0015}, {0x0014, 0x0016}, {0x0014, 0x0017}, {0x0014, 0x0018}, {0x0014, 0x0019}, {0x0014, 0x001a}, {0x0014, 0x001b}, - {0x0014, 0x001c}, {0x0006, 0x001e}, {0x0005, 0x001e}, {0x0005, 0x001f}, {0x0006, 0x001f}, {0x0006, 0x0020}, {0x0006, 0x0021}, {0x0006, 0x0022}, - {0x0007, 0x0015}, {0x0008, 0x0012}, {0x0009, 0x0011}, {0x000a, 0x0012}, {0x000b, 0x0013}, {0x000c, 0x0014}, {0x000e, 0x001a}, {0x000f, 0x0022}, - {0x0010, 0x002f}, {0x0013, 0x00e7}, {0x0013, 0x00e8}, {0x0014, 0x001d}, {0x0014, 0x001e}, {0x0014, 0x001f}, {0x0014, 0x0020}, {0x0014, 0x0021}, - {0x0014, 0x0022}, {0x0014, 0x0023}, {0x0014, 0x0024}, {0x0014, 0x0025}, {0x0006, 0x0023}, {0x0006, 0x0024}, {0x0006, 0x0025}, {0x0006, 0x0026}, - {0x0006, 0x0027}, {0x0006, 0x0028}, {0x0007, 0x0016}, {0x0007, 0x0017}, {0x0008, 0x0013}, {0x0009, 0x0012}, {0x000a, 0x0013}, {0x000c, 0x0015}, - {0x000d, 0x0015}, {0x000f, 0x0023}, {0x0010, 0x0030}, {0x0011, 0x004e}, {0x0014, 0x0026}, {0x0014, 0x0027}, {0x0014, 0x0028}, {0x0014, 0x0029}, - {0x0014, 0x002a}, {0x0014, 0x002b}, {0x0014, 0x002c}, {0x0014, 0x002d}, {0x0014, 0x002e}, {0x0014, 0x002f}, {0x0014, 0x0030}, {0x0007, 0x0018}, - {0x0006, 0x0029}, {0x0006, 0x002a}, {0x0006, 0x002b}, {0x0006, 0x002c}, {0x0007, 0x0019}, {0x0007, 0x001a}, {0x0008, 0x0014}, {0x0009, 0x0013}, - {0x000a, 0x0014}, {0x000b, 0x0014}, {0x000c, 0x0016}, {0x000d, 0x0016}, {0x000f, 0x0024}, {0x0010, 0x0031}, {0x0011, 0x004f}, {0x0014, 0x0031}, - {0x0014, 0x0032}, {0x0014, 0x0033}, {0x0014, 0x0034}, {0x0014, 0x0035}, {0x0014, 0x0036}, {0x0014, 0x0037}, {0x0014, 0x0038}, {0x0014, 0x0039}, - {0x0014, 0x003a}, {0x0014, 0x003b}, {0x0007, 0x001b}, {0x0006, 0x002d}, {0x0006, 0x002e}, {0x0006, 0x002f}, {0x0007, 0x001c}, {0x0007, 0x001d}, - {0x0008, 0x0015}, {0x0009, 0x0014}, {0x000a, 0x0015}, {0x000a, 0x0016}, {0x000c, 0x0017}, {0x000d, 0x0017}, {0x000e, 0x001b}, {0x000f, 0x0025}, - {0x0011, 0x0050}, {0x0011, 0x0051}, {0x0014, 0x003c}, {0x0014, 0x003d}, {0x0014, 0x003e}, {0x0014, 0x003f}, {0x0014, 0x0040}, {0x0014, 0x0041}, - {0x0014, 0x0042}, {0x0014, 0x0043}, {0x0014, 0x0044}, {0x0014, 0x0045}, {0x0014, 0x0046}, {0x0008, 0x0016}, {0x0007, 0x001e}, {0x0007, 0x001f}, - {0x0007, 0x0020}, {0x0007, 0x0021}, {0x0008, 0x0017}, {0x0008, 0x0018}, {0x0009, 0x0015}, {0x000a, 0x0017}, {0x000b, 0x0015}, {0x000c, 0x0018}, - {0x000e, 0x001c}, {0x000e, 0x001d}, {0x0010, 0x0032}, {0x0012, 0x008b}, {0x0012, 0x008c}, {0x0014, 0x0047}, {0x0014, 0x0048}, {0x0014, 0x0049}, - {0x0014, 0x004a}, {0x0014, 0x004b}, {0x0014, 0x004c}, {0x0014, 0x004d}, {0x0014, 0x004e}, {0x0014, 0x004f}, {0x0014, 0x0050}, {0x0014, 0x0051}, - {0x0008, 0x0019}, {0x0007, 0x0022}, {0x0007, 0x0023}, {0x0008, 0x001a}, {0x0008, 0x001b}, {0x0009, 0x0016}, {0x0009, 0x0017}, {0x000a, 0x0018}, - {0x000b, 0x0016}, {0x000c, 0x0019}, {0x000d, 0x0018}, {0x000e, 0x001e}, {0x0010, 0x0033}, {0x0011, 0x0052}, {0x0014, 0x0052}, {0x0013, 0x00e9}, - {0x0014, 0x0053}, {0x0014, 0x0054}, {0x0014, 0x0055}, {0x0014, 0x0056}, {0x0014, 0x0057}, {0x0014, 0x0058}, {0x0014, 0x0059}, {0x0014, 0x005a}, - {0x0014, 0x005b}, {0x0014, 0x005c}, {0x0014, 0x005d}, {0x0009, 0x0018}, {0x0008, 0x001c}, {0x0008, 0x001d}, {0x0009, 0x0019}, {0x0009, 0x001a}, - {0x000a, 0x0019}, {0x000a, 0x001a}, {0x000b, 0x0017}, {0x000c, 0x001a}, {0x000d, 0x0019}, {0x000e, 0x001f}, {0x000f, 0x0026}, {0x0010, 0x0034}, - {0x0012, 0x008d}, {0x0013, 0x00ea}, {0x0014, 0x005e}, {0x0014, 0x005f}, {0x0014, 0x0060}, {0x0014, 0x0061}, {0x0014, 0x0062}, {0x0014, 0x0063}, - {0x0014, 0x0064}, {0x0014, 0x0065}, {0x0014, 0x0066}, {0x0014, 0x0067}, {0x0014, 0x0068}, {0x0014, 0x0069}, {0x000b, 0x0018}, {0x0009, 0x001b}, - {0x000a, 0x001b}, {0x000a, 0x001c}, {0x000a, 0x001d}, {0x000b, 0x0019}, {0x000b, 0x001a}, {0x000c, 0x001b}, {0x000d, 0x001a}, {0x000e, 0x0020}, - {0x000f, 0x0027}, {0x0012, 0x008e}, {0x0011, 0x0053}, {0x0013, 0x00eb}, {0x0014, 0x006a}, {0x0014, 0x006b}, {0x0014, 0x006c}, {0x0014, 0x006d}, - {0x0014, 0x006e}, {0x0014, 0x006f}, {0x0014, 0x0070}, {0x0014, 0x0071}, {0x0014, 0x0072}, {0x0014, 0x0073}, {0x0014, 0x0074}, {0x0014, 0x0075}, - {0x0014, 0x0076}, {0x000c, 0x001c}, {0x000b, 0x001b}, {0x000b, 0x001c}, {0x000b, 0x001d}, {0x000c, 0x001d}, {0x000c, 0x001e}, {0x000d, 0x001b}, - {0x000d, 0x001c}, {0x000e, 0x0021}, {0x0010, 0x0035}, {0x0010, 0x0036}, {0x0011, 0x0054}, {0x0013, 0x00ec}, {0x0014, 0x0077}, {0x0014, 0x0078}, - {0x0014, 0x0079}, {0x0014, 0x007a}, {0x0014, 0x007b}, {0x0014, 0x007c}, {0x0014, 0x007d}, {0x0014, 0x007e}, {0x0014, 0x007f}, {0x0014, 0x0080}, - {0x0014, 0x0081}, {0x0014, 0x0082}, {0x0014, 0x0083}, {0x0014, 0x0084}, {0x000d, 0x001d}, {0x000c, 0x001f}, {0x000c, 0x0020}, {0x000c, 0x0021}, - {0x000d, 0x001e}, {0x000d, 0x001f}, {0x000e, 0x0022}, {0x000f, 0x0028}, {0x0010, 0x0037}, {0x0010, 0x0038}, {0x0010, 0x0039}, {0x0012, 0x008f}, - {0x0013, 0x00ed}, {0x0014, 0x0085}, {0x0014, 0x0086}, {0x0014, 0x0087}, {0x0014, 0x0088}, {0x0014, 0x0089}, {0x0014, 0x008a}, {0x0014, 0x008b}, - {0x0014, 0x008c}, {0x0014, 0x008d}, {0x0014, 0x008e}, {0x0014, 0x008f}, {0x0014, 0x0090}, {0x0014, 0x0091}, {0x0014, 0x0092}, {0x000e, 0x0023}, - {0x000d, 0x0020}, {0x000d, 0x0021}, {0x000e, 0x0024}, {0x000e, 0x0025}, {0x000e, 0x0026}, {0x000f, 0x0029}, {0x0010, 0x003a}, {0x0010, 0x003b}, - {0x0012, 0x0090}, {0x0014, 0x0093}, {0x0014, 0x0094}, {0x0014, 0x0095}, {0x0014, 0x0096}, {0x0014, 0x0097}, {0x0014, 0x0098}, {0x0014, 0x0099}, - {0x0014, 0x009a}, {0x0014, 0x009b}, {0x0014, 0x009c}, {0x0014, 0x009d}, {0x0014, 0x009e}, {0x0014, 0x009f}, {0x0014, 0x00a0}, {0x0014, 0x00a1}, - {0x0014, 0x00a2}, {0x0014, 0x00a3}, {0x000f, 0x002a}, {0x000e, 0x0027}, {0x000f, 0x002b}, {0x000f, 0x002c}, {0x000f, 0x002d}, {0x0010, 0x003c}, - {0x0010, 0x003d}, {0x0011, 0x0055}, {0x0011, 0x0056}, {0x0014, 0x00a4}, {0x0014, 0x00a5}, {0x0014, 0x00a6}, {0x0014, 0x00a7}, {0x0014, 0x00a8}, - {0x0014, 0x00a9}, {0x0014, 0x00aa}, {0x0014, 0x00ab}, {0x0014, 0x00ac}, {0x0014, 0x00ad}, {0x0014, 0x00ae}, {0x0014, 0x00af}, {0x0014, 0x00b0}, - {0x0014, 0x00b1}, {0x0014, 0x00b2}, {0x0014, 0x00b3}, {0x0014, 0x00b4}, {0x0014, 0x00b5}, {0x0012, 0x0091}, {0x0010, 0x003e}, {0x0010, 0x003f}, - {0x0011, 0x0057}, {0x0011, 0x0058}, {0x0011, 0x0059}, {0x0012, 0x0092}, {0x0013, 0x00ee}, {0x0013, 0x00ef}, {0x0012, 0x0093}, {0x0014, 0x00b6}, - {0x0014, 0x00b7}, {0x0014, 0x00b8}, {0x0014, 0x00b9}, {0x0014, 0x00ba}, {0x0014, 0x00bb}, {0x0014, 0x00bc}, {0x0014, 0x00bd}, {0x0014, 0x00be}, - {0x0014, 0x00bf}, {0x0014, 0x00c0}, {0x0014, 0x00c1}, {0x0014, 0x00c2}, {0x0014, 0x00c3}, {0x0014, 0x00c4}, {0x0014, 0x00c5}, {0x0014, 0x00c6}, - {0x0013, 0x00f0}, {0x0012, 0x0094}, {0x0012, 0x0095}, {0x0012, 0x0096}, {0x0014, 0x00c7}, {0x0014, 0x00c8}, {0x0014, 0x00c9}, {0x0014, 0x00ca}, - {0x0014, 0x00cb}, {0x0014, 0x00cc}, {0x0014, 0x00cd}, {0x0014, 0x00ce}, {0x0014, 0x00cf}, {0x0014, 0x00d0}, {0x0014, 0x00d1}, {0x0014, 0x00d2}, - {0x0014, 0x00d3}, {0x0014, 0x00d4}, {0x0014, 0x00d5}, {0x0014, 0x00d6}, {0x0014, 0x00d7}, {0x0014, 0x00d8}, {0x0014, 0x00d9}, {0x0014, 0x00da}, - {0x0014, 0x00db}, {0x0014, 0x00dc}, {0x0014, 0x00dd}, {0x0014, 0x00de}, {0x0012, 0x0097}, {0x0014, 0x00df}, {0x0014, 0x00e0}, {0x0014, 0x00e1}, - {0x0014, 0x00e2}, {0x0014, 0x00e3}, {0x0014, 0x00e4}, {0x0014, 0x00e5}, {0x0014, 0x00e6}, {0x0014, 0x00e7}, {0x0014, 0x00e8}, {0x0014, 0x00e9}, - {0x0014, 0x00ea}, {0x0014, 0x00eb}, {0x0014, 0x00ec}, {0x0014, 0x00ed}, {0x0014, 0x00ee}, {0x0014, 0x00ef}, {0x0014, 0x00f0}, {0x0014, 0x00f1}, - {0x0014, 0x00f2}, {0x0014, 0x00f3}, {0x0014, 0x00f4}, {0x0014, 0x00f5}, {0x0014, 0x00f6}, {0x0014, 0x00f7}, {0x0014, 0x00f8}, {0x0014, 0x00f9}, - {0x0014, 0x00fa}, {0x0014, 0x00fb}, {0x0014, 0x00fc}, {0x0014, 0x00fd}, {0x0014, 0x00fe}, {0x0014, 0x00ff}, {0x0014, 0x0100}, {0x0014, 0x0101}, - {0x0014, 0x0102}, {0x0014, 0x0103}, {0x0014, 0x0104}, {0x0014, 0x0105}, {0x0014, 0x0106}, {0x0014, 0x0107}, {0x0014, 0x0108}, {0x0014, 0x0109}, - {0x0014, 0x010a}, {0x0014, 0x010b}, {0x0014, 0x010c}, {0x0014, 0x010d}, {0x0014, 0x010e}, {0x0014, 0x010f}, {0x0014, 0x0110}, {0x0014, 0x0111}, - {0x0014, 0x0112}, {0x0014, 0x0113}, {0x0014, 0x0114}, {0x0014, 0x0115}, {0x0014, 0x0116}, {0x0014, 0x0117}, {0x0014, 0x0118}, {0x0014, 0x0119}, - {0x0014, 0x011a}, {0x0014, 0x011b}, {0x0014, 0x011c}, {0x0014, 0x011d}, {0x0014, 0x011e}, {0x0014, 0x011f}, {0x0014, 0x0120}, {0x0014, 0x0121}, - {0x0014, 0x0122}, {0x0014, 0x0123}, {0x0014, 0x0124}, {0x0014, 0x0125}, {0x0014, 0x0126}, {0x0014, 0x0127}, {0x0014, 0x0128}, {0x0014, 0x0129}, - {0x0014, 0x012a}, {0x0014, 0x012b}, {0x0014, 0x012c}, {0x0014, 0x012d}, {0x0014, 0x012e}, {0x0014, 0x012f}, {0x0014, 0x0130}, {0x0014, 0x0131}, - {0x0014, 0x0132}, {0x0014, 0x0133}, {0x0014, 0x0134}, {0x0014, 0x0135}, {0x0014, 0x0136}, {0x0014, 0x0137}, {0x0014, 0x0138}, {0x0014, 0x0139}, - {0x0014, 0x013a}, {0x0014, 0x013b}, {0x0014, 0x013c}, {0x0014, 0x013d}, {0x0014, 0x013e}, {0x0014, 0x013f}, {0x0014, 0x0140}, {0x0014, 0x0141}, - {0x0014, 0x0142}, {0x0014, 0x0143}, {0x0014, 0x0144}, {0x0014, 0x0145}, {0x0014, 0x0146}, {0x0014, 0x0147}, {0x0014, 0x0148}, {0x0014, 0x0149}, - {0x0014, 0x014a}, {0x0014, 0x014b}, {0x0014, 0x014c}, {0x0014, 0x014d}, {0x0014, 0x014e}, {0x0014, 0x014f}, {0x0014, 0x0150}, {0x0014, 0x0151}, - {0x0014, 0x0152}, {0x0014, 0x0153}, {0x0014, 0x0154}, {0x0014, 0x0155}, {0x0014, 0x0156}, {0x0014, 0x0157}, {0x0014, 0x0158}, {0x0014, 0x0159}, - {0x0014, 0x015a}, {0x0014, 0x015b}, {0x0014, 0x015c}, {0x0014, 0x015d}, {0x0014, 0x015e}, {0x0014, 0x015f}, {0x0014, 0x0160}, {0x0014, 0x0161}, - {0x0014, 0x0162}, {0x0014, 0x0163}, {0x0014, 0x0164}, {0x0014, 0x0165}, {0x0014, 0x0166}, {0x0014, 0x0167}, {0x0014, 0x0168}, {0x0014, 0x0169}, - {0x0014, 0x016a}, {0x0014, 0x016b}, {0x0014, 0x016c}, {0x0014, 0x016d}, {0x0014, 0x016e}, {0x0014, 0x016f}, {0x0014, 0x0170}, {0x0014, 0x0171}, - {0x0014, 0x0172}, {0x0014, 0x0173}, {0x0014, 0x0174}, {0x0014, 0x0175}, {0x0014, 0x0176}, {0x0014, 0x0177}, {0x0014, 0x0178}, {0x0014, 0x0179}, - {0x0014, 0x017a}, {0x0014, 0x017b}, {0x0014, 0x017c}, {0x0014, 0x017d}, {0x0014, 0x017e}, {0x0014, 0x017f}, {0x0014, 0x0180}, {0x0014, 0x0181}, - {0x0014, 0x0182}, {0x0014, 0x0183}, {0x0014, 0x0184}, {0x0014, 0x0185}, {0x0014, 0x0186}, {0x0014, 0x0187}, {0x0014, 0x0188}, {0x0014, 0x0189}, - {0x0014, 0x018a}, {0x0014, 0x018b}, {0x0014, 0x018c}, {0x0014, 0x018d}, {0x0014, 0x018e}, {0x0014, 0x018f}, {0x0014, 0x0190}, {0x0014, 0x0191}, - {0x0014, 0x0192}, {0x0014, 0x0193}, {0x0014, 0x0194}, {0x0014, 0x0195}, {0x0014, 0x0196}, {0x0014, 0x0197}, {0x0014, 0x0198}, {0x0014, 0x0199}, - {0x0014, 0x019a}, {0x0014, 0x019b}, {0x0014, 0x019c}, {0x0014, 0x019d}, {0x0014, 0x019e}, {0x0014, 0x019f}, {0x0014, 0x01a0}, {0x0014, 0x01a1}, - {0x0014, 0x01a2}, {0x0014, 0x01a3}, {0x0014, 0x01a4}, {0x0014, 0x01a5}, {0x0014, 0x01a6}, {0x0014, 0x01a7}, {0x0014, 0x01a8}, {0x0014, 0x01a9}, - {0x0014, 0x01aa}, {0x0014, 0x01ab}, {0x0014, 0x01ac}, {0x0014, 0x01ad}, {0x0014, 0x01ae}, {0x0014, 0x01af}, {0x0014, 0x01b0}, {0x0014, 0x01b1}, - {0x0014, 0x01b2}, {0x0014, 0x01b3}, {0x0014, 0x01b4}, {0x0014, 0x01b5}, {0x0014, 0x01b6}, {0x0014, 0x01b7}, {0x0014, 0x01b8}, {0x0014, 0x01b9}, - {0x0014, 0x01ba}, {0x0014, 0x01bb}, {0x0014, 0x01bc}, {0x0014, 0x01bd}, {0x0014, 0x01be}, {0x0014, 0x01bf}, {0x0014, 0x01c0}, {0x0014, 0x01c1}, - {0x0014, 0x01c2}, {0x0014, 0x01c3}, {0x0014, 0x01c4}, {0x0014, 0x01c5}, {0x0014, 0x01c6}, {0x0014, 0x01c7}, {0x0013, 0x00f1}, {0x0013, 0x00f2}, - {0x0013, 0x00f3}, {0x0013, 0x00f4}, {0x0013, 0x00f5}, {0x0013, 0x00f6}, {0x0013, 0x00f7}, {0x0013, 0x00f8}, {0x0013, 0x00f9}, {0x0013, 0x00fa}, - {0x0013, 0x00fb}, {0x0013, 0x00fc}, {0x0013, 0x00fd}, {0x0013, 0x00fe}, {0x0013, 0x00ff}, {0x0013, 0x0100}, {0x0013, 0x0101}, {0x0013, 0x0102}, - {0x0013, 0x0103}, {0x0013, 0x0104}, {0x0013, 0x0105}, {0x0013, 0x0106}, {0x0013, 0x0107}, {0x0013, 0x0108}, {0x0013, 0x0109}, {0x0013, 0x010a}, - {0x0013, 0x010b}, {0x0013, 0x010c}, {0x0013, 0x010d}, {0x0013, 0x010e}, {0x0013, 0x010f}, {0x0013, 0x0110}, {0x0013, 0x0111}, {0x0013, 0x0112}, - {0x0013, 0x0113}, + { + { 0x0006, 0x0012 }, + { 0x0006, 0x0013 }, + { 0x0006, 0x0014 }, + { 0x0006, 0x0015 }, + { 0x0007, 0x000f }, + { 0x0007, 0x0010 }, + { 0x0007, 0x0011 }, + { 0x0008, 0x000e }, + { 0x0008, 0x000f }, + { 0x0009, 0x000f }, + { 0x000a, 0x000f }, + { 0x000c, 0x0011 }, + { 0x000d, 0x0014 }, + { 0x000e, 0x0017 }, + { 0x0010, 0x002d }, + { 0x0011, 0x004c }, + { 0x0012, 0x008a }, + { 0x0014, 0x0000 }, + { 0x0014, 0x0001 }, + { 0x0014, 0x0002 }, + { 0x0014, 0x0003 }, + { 0x0014, 0x0004 }, + { 0x0014, 0x0005 }, + { 0x0014, 0x0006 }, + { 0x0014, 0x0007 }, + { 0x0014, 0x0008 }, + { 0x0014, 0x0009 }, + { 0x0006, 0x0016 }, + { 0x0005, 0x0018 }, + { 0x0005, 0x0019 }, + { 0x0005, 0x001a }, + { 0x0006, 0x0017 }, + { 0x0006, 0x0018 }, + { 0x0006, 0x0019 }, + { 0x0007, 0x0012 }, + { 0x0007, 0x0013 }, + { 0x0008, 0x0010 }, + { 0x000a, 0x0010 }, + { 0x000b, 0x0011 }, + { 0x000c, 0x0012 }, + { 0x000e, 0x0018 }, + { 0x000f, 0x0020 }, + { 0x0011, 0x004d }, + { 0x0013, 0x00e4 }, + { 0x0014, 0x000a }, + { 0x0014, 0x000b }, + { 0x0014, 0x000c }, + { 0x0014, 0x000d }, + { 0x0014, 0x000e }, + { 0x0014, 0x000f }, + { 0x0014, 0x0010 }, + { 0x0014, 0x0011 }, + { 0x0014, 0x0012 }, + { 0x0014, 0x0013 }, + { 0x0006, 0x001a }, + { 0x0005, 0x001b }, + { 0x0005, 0x001c }, + { 0x0005, 0x001d }, + { 0x0006, 0x001b }, + { 0x0006, 0x001c }, + { 0x0006, 0x001d }, + { 0x0007, 0x0014 }, + { 0x0008, 0x0011 }, + { 0x0009, 0x0010 }, + { 0x000a, 0x0011 }, + { 0x000b, 0x0012 }, + { 0x000c, 0x0013 }, + { 0x000e, 0x0019 }, + { 0x000f, 0x0021 }, + { 0x0010, 0x002e }, + { 0x0013, 0x00e5 }, + { 0x0013, 0x00e6 }, + { 0x0014, 0x0014 }, + { 0x0014, 0x0015 }, + { 0x0014, 0x0016 }, + { 0x0014, 0x0017 }, + { 0x0014, 0x0018 }, + { 0x0014, 0x0019 }, + { 0x0014, 0x001a }, + { 0x0014, 0x001b }, + { 0x0014, 0x001c }, + { 0x0006, 0x001e }, + { 0x0005, 0x001e }, + { 0x0005, 0x001f }, + { 0x0006, 0x001f }, + { 0x0006, 0x0020 }, + { 0x0006, 0x0021 }, + { 0x0006, 0x0022 }, + { 0x0007, 0x0015 }, + { 0x0008, 0x0012 }, + { 0x0009, 0x0011 }, + { 0x000a, 0x0012 }, + { 0x000b, 0x0013 }, + { 0x000c, 0x0014 }, + { 0x000e, 0x001a }, + { 0x000f, 0x0022 }, + { 0x0010, 0x002f }, + { 0x0013, 0x00e7 }, + { 0x0013, 0x00e8 }, + { 0x0014, 0x001d }, + { 0x0014, 0x001e }, + { 0x0014, 0x001f }, + { 0x0014, 0x0020 }, + { 0x0014, 0x0021 }, + { 0x0014, 0x0022 }, + { 0x0014, 0x0023 }, + { 0x0014, 0x0024 }, + { 0x0014, 0x0025 }, + { 0x0006, 0x0023 }, + { 0x0006, 0x0024 }, + { 0x0006, 0x0025 }, + { 0x0006, 0x0026 }, + { 0x0006, 0x0027 }, + { 0x0006, 0x0028 }, + { 0x0007, 0x0016 }, + { 0x0007, 0x0017 }, + { 0x0008, 0x0013 }, + { 0x0009, 0x0012 }, + { 0x000a, 0x0013 }, + { 0x000c, 0x0015 }, + { 0x000d, 0x0015 }, + { 0x000f, 0x0023 }, + { 0x0010, 0x0030 }, + { 0x0011, 0x004e }, + { 0x0014, 0x0026 }, + { 0x0014, 0x0027 }, + { 0x0014, 0x0028 }, + { 0x0014, 0x0029 }, + { 0x0014, 0x002a }, + { 0x0014, 0x002b }, + { 0x0014, 0x002c }, + { 0x0014, 0x002d }, + { 0x0014, 0x002e }, + { 0x0014, 0x002f }, + { 0x0014, 0x0030 }, + { 0x0007, 0x0018 }, + { 0x0006, 0x0029 }, + { 0x0006, 0x002a }, + { 0x0006, 0x002b }, + { 0x0006, 0x002c }, + { 0x0007, 0x0019 }, + { 0x0007, 0x001a }, + { 0x0008, 0x0014 }, + { 0x0009, 0x0013 }, + { 0x000a, 0x0014 }, + { 0x000b, 0x0014 }, + { 0x000c, 0x0016 }, + { 0x000d, 0x0016 }, + { 0x000f, 0x0024 }, + { 0x0010, 0x0031 }, + { 0x0011, 0x004f }, + { 0x0014, 0x0031 }, + { 0x0014, 0x0032 }, + { 0x0014, 0x0033 }, + { 0x0014, 0x0034 }, + { 0x0014, 0x0035 }, + { 0x0014, 0x0036 }, + { 0x0014, 0x0037 }, + { 0x0014, 0x0038 }, + { 0x0014, 0x0039 }, + { 0x0014, 0x003a }, + { 0x0014, 0x003b }, + { 0x0007, 0x001b }, + { 0x0006, 0x002d }, + { 0x0006, 0x002e }, + { 0x0006, 0x002f }, + { 0x0007, 0x001c }, + { 0x0007, 0x001d }, + { 0x0008, 0x0015 }, + { 0x0009, 0x0014 }, + { 0x000a, 0x0015 }, + { 0x000a, 0x0016 }, + { 0x000c, 0x0017 }, + { 0x000d, 0x0017 }, + { 0x000e, 0x001b }, + { 0x000f, 0x0025 }, + { 0x0011, 0x0050 }, + { 0x0011, 0x0051 }, + { 0x0014, 0x003c }, + { 0x0014, 0x003d }, + { 0x0014, 0x003e }, + { 0x0014, 0x003f }, + { 0x0014, 0x0040 }, + { 0x0014, 0x0041 }, + { 0x0014, 0x0042 }, + { 0x0014, 0x0043 }, + { 0x0014, 0x0044 }, + { 0x0014, 0x0045 }, + { 0x0014, 0x0046 }, + { 0x0008, 0x0016 }, + { 0x0007, 0x001e }, + { 0x0007, 0x001f }, + { 0x0007, 0x0020 }, + { 0x0007, 0x0021 }, + { 0x0008, 0x0017 }, + { 0x0008, 0x0018 }, + { 0x0009, 0x0015 }, + { 0x000a, 0x0017 }, + { 0x000b, 0x0015 }, + { 0x000c, 0x0018 }, + { 0x000e, 0x001c }, + { 0x000e, 0x001d }, + { 0x0010, 0x0032 }, + { 0x0012, 0x008b }, + { 0x0012, 0x008c }, + { 0x0014, 0x0047 }, + { 0x0014, 0x0048 }, + { 0x0014, 0x0049 }, + { 0x0014, 0x004a }, + { 0x0014, 0x004b }, + { 0x0014, 0x004c }, + { 0x0014, 0x004d }, + { 0x0014, 0x004e }, + { 0x0014, 0x004f }, + { 0x0014, 0x0050 }, + { 0x0014, 0x0051 }, + { 0x0008, 0x0019 }, + { 0x0007, 0x0022 }, + { 0x0007, 0x0023 }, + { 0x0008, 0x001a }, + { 0x0008, 0x001b }, + { 0x0009, 0x0016 }, + { 0x0009, 0x0017 }, + { 0x000a, 0x0018 }, + { 0x000b, 0x0016 }, + { 0x000c, 0x0019 }, + { 0x000d, 0x0018 }, + { 0x000e, 0x001e }, + { 0x0010, 0x0033 }, + { 0x0011, 0x0052 }, + { 0x0014, 0x0052 }, + { 0x0013, 0x00e9 }, + { 0x0014, 0x0053 }, + { 0x0014, 0x0054 }, + { 0x0014, 0x0055 }, + { 0x0014, 0x0056 }, + { 0x0014, 0x0057 }, + { 0x0014, 0x0058 }, + { 0x0014, 0x0059 }, + { 0x0014, 0x005a }, + { 0x0014, 0x005b }, + { 0x0014, 0x005c }, + { 0x0014, 0x005d }, + { 0x0009, 0x0018 }, + { 0x0008, 0x001c }, + { 0x0008, 0x001d }, + { 0x0009, 0x0019 }, + { 0x0009, 0x001a }, + { 0x000a, 0x0019 }, + { 0x000a, 0x001a }, + { 0x000b, 0x0017 }, + { 0x000c, 0x001a }, + { 0x000d, 0x0019 }, + { 0x000e, 0x001f }, + { 0x000f, 0x0026 }, + { 0x0010, 0x0034 }, + { 0x0012, 0x008d }, + { 0x0013, 0x00ea }, + { 0x0014, 0x005e }, + { 0x0014, 0x005f }, + { 0x0014, 0x0060 }, + { 0x0014, 0x0061 }, + { 0x0014, 0x0062 }, + { 0x0014, 0x0063 }, + { 0x0014, 0x0064 }, + { 0x0014, 0x0065 }, + { 0x0014, 0x0066 }, + { 0x0014, 0x0067 }, + { 0x0014, 0x0068 }, + { 0x0014, 0x0069 }, + { 0x000b, 0x0018 }, + { 0x0009, 0x001b }, + { 0x000a, 0x001b }, + { 0x000a, 0x001c }, + { 0x000a, 0x001d }, + { 0x000b, 0x0019 }, + { 0x000b, 0x001a }, + { 0x000c, 0x001b }, + { 0x000d, 0x001a }, + { 0x000e, 0x0020 }, + { 0x000f, 0x0027 }, + { 0x0012, 0x008e }, + { 0x0011, 0x0053 }, + { 0x0013, 0x00eb }, + { 0x0014, 0x006a }, + { 0x0014, 0x006b }, + { 0x0014, 0x006c }, + { 0x0014, 0x006d }, + { 0x0014, 0x006e }, + { 0x0014, 0x006f }, + { 0x0014, 0x0070 }, + { 0x0014, 0x0071 }, + { 0x0014, 0x0072 }, + { 0x0014, 0x0073 }, + { 0x0014, 0x0074 }, + { 0x0014, 0x0075 }, + { 0x0014, 0x0076 }, + { 0x000c, 0x001c }, + { 0x000b, 0x001b }, + { 0x000b, 0x001c }, + { 0x000b, 0x001d }, + { 0x000c, 0x001d }, + { 0x000c, 0x001e }, + { 0x000d, 0x001b }, + { 0x000d, 0x001c }, + { 0x000e, 0x0021 }, + { 0x0010, 0x0035 }, + { 0x0010, 0x0036 }, + { 0x0011, 0x0054 }, + { 0x0013, 0x00ec }, + { 0x0014, 0x0077 }, + { 0x0014, 0x0078 }, + { 0x0014, 0x0079 }, + { 0x0014, 0x007a }, + { 0x0014, 0x007b }, + { 0x0014, 0x007c }, + { 0x0014, 0x007d }, + { 0x0014, 0x007e }, + { 0x0014, 0x007f }, + { 0x0014, 0x0080 }, + { 0x0014, 0x0081 }, + { 0x0014, 0x0082 }, + { 0x0014, 0x0083 }, + { 0x0014, 0x0084 }, + { 0x000d, 0x001d }, + { 0x000c, 0x001f }, + { 0x000c, 0x0020 }, + { 0x000c, 0x0021 }, + { 0x000d, 0x001e }, + { 0x000d, 0x001f }, + { 0x000e, 0x0022 }, + { 0x000f, 0x0028 }, + { 0x0010, 0x0037 }, + { 0x0010, 0x0038 }, + { 0x0010, 0x0039 }, + { 0x0012, 0x008f }, + { 0x0013, 0x00ed }, + { 0x0014, 0x0085 }, + { 0x0014, 0x0086 }, + { 0x0014, 0x0087 }, + { 0x0014, 0x0088 }, + { 0x0014, 0x0089 }, + { 0x0014, 0x008a }, + { 0x0014, 0x008b }, + { 0x0014, 0x008c }, + { 0x0014, 0x008d }, + { 0x0014, 0x008e }, + { 0x0014, 0x008f }, + { 0x0014, 0x0090 }, + { 0x0014, 0x0091 }, + { 0x0014, 0x0092 }, + { 0x000e, 0x0023 }, + { 0x000d, 0x0020 }, + { 0x000d, 0x0021 }, + { 0x000e, 0x0024 }, + { 0x000e, 0x0025 }, + { 0x000e, 0x0026 }, + { 0x000f, 0x0029 }, + { 0x0010, 0x003a }, + { 0x0010, 0x003b }, + { 0x0012, 0x0090 }, + { 0x0014, 0x0093 }, + { 0x0014, 0x0094 }, + { 0x0014, 0x0095 }, + { 0x0014, 0x0096 }, + { 0x0014, 0x0097 }, + { 0x0014, 0x0098 }, + { 0x0014, 0x0099 }, + { 0x0014, 0x009a }, + { 0x0014, 0x009b }, + { 0x0014, 0x009c }, + { 0x0014, 0x009d }, + { 0x0014, 0x009e }, + { 0x0014, 0x009f }, + { 0x0014, 0x00a0 }, + { 0x0014, 0x00a1 }, + { 0x0014, 0x00a2 }, + { 0x0014, 0x00a3 }, + { 0x000f, 0x002a }, + { 0x000e, 0x0027 }, + { 0x000f, 0x002b }, + { 0x000f, 0x002c }, + { 0x000f, 0x002d }, + { 0x0010, 0x003c }, + { 0x0010, 0x003d }, + { 0x0011, 0x0055 }, + { 0x0011, 0x0056 }, + { 0x0014, 0x00a4 }, + { 0x0014, 0x00a5 }, + { 0x0014, 0x00a6 }, + { 0x0014, 0x00a7 }, + { 0x0014, 0x00a8 }, + { 0x0014, 0x00a9 }, + { 0x0014, 0x00aa }, + { 0x0014, 0x00ab }, + { 0x0014, 0x00ac }, + { 0x0014, 0x00ad }, + { 0x0014, 0x00ae }, + { 0x0014, 0x00af }, + { 0x0014, 0x00b0 }, + { 0x0014, 0x00b1 }, + { 0x0014, 0x00b2 }, + { 0x0014, 0x00b3 }, + { 0x0014, 0x00b4 }, + { 0x0014, 0x00b5 }, + { 0x0012, 0x0091 }, + { 0x0010, 0x003e }, + { 0x0010, 0x003f }, + { 0x0011, 0x0057 }, + { 0x0011, 0x0058 }, + { 0x0011, 0x0059 }, + { 0x0012, 0x0092 }, + { 0x0013, 0x00ee }, + { 0x0013, 0x00ef }, + { 0x0012, 0x0093 }, + { 0x0014, 0x00b6 }, + { 0x0014, 0x00b7 }, + { 0x0014, 0x00b8 }, + { 0x0014, 0x00b9 }, + { 0x0014, 0x00ba }, + { 0x0014, 0x00bb }, + { 0x0014, 0x00bc }, + { 0x0014, 0x00bd }, + { 0x0014, 0x00be }, + { 0x0014, 0x00bf }, + { 0x0014, 0x00c0 }, + { 0x0014, 0x00c1 }, + { 0x0014, 0x00c2 }, + { 0x0014, 0x00c3 }, + { 0x0014, 0x00c4 }, + { 0x0014, 0x00c5 }, + { 0x0014, 0x00c6 }, + { 0x0013, 0x00f0 }, + { 0x0012, 0x0094 }, + { 0x0012, 0x0095 }, + { 0x0012, 0x0096 }, + { 0x0014, 0x00c7 }, + { 0x0014, 0x00c8 }, + { 0x0014, 0x00c9 }, + { 0x0014, 0x00ca }, + { 0x0014, 0x00cb }, + { 0x0014, 0x00cc }, + { 0x0014, 0x00cd }, + { 0x0014, 0x00ce }, + { 0x0014, 0x00cf }, + { 0x0014, 0x00d0 }, + { 0x0014, 0x00d1 }, + { 0x0014, 0x00d2 }, + { 0x0014, 0x00d3 }, + { 0x0014, 0x00d4 }, + { 0x0014, 0x00d5 }, + { 0x0014, 0x00d6 }, + { 0x0014, 0x00d7 }, + { 0x0014, 0x00d8 }, + { 0x0014, 0x00d9 }, + { 0x0014, 0x00da }, + { 0x0014, 0x00db }, + { 0x0014, 0x00dc }, + { 0x0014, 0x00dd }, + { 0x0014, 0x00de }, + { 0x0012, 0x0097 }, + { 0x0014, 0x00df }, + { 0x0014, 0x00e0 }, + { 0x0014, 0x00e1 }, + { 0x0014, 0x00e2 }, + { 0x0014, 0x00e3 }, + { 0x0014, 0x00e4 }, + { 0x0014, 0x00e5 }, + { 0x0014, 0x00e6 }, + { 0x0014, 0x00e7 }, + { 0x0014, 0x00e8 }, + { 0x0014, 0x00e9 }, + { 0x0014, 0x00ea }, + { 0x0014, 0x00eb }, + { 0x0014, 0x00ec }, + { 0x0014, 0x00ed }, + { 0x0014, 0x00ee }, + { 0x0014, 0x00ef }, + { 0x0014, 0x00f0 }, + { 0x0014, 0x00f1 }, + { 0x0014, 0x00f2 }, + { 0x0014, 0x00f3 }, + { 0x0014, 0x00f4 }, + { 0x0014, 0x00f5 }, + { 0x0014, 0x00f6 }, + { 0x0014, 0x00f7 }, + { 0x0014, 0x00f8 }, + { 0x0014, 0x00f9 }, + { 0x0014, 0x00fa }, + { 0x0014, 0x00fb }, + { 0x0014, 0x00fc }, + { 0x0014, 0x00fd }, + { 0x0014, 0x00fe }, + { 0x0014, 0x00ff }, + { 0x0014, 0x0100 }, + { 0x0014, 0x0101 }, + { 0x0014, 0x0102 }, + { 0x0014, 0x0103 }, + { 0x0014, 0x0104 }, + { 0x0014, 0x0105 }, + { 0x0014, 0x0106 }, + { 0x0014, 0x0107 }, + { 0x0014, 0x0108 }, + { 0x0014, 0x0109 }, + { 0x0014, 0x010a }, + { 0x0014, 0x010b }, + { 0x0014, 0x010c }, + { 0x0014, 0x010d }, + { 0x0014, 0x010e }, + { 0x0014, 0x010f }, + { 0x0014, 0x0110 }, + { 0x0014, 0x0111 }, + { 0x0014, 0x0112 }, + { 0x0014, 0x0113 }, + { 0x0014, 0x0114 }, + { 0x0014, 0x0115 }, + { 0x0014, 0x0116 }, + { 0x0014, 0x0117 }, + { 0x0014, 0x0118 }, + { 0x0014, 0x0119 }, + { 0x0014, 0x011a }, + { 0x0014, 0x011b }, + { 0x0014, 0x011c }, + { 0x0014, 0x011d }, + { 0x0014, 0x011e }, + { 0x0014, 0x011f }, + { 0x0014, 0x0120 }, + { 0x0014, 0x0121 }, + { 0x0014, 0x0122 }, + { 0x0014, 0x0123 }, + { 0x0014, 0x0124 }, + { 0x0014, 0x0125 }, + { 0x0014, 0x0126 }, + { 0x0014, 0x0127 }, + { 0x0014, 0x0128 }, + { 0x0014, 0x0129 }, + { 0x0014, 0x012a }, + { 0x0014, 0x012b }, + { 0x0014, 0x012c }, + { 0x0014, 0x012d }, + { 0x0014, 0x012e }, + { 0x0014, 0x012f }, + { 0x0014, 0x0130 }, + { 0x0014, 0x0131 }, + { 0x0014, 0x0132 }, + { 0x0014, 0x0133 }, + { 0x0014, 0x0134 }, + { 0x0014, 0x0135 }, + { 0x0014, 0x0136 }, + { 0x0014, 0x0137 }, + { 0x0014, 0x0138 }, + { 0x0014, 0x0139 }, + { 0x0014, 0x013a }, + { 0x0014, 0x013b }, + { 0x0014, 0x013c }, + { 0x0014, 0x013d }, + { 0x0014, 0x013e }, + { 0x0014, 0x013f }, + { 0x0014, 0x0140 }, + { 0x0014, 0x0141 }, + { 0x0014, 0x0142 }, + { 0x0014, 0x0143 }, + { 0x0014, 0x0144 }, + { 0x0014, 0x0145 }, + { 0x0014, 0x0146 }, + { 0x0014, 0x0147 }, + { 0x0014, 0x0148 }, + { 0x0014, 0x0149 }, + { 0x0014, 0x014a }, + { 0x0014, 0x014b }, + { 0x0014, 0x014c }, + { 0x0014, 0x014d }, + { 0x0014, 0x014e }, + { 0x0014, 0x014f }, + { 0x0014, 0x0150 }, + { 0x0014, 0x0151 }, + { 0x0014, 0x0152 }, + { 0x0014, 0x0153 }, + { 0x0014, 0x0154 }, + { 0x0014, 0x0155 }, + { 0x0014, 0x0156 }, + { 0x0014, 0x0157 }, + { 0x0014, 0x0158 }, + { 0x0014, 0x0159 }, + { 0x0014, 0x015a }, + { 0x0014, 0x015b }, + { 0x0014, 0x015c }, + { 0x0014, 0x015d }, + { 0x0014, 0x015e }, + { 0x0014, 0x015f }, + { 0x0014, 0x0160 }, + { 0x0014, 0x0161 }, + { 0x0014, 0x0162 }, + { 0x0014, 0x0163 }, + { 0x0014, 0x0164 }, + { 0x0014, 0x0165 }, + { 0x0014, 0x0166 }, + { 0x0014, 0x0167 }, + { 0x0014, 0x0168 }, + { 0x0014, 0x0169 }, + { 0x0014, 0x016a }, + { 0x0014, 0x016b }, + { 0x0014, 0x016c }, + { 0x0014, 0x016d }, + { 0x0014, 0x016e }, + { 0x0014, 0x016f }, + { 0x0014, 0x0170 }, + { 0x0014, 0x0171 }, + { 0x0014, 0x0172 }, + { 0x0014, 0x0173 }, + { 0x0014, 0x0174 }, + { 0x0014, 0x0175 }, + { 0x0014, 0x0176 }, + { 0x0014, 0x0177 }, + { 0x0014, 0x0178 }, + { 0x0014, 0x0179 }, + { 0x0014, 0x017a }, + { 0x0014, 0x017b }, + { 0x0014, 0x017c }, + { 0x0014, 0x017d }, + { 0x0014, 0x017e }, + { 0x0014, 0x017f }, + { 0x0014, 0x0180 }, + { 0x0014, 0x0181 }, + { 0x0014, 0x0182 }, + { 0x0014, 0x0183 }, + { 0x0014, 0x0184 }, + { 0x0014, 0x0185 }, + { 0x0014, 0x0186 }, + { 0x0014, 0x0187 }, + { 0x0014, 0x0188 }, + { 0x0014, 0x0189 }, + { 0x0014, 0x018a }, + { 0x0014, 0x018b }, + { 0x0014, 0x018c }, + { 0x0014, 0x018d }, + { 0x0014, 0x018e }, + { 0x0014, 0x018f }, + { 0x0014, 0x0190 }, + { 0x0014, 0x0191 }, + { 0x0014, 0x0192 }, + { 0x0014, 0x0193 }, + { 0x0014, 0x0194 }, + { 0x0014, 0x0195 }, + { 0x0014, 0x0196 }, + { 0x0014, 0x0197 }, + { 0x0014, 0x0198 }, + { 0x0014, 0x0199 }, + { 0x0014, 0x019a }, + { 0x0014, 0x019b }, + { 0x0014, 0x019c }, + { 0x0014, 0x019d }, + { 0x0014, 0x019e }, + { 0x0014, 0x019f }, + { 0x0014, 0x01a0 }, + { 0x0014, 0x01a1 }, + { 0x0014, 0x01a2 }, + { 0x0014, 0x01a3 }, + { 0x0014, 0x01a4 }, + { 0x0014, 0x01a5 }, + { 0x0014, 0x01a6 }, + { 0x0014, 0x01a7 }, + { 0x0014, 0x01a8 }, + { 0x0014, 0x01a9 }, + { 0x0014, 0x01aa }, + { 0x0014, 0x01ab }, + { 0x0014, 0x01ac }, + { 0x0014, 0x01ad }, + { 0x0014, 0x01ae }, + { 0x0014, 0x01af }, + { 0x0014, 0x01b0 }, + { 0x0014, 0x01b1 }, + { 0x0014, 0x01b2 }, + { 0x0014, 0x01b3 }, + { 0x0014, 0x01b4 }, + { 0x0014, 0x01b5 }, + { 0x0014, 0x01b6 }, + { 0x0014, 0x01b7 }, + { 0x0014, 0x01b8 }, + { 0x0014, 0x01b9 }, + { 0x0014, 0x01ba }, + { 0x0014, 0x01bb }, + { 0x0014, 0x01bc }, + { 0x0014, 0x01bd }, + { 0x0014, 0x01be }, + { 0x0014, 0x01bf }, + { 0x0014, 0x01c0 }, + { 0x0014, 0x01c1 }, + { 0x0014, 0x01c2 }, + { 0x0014, 0x01c3 }, + { 0x0014, 0x01c4 }, + { 0x0014, 0x01c5 }, + { 0x0014, 0x01c6 }, + { 0x0014, 0x01c7 }, + { 0x0013, 0x00f1 }, + { 0x0013, 0x00f2 }, + { 0x0013, 0x00f3 }, + { 0x0013, 0x00f4 }, + { 0x0013, 0x00f5 }, + { 0x0013, 0x00f6 }, + { 0x0013, 0x00f7 }, + { 0x0013, 0x00f8 }, + { 0x0013, 0x00f9 }, + { 0x0013, 0x00fa }, + { 0x0013, 0x00fb }, + { 0x0013, 0x00fc }, + { 0x0013, 0x00fd }, + { 0x0013, 0x00fe }, + { 0x0013, 0x00ff }, + { 0x0013, 0x0100 }, + { 0x0013, 0x0101 }, + { 0x0013, 0x0102 }, + { 0x0013, 0x0103 }, + { 0x0013, 0x0104 }, + { 0x0013, 0x0105 }, + { 0x0013, 0x0106 }, + { 0x0013, 0x0107 }, + { 0x0013, 0x0108 }, + { 0x0013, 0x0109 }, + { 0x0013, 0x010a }, + { 0x0013, 0x010b }, + { 0x0013, 0x010c }, + { 0x0013, 0x010d }, + { 0x0013, 0x010e }, + { 0x0013, 0x010f }, + { 0x0013, 0x0110 }, + { 0x0013, 0x0111 }, + { 0x0013, 0x0112 }, + { 0x0013, 0x0113 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec17[93][16] = -{ - {0x0010ffff, 0x000dffff, 0x000effff, 0x000fffff, 0x0006ffff, 0x0005ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, }, - {0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, }, - {0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, }, - {0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, }, - {0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, }, - {0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x00020003, 0x00020003, 0x00020003, 0x00020003, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, }, - {0x000100c0, 0x000100c0, 0x000100c1, 0x000100c1, 0x000100d9, 0x000100d9, 0x000100da, 0x000100da, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020001, 0x00020001, 0x00020001, 0x00020001, }, - {0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020036, 0x00020036, 0x00020036, 0x00020036, 0x0002003a, 0x0002003a, 0x0002003a, 0x0002003a, }, - {0x0002003b, 0x0002003b, 0x0002003b, 0x0002003b, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003c, 0x00020051, 0x00020051, 0x00020051, 0x00020051, 0x00020054, 0x00020054, 0x00020054, 0x00020054, }, - {0x00020055, 0x00020055, 0x00020055, 0x00020055, 0x00020056, 0x00020056, 0x00020056, 0x00020056, 0x00020057, 0x00020057, 0x00020057, 0x00020057, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006c, }, - {0x0002006d, 0x0002006d, 0x0002006d, 0x0002006d, 0x0002006e, 0x0002006e, 0x0002006e, 0x0002006e, 0x0002006f, 0x0002006f, 0x0002006f, 0x0002006f, 0x00020070, 0x00020070, 0x00020070, 0x00020070, }, - {0x00020071, 0x00020071, 0x00020071, 0x00020071, 0x00020088, 0x00020088, 0x00020088, 0x00020088, 0x00020089, 0x00020089, 0x00020089, 0x00020089, 0x0002008a, 0x0002008a, 0x0002008a, 0x0002008a, }, - {0x0002008b, 0x0002008b, 0x0002008b, 0x0002008b, 0x000200a3, 0x000200a3, 0x000200a3, 0x000200a3, 0x000200a4, 0x000200a4, 0x000200a4, 0x000200a4, 0x000200a5, 0x000200a5, 0x000200a5, 0x000200a5, }, - {0x00000024, 0x0000003e, 0x00000059, 0x00000074, 0x0000008e, 0x000000a8, 0x000000bd, 0x000000c2, 0x000000c3, 0x000000d8, 0x000000db, 0x000000dc, 0x000000f4, 0x000000f5, 0x00010004, 0x00010004, }, - {0x00010005, 0x00010005, 0x00010006, 0x00010006, 0x00010022, 0x00010022, 0x00010023, 0x00010023, 0x0001003d, 0x0001003d, 0x00010058, 0x00010058, 0x00010072, 0x00010072, 0x00010073, 0x00010073, }, - {0x00010087, 0x00010087, 0x0001008c, 0x0001008c, 0x0001008d, 0x0001008d, 0x000100a2, 0x000100a2, 0x000100a6, 0x000100a6, 0x000100a7, 0x000100a7, 0x000100be, 0x000100be, 0x000100bf, 0x000100bf, }, - {0x001effff, 0x001dffff, 0x001cffff, 0x0019ffff, 0x0018ffff, 0x001affff, 0x001bffff, 0x0012ffff, 0x0011ffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, 0x0016ffff, 0x0017ffff, 0x00000007, 0x00000008, }, - {0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, }, - {0x00020111, 0x00020111, 0x00020111, 0x00020111, 0x00020112, 0x00020112, 0x00020112, 0x00020112, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, - {0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x0003008f, 0x0003008f, 0x0003008f, 0x0003008f, 0x0003008f, 0x0003008f, 0x0003008f, 0x0003008f, }, - {0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300c4, 0x000300c4, 0x000300c4, 0x000300c4, 0x000300c4, 0x000300c4, 0x000300c4, 0x000300c4, }, - {0x000300dd, 0x000300dd, 0x000300dd, 0x000300dd, 0x000300dd, 0x000300dd, 0x000300dd, 0x000300dd, 0x000300de, 0x000300de, 0x000300de, 0x000300de, 0x000300de, 0x000300de, 0x000300de, 0x000300de, }, - {0x000300f3, 0x000300f3, 0x000300f3, 0x000300f3, 0x000300f3, 0x000300f3, 0x000300f3, 0x000300f3, 0x000300f6, 0x000300f6, 0x000300f6, 0x000300f6, 0x000300f6, 0x000300f6, 0x000300f6, 0x000300f6, }, - {0x000300f7, 0x000300f7, 0x000300f7, 0x000300f7, 0x000300f7, 0x000300f7, 0x000300f7, 0x000300f7, 0x0003010f, 0x0003010f, 0x0003010f, 0x0003010f, 0x0003010f, 0x0003010f, 0x0003010f, 0x0003010f, }, - {0x00020025, 0x00020025, 0x00020025, 0x00020025, 0x00020040, 0x00020040, 0x00020040, 0x00020040, 0x0002005b, 0x0002005b, 0x0002005b, 0x0002005b, 0x00020076, 0x00020076, 0x00020076, 0x00020076, }, - {0x0001010e, 0x0001010e, 0x00010113, 0x00010113, 0x00010114, 0x00010114, 0x0001012a, 0x0001012a, 0x0001012b, 0x0001012b, 0x0001012c, 0x0001012c, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, }, - {0x00020090, 0x00020090, 0x00020090, 0x00020090, 0x000200aa, 0x000200aa, 0x000200aa, 0x000200aa, 0x000200ab, 0x000200ab, 0x000200ab, 0x000200ab, 0x000200c5, 0x000200c5, 0x000200c5, 0x000200c5, }, - {0x000200df, 0x000200df, 0x000200df, 0x000200df, 0x000200f8, 0x000200f8, 0x000200f8, 0x000200f8, 0x000200f9, 0x000200f9, 0x000200f9, 0x000200f9, 0x00020110, 0x00020110, 0x00020110, 0x00020110, }, - {0x00000146, 0x00000147, 0x00010026, 0x00010026, 0x00010041, 0x00010041, 0x0001005c, 0x0001005c, 0x00010091, 0x00010091, 0x000100c6, 0x000100c6, 0x000100e0, 0x000100e0, 0x000100fa, 0x000100fa, }, - {0x0025ffff, 0x0000000b, 0x00000027, 0x00000042, 0x0000005d, 0x00000077, 0x00000092, 0x000000ac, 0x000000c7, 0x000000e1, 0x000000fb, 0x00000115, 0x00000129, 0x0000012d, 0x0000012e, 0x00000145, }, - {0x0040ffff, 0x0039ffff, 0x002dffff, 0x002cffff, 0x002bffff, 0x0028ffff, 0x0026ffff, 0x0027ffff, 0x0029ffff, 0x002affff, 0x001fffff, 0x0020ffff, 0x0021ffff, 0x0022ffff, 0x0023ffff, 0x0024ffff, }, - {0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, }, - {0x00030093, 0x00030093, 0x00030093, 0x00030093, 0x00030093, 0x00030093, 0x00030093, 0x00030093, 0x000300ad, 0x000300ad, 0x000300ad, 0x000300ad, 0x000300ad, 0x000300ad, 0x000300ad, 0x000300ad, }, - {0x000300e2, 0x000300e2, 0x000300e2, 0x000300e2, 0x000300e2, 0x000300e2, 0x000300e2, 0x000300e2, 0x000300fc, 0x000300fc, 0x000300fc, 0x000300fc, 0x000300fc, 0x000300fc, 0x000300fc, 0x000300fc, }, - {0x00030116, 0x00030116, 0x00030116, 0x00030116, 0x00030116, 0x00030116, 0x00030116, 0x00030116, 0x0003012f, 0x0003012f, 0x0003012f, 0x0003012f, 0x0003012f, 0x0003012f, 0x0003012f, 0x0003012f, }, - {0x00030130, 0x00030130, 0x00030130, 0x00030130, 0x00030130, 0x00030130, 0x00030130, 0x00030130, 0x00030144, 0x00030144, 0x00030144, 0x00030144, 0x00030144, 0x00030144, 0x00030144, 0x00030144, }, - {0x00030148, 0x00030148, 0x00030148, 0x00030148, 0x00030148, 0x00030148, 0x00030148, 0x00030148, 0x00030149, 0x00030149, 0x00030149, 0x00030149, 0x00030149, 0x00030149, 0x00030149, 0x00030149, }, - {0x00030160, 0x00030160, 0x00030160, 0x00030160, 0x00030160, 0x00030160, 0x00030160, 0x00030160, 0x00030161, 0x00030161, 0x00030161, 0x00030161, 0x00030161, 0x00030161, 0x00030161, 0x00030161, }, - {0x00020028, 0x00020028, 0x00020028, 0x00020028, 0x00020043, 0x00020043, 0x00020043, 0x00020043, 0x0002005e, 0x0002005e, 0x0002005e, 0x0002005e, 0x000200ae, 0x000200ae, 0x000200ae, 0x000200ae, }, - {0x000200c8, 0x000200c8, 0x000200c8, 0x000200c8, 0x000200c9, 0x000200c9, 0x000200c9, 0x000200c9, 0x000200e3, 0x000200e3, 0x000200e3, 0x000200e3, 0x000200fd, 0x000200fd, 0x000200fd, 0x000200fd, }, - {0x0001014b, 0x0001014b, 0x00010165, 0x00010165, 0x0001017a, 0x0001017a, 0x0001017c, 0x0001017c, 0x0001017d, 0x0001017d, 0x0001017e, 0x0001017e, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, }, - {0x00020117, 0x00020117, 0x00020117, 0x00020117, 0x00020131, 0x00020131, 0x00020131, 0x00020131, 0x0002014a, 0x0002014a, 0x0002014a, 0x0002014a, 0x0002015f, 0x0002015f, 0x0002015f, 0x0002015f, }, - {0x00020162, 0x00020162, 0x00020162, 0x00020162, 0x00020163, 0x00020163, 0x00020163, 0x00020163, 0x00020164, 0x00020164, 0x00020164, 0x00020164, 0x0002017b, 0x0002017b, 0x0002017b, 0x0002017b, }, - {0x00010029, 0x00010029, 0x00010044, 0x00010044, 0x0001005f, 0x0001005f, 0x00010079, 0x00010079, 0x00010094, 0x00010094, 0x000100af, 0x000100af, 0x000100fe, 0x000100fe, 0x00010118, 0x00010118, }, - {0x0000007a, 0x00000095, 0x000000ca, 0x000000e4, 0x000000ff, 0x00000132, 0x00000133, 0x0000014c, 0x0000014d, 0x0000014e, 0x00000166, 0x00000167, 0x0000017f, 0x00000180, 0x00000196, 0x00000197, }, - {0x003effff, 0x003fffff, 0x0036ffff, 0x0035ffff, 0x0037ffff, 0x0038ffff, 0x0031ffff, 0x002effff, 0x0032ffff, 0x002fffff, 0x0030ffff, 0x0033ffff, 0x0034ffff, 0x0000000e, 0x00000045, 0x00000060, }, - {0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, }, - {0x000300e5, 0x000300e5, 0x000300e5, 0x000300e5, 0x000300e5, 0x000300e5, 0x000300e5, 0x000300e5, 0x0003011a, 0x0003011a, 0x0003011a, 0x0003011a, 0x0003011a, 0x0003011a, 0x0003011a, 0x0003011a, }, - {0x00030134, 0x00030134, 0x00030134, 0x00030134, 0x00030134, 0x00030134, 0x00030134, 0x00030134, 0x00030181, 0x00030181, 0x00030181, 0x00030181, 0x00030181, 0x00030181, 0x00030181, 0x00030181, }, - {0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, }, - {0x000300b0, 0x000300b0, 0x000300b0, 0x000300b0, 0x000300b0, 0x000300b0, 0x000300b0, 0x000300b0, 0x000300b1, 0x000300b1, 0x000300b1, 0x000300b1, 0x000300b1, 0x000300b1, 0x000300b1, 0x000300b1, }, - {0x00030182, 0x00030182, 0x00030182, 0x00030182, 0x00030182, 0x00030182, 0x00030182, 0x00030182, 0x00030198, 0x00030198, 0x00030198, 0x00030198, 0x00030198, 0x00030198, 0x00030198, 0x00030198, }, - {0x00030199, 0x00030199, 0x00030199, 0x00030199, 0x00030199, 0x00030199, 0x00030199, 0x00030199, 0x0003019a, 0x0003019a, 0x0003019a, 0x0003019a, 0x0003019a, 0x0003019a, 0x0003019a, 0x0003019a, }, - {0x000200cc, 0x000200cc, 0x000200cc, 0x000200cc, 0x00020100, 0x00020100, 0x00020100, 0x00020100, 0x00020119, 0x00020119, 0x00020119, 0x00020119, 0x0002014f, 0x0002014f, 0x0002014f, 0x0002014f, }, - {0x000102d5, 0x000102d5, 0x000102d6, 0x000102d6, 0x000102d7, 0x000102d7, 0x000102d8, 0x000102d8, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x000200cb, 0x000200cb, 0x000200cb, 0x000200cb, }, - {0x00020168, 0x00020168, 0x00020168, 0x00020168, 0x00020195, 0x00020195, 0x00020195, 0x00020195, 0x0002019b, 0x0002019b, 0x0002019b, 0x0002019b, 0x0002019e, 0x0002019e, 0x0002019e, 0x0002019e, }, - {0x000201b1, 0x000201b1, 0x000201b1, 0x000201b1, 0x000201b2, 0x000201b2, 0x000201b2, 0x000201b2, 0x000201b3, 0x000201b3, 0x000201b3, 0x000201b3, 0x000201cc, 0x000201cc, 0x000201cc, 0x000201cc, }, - {0x0051ffff, 0x0052ffff, 0x0053ffff, 0x0054ffff, 0x0055ffff, 0x0056ffff, 0x0057ffff, 0x0058ffff, 0x0059ffff, 0x005affff, 0x005bffff, 0x005cffff, 0x003bffff, 0x003affff, 0x003cffff, 0x003dffff, }, - {0x00010062, 0x00010062, 0x000100e7, 0x000100e7, 0x00010101, 0x00010101, 0x0001011b, 0x0001011b, 0x00010135, 0x00010135, 0x00010150, 0x00010150, 0x0001019c, 0x0001019c, 0x0001019d, 0x0001019d, }, - {0x000002ae, 0x000002af, 0x000002b0, 0x000002b1, 0x000002b2, 0x000002b3, 0x000002b4, 0x000002b5, 0x0001002b, 0x0001002b, 0x00010046, 0x00010046, 0x00010047, 0x00010047, 0x00010061, 0x00010061, }, - {0x000101b0, 0x000101b0, 0x000102b6, 0x000102b6, 0x000102b7, 0x000102b7, 0x000102b8, 0x000102b8, 0x000102b9, 0x000102b9, 0x000102ba, 0x000102ba, 0x000102bb, 0x000102bb, 0x000102bc, 0x000102bc, }, - {0x000102bd, 0x000102bd, 0x000102be, 0x000102be, 0x000102bf, 0x000102bf, 0x000102c0, 0x000102c0, 0x000102c1, 0x000102c1, 0x000102c2, 0x000102c2, 0x000102c3, 0x000102c3, 0x000102c4, 0x000102c4, }, - {0x000102c5, 0x000102c5, 0x000102c6, 0x000102c6, 0x000102c7, 0x000102c7, 0x000102c8, 0x000102c8, 0x000102c9, 0x000102c9, 0x000102ca, 0x000102ca, 0x000102cb, 0x000102cb, 0x000102cc, 0x000102cc, }, - {0x000102cd, 0x000102cd, 0x000102ce, 0x000102ce, 0x000102cf, 0x000102cf, 0x000102d0, 0x000102d0, 0x000102d1, 0x000102d1, 0x000102d2, 0x000102d2, 0x000102d3, 0x000102d3, 0x000102d4, 0x000102d4, }, - {0x0044ffff, 0x0041ffff, 0x0042ffff, 0x0043ffff, 0x0045ffff, 0x0048ffff, 0x0046ffff, 0x0047ffff, 0x0049ffff, 0x004affff, 0x004bffff, 0x004cffff, 0x004dffff, 0x004effff, 0x004fffff, 0x0050ffff, }, - {0x00000032, 0x00000033, 0x00000034, 0x00000035, 0x00000048, 0x00000049, 0x0000004a, 0x0000004b, 0x0000004c, 0x0000004d, 0x0000004e, 0x0000004f, 0x00000050, 0x00000063, 0x00000064, 0x00000065, }, - {0x00000066, 0x00000067, 0x00000068, 0x00000069, 0x0000006a, 0x0000006b, 0x0000007c, 0x0000007d, 0x0000007e, 0x0000007f, 0x00000080, 0x00000081, 0x00000082, 0x00000083, 0x00000084, 0x00000085, }, - {0x00000086, 0x00000097, 0x00000098, 0x00000099, 0x0000009a, 0x0000009b, 0x0000009c, 0x0000009d, 0x0000009e, 0x0000009f, 0x000000a0, 0x000000a1, 0x000000b2, 0x000000b3, 0x000000b4, 0x000000b5, }, - {0x00000011, 0x00000012, 0x00000013, 0x00000014, 0x00000015, 0x00000016, 0x00000017, 0x00000018, 0x00000019, 0x0000001a, 0x0000002c, 0x0000002d, 0x0000002e, 0x0000002f, 0x00000030, 0x00000031, }, - {0x000000b6, 0x000000b7, 0x000000b8, 0x000000b9, 0x000000ba, 0x000000bb, 0x000000bc, 0x000000cd, 0x000000ce, 0x000000cf, 0x000000d0, 0x000000d1, 0x000000d2, 0x000000d3, 0x000000d4, 0x000000d5, }, - {0x00000104, 0x00000105, 0x00000106, 0x00000107, 0x00000108, 0x00000109, 0x0000010a, 0x0000010b, 0x0000010c, 0x0000010d, 0x0000011c, 0x0000011d, 0x0000011e, 0x0000011f, 0x00000120, 0x00000121, }, - {0x00000122, 0x00000123, 0x00000124, 0x00000125, 0x00000126, 0x00000127, 0x00000128, 0x00000136, 0x00000137, 0x00000138, 0x00000139, 0x0000013a, 0x0000013b, 0x0000013c, 0x0000013d, 0x0000013e, }, - {0x000000d6, 0x000000d7, 0x000000e6, 0x000000e8, 0x000000e9, 0x000000ea, 0x000000eb, 0x000000ec, 0x000000ed, 0x000000ee, 0x000000ef, 0x000000f0, 0x000000f1, 0x000000f2, 0x00000102, 0x00000103, }, - {0x0000013f, 0x00000140, 0x00000141, 0x00000142, 0x00000143, 0x00000151, 0x00000152, 0x00000153, 0x00000154, 0x00000155, 0x00000156, 0x00000157, 0x00000158, 0x00000159, 0x0000015a, 0x0000015b, }, - {0x0000015c, 0x0000015d, 0x0000015e, 0x00000169, 0x0000016a, 0x0000016b, 0x0000016c, 0x0000016d, 0x0000016e, 0x0000016f, 0x00000170, 0x00000171, 0x00000172, 0x00000173, 0x00000174, 0x00000175, }, - {0x00000176, 0x00000177, 0x00000178, 0x00000179, 0x00000183, 0x00000184, 0x00000185, 0x00000186, 0x00000187, 0x00000188, 0x00000189, 0x0000018a, 0x0000018b, 0x0000018c, 0x0000018d, 0x0000018e, }, - {0x0000018f, 0x00000190, 0x00000191, 0x00000192, 0x00000193, 0x00000194, 0x0000019f, 0x000001a0, 0x000001a1, 0x000001a2, 0x000001a3, 0x000001a4, 0x000001a5, 0x000001a6, 0x000001a7, 0x000001a8, }, - {0x000001a9, 0x000001aa, 0x000001ab, 0x000001ac, 0x000001ad, 0x000001ae, 0x000001af, 0x000001b4, 0x000001b5, 0x000001b6, 0x000001b7, 0x000001b8, 0x000001b9, 0x000001ba, 0x000001bb, 0x000001bc, }, - {0x000001bd, 0x000001be, 0x000001bf, 0x000001c0, 0x000001c1, 0x000001c2, 0x000001c3, 0x000001c4, 0x000001c5, 0x000001c6, 0x000001c7, 0x000001c8, 0x000001c9, 0x000001ca, 0x000001cb, 0x000001cd, }, - {0x000001ce, 0x000001cf, 0x000001d0, 0x000001d1, 0x000001d2, 0x000001d3, 0x000001d4, 0x000001d5, 0x000001d6, 0x000001d7, 0x000001d8, 0x000001d9, 0x000001da, 0x000001db, 0x000001dc, 0x000001dd, }, - {0x000001de, 0x000001df, 0x000001e0, 0x000001e1, 0x000001e2, 0x000001e3, 0x000001e4, 0x000001e5, 0x000001e6, 0x000001e7, 0x000001e8, 0x000001e9, 0x000001ea, 0x000001eb, 0x000001ec, 0x000001ed, }, - {0x000001ee, 0x000001ef, 0x000001f0, 0x000001f1, 0x000001f2, 0x000001f3, 0x000001f4, 0x000001f5, 0x000001f6, 0x000001f7, 0x000001f8, 0x000001f9, 0x000001fa, 0x000001fb, 0x000001fc, 0x000001fd, }, - {0x000001fe, 0x000001ff, 0x00000200, 0x00000201, 0x00000202, 0x00000203, 0x00000204, 0x00000205, 0x00000206, 0x00000207, 0x00000208, 0x00000209, 0x0000020a, 0x0000020b, 0x0000020c, 0x0000020d, }, - {0x0000020e, 0x0000020f, 0x00000210, 0x00000211, 0x00000212, 0x00000213, 0x00000214, 0x00000215, 0x00000216, 0x00000217, 0x00000218, 0x00000219, 0x0000021a, 0x0000021b, 0x0000021c, 0x0000021d, }, - {0x0000021e, 0x0000021f, 0x00000220, 0x00000221, 0x00000222, 0x00000223, 0x00000224, 0x00000225, 0x00000226, 0x00000227, 0x00000228, 0x00000229, 0x0000022a, 0x0000022b, 0x0000022c, 0x0000022d, }, - {0x0000022e, 0x0000022f, 0x00000230, 0x00000231, 0x00000232, 0x00000233, 0x00000234, 0x00000235, 0x00000236, 0x00000237, 0x00000238, 0x00000239, 0x0000023a, 0x0000023b, 0x0000023c, 0x0000023d, }, - {0x0000023e, 0x0000023f, 0x00000240, 0x00000241, 0x00000242, 0x00000243, 0x00000244, 0x00000245, 0x00000246, 0x00000247, 0x00000248, 0x00000249, 0x0000024a, 0x0000024b, 0x0000024c, 0x0000024d, }, - {0x0000024e, 0x0000024f, 0x00000250, 0x00000251, 0x00000252, 0x00000253, 0x00000254, 0x00000255, 0x00000256, 0x00000257, 0x00000258, 0x00000259, 0x0000025a, 0x0000025b, 0x0000025c, 0x0000025d, }, - {0x0000025e, 0x0000025f, 0x00000260, 0x00000261, 0x00000262, 0x00000263, 0x00000264, 0x00000265, 0x00000266, 0x00000267, 0x00000268, 0x00000269, 0x0000026a, 0x0000026b, 0x0000026c, 0x0000026d, }, - {0x0000026e, 0x0000026f, 0x00000270, 0x00000271, 0x00000272, 0x00000273, 0x00000274, 0x00000275, 0x00000276, 0x00000277, 0x00000278, 0x00000279, 0x0000027a, 0x0000027b, 0x0000027c, 0x0000027d, }, - {0x0000027e, 0x0000027f, 0x00000280, 0x00000281, 0x00000282, 0x00000283, 0x00000284, 0x00000285, 0x00000286, 0x00000287, 0x00000288, 0x00000289, 0x0000028a, 0x0000028b, 0x0000028c, 0x0000028d, }, - {0x0000028e, 0x0000028f, 0x00000290, 0x00000291, 0x00000292, 0x00000293, 0x00000294, 0x00000295, 0x00000296, 0x00000297, 0x00000298, 0x00000299, 0x0000029a, 0x0000029b, 0x0000029c, 0x0000029d, }, - {0x0000029e, 0x0000029f, 0x000002a0, 0x000002a1, 0x000002a2, 0x000002a3, 0x000002a4, 0x000002a5, 0x000002a6, 0x000002a7, 0x000002a8, 0x000002a9, 0x000002aa, 0x000002ab, 0x000002ac, 0x000002ad, }, +const uint32_t c_aauiCQMFHuffDec17[93][16] = { + { + 0x0010ffff, + 0x000dffff, + 0x000effff, + 0x000fffff, + 0x0006ffff, + 0x0005ffff, + 0x0007ffff, + 0x0008ffff, + 0x0009ffff, + 0x000affff, + 0x000bffff, + 0x000cffff, + 0x0001ffff, + 0x0002ffff, + 0x0003ffff, + 0x0004ffff, + }, + { + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + }, + { + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + }, + { + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + }, + { + 0x00030052, + 0x00030052, + 0x00030052, + 0x00030052, + 0x00030052, + 0x00030052, + 0x00030052, + 0x00030052, + 0x00030053, + 0x00030053, + 0x00030053, + 0x00030053, + 0x00030053, + 0x00030053, + 0x00030053, + 0x00030053, + }, + { + 0x00020002, + 0x00020002, + 0x00020002, + 0x00020002, + 0x00020003, + 0x00020003, + 0x00020003, + 0x00020003, + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002001f, + 0x0002001f, + 0x0002001f, + 0x0002001f, + }, + { + 0x000100c0, + 0x000100c0, + 0x000100c1, + 0x000100c1, + 0x000100d9, + 0x000100d9, + 0x000100da, + 0x000100da, + 0x00020000, + 0x00020000, + 0x00020000, + 0x00020000, + 0x00020001, + 0x00020001, + 0x00020001, + 0x00020001, + }, + { + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020021, + 0x00020021, + 0x00020021, + 0x00020021, + 0x00020036, + 0x00020036, + 0x00020036, + 0x00020036, + 0x0002003a, + 0x0002003a, + 0x0002003a, + 0x0002003a, + }, + { + 0x0002003b, + 0x0002003b, + 0x0002003b, + 0x0002003b, + 0x0002003c, + 0x0002003c, + 0x0002003c, + 0x0002003c, + 0x00020051, + 0x00020051, + 0x00020051, + 0x00020051, + 0x00020054, + 0x00020054, + 0x00020054, + 0x00020054, + }, + { + 0x00020055, + 0x00020055, + 0x00020055, + 0x00020055, + 0x00020056, + 0x00020056, + 0x00020056, + 0x00020056, + 0x00020057, + 0x00020057, + 0x00020057, + 0x00020057, + 0x0002006c, + 0x0002006c, + 0x0002006c, + 0x0002006c, + }, + { + 0x0002006d, + 0x0002006d, + 0x0002006d, + 0x0002006d, + 0x0002006e, + 0x0002006e, + 0x0002006e, + 0x0002006e, + 0x0002006f, + 0x0002006f, + 0x0002006f, + 0x0002006f, + 0x00020070, + 0x00020070, + 0x00020070, + 0x00020070, + }, + { + 0x00020071, + 0x00020071, + 0x00020071, + 0x00020071, + 0x00020088, + 0x00020088, + 0x00020088, + 0x00020088, + 0x00020089, + 0x00020089, + 0x00020089, + 0x00020089, + 0x0002008a, + 0x0002008a, + 0x0002008a, + 0x0002008a, + }, + { + 0x0002008b, + 0x0002008b, + 0x0002008b, + 0x0002008b, + 0x000200a3, + 0x000200a3, + 0x000200a3, + 0x000200a3, + 0x000200a4, + 0x000200a4, + 0x000200a4, + 0x000200a4, + 0x000200a5, + 0x000200a5, + 0x000200a5, + 0x000200a5, + }, + { + 0x00000024, + 0x0000003e, + 0x00000059, + 0x00000074, + 0x0000008e, + 0x000000a8, + 0x000000bd, + 0x000000c2, + 0x000000c3, + 0x000000d8, + 0x000000db, + 0x000000dc, + 0x000000f4, + 0x000000f5, + 0x00010004, + 0x00010004, + }, + { + 0x00010005, + 0x00010005, + 0x00010006, + 0x00010006, + 0x00010022, + 0x00010022, + 0x00010023, + 0x00010023, + 0x0001003d, + 0x0001003d, + 0x00010058, + 0x00010058, + 0x00010072, + 0x00010072, + 0x00010073, + 0x00010073, + }, + { + 0x00010087, + 0x00010087, + 0x0001008c, + 0x0001008c, + 0x0001008d, + 0x0001008d, + 0x000100a2, + 0x000100a2, + 0x000100a6, + 0x000100a6, + 0x000100a7, + 0x000100a7, + 0x000100be, + 0x000100be, + 0x000100bf, + 0x000100bf, + }, + { + 0x001effff, + 0x001dffff, + 0x001cffff, + 0x0019ffff, + 0x0018ffff, + 0x001affff, + 0x001bffff, + 0x0012ffff, + 0x0011ffff, + 0x0013ffff, + 0x0014ffff, + 0x0015ffff, + 0x0016ffff, + 0x0017ffff, + 0x00000007, + 0x00000008, + }, + { + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003005a, + 0x0003005a, + 0x0003005a, + 0x0003005a, + 0x0003005a, + 0x0003005a, + 0x0003005a, + 0x0003005a, + }, + { + 0x00020111, + 0x00020111, + 0x00020111, + 0x00020111, + 0x00020112, + 0x00020112, + 0x00020112, + 0x00020112, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + }, + { + 0x00030075, + 0x00030075, + 0x00030075, + 0x00030075, + 0x00030075, + 0x00030075, + 0x00030075, + 0x00030075, + 0x0003008f, + 0x0003008f, + 0x0003008f, + 0x0003008f, + 0x0003008f, + 0x0003008f, + 0x0003008f, + 0x0003008f, + }, + { + 0x000300a9, + 0x000300a9, + 0x000300a9, + 0x000300a9, + 0x000300a9, + 0x000300a9, + 0x000300a9, + 0x000300a9, + 0x000300c4, + 0x000300c4, + 0x000300c4, + 0x000300c4, + 0x000300c4, + 0x000300c4, + 0x000300c4, + 0x000300c4, + }, + { + 0x000300dd, + 0x000300dd, + 0x000300dd, + 0x000300dd, + 0x000300dd, + 0x000300dd, + 0x000300dd, + 0x000300dd, + 0x000300de, + 0x000300de, + 0x000300de, + 0x000300de, + 0x000300de, + 0x000300de, + 0x000300de, + 0x000300de, + }, + { + 0x000300f3, + 0x000300f3, + 0x000300f3, + 0x000300f3, + 0x000300f3, + 0x000300f3, + 0x000300f3, + 0x000300f3, + 0x000300f6, + 0x000300f6, + 0x000300f6, + 0x000300f6, + 0x000300f6, + 0x000300f6, + 0x000300f6, + 0x000300f6, + }, + { + 0x000300f7, + 0x000300f7, + 0x000300f7, + 0x000300f7, + 0x000300f7, + 0x000300f7, + 0x000300f7, + 0x000300f7, + 0x0003010f, + 0x0003010f, + 0x0003010f, + 0x0003010f, + 0x0003010f, + 0x0003010f, + 0x0003010f, + 0x0003010f, + }, + { + 0x00020025, + 0x00020025, + 0x00020025, + 0x00020025, + 0x00020040, + 0x00020040, + 0x00020040, + 0x00020040, + 0x0002005b, + 0x0002005b, + 0x0002005b, + 0x0002005b, + 0x00020076, + 0x00020076, + 0x00020076, + 0x00020076, + }, + { + 0x0001010e, + 0x0001010e, + 0x00010113, + 0x00010113, + 0x00010114, + 0x00010114, + 0x0001012a, + 0x0001012a, + 0x0001012b, + 0x0001012b, + 0x0001012c, + 0x0001012c, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x0002000a, + }, + { + 0x00020090, + 0x00020090, + 0x00020090, + 0x00020090, + 0x000200aa, + 0x000200aa, + 0x000200aa, + 0x000200aa, + 0x000200ab, + 0x000200ab, + 0x000200ab, + 0x000200ab, + 0x000200c5, + 0x000200c5, + 0x000200c5, + 0x000200c5, + }, + { + 0x000200df, + 0x000200df, + 0x000200df, + 0x000200df, + 0x000200f8, + 0x000200f8, + 0x000200f8, + 0x000200f8, + 0x000200f9, + 0x000200f9, + 0x000200f9, + 0x000200f9, + 0x00020110, + 0x00020110, + 0x00020110, + 0x00020110, + }, + { + 0x00000146, + 0x00000147, + 0x00010026, + 0x00010026, + 0x00010041, + 0x00010041, + 0x0001005c, + 0x0001005c, + 0x00010091, + 0x00010091, + 0x000100c6, + 0x000100c6, + 0x000100e0, + 0x000100e0, + 0x000100fa, + 0x000100fa, + }, + { + 0x0025ffff, + 0x0000000b, + 0x00000027, + 0x00000042, + 0x0000005d, + 0x00000077, + 0x00000092, + 0x000000ac, + 0x000000c7, + 0x000000e1, + 0x000000fb, + 0x00000115, + 0x00000129, + 0x0000012d, + 0x0000012e, + 0x00000145, + }, + { + 0x0040ffff, + 0x0039ffff, + 0x002dffff, + 0x002cffff, + 0x002bffff, + 0x0028ffff, + 0x0026ffff, + 0x0027ffff, + 0x0029ffff, + 0x002affff, + 0x001fffff, + 0x0020ffff, + 0x0021ffff, + 0x0022ffff, + 0x0023ffff, + 0x0024ffff, + }, + { + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x00030078, + 0x00030078, + 0x00030078, + 0x00030078, + 0x00030078, + 0x00030078, + 0x00030078, + 0x00030078, + }, + { + 0x00030093, + 0x00030093, + 0x00030093, + 0x00030093, + 0x00030093, + 0x00030093, + 0x00030093, + 0x00030093, + 0x000300ad, + 0x000300ad, + 0x000300ad, + 0x000300ad, + 0x000300ad, + 0x000300ad, + 0x000300ad, + 0x000300ad, + }, + { + 0x000300e2, + 0x000300e2, + 0x000300e2, + 0x000300e2, + 0x000300e2, + 0x000300e2, + 0x000300e2, + 0x000300e2, + 0x000300fc, + 0x000300fc, + 0x000300fc, + 0x000300fc, + 0x000300fc, + 0x000300fc, + 0x000300fc, + 0x000300fc, + }, + { + 0x00030116, + 0x00030116, + 0x00030116, + 0x00030116, + 0x00030116, + 0x00030116, + 0x00030116, + 0x00030116, + 0x0003012f, + 0x0003012f, + 0x0003012f, + 0x0003012f, + 0x0003012f, + 0x0003012f, + 0x0003012f, + 0x0003012f, + }, + { + 0x00030130, + 0x00030130, + 0x00030130, + 0x00030130, + 0x00030130, + 0x00030130, + 0x00030130, + 0x00030130, + 0x00030144, + 0x00030144, + 0x00030144, + 0x00030144, + 0x00030144, + 0x00030144, + 0x00030144, + 0x00030144, + }, + { + 0x00030148, + 0x00030148, + 0x00030148, + 0x00030148, + 0x00030148, + 0x00030148, + 0x00030148, + 0x00030148, + 0x00030149, + 0x00030149, + 0x00030149, + 0x00030149, + 0x00030149, + 0x00030149, + 0x00030149, + 0x00030149, + }, + { + 0x00030160, + 0x00030160, + 0x00030160, + 0x00030160, + 0x00030160, + 0x00030160, + 0x00030160, + 0x00030160, + 0x00030161, + 0x00030161, + 0x00030161, + 0x00030161, + 0x00030161, + 0x00030161, + 0x00030161, + 0x00030161, + }, + { + 0x00020028, + 0x00020028, + 0x00020028, + 0x00020028, + 0x00020043, + 0x00020043, + 0x00020043, + 0x00020043, + 0x0002005e, + 0x0002005e, + 0x0002005e, + 0x0002005e, + 0x000200ae, + 0x000200ae, + 0x000200ae, + 0x000200ae, + }, + { + 0x000200c8, + 0x000200c8, + 0x000200c8, + 0x000200c8, + 0x000200c9, + 0x000200c9, + 0x000200c9, + 0x000200c9, + 0x000200e3, + 0x000200e3, + 0x000200e3, + 0x000200e3, + 0x000200fd, + 0x000200fd, + 0x000200fd, + 0x000200fd, + }, + { + 0x0001014b, + 0x0001014b, + 0x00010165, + 0x00010165, + 0x0001017a, + 0x0001017a, + 0x0001017c, + 0x0001017c, + 0x0001017d, + 0x0001017d, + 0x0001017e, + 0x0001017e, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0002000d, + }, + { + 0x00020117, + 0x00020117, + 0x00020117, + 0x00020117, + 0x00020131, + 0x00020131, + 0x00020131, + 0x00020131, + 0x0002014a, + 0x0002014a, + 0x0002014a, + 0x0002014a, + 0x0002015f, + 0x0002015f, + 0x0002015f, + 0x0002015f, + }, + { + 0x00020162, + 0x00020162, + 0x00020162, + 0x00020162, + 0x00020163, + 0x00020163, + 0x00020163, + 0x00020163, + 0x00020164, + 0x00020164, + 0x00020164, + 0x00020164, + 0x0002017b, + 0x0002017b, + 0x0002017b, + 0x0002017b, + }, + { + 0x00010029, + 0x00010029, + 0x00010044, + 0x00010044, + 0x0001005f, + 0x0001005f, + 0x00010079, + 0x00010079, + 0x00010094, + 0x00010094, + 0x000100af, + 0x000100af, + 0x000100fe, + 0x000100fe, + 0x00010118, + 0x00010118, + }, + { + 0x0000007a, + 0x00000095, + 0x000000ca, + 0x000000e4, + 0x000000ff, + 0x00000132, + 0x00000133, + 0x0000014c, + 0x0000014d, + 0x0000014e, + 0x00000166, + 0x00000167, + 0x0000017f, + 0x00000180, + 0x00000196, + 0x00000197, + }, + { + 0x003effff, + 0x003fffff, + 0x0036ffff, + 0x0035ffff, + 0x0037ffff, + 0x0038ffff, + 0x0031ffff, + 0x002effff, + 0x0032ffff, + 0x002fffff, + 0x0030ffff, + 0x0033ffff, + 0x0034ffff, + 0x0000000e, + 0x00000045, + 0x00000060, + }, + { + 0x0003007b, + 0x0003007b, + 0x0003007b, + 0x0003007b, + 0x0003007b, + 0x0003007b, + 0x0003007b, + 0x0003007b, + 0x00030096, + 0x00030096, + 0x00030096, + 0x00030096, + 0x00030096, + 0x00030096, + 0x00030096, + 0x00030096, + }, + { + 0x000300e5, + 0x000300e5, + 0x000300e5, + 0x000300e5, + 0x000300e5, + 0x000300e5, + 0x000300e5, + 0x000300e5, + 0x0003011a, + 0x0003011a, + 0x0003011a, + 0x0003011a, + 0x0003011a, + 0x0003011a, + 0x0003011a, + 0x0003011a, + }, + { + 0x00030134, + 0x00030134, + 0x00030134, + 0x00030134, + 0x00030134, + 0x00030134, + 0x00030134, + 0x00030134, + 0x00030181, + 0x00030181, + 0x00030181, + 0x00030181, + 0x00030181, + 0x00030181, + 0x00030181, + 0x00030181, + }, + { + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + }, + { + 0x000300b0, + 0x000300b0, + 0x000300b0, + 0x000300b0, + 0x000300b0, + 0x000300b0, + 0x000300b0, + 0x000300b0, + 0x000300b1, + 0x000300b1, + 0x000300b1, + 0x000300b1, + 0x000300b1, + 0x000300b1, + 0x000300b1, + 0x000300b1, + }, + { + 0x00030182, + 0x00030182, + 0x00030182, + 0x00030182, + 0x00030182, + 0x00030182, + 0x00030182, + 0x00030182, + 0x00030198, + 0x00030198, + 0x00030198, + 0x00030198, + 0x00030198, + 0x00030198, + 0x00030198, + 0x00030198, + }, + { + 0x00030199, + 0x00030199, + 0x00030199, + 0x00030199, + 0x00030199, + 0x00030199, + 0x00030199, + 0x00030199, + 0x0003019a, + 0x0003019a, + 0x0003019a, + 0x0003019a, + 0x0003019a, + 0x0003019a, + 0x0003019a, + 0x0003019a, + }, + { + 0x000200cc, + 0x000200cc, + 0x000200cc, + 0x000200cc, + 0x00020100, + 0x00020100, + 0x00020100, + 0x00020100, + 0x00020119, + 0x00020119, + 0x00020119, + 0x00020119, + 0x0002014f, + 0x0002014f, + 0x0002014f, + 0x0002014f, + }, + { + 0x000102d5, + 0x000102d5, + 0x000102d6, + 0x000102d6, + 0x000102d7, + 0x000102d7, + 0x000102d8, + 0x000102d8, + 0x00020010, + 0x00020010, + 0x00020010, + 0x00020010, + 0x000200cb, + 0x000200cb, + 0x000200cb, + 0x000200cb, + }, + { + 0x00020168, + 0x00020168, + 0x00020168, + 0x00020168, + 0x00020195, + 0x00020195, + 0x00020195, + 0x00020195, + 0x0002019b, + 0x0002019b, + 0x0002019b, + 0x0002019b, + 0x0002019e, + 0x0002019e, + 0x0002019e, + 0x0002019e, + }, + { + 0x000201b1, + 0x000201b1, + 0x000201b1, + 0x000201b1, + 0x000201b2, + 0x000201b2, + 0x000201b2, + 0x000201b2, + 0x000201b3, + 0x000201b3, + 0x000201b3, + 0x000201b3, + 0x000201cc, + 0x000201cc, + 0x000201cc, + 0x000201cc, + }, + { + 0x0051ffff, + 0x0052ffff, + 0x0053ffff, + 0x0054ffff, + 0x0055ffff, + 0x0056ffff, + 0x0057ffff, + 0x0058ffff, + 0x0059ffff, + 0x005affff, + 0x005bffff, + 0x005cffff, + 0x003bffff, + 0x003affff, + 0x003cffff, + 0x003dffff, + }, + { + 0x00010062, + 0x00010062, + 0x000100e7, + 0x000100e7, + 0x00010101, + 0x00010101, + 0x0001011b, + 0x0001011b, + 0x00010135, + 0x00010135, + 0x00010150, + 0x00010150, + 0x0001019c, + 0x0001019c, + 0x0001019d, + 0x0001019d, + }, + { + 0x000002ae, + 0x000002af, + 0x000002b0, + 0x000002b1, + 0x000002b2, + 0x000002b3, + 0x000002b4, + 0x000002b5, + 0x0001002b, + 0x0001002b, + 0x00010046, + 0x00010046, + 0x00010047, + 0x00010047, + 0x00010061, + 0x00010061, + }, + { + 0x000101b0, + 0x000101b0, + 0x000102b6, + 0x000102b6, + 0x000102b7, + 0x000102b7, + 0x000102b8, + 0x000102b8, + 0x000102b9, + 0x000102b9, + 0x000102ba, + 0x000102ba, + 0x000102bb, + 0x000102bb, + 0x000102bc, + 0x000102bc, + }, + { + 0x000102bd, + 0x000102bd, + 0x000102be, + 0x000102be, + 0x000102bf, + 0x000102bf, + 0x000102c0, + 0x000102c0, + 0x000102c1, + 0x000102c1, + 0x000102c2, + 0x000102c2, + 0x000102c3, + 0x000102c3, + 0x000102c4, + 0x000102c4, + }, + { + 0x000102c5, + 0x000102c5, + 0x000102c6, + 0x000102c6, + 0x000102c7, + 0x000102c7, + 0x000102c8, + 0x000102c8, + 0x000102c9, + 0x000102c9, + 0x000102ca, + 0x000102ca, + 0x000102cb, + 0x000102cb, + 0x000102cc, + 0x000102cc, + }, + { + 0x000102cd, + 0x000102cd, + 0x000102ce, + 0x000102ce, + 0x000102cf, + 0x000102cf, + 0x000102d0, + 0x000102d0, + 0x000102d1, + 0x000102d1, + 0x000102d2, + 0x000102d2, + 0x000102d3, + 0x000102d3, + 0x000102d4, + 0x000102d4, + }, + { + 0x0044ffff, + 0x0041ffff, + 0x0042ffff, + 0x0043ffff, + 0x0045ffff, + 0x0048ffff, + 0x0046ffff, + 0x0047ffff, + 0x0049ffff, + 0x004affff, + 0x004bffff, + 0x004cffff, + 0x004dffff, + 0x004effff, + 0x004fffff, + 0x0050ffff, + }, + { + 0x00000032, + 0x00000033, + 0x00000034, + 0x00000035, + 0x00000048, + 0x00000049, + 0x0000004a, + 0x0000004b, + 0x0000004c, + 0x0000004d, + 0x0000004e, + 0x0000004f, + 0x00000050, + 0x00000063, + 0x00000064, + 0x00000065, + }, + { + 0x00000066, + 0x00000067, + 0x00000068, + 0x00000069, + 0x0000006a, + 0x0000006b, + 0x0000007c, + 0x0000007d, + 0x0000007e, + 0x0000007f, + 0x00000080, + 0x00000081, + 0x00000082, + 0x00000083, + 0x00000084, + 0x00000085, + }, + { + 0x00000086, + 0x00000097, + 0x00000098, + 0x00000099, + 0x0000009a, + 0x0000009b, + 0x0000009c, + 0x0000009d, + 0x0000009e, + 0x0000009f, + 0x000000a0, + 0x000000a1, + 0x000000b2, + 0x000000b3, + 0x000000b4, + 0x000000b5, + }, + { + 0x00000011, + 0x00000012, + 0x00000013, + 0x00000014, + 0x00000015, + 0x00000016, + 0x00000017, + 0x00000018, + 0x00000019, + 0x0000001a, + 0x0000002c, + 0x0000002d, + 0x0000002e, + 0x0000002f, + 0x00000030, + 0x00000031, + }, + { + 0x000000b6, + 0x000000b7, + 0x000000b8, + 0x000000b9, + 0x000000ba, + 0x000000bb, + 0x000000bc, + 0x000000cd, + 0x000000ce, + 0x000000cf, + 0x000000d0, + 0x000000d1, + 0x000000d2, + 0x000000d3, + 0x000000d4, + 0x000000d5, + }, + { + 0x00000104, + 0x00000105, + 0x00000106, + 0x00000107, + 0x00000108, + 0x00000109, + 0x0000010a, + 0x0000010b, + 0x0000010c, + 0x0000010d, + 0x0000011c, + 0x0000011d, + 0x0000011e, + 0x0000011f, + 0x00000120, + 0x00000121, + }, + { + 0x00000122, + 0x00000123, + 0x00000124, + 0x00000125, + 0x00000126, + 0x00000127, + 0x00000128, + 0x00000136, + 0x00000137, + 0x00000138, + 0x00000139, + 0x0000013a, + 0x0000013b, + 0x0000013c, + 0x0000013d, + 0x0000013e, + }, + { + 0x000000d6, + 0x000000d7, + 0x000000e6, + 0x000000e8, + 0x000000e9, + 0x000000ea, + 0x000000eb, + 0x000000ec, + 0x000000ed, + 0x000000ee, + 0x000000ef, + 0x000000f0, + 0x000000f1, + 0x000000f2, + 0x00000102, + 0x00000103, + }, + { + 0x0000013f, + 0x00000140, + 0x00000141, + 0x00000142, + 0x00000143, + 0x00000151, + 0x00000152, + 0x00000153, + 0x00000154, + 0x00000155, + 0x00000156, + 0x00000157, + 0x00000158, + 0x00000159, + 0x0000015a, + 0x0000015b, + }, + { + 0x0000015c, + 0x0000015d, + 0x0000015e, + 0x00000169, + 0x0000016a, + 0x0000016b, + 0x0000016c, + 0x0000016d, + 0x0000016e, + 0x0000016f, + 0x00000170, + 0x00000171, + 0x00000172, + 0x00000173, + 0x00000174, + 0x00000175, + }, + { + 0x00000176, + 0x00000177, + 0x00000178, + 0x00000179, + 0x00000183, + 0x00000184, + 0x00000185, + 0x00000186, + 0x00000187, + 0x00000188, + 0x00000189, + 0x0000018a, + 0x0000018b, + 0x0000018c, + 0x0000018d, + 0x0000018e, + }, + { + 0x0000018f, + 0x00000190, + 0x00000191, + 0x00000192, + 0x00000193, + 0x00000194, + 0x0000019f, + 0x000001a0, + 0x000001a1, + 0x000001a2, + 0x000001a3, + 0x000001a4, + 0x000001a5, + 0x000001a6, + 0x000001a7, + 0x000001a8, + }, + { + 0x000001a9, + 0x000001aa, + 0x000001ab, + 0x000001ac, + 0x000001ad, + 0x000001ae, + 0x000001af, + 0x000001b4, + 0x000001b5, + 0x000001b6, + 0x000001b7, + 0x000001b8, + 0x000001b9, + 0x000001ba, + 0x000001bb, + 0x000001bc, + }, + { + 0x000001bd, + 0x000001be, + 0x000001bf, + 0x000001c0, + 0x000001c1, + 0x000001c2, + 0x000001c3, + 0x000001c4, + 0x000001c5, + 0x000001c6, + 0x000001c7, + 0x000001c8, + 0x000001c9, + 0x000001ca, + 0x000001cb, + 0x000001cd, + }, + { + 0x000001ce, + 0x000001cf, + 0x000001d0, + 0x000001d1, + 0x000001d2, + 0x000001d3, + 0x000001d4, + 0x000001d5, + 0x000001d6, + 0x000001d7, + 0x000001d8, + 0x000001d9, + 0x000001da, + 0x000001db, + 0x000001dc, + 0x000001dd, + }, + { + 0x000001de, + 0x000001df, + 0x000001e0, + 0x000001e1, + 0x000001e2, + 0x000001e3, + 0x000001e4, + 0x000001e5, + 0x000001e6, + 0x000001e7, + 0x000001e8, + 0x000001e9, + 0x000001ea, + 0x000001eb, + 0x000001ec, + 0x000001ed, + }, + { + 0x000001ee, + 0x000001ef, + 0x000001f0, + 0x000001f1, + 0x000001f2, + 0x000001f3, + 0x000001f4, + 0x000001f5, + 0x000001f6, + 0x000001f7, + 0x000001f8, + 0x000001f9, + 0x000001fa, + 0x000001fb, + 0x000001fc, + 0x000001fd, + }, + { + 0x000001fe, + 0x000001ff, + 0x00000200, + 0x00000201, + 0x00000202, + 0x00000203, + 0x00000204, + 0x00000205, + 0x00000206, + 0x00000207, + 0x00000208, + 0x00000209, + 0x0000020a, + 0x0000020b, + 0x0000020c, + 0x0000020d, + }, + { + 0x0000020e, + 0x0000020f, + 0x00000210, + 0x00000211, + 0x00000212, + 0x00000213, + 0x00000214, + 0x00000215, + 0x00000216, + 0x00000217, + 0x00000218, + 0x00000219, + 0x0000021a, + 0x0000021b, + 0x0000021c, + 0x0000021d, + }, + { + 0x0000021e, + 0x0000021f, + 0x00000220, + 0x00000221, + 0x00000222, + 0x00000223, + 0x00000224, + 0x00000225, + 0x00000226, + 0x00000227, + 0x00000228, + 0x00000229, + 0x0000022a, + 0x0000022b, + 0x0000022c, + 0x0000022d, + }, + { + 0x0000022e, + 0x0000022f, + 0x00000230, + 0x00000231, + 0x00000232, + 0x00000233, + 0x00000234, + 0x00000235, + 0x00000236, + 0x00000237, + 0x00000238, + 0x00000239, + 0x0000023a, + 0x0000023b, + 0x0000023c, + 0x0000023d, + }, + { + 0x0000023e, + 0x0000023f, + 0x00000240, + 0x00000241, + 0x00000242, + 0x00000243, + 0x00000244, + 0x00000245, + 0x00000246, + 0x00000247, + 0x00000248, + 0x00000249, + 0x0000024a, + 0x0000024b, + 0x0000024c, + 0x0000024d, + }, + { + 0x0000024e, + 0x0000024f, + 0x00000250, + 0x00000251, + 0x00000252, + 0x00000253, + 0x00000254, + 0x00000255, + 0x00000256, + 0x00000257, + 0x00000258, + 0x00000259, + 0x0000025a, + 0x0000025b, + 0x0000025c, + 0x0000025d, + }, + { + 0x0000025e, + 0x0000025f, + 0x00000260, + 0x00000261, + 0x00000262, + 0x00000263, + 0x00000264, + 0x00000265, + 0x00000266, + 0x00000267, + 0x00000268, + 0x00000269, + 0x0000026a, + 0x0000026b, + 0x0000026c, + 0x0000026d, + }, + { + 0x0000026e, + 0x0000026f, + 0x00000270, + 0x00000271, + 0x00000272, + 0x00000273, + 0x00000274, + 0x00000275, + 0x00000276, + 0x00000277, + 0x00000278, + 0x00000279, + 0x0000027a, + 0x0000027b, + 0x0000027c, + 0x0000027d, + }, + { + 0x0000027e, + 0x0000027f, + 0x00000280, + 0x00000281, + 0x00000282, + 0x00000283, + 0x00000284, + 0x00000285, + 0x00000286, + 0x00000287, + 0x00000288, + 0x00000289, + 0x0000028a, + 0x0000028b, + 0x0000028c, + 0x0000028d, + }, + { + 0x0000028e, + 0x0000028f, + 0x00000290, + 0x00000291, + 0x00000292, + 0x00000293, + 0x00000294, + 0x00000295, + 0x00000296, + 0x00000297, + 0x00000298, + 0x00000299, + 0x0000029a, + 0x0000029b, + 0x0000029c, + 0x0000029d, + }, + { + 0x0000029e, + 0x0000029f, + 0x000002a0, + 0x000002a1, + 0x000002a2, + 0x000002a3, + 0x000002a4, + 0x000002a5, + 0x000002a6, + 0x000002a7, + 0x000002a8, + 0x000002a9, + 0x000002aa, + 0x000002ab, + 0x000002ac, + 0x000002ad, + }, }; #endif @@ -1635,23 +16793,148 @@ const uint32_t c_aauiCQMFHuffEnc18[28][2] = #else const uint16_t c_aauiCQMFHuffEnc18[28][2] = #endif -{ - {0x0004, 0x0001}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0003, 0x0004}, {0x0003, 0x0005}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0002}, - {0x0004, 0x0003}, {0x0005, 0x0001}, {0x0006, 0x0001}, {0x0007, 0x0001}, {0x0008, 0x0001}, {0x0009, 0x0001}, {0x000a, 0x0001}, {0x000b, 0x0001}, - {0x000c, 0x0001}, {0x000d, 0x0001}, {0x000e, 0x0001}, {0x000f, 0x0001}, {0x0011, 0x0003}, {0x0012, 0x0001}, {0x0012, 0x0002}, {0x0012, 0x0003}, - {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0012, 0x0004}, {0x0012, 0x0005}, + { + { 0x0004, 0x0001 }, + { 0x0003, 0x0002 }, + { 0x0003, 0x0003 }, + { 0x0003, 0x0004 }, + { 0x0003, 0x0005 }, + { 0x0003, 0x0006 }, + { 0x0003, 0x0007 }, + { 0x0004, 0x0002 }, + { 0x0004, 0x0003 }, + { 0x0005, 0x0001 }, + { 0x0006, 0x0001 }, + { 0x0007, 0x0001 }, + { 0x0008, 0x0001 }, + { 0x0009, 0x0001 }, + { 0x000a, 0x0001 }, + { 0x000b, 0x0001 }, + { 0x000c, 0x0001 }, + { 0x000d, 0x0001 }, + { 0x000e, 0x0001 }, + { 0x000f, 0x0001 }, + { 0x0011, 0x0003 }, + { 0x0012, 0x0001 }, + { 0x0012, 0x0002 }, + { 0x0012, 0x0003 }, + { 0x0013, 0x0000 }, + { 0x0013, 0x0001 }, + { 0x0012, 0x0004 }, + { 0x0012, 0x0005 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec18[6][16] = -{ - {0x0001ffff, 0x00000000, 0x00000007, 0x00000008, 0x00010001, 0x00010001, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00010004, 0x00010004, 0x00010005, 0x00010005, 0x00010006, 0x00010006, }, - {0x0002ffff, 0x0000000c, 0x0001000b, 0x0001000b, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, - {0x0003ffff, 0x00000010, 0x0001000f, 0x0001000f, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, }, - {0x0005ffff, 0x0004ffff, 0x00010013, 0x00010013, 0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, - {0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, }, - {0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x00020015, 0x00020015, 0x00020015, 0x00020015, 0x00020016, 0x00020016, 0x00020016, 0x00020016, 0x00020017, 0x00020017, 0x00020017, 0x00020017, }, +const uint32_t c_aauiCQMFHuffDec18[6][16] = { + { + 0x0001ffff, + 0x00000000, + 0x00000007, + 0x00000008, + 0x00010001, + 0x00010001, + 0x00010002, + 0x00010002, + 0x00010003, + 0x00010003, + 0x00010004, + 0x00010004, + 0x00010005, + 0x00010005, + 0x00010006, + 0x00010006, + }, + { + 0x0002ffff, + 0x0000000c, + 0x0001000b, + 0x0001000b, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + }, + { + 0x0003ffff, + 0x00000010, + 0x0001000f, + 0x0001000f, + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + }, + { + 0x0005ffff, + 0x0004ffff, + 0x00010013, + 0x00010013, + 0x00020012, + 0x00020012, + 0x00020012, + 0x00020012, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + }, + { + 0x0002001a, + 0x0002001a, + 0x0002001a, + 0x0002001a, + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + }, + { + 0x00010018, + 0x00010018, + 0x00010019, + 0x00010019, + 0x00020015, + 0x00020015, + 0x00020015, + 0x00020015, + 0x00020016, + 0x00020016, + 0x00020016, + 0x00020016, + 0x00020017, + 0x00020017, + 0x00020017, + 0x00020017, + }, }; #endif @@ -1660,23 +16943,149 @@ const uint32_t c_aauiCQMFHuffEnc19[29][2] = #else const uint16_t c_aauiCQMFHuffEnc19[29][2] = #endif -{ - {0x0004, 0x0002}, {0x0003, 0x0003}, {0x0003, 0x0004}, {0x0003, 0x0005}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0003}, {0x0004, 0x0004}, - {0x0004, 0x0005}, {0x0005, 0x0001}, {0x0005, 0x0002}, {0x0005, 0x0003}, {0x0006, 0x0001}, {0x0007, 0x0001}, {0x0008, 0x0001}, {0x0009, 0x0001}, - {0x000a, 0x0001}, {0x000b, 0x0001}, {0x000c, 0x0001}, {0x000d, 0x0001}, {0x000e, 0x0001}, {0x000f, 0x0001}, {0x0010, 0x0001}, {0x0012, 0x0002}, - {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0012, 0x0003}, + { + { 0x0004, 0x0002 }, + { 0x0003, 0x0003 }, + { 0x0003, 0x0004 }, + { 0x0003, 0x0005 }, + { 0x0003, 0x0006 }, + { 0x0003, 0x0007 }, + { 0x0004, 0x0003 }, + { 0x0004, 0x0004 }, + { 0x0004, 0x0005 }, + { 0x0005, 0x0001 }, + { 0x0005, 0x0002 }, + { 0x0005, 0x0003 }, + { 0x0006, 0x0001 }, + { 0x0007, 0x0001 }, + { 0x0008, 0x0001 }, + { 0x0009, 0x0001 }, + { 0x000a, 0x0001 }, + { 0x000b, 0x0001 }, + { 0x000c, 0x0001 }, + { 0x000d, 0x0001 }, + { 0x000e, 0x0001 }, + { 0x000f, 0x0001 }, + { 0x0010, 0x0001 }, + { 0x0012, 0x0002 }, + { 0x0013, 0x0000 }, + { 0x0013, 0x0001 }, + { 0x0013, 0x0002 }, + { 0x0013, 0x0003 }, + { 0x0012, 0x0003 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec19[6][16] = -{ - {0x0001ffff, 0x0002ffff, 0x00000000, 0x00000006, 0x00000007, 0x00000008, 0x00010001, 0x00010001, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00010004, 0x00010004, 0x00010005, 0x00010005, }, - {0x0003ffff, 0x0000000e, 0x0001000d, 0x0001000d, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, - {0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, - {0x0004ffff, 0x00000012, 0x00010011, 0x00010011, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, - {0x0005ffff, 0x00000016, 0x00010015, 0x00010015, 0x00020014, 0x00020014, 0x00020014, 0x00020014, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, }, - {0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x0001001a, 0x0001001a, 0x0001001b, 0x0001001b, 0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, }, +const uint32_t c_aauiCQMFHuffDec19[6][16] = { + { + 0x0001ffff, + 0x0002ffff, + 0x00000000, + 0x00000006, + 0x00000007, + 0x00000008, + 0x00010001, + 0x00010001, + 0x00010002, + 0x00010002, + 0x00010003, + 0x00010003, + 0x00010004, + 0x00010004, + 0x00010005, + 0x00010005, + }, + { + 0x0003ffff, + 0x0000000e, + 0x0001000d, + 0x0001000d, + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + }, + { + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + }, + { + 0x0004ffff, + 0x00000012, + 0x00010011, + 0x00010011, + 0x00020010, + 0x00020010, + 0x00020010, + 0x00020010, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + }, + { + 0x0005ffff, + 0x00000016, + 0x00010015, + 0x00010015, + 0x00020014, + 0x00020014, + 0x00020014, + 0x00020014, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + }, + { + 0x00010018, + 0x00010018, + 0x00010019, + 0x00010019, + 0x0001001a, + 0x0001001a, + 0x0001001b, + 0x0001001b, + 0x00020017, + 0x00020017, + 0x00020017, + 0x00020017, + 0x0002001c, + 0x0002001c, + 0x0002001c, + 0x0002001c, + }, }; #endif @@ -1685,22 +17094,151 @@ const uint32_t c_aauiCQMFHuffEnc20[32][2] = #else const uint16_t c_aauiCQMFHuffEnc20[32][2] = #endif -{ - {0x0004, 0x0002}, {0x0003, 0x0005}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0003}, {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0004, 0x0006}, - {0x0004, 0x0007}, {0x0004, 0x0008}, {0x0004, 0x0009}, {0x0005, 0x0002}, {0x0005, 0x0003}, {0x0006, 0x0001}, {0x0006, 0x0002}, {0x0006, 0x0003}, - {0x0007, 0x0001}, {0x0008, 0x0001}, {0x0009, 0x0001}, {0x000a, 0x0001}, {0x000b, 0x0001}, {0x000c, 0x0001}, {0x000d, 0x0001}, {0x000e, 0x0001}, - {0x000f, 0x0001}, {0x0010, 0x0001}, {0x0011, 0x0001}, {0x0014, 0x0000}, {0x0014, 0x0001}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, -}; + { + { 0x0004, 0x0002 }, + { 0x0003, 0x0005 }, + { 0x0003, 0x0006 }, + { 0x0003, 0x0007 }, + { 0x0004, 0x0003 }, + { 0x0004, 0x0004 }, + { 0x0004, 0x0005 }, + { 0x0004, 0x0006 }, + { 0x0004, 0x0007 }, + { 0x0004, 0x0008 }, + { 0x0004, 0x0009 }, + { 0x0005, 0x0002 }, + { 0x0005, 0x0003 }, + { 0x0006, 0x0001 }, + { 0x0006, 0x0002 }, + { 0x0006, 0x0003 }, + { 0x0007, 0x0001 }, + { 0x0008, 0x0001 }, + { 0x0009, 0x0001 }, + { 0x000a, 0x0001 }, + { 0x000b, 0x0001 }, + { 0x000c, 0x0001 }, + { 0x000d, 0x0001 }, + { 0x000e, 0x0001 }, + { 0x000f, 0x0001 }, + { 0x0010, 0x0001 }, + { 0x0011, 0x0001 }, + { 0x0014, 0x0000 }, + { 0x0014, 0x0001 }, + { 0x0013, 0x0001 }, + { 0x0013, 0x0002 }, + { 0x0013, 0x0003 }, + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec20[6][16] = -{ - {0x0002ffff, 0x0001ffff, 0x00000000, 0x00000004, 0x00000005, 0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x0000000a, 0x00010001, 0x00010001, 0x00010002, 0x00010002, 0x00010003, 0x00010003, }, - {0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, - {0x0003ffff, 0x00000011, 0x00010010, 0x00010010, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, }, - {0x0004ffff, 0x00000015, 0x00010014, 0x00010014, 0x00020013, 0x00020013, 0x00020013, 0x00020013, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, }, - {0x0005ffff, 0x00000019, 0x00010018, 0x00010018, 0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, }, - {0x0000001b, 0x0000001c, 0x0001001d, 0x0001001d, 0x0001001e, 0x0001001e, 0x0001001f, 0x0001001f, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, }, +const uint32_t c_aauiCQMFHuffDec20[6][16] = { + { + 0x0002ffff, + 0x0001ffff, + 0x00000000, + 0x00000004, + 0x00000005, + 0x00000006, + 0x00000007, + 0x00000008, + 0x00000009, + 0x0000000a, + 0x00010001, + 0x00010001, + 0x00010002, + 0x00010002, + 0x00010003, + 0x00010003, + }, + { + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + }, + { + 0x0003ffff, + 0x00000011, + 0x00010010, + 0x00010010, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0002000f, + 0x0002000f, + 0x0002000f, + 0x0002000f, + }, + { + 0x0004ffff, + 0x00000015, + 0x00010014, + 0x00010014, + 0x00020013, + 0x00020013, + 0x00020013, + 0x00020013, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + }, + { + 0x0005ffff, + 0x00000019, + 0x00010018, + 0x00010018, + 0x00020017, + 0x00020017, + 0x00020017, + 0x00020017, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + }, + { + 0x0000001b, + 0x0000001c, + 0x0001001d, + 0x0001001d, + 0x0001001e, + 0x0001001e, + 0x0001001f, + 0x0001001f, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + }, }; #endif @@ -1709,25 +17247,175 @@ const uint32_t c_aauiCQMFHuffEnc21[37][2] = #else const uint16_t c_aauiCQMFHuffEnc21[37][2] = #endif -{ - {0x0005, 0x0002}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0003}, {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0004, 0x0006}, {0x0004, 0x0007}, - {0x0004, 0x0008}, {0x0004, 0x0009}, {0x0004, 0x000a}, {0x0004, 0x000b}, {0x0005, 0x0003}, {0x0005, 0x0004}, {0x0005, 0x0005}, {0x0006, 0x0002}, - {0x0006, 0x0003}, {0x0007, 0x0002}, {0x0007, 0x0003}, {0x0008, 0x0001}, {0x0008, 0x0002}, {0x0008, 0x0003}, {0x0009, 0x0001}, {0x000b, 0x0001}, - {0x000b, 0x0002}, {0x000b, 0x0003}, {0x000c, 0x0001}, {0x000d, 0x0001}, {0x000e, 0x0001}, {0x000f, 0x0001}, {0x0010, 0x0001}, {0x0011, 0x0001}, - {0x0014, 0x0000}, {0x0014, 0x0001}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, + { + { 0x0005, 0x0002 }, + { 0x0003, 0x0006 }, + { 0x0003, 0x0007 }, + { 0x0004, 0x0003 }, + { 0x0004, 0x0004 }, + { 0x0004, 0x0005 }, + { 0x0004, 0x0006 }, + { 0x0004, 0x0007 }, + { 0x0004, 0x0008 }, + { 0x0004, 0x0009 }, + { 0x0004, 0x000a }, + { 0x0004, 0x000b }, + { 0x0005, 0x0003 }, + { 0x0005, 0x0004 }, + { 0x0005, 0x0005 }, + { 0x0006, 0x0002 }, + { 0x0006, 0x0003 }, + { 0x0007, 0x0002 }, + { 0x0007, 0x0003 }, + { 0x0008, 0x0001 }, + { 0x0008, 0x0002 }, + { 0x0008, 0x0003 }, + { 0x0009, 0x0001 }, + { 0x000b, 0x0001 }, + { 0x000b, 0x0002 }, + { 0x000b, 0x0003 }, + { 0x000c, 0x0001 }, + { 0x000d, 0x0001 }, + { 0x000e, 0x0001 }, + { 0x000f, 0x0001 }, + { 0x0010, 0x0001 }, + { 0x0011, 0x0001 }, + { 0x0014, 0x0000 }, + { 0x0014, 0x0001 }, + { 0x0013, 0x0001 }, + { 0x0013, 0x0002 }, + { 0x0013, 0x0003 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec21[7][16] = -{ - {0x0003ffff, 0x0001ffff, 0x0002ffff, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x00010001, 0x00010001, 0x00010002, 0x00010002, }, - {0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, - {0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, - {0x0004ffff, 0x00000013, 0x00000014, 0x00000015, 0x00010011, 0x00010011, 0x00010012, 0x00010012, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, 0x00020010, 0x00020010, 0x00020010, 0x00020010, }, - {0x0005ffff, 0x0000001a, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, }, - {0x0006ffff, 0x0000001e, 0x0001001d, 0x0001001d, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, }, - {0x00000020, 0x00000021, 0x00010022, 0x00010022, 0x00010023, 0x00010023, 0x00010024, 0x00010024, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, }, +const uint32_t c_aauiCQMFHuffDec21[7][16] = { + { + 0x0003ffff, + 0x0001ffff, + 0x0002ffff, + 0x00000003, + 0x00000004, + 0x00000005, + 0x00000006, + 0x00000007, + 0x00000008, + 0x00000009, + 0x0000000a, + 0x0000000b, + 0x00010001, + 0x00010001, + 0x00010002, + 0x00010002, + }, + { + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + }, + { + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + }, + { + 0x0004ffff, + 0x00000013, + 0x00000014, + 0x00000015, + 0x00010011, + 0x00010011, + 0x00010012, + 0x00010012, + 0x0002000f, + 0x0002000f, + 0x0002000f, + 0x0002000f, + 0x00020010, + 0x00020010, + 0x00020010, + 0x00020010, + }, + { + 0x0005ffff, + 0x0000001a, + 0x00010017, + 0x00010017, + 0x00010018, + 0x00010018, + 0x00010019, + 0x00010019, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + }, + { + 0x0006ffff, + 0x0000001e, + 0x0001001d, + 0x0001001d, + 0x0002001c, + 0x0002001c, + 0x0002001c, + 0x0002001c, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + }, + { + 0x00000020, + 0x00000021, + 0x00010022, + 0x00010022, + 0x00010023, + 0x00010023, + 0x00010024, + 0x00010024, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + }, }; #endif @@ -1736,27 +17424,213 @@ const uint32_t c_aauiCQMFHuffEnc22[39][2] = #else const uint16_t c_aauiCQMFHuffEnc22[39][2] = #endif -{ - {0x0005, 0x0002}, {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0004, 0x0008}, {0x0004, 0x0009}, {0x0004, 0x000a}, - {0x0004, 0x000b}, {0x0004, 0x000c}, {0x0004, 0x000d}, {0x0004, 0x000e}, {0x0004, 0x000f}, {0x0005, 0x0003}, {0x0005, 0x0004}, {0x0005, 0x0005}, - {0x0005, 0x0006}, {0x0005, 0x0007}, {0x0006, 0x0002}, {0x0006, 0x0003}, {0x0007, 0x0002}, {0x0007, 0x0003}, {0x0008, 0x0002}, {0x0008, 0x0003}, - {0x0009, 0x0002}, {0x0009, 0x0003}, {0x000a, 0x0001}, {0x000a, 0x0002}, {0x000a, 0x0003}, {0x000c, 0x0001}, {0x000c, 0x0002}, {0x000c, 0x0003}, - {0x000e, 0x0001}, {0x000e, 0x0002}, {0x000f, 0x0001}, {0x000e, 0x0003}, {0x0011, 0x0000}, {0x0010, 0x0001}, {0x0011, 0x0001}, + { + { 0x0005, 0x0002 }, + { 0x0004, 0x0004 }, + { 0x0004, 0x0005 }, + { 0x0004, 0x0006 }, + { 0x0004, 0x0007 }, + { 0x0004, 0x0008 }, + { 0x0004, 0x0009 }, + { 0x0004, 0x000a }, + { 0x0004, 0x000b }, + { 0x0004, 0x000c }, + { 0x0004, 0x000d }, + { 0x0004, 0x000e }, + { 0x0004, 0x000f }, + { 0x0005, 0x0003 }, + { 0x0005, 0x0004 }, + { 0x0005, 0x0005 }, + { 0x0005, 0x0006 }, + { 0x0005, 0x0007 }, + { 0x0006, 0x0002 }, + { 0x0006, 0x0003 }, + { 0x0007, 0x0002 }, + { 0x0007, 0x0003 }, + { 0x0008, 0x0002 }, + { 0x0008, 0x0003 }, + { 0x0009, 0x0002 }, + { 0x0009, 0x0003 }, + { 0x000a, 0x0001 }, + { 0x000a, 0x0002 }, + { 0x000a, 0x0003 }, + { 0x000c, 0x0001 }, + { 0x000c, 0x0002 }, + { 0x000c, 0x0003 }, + { 0x000e, 0x0001 }, + { 0x000e, 0x0002 }, + { 0x000f, 0x0001 }, + { 0x000e, 0x0003 }, + { 0x0011, 0x0000 }, + { 0x0010, 0x0001 }, + { 0x0011, 0x0001 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec22[9][16] = -{ - {0x0004ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0000000c, }, - {0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, }, - {0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, - {0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, - {0x0006ffff, 0x0005ffff, 0x00000016, 0x00000017, 0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00020013, 0x00020013, 0x00020013, 0x00020013, }, - {0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, }, - {0x0007ffff, 0x0000001d, 0x0000001e, 0x0000001f, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, }, - {0x0008ffff, 0x00000025, 0x00010022, 0x00010022, 0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020023, 0x00020023, 0x00020023, 0x00020023, }, - {0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, }, +const uint32_t c_aauiCQMFHuffDec22[9][16] = { + { + 0x0004ffff, + 0x0001ffff, + 0x0002ffff, + 0x0003ffff, + 0x00000001, + 0x00000002, + 0x00000003, + 0x00000004, + 0x00000005, + 0x00000006, + 0x00000007, + 0x00000008, + 0x00000009, + 0x0000000a, + 0x0000000b, + 0x0000000c, + }, + { + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + }, + { + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + }, + { + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + }, + { + 0x0006ffff, + 0x0005ffff, + 0x00000016, + 0x00000017, + 0x00010014, + 0x00010014, + 0x00010015, + 0x00010015, + 0x00020012, + 0x00020012, + 0x00020012, + 0x00020012, + 0x00020013, + 0x00020013, + 0x00020013, + 0x00020013, + }, + { + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + }, + { + 0x0007ffff, + 0x0000001d, + 0x0000001e, + 0x0000001f, + 0x0002001a, + 0x0002001a, + 0x0002001a, + 0x0002001a, + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002001c, + 0x0002001c, + 0x0002001c, + 0x0002001c, + }, + { + 0x0008ffff, + 0x00000025, + 0x00010022, + 0x00010022, + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020021, + 0x00020021, + 0x00020021, + 0x00020021, + 0x00020023, + 0x00020023, + 0x00020023, + 0x00020023, + }, + { + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + }, }; #endif @@ -1765,31 +17639,274 @@ const uint32_t c_aauiCQMFHuffEnc23[46][2] = #else const uint16_t c_aauiCQMFHuffEnc23[46][2] = #endif -{ - {0x0005, 0x0003}, {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0004, 0x0008}, {0x0004, 0x0009}, {0x0004, 0x000a}, {0x0004, 0x000b}, {0x0004, 0x000c}, - {0x0004, 0x000d}, {0x0004, 0x000e}, {0x0004, 0x000f}, {0x0005, 0x0004}, {0x0005, 0x0005}, {0x0005, 0x0006}, {0x0005, 0x0007}, {0x0005, 0x0008}, - {0x0005, 0x0009}, {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0006, 0x0003}, {0x0006, 0x0004}, {0x0006, 0x0005}, {0x0007, 0x0002}, {0x0007, 0x0003}, - {0x0007, 0x0004}, {0x0007, 0x0005}, {0x0008, 0x0002}, {0x0008, 0x0003}, {0x0009, 0x0002}, {0x0009, 0x0003}, {0x000a, 0x0002}, {0x000a, 0x0003}, - {0x000b, 0x0002}, {0x000b, 0x0003}, {0x000c, 0x0002}, {0x000c, 0x0003}, {0x000d, 0x0002}, {0x000d, 0x0003}, {0x000e, 0x0001}, {0x000e, 0x0002}, - {0x000e, 0x0003}, {0x000f, 0x0001}, {0x0010, 0x0001}, {0x0012, 0x0000}, {0x0012, 0x0001}, {0x0011, 0x0001}, + { + { 0x0005, 0x0003 }, + { 0x0004, 0x0006 }, + { 0x0004, 0x0007 }, + { 0x0004, 0x0008 }, + { 0x0004, 0x0009 }, + { 0x0004, 0x000a }, + { 0x0004, 0x000b }, + { 0x0004, 0x000c }, + { 0x0004, 0x000d }, + { 0x0004, 0x000e }, + { 0x0004, 0x000f }, + { 0x0005, 0x0004 }, + { 0x0005, 0x0005 }, + { 0x0005, 0x0006 }, + { 0x0005, 0x0007 }, + { 0x0005, 0x0008 }, + { 0x0005, 0x0009 }, + { 0x0005, 0x000a }, + { 0x0005, 0x000b }, + { 0x0006, 0x0003 }, + { 0x0006, 0x0004 }, + { 0x0006, 0x0005 }, + { 0x0007, 0x0002 }, + { 0x0007, 0x0003 }, + { 0x0007, 0x0004 }, + { 0x0007, 0x0005 }, + { 0x0008, 0x0002 }, + { 0x0008, 0x0003 }, + { 0x0009, 0x0002 }, + { 0x0009, 0x0003 }, + { 0x000a, 0x0002 }, + { 0x000a, 0x0003 }, + { 0x000b, 0x0002 }, + { 0x000b, 0x0003 }, + { 0x000c, 0x0002 }, + { 0x000c, 0x0003 }, + { 0x000d, 0x0002 }, + { 0x000d, 0x0003 }, + { 0x000e, 0x0001 }, + { 0x000e, 0x0002 }, + { 0x000e, 0x0003 }, + { 0x000f, 0x0001 }, + { 0x0010, 0x0001 }, + { 0x0012, 0x0000 }, + { 0x0012, 0x0001 }, + { 0x0011, 0x0001 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec23[12][16] = -{ - {0x0006ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x0000000a, }, - {0x00020014, 0x00020014, 0x00020014, 0x00020014, 0x00020015, 0x00020015, 0x00020015, 0x00020015, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, - {0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, - {0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, }, - {0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, }, - {0x0008ffff, 0x0007ffff, 0x0000001a, 0x0000001b, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x00020013, 0x00020013, 0x00020013, 0x00020013, }, - {0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, }, - {0x000affff, 0x0009ffff, 0x00000022, 0x00000023, 0x00010020, 0x00010020, 0x00010021, 0x00010021, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, }, - {0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, }, - {0x000bffff, 0x0000002a, 0x00010029, 0x00010029, 0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00020027, 0x00020027, 0x00020027, 0x00020027, 0x00020028, 0x00020028, 0x00020028, 0x00020028, }, - {0x0002002b, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, }, +const uint32_t c_aauiCQMFHuffDec23[12][16] = { + { + 0x0006ffff, + 0x0001ffff, + 0x0002ffff, + 0x0003ffff, + 0x0004ffff, + 0x0005ffff, + 0x00000001, + 0x00000002, + 0x00000003, + 0x00000004, + 0x00000005, + 0x00000006, + 0x00000007, + 0x00000008, + 0x00000009, + 0x0000000a, + }, + { + 0x00020014, + 0x00020014, + 0x00020014, + 0x00020014, + 0x00020015, + 0x00020015, + 0x00020015, + 0x00020015, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + }, + { + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + }, + { + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + }, + { + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + }, + { + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + }, + { + 0x0008ffff, + 0x0007ffff, + 0x0000001a, + 0x0000001b, + 0x00010016, + 0x00010016, + 0x00010017, + 0x00010017, + 0x00010018, + 0x00010018, + 0x00010019, + 0x00010019, + 0x00020013, + 0x00020013, + 0x00020013, + 0x00020013, + }, + { + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + }, + { + 0x000affff, + 0x0009ffff, + 0x00000022, + 0x00000023, + 0x00010020, + 0x00010020, + 0x00010021, + 0x00010021, + 0x0002001e, + 0x0002001e, + 0x0002001e, + 0x0002001e, + 0x0002001f, + 0x0002001f, + 0x0002001f, + 0x0002001f, + }, + { + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + }, + { + 0x000bffff, + 0x0000002a, + 0x00010029, + 0x00010029, + 0x00020026, + 0x00020026, + 0x00020026, + 0x00020026, + 0x00020027, + 0x00020027, + 0x00020027, + 0x00020027, + 0x00020028, + 0x00020028, + 0x00020028, + 0x00020028, + }, + { + 0x0002002b, + 0x0002002b, + 0x0002002b, + 0x0002002b, + 0x0002002c, + 0x0002002c, + 0x0002002c, + 0x0002002c, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + }, }; #endif @@ -1798,37 +17915,373 @@ const uint32_t c_aauiCQMFHuffEnc24[55][2] = #else const uint16_t c_aauiCQMFHuffEnc24[55][2] = #endif -{ - {0x0005, 0x0004}, {0x0004, 0x0009}, {0x0004, 0x000a}, {0x0004, 0x000b}, {0x0004, 0x000c}, {0x0004, 0x000d}, {0x0004, 0x000e}, {0x0004, 0x000f}, - {0x0005, 0x0005}, {0x0005, 0x0006}, {0x0005, 0x0007}, {0x0005, 0x0008}, {0x0005, 0x0009}, {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0005, 0x000c}, - {0x0005, 0x000d}, {0x0005, 0x000e}, {0x0005, 0x000f}, {0x0005, 0x0010}, {0x0005, 0x0011}, {0x0006, 0x0003}, {0x0006, 0x0004}, {0x0006, 0x0005}, - {0x0006, 0x0006}, {0x0006, 0x0007}, {0x0007, 0x0003}, {0x0007, 0x0004}, {0x0007, 0x0005}, {0x0008, 0x0003}, {0x0008, 0x0004}, {0x0008, 0x0005}, - {0x0009, 0x0002}, {0x0009, 0x0003}, {0x0009, 0x0004}, {0x0009, 0x0005}, {0x000a, 0x0002}, {0x000a, 0x0003}, {0x000b, 0x0002}, {0x000b, 0x0003}, - {0x000c, 0x0003}, {0x000d, 0x0002}, {0x000d, 0x0003}, {0x000d, 0x0004}, {0x000d, 0x0005}, {0x000e, 0x0002}, {0x000e, 0x0003}, {0x000f, 0x0001}, - {0x000f, 0x0002}, {0x000f, 0x0003}, {0x0010, 0x0001}, {0x0011, 0x0001}, {0x0013, 0x0000}, {0x0012, 0x0001}, {0x0013, 0x0001}, + { + { 0x0005, 0x0004 }, + { 0x0004, 0x0009 }, + { 0x0004, 0x000a }, + { 0x0004, 0x000b }, + { 0x0004, 0x000c }, + { 0x0004, 0x000d }, + { 0x0004, 0x000e }, + { 0x0004, 0x000f }, + { 0x0005, 0x0005 }, + { 0x0005, 0x0006 }, + { 0x0005, 0x0007 }, + { 0x0005, 0x0008 }, + { 0x0005, 0x0009 }, + { 0x0005, 0x000a }, + { 0x0005, 0x000b }, + { 0x0005, 0x000c }, + { 0x0005, 0x000d }, + { 0x0005, 0x000e }, + { 0x0005, 0x000f }, + { 0x0005, 0x0010 }, + { 0x0005, 0x0011 }, + { 0x0006, 0x0003 }, + { 0x0006, 0x0004 }, + { 0x0006, 0x0005 }, + { 0x0006, 0x0006 }, + { 0x0006, 0x0007 }, + { 0x0007, 0x0003 }, + { 0x0007, 0x0004 }, + { 0x0007, 0x0005 }, + { 0x0008, 0x0003 }, + { 0x0008, 0x0004 }, + { 0x0008, 0x0005 }, + { 0x0009, 0x0002 }, + { 0x0009, 0x0003 }, + { 0x0009, 0x0004 }, + { 0x0009, 0x0005 }, + { 0x000a, 0x0002 }, + { 0x000a, 0x0003 }, + { 0x000b, 0x0002 }, + { 0x000b, 0x0003 }, + { 0x000c, 0x0003 }, + { 0x000d, 0x0002 }, + { 0x000d, 0x0003 }, + { 0x000d, 0x0004 }, + { 0x000d, 0x0005 }, + { 0x000e, 0x0002 }, + { 0x000e, 0x0003 }, + { 0x000f, 0x0001 }, + { 0x000f, 0x0002 }, + { 0x000f, 0x0003 }, + { 0x0010, 0x0001 }, + { 0x0011, 0x0001 }, + { 0x0013, 0x0000 }, + { 0x0012, 0x0001 }, + { 0x0013, 0x0001 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec24[17][16] = -{ - {0x0008ffff, 0x0009ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, }, - {0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, }, - {0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, }, - {0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, - {0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, - {0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, }, - {0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, }, - {0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, }, - {0x000cffff, 0x000affff, 0x000bffff, 0x0000001d, 0x0000001e, 0x0000001f, 0x0001001a, 0x0001001a, 0x0001001b, 0x0001001b, 0x0001001c, 0x0001001c, 0x00020015, 0x00020015, 0x00020015, 0x00020015, }, - {0x00020016, 0x00020016, 0x00020016, 0x00020016, 0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x00020019, 0x00020019, 0x00020019, 0x00020019, }, - {0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, }, - {0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, }, - {0x000fffff, 0x000dffff, 0x000effff, 0x00000028, 0x00010026, 0x00010026, 0x00010027, 0x00010027, 0x00020024, 0x00020024, 0x00020024, 0x00020024, 0x00020025, 0x00020025, 0x00020025, 0x00020025, }, - {0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, }, - {0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, }, - {0x0010ffff, 0x00000032, 0x0001002f, 0x0001002f, 0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, }, - {0x00010034, 0x00010034, 0x00010036, 0x00010036, 0x00020035, 0x00020035, 0x00020035, 0x00020035, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, }, +const uint32_t c_aauiCQMFHuffDec24[17][16] = { + { + 0x0008ffff, + 0x0009ffff, + 0x0001ffff, + 0x0002ffff, + 0x0003ffff, + 0x0004ffff, + 0x0005ffff, + 0x0006ffff, + 0x0007ffff, + 0x00000001, + 0x00000002, + 0x00000003, + 0x00000004, + 0x00000005, + 0x00000006, + 0x00000007, + }, + { + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + }, + { + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + }, + { + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + }, + { + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + }, + { + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + }, + { + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + }, + { + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + }, + { + 0x000cffff, + 0x000affff, + 0x000bffff, + 0x0000001d, + 0x0000001e, + 0x0000001f, + 0x0001001a, + 0x0001001a, + 0x0001001b, + 0x0001001b, + 0x0001001c, + 0x0001001c, + 0x00020015, + 0x00020015, + 0x00020015, + 0x00020015, + }, + { + 0x00020016, + 0x00020016, + 0x00020016, + 0x00020016, + 0x00020017, + 0x00020017, + 0x00020017, + 0x00020017, + 0x00020018, + 0x00020018, + 0x00020018, + 0x00020018, + 0x00020019, + 0x00020019, + 0x00020019, + 0x00020019, + }, + { + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + }, + { + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + }, + { + 0x000fffff, + 0x000dffff, + 0x000effff, + 0x00000028, + 0x00010026, + 0x00010026, + 0x00010027, + 0x00010027, + 0x00020024, + 0x00020024, + 0x00020024, + 0x00020024, + 0x00020025, + 0x00020025, + 0x00020025, + 0x00020025, + }, + { + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + }, + { + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + }, + { + 0x0010ffff, + 0x00000032, + 0x0001002f, + 0x0001002f, + 0x00010030, + 0x00010030, + 0x00010031, + 0x00010031, + 0x0002002d, + 0x0002002d, + 0x0002002d, + 0x0002002d, + 0x0002002e, + 0x0002002e, + 0x0002002e, + 0x0002002e, + }, + { + 0x00010034, + 0x00010034, + 0x00010036, + 0x00010036, + 0x00020035, + 0x00020035, + 0x00020035, + 0x00020035, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + }, }; #endif @@ -1837,41 +18290,419 @@ const uint32_t c_aauiCQMFHuffEnc25[65][2] = #else const uint16_t c_aauiCQMFHuffEnc25[65][2] = #endif -{ - {0x0005, 0x0005}, {0x0004, 0x000c}, {0x0004, 0x000d}, {0x0004, 0x000e}, {0x0005, 0x0006}, {0x0004, 0x000f}, {0x0005, 0x0007}, {0x0005, 0x0008}, - {0x0005, 0x0009}, {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0005, 0x000c}, {0x0005, 0x000d}, {0x0005, 0x000e}, {0x0005, 0x000f}, {0x0005, 0x0010}, - {0x0005, 0x0011}, {0x0005, 0x0012}, {0x0005, 0x0013}, {0x0005, 0x0014}, {0x0005, 0x0015}, {0x0005, 0x0016}, {0x0005, 0x0017}, {0x0006, 0x0004}, - {0x0006, 0x0005}, {0x0006, 0x0006}, {0x0006, 0x0007}, {0x0006, 0x0008}, {0x0006, 0x0009}, {0x0007, 0x0003}, {0x0007, 0x0004}, {0x0007, 0x0005}, - {0x0007, 0x0006}, {0x0007, 0x0007}, {0x0008, 0x0003}, {0x0008, 0x0004}, {0x0008, 0x0005}, {0x0009, 0x0003}, {0x0009, 0x0004}, {0x0009, 0x0005}, - {0x000a, 0x0003}, {0x000a, 0x0004}, {0x000a, 0x0005}, {0x000b, 0x0003}, {0x000b, 0x0004}, {0x000b, 0x0005}, {0x000c, 0x0002}, {0x000c, 0x0003}, - {0x000c, 0x0004}, {0x000c, 0x0005}, {0x000d, 0x0003}, {0x000e, 0x0003}, {0x000e, 0x0004}, {0x000f, 0x0003}, {0x000e, 0x0005}, {0x000f, 0x0004}, - {0x0010, 0x0001}, {0x000f, 0x0005}, {0x0010, 0x0002}, {0x0010, 0x0003}, {0x0010, 0x0004}, {0x0010, 0x0005}, {0x0011, 0x0001}, {0x0012, 0x0000}, - {0x0012, 0x0001}, + { + { 0x0005, 0x0005 }, + { 0x0004, 0x000c }, + { 0x0004, 0x000d }, + { 0x0004, 0x000e }, + { 0x0005, 0x0006 }, + { 0x0004, 0x000f }, + { 0x0005, 0x0007 }, + { 0x0005, 0x0008 }, + { 0x0005, 0x0009 }, + { 0x0005, 0x000a }, + { 0x0005, 0x000b }, + { 0x0005, 0x000c }, + { 0x0005, 0x000d }, + { 0x0005, 0x000e }, + { 0x0005, 0x000f }, + { 0x0005, 0x0010 }, + { 0x0005, 0x0011 }, + { 0x0005, 0x0012 }, + { 0x0005, 0x0013 }, + { 0x0005, 0x0014 }, + { 0x0005, 0x0015 }, + { 0x0005, 0x0016 }, + { 0x0005, 0x0017 }, + { 0x0006, 0x0004 }, + { 0x0006, 0x0005 }, + { 0x0006, 0x0006 }, + { 0x0006, 0x0007 }, + { 0x0006, 0x0008 }, + { 0x0006, 0x0009 }, + { 0x0007, 0x0003 }, + { 0x0007, 0x0004 }, + { 0x0007, 0x0005 }, + { 0x0007, 0x0006 }, + { 0x0007, 0x0007 }, + { 0x0008, 0x0003 }, + { 0x0008, 0x0004 }, + { 0x0008, 0x0005 }, + { 0x0009, 0x0003 }, + { 0x0009, 0x0004 }, + { 0x0009, 0x0005 }, + { 0x000a, 0x0003 }, + { 0x000a, 0x0004 }, + { 0x000a, 0x0005 }, + { 0x000b, 0x0003 }, + { 0x000b, 0x0004 }, + { 0x000b, 0x0005 }, + { 0x000c, 0x0002 }, + { 0x000c, 0x0003 }, + { 0x000c, 0x0004 }, + { 0x000c, 0x0005 }, + { 0x000d, 0x0003 }, + { 0x000e, 0x0003 }, + { 0x000e, 0x0004 }, + { 0x000f, 0x0003 }, + { 0x000e, 0x0005 }, + { 0x000f, 0x0004 }, + { 0x0010, 0x0001 }, + { 0x000f, 0x0005 }, + { 0x0010, 0x0002 }, + { 0x0010, 0x0003 }, + { 0x0010, 0x0004 }, + { 0x0010, 0x0005 }, + { 0x0011, 0x0001 }, + { 0x0012, 0x0000 }, + { 0x0012, 0x0001 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec25[19][16] = -{ - {0x000cffff, 0x000bffff, 0x0002ffff, 0x0001ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x00000001, 0x00000002, 0x00000003, 0x00000005, }, - {0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, - {0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, }, - {0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, }, - {0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, - {0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, - {0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, }, - {0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, }, - {0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, }, - {0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, }, - {0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, }, - {0x000fffff, 0x000dffff, 0x000effff, 0x00000022, 0x00000023, 0x00000024, 0x0001001d, 0x0001001d, 0x0001001e, 0x0001001e, 0x0001001f, 0x0001001f, 0x00010020, 0x00010020, 0x00010021, 0x00010021, }, - {0x00020029, 0x00020029, 0x00020029, 0x00020029, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, }, - {0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, }, - {0x0011ffff, 0x0010ffff, 0x0000002e, 0x0000002f, 0x00000030, 0x00000031, 0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, 0x00020028, 0x00020028, 0x00020028, 0x00020028, }, - {0x00020034, 0x00020034, 0x00020034, 0x00020034, 0x00020036, 0x00020036, 0x00020036, 0x00020036, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, }, - {0x0012ffff, 0x00000038, 0x0000003a, 0x0000003b, 0x0000003c, 0x0000003d, 0x00010035, 0x00010035, 0x00010037, 0x00010037, 0x00010039, 0x00010039, 0x00020033, 0x00020033, 0x00020033, 0x00020033, }, - {0x0002003f, 0x0002003f, 0x0002003f, 0x0002003f, 0x00020040, 0x00020040, 0x00020040, 0x00020040, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, }, +const uint32_t c_aauiCQMFHuffDec25[19][16] = { + { + 0x000cffff, + 0x000bffff, + 0x0002ffff, + 0x0001ffff, + 0x0003ffff, + 0x0004ffff, + 0x0005ffff, + 0x0006ffff, + 0x0007ffff, + 0x0008ffff, + 0x0009ffff, + 0x000affff, + 0x00000001, + 0x00000002, + 0x00000003, + 0x00000005, + }, + { + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + }, + { + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002001c, + 0x0002001c, + 0x0002001c, + 0x0002001c, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + }, + { + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + }, + { + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + }, + { + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + }, + { + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + }, + { + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + }, + { + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + }, + { + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + }, + { + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + }, + { + 0x00020017, + 0x00020017, + 0x00020017, + 0x00020017, + 0x00020018, + 0x00020018, + 0x00020018, + 0x00020018, + 0x00020019, + 0x00020019, + 0x00020019, + 0x00020019, + 0x0002001a, + 0x0002001a, + 0x0002001a, + 0x0002001a, + }, + { + 0x000fffff, + 0x000dffff, + 0x000effff, + 0x00000022, + 0x00000023, + 0x00000024, + 0x0001001d, + 0x0001001d, + 0x0001001e, + 0x0001001e, + 0x0001001f, + 0x0001001f, + 0x00010020, + 0x00010020, + 0x00010021, + 0x00010021, + }, + { + 0x00020029, + 0x00020029, + 0x00020029, + 0x00020029, + 0x0002002a, + 0x0002002a, + 0x0002002a, + 0x0002002a, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + }, + { + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + }, + { + 0x0011ffff, + 0x0010ffff, + 0x0000002e, + 0x0000002f, + 0x00000030, + 0x00000031, + 0x0001002b, + 0x0001002b, + 0x0001002c, + 0x0001002c, + 0x0001002d, + 0x0001002d, + 0x00020028, + 0x00020028, + 0x00020028, + 0x00020028, + }, + { + 0x00020034, + 0x00020034, + 0x00020034, + 0x00020034, + 0x00020036, + 0x00020036, + 0x00020036, + 0x00020036, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + }, + { + 0x0012ffff, + 0x00000038, + 0x0000003a, + 0x0000003b, + 0x0000003c, + 0x0000003d, + 0x00010035, + 0x00010035, + 0x00010037, + 0x00010037, + 0x00010039, + 0x00010039, + 0x00020033, + 0x00020033, + 0x00020033, + 0x00020033, + }, + { + 0x0002003f, + 0x0002003f, + 0x0002003f, + 0x0002003f, + 0x00020040, + 0x00020040, + 0x00020040, + 0x00020040, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + }, }; #endif @@ -1880,49 +18711,557 @@ const uint32_t c_aauiCQMFHuffEnc26[77][2] = #else const uint16_t c_aauiCQMFHuffEnc26[77][2] = #endif -{ - {0x0006, 0x0004}, {0x0005, 0x0007}, {0x0005, 0x0008}, {0x0005, 0x0009}, {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0005, 0x000c}, {0x0005, 0x000d}, - {0x0005, 0x000e}, {0x0005, 0x000f}, {0x0005, 0x0010}, {0x0005, 0x0011}, {0x0005, 0x0012}, {0x0005, 0x0013}, {0x0005, 0x0014}, {0x0005, 0x0015}, - {0x0005, 0x0016}, {0x0005, 0x0017}, {0x0005, 0x0018}, {0x0005, 0x0019}, {0x0005, 0x001a}, {0x0005, 0x001b}, {0x0005, 0x001c}, {0x0005, 0x001d}, - {0x0005, 0x001e}, {0x0005, 0x001f}, {0x0006, 0x0005}, {0x0006, 0x0006}, {0x0006, 0x0007}, {0x0006, 0x0008}, {0x0006, 0x0009}, {0x0006, 0x000a}, - {0x0006, 0x000b}, {0x0006, 0x000c}, {0x0006, 0x000d}, {0x0007, 0x0004}, {0x0007, 0x0005}, {0x0007, 0x0006}, {0x0007, 0x0007}, {0x0008, 0x0004}, - {0x0008, 0x0005}, {0x0008, 0x0006}, {0x0008, 0x0007}, {0x0009, 0x0003}, {0x0009, 0x0004}, {0x0009, 0x0005}, {0x0009, 0x0006}, {0x0009, 0x0007}, - {0x000a, 0x0003}, {0x000a, 0x0004}, {0x000a, 0x0005}, {0x000b, 0x0004}, {0x000b, 0x0005}, {0x000c, 0x0003}, {0x000c, 0x0004}, {0x000c, 0x0005}, - {0x000c, 0x0006}, {0x000c, 0x0007}, {0x000d, 0x0003}, {0x000d, 0x0004}, {0x000e, 0x0002}, {0x000d, 0x0005}, {0x000e, 0x0003}, {0x000e, 0x0004}, - {0x000f, 0x0003}, {0x000e, 0x0005}, {0x0010, 0x0002}, {0x0010, 0x0003}, {0x0010, 0x0004}, {0x0011, 0x0002}, {0x0012, 0x0001}, {0x0010, 0x0005}, - {0x0012, 0x0002}, {0x0011, 0x0003}, {0x0012, 0x0003}, {0x0013, 0x0000}, {0x0013, 0x0001}, + { + { 0x0006, 0x0004 }, + { 0x0005, 0x0007 }, + { 0x0005, 0x0008 }, + { 0x0005, 0x0009 }, + { 0x0005, 0x000a }, + { 0x0005, 0x000b }, + { 0x0005, 0x000c }, + { 0x0005, 0x000d }, + { 0x0005, 0x000e }, + { 0x0005, 0x000f }, + { 0x0005, 0x0010 }, + { 0x0005, 0x0011 }, + { 0x0005, 0x0012 }, + { 0x0005, 0x0013 }, + { 0x0005, 0x0014 }, + { 0x0005, 0x0015 }, + { 0x0005, 0x0016 }, + { 0x0005, 0x0017 }, + { 0x0005, 0x0018 }, + { 0x0005, 0x0019 }, + { 0x0005, 0x001a }, + { 0x0005, 0x001b }, + { 0x0005, 0x001c }, + { 0x0005, 0x001d }, + { 0x0005, 0x001e }, + { 0x0005, 0x001f }, + { 0x0006, 0x0005 }, + { 0x0006, 0x0006 }, + { 0x0006, 0x0007 }, + { 0x0006, 0x0008 }, + { 0x0006, 0x0009 }, + { 0x0006, 0x000a }, + { 0x0006, 0x000b }, + { 0x0006, 0x000c }, + { 0x0006, 0x000d }, + { 0x0007, 0x0004 }, + { 0x0007, 0x0005 }, + { 0x0007, 0x0006 }, + { 0x0007, 0x0007 }, + { 0x0008, 0x0004 }, + { 0x0008, 0x0005 }, + { 0x0008, 0x0006 }, + { 0x0008, 0x0007 }, + { 0x0009, 0x0003 }, + { 0x0009, 0x0004 }, + { 0x0009, 0x0005 }, + { 0x0009, 0x0006 }, + { 0x0009, 0x0007 }, + { 0x000a, 0x0003 }, + { 0x000a, 0x0004 }, + { 0x000a, 0x0005 }, + { 0x000b, 0x0004 }, + { 0x000b, 0x0005 }, + { 0x000c, 0x0003 }, + { 0x000c, 0x0004 }, + { 0x000c, 0x0005 }, + { 0x000c, 0x0006 }, + { 0x000c, 0x0007 }, + { 0x000d, 0x0003 }, + { 0x000d, 0x0004 }, + { 0x000e, 0x0002 }, + { 0x000d, 0x0005 }, + { 0x000e, 0x0003 }, + { 0x000e, 0x0004 }, + { 0x000f, 0x0003 }, + { 0x000e, 0x0005 }, + { 0x0010, 0x0002 }, + { 0x0010, 0x0003 }, + { 0x0010, 0x0004 }, + { 0x0011, 0x0002 }, + { 0x0012, 0x0001 }, + { 0x0010, 0x0005 }, + { 0x0012, 0x0002 }, + { 0x0011, 0x0003 }, + { 0x0012, 0x0003 }, + { 0x0013, 0x0000 }, + { 0x0013, 0x0001 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec26[26][16] = -{ - {0x0010ffff, 0x000effff, 0x000fffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000dffff, }, - {0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, }, - {0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, }, - {0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, }, - {0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, }, - {0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, - {0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, - {0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, }, - {0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, - {0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, - {0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, }, - {0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, }, - {0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, }, - {0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, }, - {0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, }, - {0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x00020020, 0x00020020, 0x00020020, 0x00020020, }, - {0x0014ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x00000027, 0x00000028, 0x00000029, 0x0000002a, 0x00010023, 0x00010023, 0x00010024, 0x00010024, 0x00010025, 0x00010025, 0x00010026, 0x00010026, }, - {0x00020031, 0x00020031, 0x00020031, 0x00020031, 0x00020032, 0x00020032, 0x00020032, 0x00020032, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, }, - {0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, }, - {0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, }, - {0x0017ffff, 0x0015ffff, 0x0016ffff, 0x00000035, 0x00000036, 0x00000037, 0x00000038, 0x00000039, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00020030, 0x00020030, 0x00020030, 0x00020030, }, - {0x0002003f, 0x0002003f, 0x0002003f, 0x0002003f, 0x00020041, 0x00020041, 0x00020041, 0x00020041, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, }, - {0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, }, - {0x0019ffff, 0x0018ffff, 0x00000042, 0x00000043, 0x00000044, 0x00000047, 0x00010040, 0x00010040, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002003e, }, - {0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, }, - {0x0001004b, 0x0001004b, 0x0001004c, 0x0001004c, 0x00020046, 0x00020046, 0x00020046, 0x00020046, 0x00020048, 0x00020048, 0x00020048, 0x00020048, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, }, +const uint32_t c_aauiCQMFHuffDec26[26][16] = { + { + 0x0010ffff, + 0x000effff, + 0x000fffff, + 0x0001ffff, + 0x0002ffff, + 0x0003ffff, + 0x0004ffff, + 0x0005ffff, + 0x0006ffff, + 0x0007ffff, + 0x0008ffff, + 0x0009ffff, + 0x000affff, + 0x000bffff, + 0x000cffff, + 0x000dffff, + }, + { + 0x00020021, + 0x00020021, + 0x00020021, + 0x00020021, + 0x00020022, + 0x00020022, + 0x00020022, + 0x00020022, + 0x00030001, + 0x00030001, + 0x00030001, + 0x00030001, + 0x00030001, + 0x00030001, + 0x00030001, + 0x00030001, + }, + { + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + }, + { + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + }, + { + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + }, + { + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + }, + { + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + }, + { + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + }, + { + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + }, + { + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + }, + { + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + }, + { + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + }, + { + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + }, + { + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + }, + { + 0x00020000, + 0x00020000, + 0x00020000, + 0x00020000, + 0x0002001a, + 0x0002001a, + 0x0002001a, + 0x0002001a, + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002001c, + 0x0002001c, + 0x0002001c, + 0x0002001c, + }, + { + 0x0002001d, + 0x0002001d, + 0x0002001d, + 0x0002001d, + 0x0002001e, + 0x0002001e, + 0x0002001e, + 0x0002001e, + 0x0002001f, + 0x0002001f, + 0x0002001f, + 0x0002001f, + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020020, + }, + { + 0x0014ffff, + 0x0011ffff, + 0x0012ffff, + 0x0013ffff, + 0x00000027, + 0x00000028, + 0x00000029, + 0x0000002a, + 0x00010023, + 0x00010023, + 0x00010024, + 0x00010024, + 0x00010025, + 0x00010025, + 0x00010026, + 0x00010026, + }, + { + 0x00020031, + 0x00020031, + 0x00020031, + 0x00020031, + 0x00020032, + 0x00020032, + 0x00020032, + 0x00020032, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + }, + { + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + }, + { + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + }, + { + 0x0017ffff, + 0x0015ffff, + 0x0016ffff, + 0x00000035, + 0x00000036, + 0x00000037, + 0x00000038, + 0x00000039, + 0x00010033, + 0x00010033, + 0x00010034, + 0x00010034, + 0x00020030, + 0x00020030, + 0x00020030, + 0x00020030, + }, + { + 0x0002003f, + 0x0002003f, + 0x0002003f, + 0x0002003f, + 0x00020041, + 0x00020041, + 0x00020041, + 0x00020041, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + }, + { + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + }, + { + 0x0019ffff, + 0x0018ffff, + 0x00000042, + 0x00000043, + 0x00000044, + 0x00000047, + 0x00010040, + 0x00010040, + 0x0002003c, + 0x0002003c, + 0x0002003c, + 0x0002003c, + 0x0002003e, + 0x0002003e, + 0x0002003e, + 0x0002003e, + }, + { + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + }, + { + 0x0001004b, + 0x0001004b, + 0x0001004c, + 0x0001004c, + 0x00020046, + 0x00020046, + 0x00020046, + 0x00020046, + 0x00020048, + 0x00020048, + 0x00020048, + 0x00020048, + 0x0002004a, + 0x0002004a, + 0x0002004a, + 0x0002004a, + }, }; #endif @@ -1931,53 +19270,607 @@ const uint32_t c_aauiCQMFHuffEnc27[91][2] = #else const uint16_t c_aauiCQMFHuffEnc27[91][2] = #endif -{ - {0x0006, 0x0006}, {0x0005, 0x000b}, {0x0005, 0x000c}, {0x0005, 0x000d}, {0x0005, 0x000e}, {0x0005, 0x000f}, {0x0005, 0x0010}, {0x0005, 0x0011}, - {0x0005, 0x0012}, {0x0005, 0x0013}, {0x0005, 0x0014}, {0x0005, 0x0015}, {0x0005, 0x0016}, {0x0005, 0x0017}, {0x0005, 0x0018}, {0x0005, 0x0019}, - {0x0005, 0x001a}, {0x0005, 0x001b}, {0x0005, 0x001c}, {0x0005, 0x001d}, {0x0005, 0x001e}, {0x0005, 0x001f}, {0x0006, 0x0007}, {0x0006, 0x0008}, - {0x0006, 0x0009}, {0x0006, 0x000a}, {0x0006, 0x000b}, {0x0006, 0x000c}, {0x0006, 0x000d}, {0x0006, 0x000e}, {0x0006, 0x000f}, {0x0006, 0x0010}, - {0x0006, 0x0011}, {0x0006, 0x0012}, {0x0006, 0x0013}, {0x0006, 0x0014}, {0x0006, 0x0015}, {0x0007, 0x0005}, {0x0007, 0x0006}, {0x0007, 0x0007}, - {0x0007, 0x0008}, {0x0007, 0x0009}, {0x0007, 0x000a}, {0x0007, 0x000b}, {0x0008, 0x0004}, {0x0008, 0x0005}, {0x0008, 0x0006}, {0x0008, 0x0007}, - {0x0008, 0x0008}, {0x0008, 0x0009}, {0x0009, 0x0004}, {0x0009, 0x0005}, {0x0009, 0x0006}, {0x0009, 0x0007}, {0x000a, 0x0004}, {0x000a, 0x0005}, - {0x000a, 0x0006}, {0x000a, 0x0007}, {0x000b, 0x0004}, {0x000b, 0x0005}, {0x000b, 0x0006}, {0x000b, 0x0007}, {0x000c, 0x0004}, {0x000c, 0x0005}, - {0x000c, 0x0006}, {0x000c, 0x0007}, {0x000d, 0x0004}, {0x000d, 0x0005}, {0x000d, 0x0006}, {0x000d, 0x0007}, {0x000e, 0x0003}, {0x000e, 0x0004}, - {0x000e, 0x0005}, {0x000e, 0x0006}, {0x000e, 0x0007}, {0x000f, 0x0003}, {0x000f, 0x0004}, {0x0010, 0x0003}, {0x000f, 0x0005}, {0x0012, 0x0000}, - {0x0010, 0x0004}, {0x0010, 0x0005}, {0x0012, 0x0001}, {0x0012, 0x0002}, {0x0011, 0x0004}, {0x0011, 0x0005}, {0x0012, 0x0003}, {0x0012, 0x0004}, - {0x0012, 0x0005}, {0x0012, 0x0006}, {0x0012, 0x0007}, + { + { 0x0006, 0x0006 }, + { 0x0005, 0x000b }, + { 0x0005, 0x000c }, + { 0x0005, 0x000d }, + { 0x0005, 0x000e }, + { 0x0005, 0x000f }, + { 0x0005, 0x0010 }, + { 0x0005, 0x0011 }, + { 0x0005, 0x0012 }, + { 0x0005, 0x0013 }, + { 0x0005, 0x0014 }, + { 0x0005, 0x0015 }, + { 0x0005, 0x0016 }, + { 0x0005, 0x0017 }, + { 0x0005, 0x0018 }, + { 0x0005, 0x0019 }, + { 0x0005, 0x001a }, + { 0x0005, 0x001b }, + { 0x0005, 0x001c }, + { 0x0005, 0x001d }, + { 0x0005, 0x001e }, + { 0x0005, 0x001f }, + { 0x0006, 0x0007 }, + { 0x0006, 0x0008 }, + { 0x0006, 0x0009 }, + { 0x0006, 0x000a }, + { 0x0006, 0x000b }, + { 0x0006, 0x000c }, + { 0x0006, 0x000d }, + { 0x0006, 0x000e }, + { 0x0006, 0x000f }, + { 0x0006, 0x0010 }, + { 0x0006, 0x0011 }, + { 0x0006, 0x0012 }, + { 0x0006, 0x0013 }, + { 0x0006, 0x0014 }, + { 0x0006, 0x0015 }, + { 0x0007, 0x0005 }, + { 0x0007, 0x0006 }, + { 0x0007, 0x0007 }, + { 0x0007, 0x0008 }, + { 0x0007, 0x0009 }, + { 0x0007, 0x000a }, + { 0x0007, 0x000b }, + { 0x0008, 0x0004 }, + { 0x0008, 0x0005 }, + { 0x0008, 0x0006 }, + { 0x0008, 0x0007 }, + { 0x0008, 0x0008 }, + { 0x0008, 0x0009 }, + { 0x0009, 0x0004 }, + { 0x0009, 0x0005 }, + { 0x0009, 0x0006 }, + { 0x0009, 0x0007 }, + { 0x000a, 0x0004 }, + { 0x000a, 0x0005 }, + { 0x000a, 0x0006 }, + { 0x000a, 0x0007 }, + { 0x000b, 0x0004 }, + { 0x000b, 0x0005 }, + { 0x000b, 0x0006 }, + { 0x000b, 0x0007 }, + { 0x000c, 0x0004 }, + { 0x000c, 0x0005 }, + { 0x000c, 0x0006 }, + { 0x000c, 0x0007 }, + { 0x000d, 0x0004 }, + { 0x000d, 0x0005 }, + { 0x000d, 0x0006 }, + { 0x000d, 0x0007 }, + { 0x000e, 0x0003 }, + { 0x000e, 0x0004 }, + { 0x000e, 0x0005 }, + { 0x000e, 0x0006 }, + { 0x000e, 0x0007 }, + { 0x000f, 0x0003 }, + { 0x000f, 0x0004 }, + { 0x0010, 0x0003 }, + { 0x000f, 0x0005 }, + { 0x0012, 0x0000 }, + { 0x0010, 0x0004 }, + { 0x0010, 0x0005 }, + { 0x0012, 0x0001 }, + { 0x0012, 0x0002 }, + { 0x0011, 0x0004 }, + { 0x0011, 0x0005 }, + { 0x0012, 0x0003 }, + { 0x0012, 0x0004 }, + { 0x0012, 0x0005 }, + { 0x0012, 0x0006 }, + { 0x0012, 0x0007 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec27[28][16] = -{ - {0x0010ffff, 0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, }, - {0x00020023, 0x00020023, 0x00020023, 0x00020023, 0x00020024, 0x00020024, 0x00020024, 0x00020024, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, }, - {0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, }, - {0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, }, - {0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, }, - {0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, - {0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, - {0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, }, - {0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, - {0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, - {0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, }, - {0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, }, - {0x00010028, 0x00010028, 0x00010029, 0x00010029, 0x0001002a, 0x0001002a, 0x0001002b, 0x0001002b, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020016, 0x00020016, 0x00020016, 0x00020016, }, - {0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, }, - {0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, }, - {0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, }, - {0x0014ffff, 0x0013ffff, 0x0011ffff, 0x0012ffff, 0x0000002c, 0x0000002d, 0x0000002e, 0x0000002f, 0x00000030, 0x00000031, 0x00010025, 0x00010025, 0x00010026, 0x00010026, 0x00010027, 0x00010027, }, - {0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, }, - {0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, }, - {0x00020036, 0x00020036, 0x00020036, 0x00020036, 0x00020037, 0x00020037, 0x00020037, 0x00020037, 0x00020038, 0x00020038, 0x00020038, 0x00020038, 0x00020039, 0x00020039, 0x00020039, 0x00020039, }, - {0x0017ffff, 0x0018ffff, 0x0015ffff, 0x0016ffff, 0x0000003e, 0x0000003f, 0x00000040, 0x00000041, 0x0001003a, 0x0001003a, 0x0001003b, 0x0001003b, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, }, - {0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, }, - {0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, }, - {0x001affff, 0x001bffff, 0x0019ffff, 0x0000004d, 0x00000050, 0x00000051, 0x0001004b, 0x0001004b, 0x0001004c, 0x0001004c, 0x0001004e, 0x0001004e, 0x00020046, 0x00020046, 0x00020046, 0x00020046, }, - {0x00020047, 0x00020047, 0x00020047, 0x00020047, 0x00020048, 0x00020048, 0x00020048, 0x00020048, 0x00020049, 0x00020049, 0x00020049, 0x00020049, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, }, - {0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, }, - {0x0002004f, 0x0002004f, 0x0002004f, 0x0002004f, 0x00020052, 0x00020052, 0x00020052, 0x00020052, 0x00020053, 0x00020053, 0x00020053, 0x00020053, 0x00020056, 0x00020056, 0x00020056, 0x00020056, }, - {0x00020057, 0x00020057, 0x00020057, 0x00020057, 0x00020058, 0x00020058, 0x00020058, 0x00020058, 0x00020059, 0x00020059, 0x00020059, 0x00020059, 0x0002005a, 0x0002005a, 0x0002005a, 0x0002005a, }, +const uint32_t c_aauiCQMFHuffDec27[28][16] = { + { + 0x0010ffff, + 0x000cffff, + 0x000dffff, + 0x000effff, + 0x000fffff, + 0x0001ffff, + 0x0002ffff, + 0x0003ffff, + 0x0004ffff, + 0x0005ffff, + 0x0006ffff, + 0x0007ffff, + 0x0008ffff, + 0x0009ffff, + 0x000affff, + 0x000bffff, + }, + { + 0x00020023, + 0x00020023, + 0x00020023, + 0x00020023, + 0x00020024, + 0x00020024, + 0x00020024, + 0x00020024, + 0x00030001, + 0x00030001, + 0x00030001, + 0x00030001, + 0x00030001, + 0x00030001, + 0x00030001, + 0x00030001, + }, + { + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + }, + { + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + }, + { + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + }, + { + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + }, + { + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + }, + { + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + }, + { + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + }, + { + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + }, + { + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + }, + { + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + }, + { + 0x00010028, + 0x00010028, + 0x00010029, + 0x00010029, + 0x0001002a, + 0x0001002a, + 0x0001002b, + 0x0001002b, + 0x00020000, + 0x00020000, + 0x00020000, + 0x00020000, + 0x00020016, + 0x00020016, + 0x00020016, + 0x00020016, + }, + { + 0x00020017, + 0x00020017, + 0x00020017, + 0x00020017, + 0x00020018, + 0x00020018, + 0x00020018, + 0x00020018, + 0x00020019, + 0x00020019, + 0x00020019, + 0x00020019, + 0x0002001a, + 0x0002001a, + 0x0002001a, + 0x0002001a, + }, + { + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002001c, + 0x0002001c, + 0x0002001c, + 0x0002001c, + 0x0002001d, + 0x0002001d, + 0x0002001d, + 0x0002001d, + 0x0002001e, + 0x0002001e, + 0x0002001e, + 0x0002001e, + }, + { + 0x0002001f, + 0x0002001f, + 0x0002001f, + 0x0002001f, + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020021, + 0x00020021, + 0x00020021, + 0x00020021, + 0x00020022, + 0x00020022, + 0x00020022, + 0x00020022, + }, + { + 0x0014ffff, + 0x0013ffff, + 0x0011ffff, + 0x0012ffff, + 0x0000002c, + 0x0000002d, + 0x0000002e, + 0x0000002f, + 0x00000030, + 0x00000031, + 0x00010025, + 0x00010025, + 0x00010026, + 0x00010026, + 0x00010027, + 0x00010027, + }, + { + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + }, + { + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + }, + { + 0x00020036, + 0x00020036, + 0x00020036, + 0x00020036, + 0x00020037, + 0x00020037, + 0x00020037, + 0x00020037, + 0x00020038, + 0x00020038, + 0x00020038, + 0x00020038, + 0x00020039, + 0x00020039, + 0x00020039, + 0x00020039, + }, + { + 0x0017ffff, + 0x0018ffff, + 0x0015ffff, + 0x0016ffff, + 0x0000003e, + 0x0000003f, + 0x00000040, + 0x00000041, + 0x0001003a, + 0x0001003a, + 0x0001003b, + 0x0001003b, + 0x0001003c, + 0x0001003c, + 0x0001003d, + 0x0001003d, + }, + { + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030043, + }, + { + 0x00030044, + 0x00030044, + 0x00030044, + 0x00030044, + 0x00030044, + 0x00030044, + 0x00030044, + 0x00030044, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + }, + { + 0x001affff, + 0x001bffff, + 0x0019ffff, + 0x0000004d, + 0x00000050, + 0x00000051, + 0x0001004b, + 0x0001004b, + 0x0001004c, + 0x0001004c, + 0x0001004e, + 0x0001004e, + 0x00020046, + 0x00020046, + 0x00020046, + 0x00020046, + }, + { + 0x00020047, + 0x00020047, + 0x00020047, + 0x00020047, + 0x00020048, + 0x00020048, + 0x00020048, + 0x00020048, + 0x00020049, + 0x00020049, + 0x00020049, + 0x00020049, + 0x0002004a, + 0x0002004a, + 0x0002004a, + 0x0002004a, + }, + { + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030055, + }, + { + 0x0002004f, + 0x0002004f, + 0x0002004f, + 0x0002004f, + 0x00020052, + 0x00020052, + 0x00020052, + 0x00020052, + 0x00020053, + 0x00020053, + 0x00020053, + 0x00020053, + 0x00020056, + 0x00020056, + 0x00020056, + 0x00020056, + }, + { + 0x00020057, + 0x00020057, + 0x00020057, + 0x00020057, + 0x00020058, + 0x00020058, + 0x00020058, + 0x00020058, + 0x00020059, + 0x00020059, + 0x00020059, + 0x00020059, + 0x0002005a, + 0x0002005a, + 0x0002005a, + 0x0002005a, + }, }; #endif @@ -1986,57 +19879,661 @@ const uint32_t c_aauiCQMFHuffEnc28[109][2] = #else const uint16_t c_aauiCQMFHuffEnc28[109][2] = #endif -{ - {0x0006, 0x0008}, {0x0005, 0x0010}, {0x0005, 0x0011}, {0x0005, 0x0012}, {0x0005, 0x0013}, {0x0005, 0x0014}, {0x0005, 0x0015}, {0x0005, 0x0016}, - {0x0005, 0x0017}, {0x0005, 0x0018}, {0x0005, 0x0019}, {0x0005, 0x001a}, {0x0005, 0x001b}, {0x0005, 0x001c}, {0x0005, 0x001d}, {0x0005, 0x001e}, - {0x0006, 0x0009}, {0x0005, 0x001f}, {0x0006, 0x000a}, {0x0006, 0x000b}, {0x0006, 0x000c}, {0x0006, 0x000d}, {0x0006, 0x000e}, {0x0006, 0x000f}, - {0x0006, 0x0010}, {0x0006, 0x0011}, {0x0006, 0x0012}, {0x0006, 0x0013}, {0x0006, 0x0014}, {0x0006, 0x0015}, {0x0006, 0x0016}, {0x0006, 0x0017}, - {0x0006, 0x0018}, {0x0006, 0x0019}, {0x0006, 0x001a}, {0x0006, 0x001b}, {0x0006, 0x001c}, {0x0006, 0x001d}, {0x0006, 0x001e}, {0x0006, 0x001f}, - {0x0007, 0x0006}, {0x0007, 0x0007}, {0x0007, 0x0008}, {0x0007, 0x0009}, {0x0007, 0x000a}, {0x0007, 0x000b}, {0x0007, 0x000c}, {0x0007, 0x000d}, - {0x0007, 0x000e}, {0x0007, 0x000f}, {0x0008, 0x0005}, {0x0008, 0x0006}, {0x0008, 0x0007}, {0x0008, 0x0008}, {0x0008, 0x0009}, {0x0008, 0x000a}, - {0x0008, 0x000b}, {0x0009, 0x0004}, {0x0009, 0x0005}, {0x0009, 0x0006}, {0x0009, 0x0007}, {0x0009, 0x0008}, {0x0009, 0x0009}, {0x000a, 0x0005}, - {0x000a, 0x0006}, {0x000a, 0x0007}, {0x000b, 0x0005}, {0x000b, 0x0006}, {0x000b, 0x0007}, {0x000b, 0x0008}, {0x000b, 0x0009}, {0x000c, 0x0004}, - {0x000c, 0x0005}, {0x000c, 0x0006}, {0x000c, 0x0007}, {0x000c, 0x0008}, {0x000c, 0x0009}, {0x000d, 0x0004}, {0x000d, 0x0005}, {0x000d, 0x0006}, - {0x000d, 0x0007}, {0x000e, 0x0004}, {0x000e, 0x0005}, {0x000e, 0x0006}, {0x000e, 0x0007}, {0x0010, 0x0004}, {0x000f, 0x0005}, {0x0010, 0x0005}, - {0x000f, 0x0006}, {0x000f, 0x0007}, {0x0010, 0x0006}, {0x0011, 0x0006}, {0x0010, 0x0007}, {0x0013, 0x0000}, {0x0010, 0x0008}, {0x0010, 0x0009}, - {0x0013, 0x0001}, {0x0011, 0x0007}, {0x0012, 0x0001}, {0x0012, 0x0002}, {0x0012, 0x0003}, {0x0012, 0x0004}, {0x0012, 0x0005}, {0x0012, 0x0006}, - {0x0012, 0x0007}, {0x0012, 0x0008}, {0x0012, 0x0009}, {0x0012, 0x000a}, {0x0012, 0x000b}, + { + { 0x0006, 0x0008 }, + { 0x0005, 0x0010 }, + { 0x0005, 0x0011 }, + { 0x0005, 0x0012 }, + { 0x0005, 0x0013 }, + { 0x0005, 0x0014 }, + { 0x0005, 0x0015 }, + { 0x0005, 0x0016 }, + { 0x0005, 0x0017 }, + { 0x0005, 0x0018 }, + { 0x0005, 0x0019 }, + { 0x0005, 0x001a }, + { 0x0005, 0x001b }, + { 0x0005, 0x001c }, + { 0x0005, 0x001d }, + { 0x0005, 0x001e }, + { 0x0006, 0x0009 }, + { 0x0005, 0x001f }, + { 0x0006, 0x000a }, + { 0x0006, 0x000b }, + { 0x0006, 0x000c }, + { 0x0006, 0x000d }, + { 0x0006, 0x000e }, + { 0x0006, 0x000f }, + { 0x0006, 0x0010 }, + { 0x0006, 0x0011 }, + { 0x0006, 0x0012 }, + { 0x0006, 0x0013 }, + { 0x0006, 0x0014 }, + { 0x0006, 0x0015 }, + { 0x0006, 0x0016 }, + { 0x0006, 0x0017 }, + { 0x0006, 0x0018 }, + { 0x0006, 0x0019 }, + { 0x0006, 0x001a }, + { 0x0006, 0x001b }, + { 0x0006, 0x001c }, + { 0x0006, 0x001d }, + { 0x0006, 0x001e }, + { 0x0006, 0x001f }, + { 0x0007, 0x0006 }, + { 0x0007, 0x0007 }, + { 0x0007, 0x0008 }, + { 0x0007, 0x0009 }, + { 0x0007, 0x000a }, + { 0x0007, 0x000b }, + { 0x0007, 0x000c }, + { 0x0007, 0x000d }, + { 0x0007, 0x000e }, + { 0x0007, 0x000f }, + { 0x0008, 0x0005 }, + { 0x0008, 0x0006 }, + { 0x0008, 0x0007 }, + { 0x0008, 0x0008 }, + { 0x0008, 0x0009 }, + { 0x0008, 0x000a }, + { 0x0008, 0x000b }, + { 0x0009, 0x0004 }, + { 0x0009, 0x0005 }, + { 0x0009, 0x0006 }, + { 0x0009, 0x0007 }, + { 0x0009, 0x0008 }, + { 0x0009, 0x0009 }, + { 0x000a, 0x0005 }, + { 0x000a, 0x0006 }, + { 0x000a, 0x0007 }, + { 0x000b, 0x0005 }, + { 0x000b, 0x0006 }, + { 0x000b, 0x0007 }, + { 0x000b, 0x0008 }, + { 0x000b, 0x0009 }, + { 0x000c, 0x0004 }, + { 0x000c, 0x0005 }, + { 0x000c, 0x0006 }, + { 0x000c, 0x0007 }, + { 0x000c, 0x0008 }, + { 0x000c, 0x0009 }, + { 0x000d, 0x0004 }, + { 0x000d, 0x0005 }, + { 0x000d, 0x0006 }, + { 0x000d, 0x0007 }, + { 0x000e, 0x0004 }, + { 0x000e, 0x0005 }, + { 0x000e, 0x0006 }, + { 0x000e, 0x0007 }, + { 0x0010, 0x0004 }, + { 0x000f, 0x0005 }, + { 0x0010, 0x0005 }, + { 0x000f, 0x0006 }, + { 0x000f, 0x0007 }, + { 0x0010, 0x0006 }, + { 0x0011, 0x0006 }, + { 0x0010, 0x0007 }, + { 0x0013, 0x0000 }, + { 0x0010, 0x0008 }, + { 0x0010, 0x0009 }, + { 0x0013, 0x0001 }, + { 0x0011, 0x0007 }, + { 0x0012, 0x0001 }, + { 0x0012, 0x0002 }, + { 0x0012, 0x0003 }, + { 0x0012, 0x0004 }, + { 0x0012, 0x0005 }, + { 0x0012, 0x0006 }, + { 0x0012, 0x0007 }, + { 0x0012, 0x0008 }, + { 0x0012, 0x0009 }, + { 0x0012, 0x000a }, + { 0x0012, 0x000b }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec28[30][16] = -{ - {0x000fffff, 0x0010ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000dffff, 0x000effff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, }, - {0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, }, - {0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, }, - {0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, - {0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, }, - {0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, }, - {0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, - {0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, - {0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, - {0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00020013, 0x00020013, 0x00020013, 0x00020013, }, - {0x00020014, 0x00020014, 0x00020014, 0x00020014, 0x00020015, 0x00020015, 0x00020015, 0x00020015, 0x00020016, 0x00020016, 0x00020016, 0x00020016, 0x00020017, 0x00020017, 0x00020017, 0x00020017, }, - {0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, }, - {0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, }, - {0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x00020023, 0x00020023, 0x00020023, 0x00020023, }, - {0x00020024, 0x00020024, 0x00020024, 0x00020024, 0x00020025, 0x00020025, 0x00020025, 0x00020025, 0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00020027, 0x00020027, 0x00020027, 0x00020027, }, - {0x0015ffff, 0x0014ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x00000032, 0x00000033, 0x00000034, 0x00000035, 0x00000036, 0x00000037, 0x00000038, 0x00010028, 0x00010028, 0x00010029, 0x00010029, }, - {0x0001002a, 0x0001002a, 0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, 0x0001002e, 0x0001002e, 0x0001002f, 0x0001002f, 0x00010030, 0x00010030, 0x00010031, 0x00010031, }, - {0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, }, - {0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, }, - {0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, }, - {0x00010045, 0x00010045, 0x00010046, 0x00010046, 0x0002003f, 0x0002003f, 0x0002003f, 0x0002003f, 0x00020040, 0x00020040, 0x00020040, 0x00020040, 0x00020041, 0x00020041, 0x00020041, 0x00020041, }, - {0x0019ffff, 0x0018ffff, 0x0016ffff, 0x0017ffff, 0x00000047, 0x00000048, 0x00000049, 0x0000004a, 0x0000004b, 0x0000004c, 0x00010042, 0x00010042, 0x00010043, 0x00010043, 0x00010044, 0x00010044, }, - {0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004d, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, }, - {0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, }, - {0x00020051, 0x00020051, 0x00020051, 0x00020051, 0x00020052, 0x00020052, 0x00020052, 0x00020052, 0x00020053, 0x00020053, 0x00020053, 0x00020053, 0x00020054, 0x00020054, 0x00020054, 0x00020054, }, - {0x001bffff, 0x001cffff, 0x001dffff, 0x001affff, 0x00000055, 0x00000057, 0x0000005a, 0x0000005c, 0x0000005e, 0x0000005f, 0x00010056, 0x00010056, 0x00010058, 0x00010058, 0x00010059, 0x00010059, }, - {0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, 0x00030061, }, - {0x0001005d, 0x0001005d, 0x00010060, 0x00010060, 0x00020062, 0x00020062, 0x00020062, 0x00020062, 0x00020063, 0x00020063, 0x00020063, 0x00020063, 0x00020064, 0x00020064, 0x00020064, 0x00020064, }, - {0x00020065, 0x00020065, 0x00020065, 0x00020065, 0x00020066, 0x00020066, 0x00020066, 0x00020066, 0x00020067, 0x00020067, 0x00020067, 0x00020067, 0x00020068, 0x00020068, 0x00020068, 0x00020068, }, - {0x00020069, 0x00020069, 0x00020069, 0x00020069, 0x0002006a, 0x0002006a, 0x0002006a, 0x0002006a, 0x0002006b, 0x0002006b, 0x0002006b, 0x0002006b, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006c, }, +const uint32_t c_aauiCQMFHuffDec28[30][16] = { + { + 0x000fffff, + 0x0010ffff, + 0x0009ffff, + 0x000affff, + 0x000bffff, + 0x000cffff, + 0x000dffff, + 0x000effff, + 0x0001ffff, + 0x0002ffff, + 0x0003ffff, + 0x0004ffff, + 0x0005ffff, + 0x0006ffff, + 0x0007ffff, + 0x0008ffff, + }, + { + 0x00030001, + 0x00030001, + 0x00030001, + 0x00030001, + 0x00030001, + 0x00030001, + 0x00030001, + 0x00030001, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + }, + { + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + }, + { + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + }, + { + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + }, + { + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + }, + { + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + }, + { + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + }, + { + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + }, + { + 0x00020000, + 0x00020000, + 0x00020000, + 0x00020000, + 0x00020010, + 0x00020010, + 0x00020010, + 0x00020010, + 0x00020012, + 0x00020012, + 0x00020012, + 0x00020012, + 0x00020013, + 0x00020013, + 0x00020013, + 0x00020013, + }, + { + 0x00020014, + 0x00020014, + 0x00020014, + 0x00020014, + 0x00020015, + 0x00020015, + 0x00020015, + 0x00020015, + 0x00020016, + 0x00020016, + 0x00020016, + 0x00020016, + 0x00020017, + 0x00020017, + 0x00020017, + 0x00020017, + }, + { + 0x00020018, + 0x00020018, + 0x00020018, + 0x00020018, + 0x00020019, + 0x00020019, + 0x00020019, + 0x00020019, + 0x0002001a, + 0x0002001a, + 0x0002001a, + 0x0002001a, + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002001b, + }, + { + 0x0002001c, + 0x0002001c, + 0x0002001c, + 0x0002001c, + 0x0002001d, + 0x0002001d, + 0x0002001d, + 0x0002001d, + 0x0002001e, + 0x0002001e, + 0x0002001e, + 0x0002001e, + 0x0002001f, + 0x0002001f, + 0x0002001f, + 0x0002001f, + }, + { + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020021, + 0x00020021, + 0x00020021, + 0x00020021, + 0x00020022, + 0x00020022, + 0x00020022, + 0x00020022, + 0x00020023, + 0x00020023, + 0x00020023, + 0x00020023, + }, + { + 0x00020024, + 0x00020024, + 0x00020024, + 0x00020024, + 0x00020025, + 0x00020025, + 0x00020025, + 0x00020025, + 0x00020026, + 0x00020026, + 0x00020026, + 0x00020026, + 0x00020027, + 0x00020027, + 0x00020027, + 0x00020027, + }, + { + 0x0015ffff, + 0x0014ffff, + 0x0011ffff, + 0x0012ffff, + 0x0013ffff, + 0x00000032, + 0x00000033, + 0x00000034, + 0x00000035, + 0x00000036, + 0x00000037, + 0x00000038, + 0x00010028, + 0x00010028, + 0x00010029, + 0x00010029, + }, + { + 0x0001002a, + 0x0001002a, + 0x0001002b, + 0x0001002b, + 0x0001002c, + 0x0001002c, + 0x0001002d, + 0x0001002d, + 0x0001002e, + 0x0001002e, + 0x0001002f, + 0x0001002f, + 0x00010030, + 0x00010030, + 0x00010031, + 0x00010031, + }, + { + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + }, + { + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + }, + { + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + }, + { + 0x00010045, + 0x00010045, + 0x00010046, + 0x00010046, + 0x0002003f, + 0x0002003f, + 0x0002003f, + 0x0002003f, + 0x00020040, + 0x00020040, + 0x00020040, + 0x00020040, + 0x00020041, + 0x00020041, + 0x00020041, + 0x00020041, + }, + { + 0x0019ffff, + 0x0018ffff, + 0x0016ffff, + 0x0017ffff, + 0x00000047, + 0x00000048, + 0x00000049, + 0x0000004a, + 0x0000004b, + 0x0000004c, + 0x00010042, + 0x00010042, + 0x00010043, + 0x00010043, + 0x00010044, + 0x00010044, + }, + { + 0x0003004d, + 0x0003004d, + 0x0003004d, + 0x0003004d, + 0x0003004d, + 0x0003004d, + 0x0003004d, + 0x0003004d, + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x0003004e, + }, + { + 0x0003004f, + 0x0003004f, + 0x0003004f, + 0x0003004f, + 0x0003004f, + 0x0003004f, + 0x0003004f, + 0x0003004f, + 0x00030050, + 0x00030050, + 0x00030050, + 0x00030050, + 0x00030050, + 0x00030050, + 0x00030050, + 0x00030050, + }, + { + 0x00020051, + 0x00020051, + 0x00020051, + 0x00020051, + 0x00020052, + 0x00020052, + 0x00020052, + 0x00020052, + 0x00020053, + 0x00020053, + 0x00020053, + 0x00020053, + 0x00020054, + 0x00020054, + 0x00020054, + 0x00020054, + }, + { + 0x001bffff, + 0x001cffff, + 0x001dffff, + 0x001affff, + 0x00000055, + 0x00000057, + 0x0000005a, + 0x0000005c, + 0x0000005e, + 0x0000005f, + 0x00010056, + 0x00010056, + 0x00010058, + 0x00010058, + 0x00010059, + 0x00010059, + }, + { + 0x0003005b, + 0x0003005b, + 0x0003005b, + 0x0003005b, + 0x0003005b, + 0x0003005b, + 0x0003005b, + 0x0003005b, + 0x00030061, + 0x00030061, + 0x00030061, + 0x00030061, + 0x00030061, + 0x00030061, + 0x00030061, + 0x00030061, + }, + { + 0x0001005d, + 0x0001005d, + 0x00010060, + 0x00010060, + 0x00020062, + 0x00020062, + 0x00020062, + 0x00020062, + 0x00020063, + 0x00020063, + 0x00020063, + 0x00020063, + 0x00020064, + 0x00020064, + 0x00020064, + 0x00020064, + }, + { + 0x00020065, + 0x00020065, + 0x00020065, + 0x00020065, + 0x00020066, + 0x00020066, + 0x00020066, + 0x00020066, + 0x00020067, + 0x00020067, + 0x00020067, + 0x00020067, + 0x00020068, + 0x00020068, + 0x00020068, + 0x00020068, + }, + { + 0x00020069, + 0x00020069, + 0x00020069, + 0x00020069, + 0x0002006a, + 0x0002006a, + 0x0002006a, + 0x0002006a, + 0x0002006b, + 0x0002006b, + 0x0002006b, + 0x0002006b, + 0x0002006c, + 0x0002006c, + 0x0002006c, + 0x0002006c, + }, }; #endif @@ -2045,64 +20542,753 @@ const uint32_t c_aauiCQMFHuffEnc29[129][2] = #else const uint16_t c_aauiCQMFHuffEnc29[129][2] = #endif -{ - {0x0006, 0x0009}, {0x0005, 0x0019}, {0x0006, 0x000a}, {0x0005, 0x001a}, {0x0005, 0x001b}, {0x0005, 0x001c}, {0x0006, 0x000b}, {0x0005, 0x001d}, - {0x0005, 0x001e}, {0x0006, 0x000c}, {0x0006, 0x000d}, {0x0005, 0x001f}, {0x0006, 0x000e}, {0x0006, 0x000f}, {0x0006, 0x0010}, {0x0006, 0x0011}, - {0x0006, 0x0012}, {0x0006, 0x0013}, {0x0006, 0x0014}, {0x0006, 0x0015}, {0x0006, 0x0016}, {0x0006, 0x0017}, {0x0006, 0x0018}, {0x0006, 0x0019}, - {0x0006, 0x001a}, {0x0006, 0x001b}, {0x0006, 0x001c}, {0x0006, 0x001d}, {0x0006, 0x001e}, {0x0006, 0x001f}, {0x0006, 0x0020}, {0x0006, 0x0021}, - {0x0006, 0x0022}, {0x0006, 0x0023}, {0x0006, 0x0024}, {0x0006, 0x0025}, {0x0006, 0x0026}, {0x0006, 0x0027}, {0x0006, 0x0028}, {0x0006, 0x0029}, - {0x0006, 0x002a}, {0x0006, 0x002b}, {0x0006, 0x002c}, {0x0006, 0x002d}, {0x0006, 0x002e}, {0x0006, 0x002f}, {0x0006, 0x0030}, {0x0006, 0x0031}, - {0x0007, 0x0007}, {0x0007, 0x0008}, {0x0007, 0x0009}, {0x0007, 0x000a}, {0x0007, 0x000b}, {0x0007, 0x000c}, {0x0007, 0x000d}, {0x0007, 0x000e}, - {0x0007, 0x000f}, {0x0007, 0x0010}, {0x0007, 0x0011}, {0x0008, 0x0006}, {0x0008, 0x0007}, {0x0008, 0x0008}, {0x0008, 0x0009}, {0x0008, 0x000a}, - {0x0008, 0x000b}, {0x0008, 0x000c}, {0x0008, 0x000d}, {0x0009, 0x0006}, {0x0009, 0x0007}, {0x0009, 0x0008}, {0x0009, 0x0009}, {0x0009, 0x000a}, - {0x0009, 0x000b}, {0x000a, 0x0005}, {0x000a, 0x0006}, {0x000a, 0x0007}, {0x000a, 0x0008}, {0x000a, 0x0009}, {0x000a, 0x000a}, {0x000a, 0x000b}, - {0x000b, 0x0006}, {0x000b, 0x0007}, {0x000b, 0x0008}, {0x000b, 0x0009}, {0x000c, 0x0006}, {0x000c, 0x0007}, {0x000c, 0x0008}, {0x000c, 0x0009}, - {0x000c, 0x000a}, {0x000c, 0x000b}, {0x000d, 0x0005}, {0x000d, 0x0006}, {0x000d, 0x0007}, {0x000d, 0x0008}, {0x000d, 0x0009}, {0x000d, 0x000a}, - {0x000d, 0x000b}, {0x000e, 0x0006}, {0x000e, 0x0007}, {0x000e, 0x0008}, {0x000e, 0x0009}, {0x000f, 0x0004}, {0x000f, 0x0005}, {0x000f, 0x0006}, - {0x000f, 0x0007}, {0x0011, 0x0007}, {0x000f, 0x0008}, {0x0012, 0x0000}, {0x000f, 0x0009}, {0x0010, 0x0005}, {0x000f, 0x000a}, {0x000f, 0x000b}, - {0x0012, 0x0001}, {0x0010, 0x0006}, {0x0010, 0x0007}, {0x0012, 0x0002}, {0x0012, 0x0003}, {0x0012, 0x0004}, {0x0012, 0x0005}, {0x0012, 0x0006}, - {0x0012, 0x0007}, {0x0012, 0x0008}, {0x0011, 0x0008}, {0x0012, 0x0009}, {0x0012, 0x000a}, {0x0012, 0x000b}, {0x0012, 0x000c}, {0x0012, 0x000d}, - {0x0011, 0x0009}, + { + { 0x0006, 0x0009 }, + { 0x0005, 0x0019 }, + { 0x0006, 0x000a }, + { 0x0005, 0x001a }, + { 0x0005, 0x001b }, + { 0x0005, 0x001c }, + { 0x0006, 0x000b }, + { 0x0005, 0x001d }, + { 0x0005, 0x001e }, + { 0x0006, 0x000c }, + { 0x0006, 0x000d }, + { 0x0005, 0x001f }, + { 0x0006, 0x000e }, + { 0x0006, 0x000f }, + { 0x0006, 0x0010 }, + { 0x0006, 0x0011 }, + { 0x0006, 0x0012 }, + { 0x0006, 0x0013 }, + { 0x0006, 0x0014 }, + { 0x0006, 0x0015 }, + { 0x0006, 0x0016 }, + { 0x0006, 0x0017 }, + { 0x0006, 0x0018 }, + { 0x0006, 0x0019 }, + { 0x0006, 0x001a }, + { 0x0006, 0x001b }, + { 0x0006, 0x001c }, + { 0x0006, 0x001d }, + { 0x0006, 0x001e }, + { 0x0006, 0x001f }, + { 0x0006, 0x0020 }, + { 0x0006, 0x0021 }, + { 0x0006, 0x0022 }, + { 0x0006, 0x0023 }, + { 0x0006, 0x0024 }, + { 0x0006, 0x0025 }, + { 0x0006, 0x0026 }, + { 0x0006, 0x0027 }, + { 0x0006, 0x0028 }, + { 0x0006, 0x0029 }, + { 0x0006, 0x002a }, + { 0x0006, 0x002b }, + { 0x0006, 0x002c }, + { 0x0006, 0x002d }, + { 0x0006, 0x002e }, + { 0x0006, 0x002f }, + { 0x0006, 0x0030 }, + { 0x0006, 0x0031 }, + { 0x0007, 0x0007 }, + { 0x0007, 0x0008 }, + { 0x0007, 0x0009 }, + { 0x0007, 0x000a }, + { 0x0007, 0x000b }, + { 0x0007, 0x000c }, + { 0x0007, 0x000d }, + { 0x0007, 0x000e }, + { 0x0007, 0x000f }, + { 0x0007, 0x0010 }, + { 0x0007, 0x0011 }, + { 0x0008, 0x0006 }, + { 0x0008, 0x0007 }, + { 0x0008, 0x0008 }, + { 0x0008, 0x0009 }, + { 0x0008, 0x000a }, + { 0x0008, 0x000b }, + { 0x0008, 0x000c }, + { 0x0008, 0x000d }, + { 0x0009, 0x0006 }, + { 0x0009, 0x0007 }, + { 0x0009, 0x0008 }, + { 0x0009, 0x0009 }, + { 0x0009, 0x000a }, + { 0x0009, 0x000b }, + { 0x000a, 0x0005 }, + { 0x000a, 0x0006 }, + { 0x000a, 0x0007 }, + { 0x000a, 0x0008 }, + { 0x000a, 0x0009 }, + { 0x000a, 0x000a }, + { 0x000a, 0x000b }, + { 0x000b, 0x0006 }, + { 0x000b, 0x0007 }, + { 0x000b, 0x0008 }, + { 0x000b, 0x0009 }, + { 0x000c, 0x0006 }, + { 0x000c, 0x0007 }, + { 0x000c, 0x0008 }, + { 0x000c, 0x0009 }, + { 0x000c, 0x000a }, + { 0x000c, 0x000b }, + { 0x000d, 0x0005 }, + { 0x000d, 0x0006 }, + { 0x000d, 0x0007 }, + { 0x000d, 0x0008 }, + { 0x000d, 0x0009 }, + { 0x000d, 0x000a }, + { 0x000d, 0x000b }, + { 0x000e, 0x0006 }, + { 0x000e, 0x0007 }, + { 0x000e, 0x0008 }, + { 0x000e, 0x0009 }, + { 0x000f, 0x0004 }, + { 0x000f, 0x0005 }, + { 0x000f, 0x0006 }, + { 0x000f, 0x0007 }, + { 0x0011, 0x0007 }, + { 0x000f, 0x0008 }, + { 0x0012, 0x0000 }, + { 0x000f, 0x0009 }, + { 0x0010, 0x0005 }, + { 0x000f, 0x000a }, + { 0x000f, 0x000b }, + { 0x0012, 0x0001 }, + { 0x0010, 0x0006 }, + { 0x0010, 0x0007 }, + { 0x0012, 0x0002 }, + { 0x0012, 0x0003 }, + { 0x0012, 0x0004 }, + { 0x0012, 0x0005 }, + { 0x0012, 0x0006 }, + { 0x0012, 0x0007 }, + { 0x0012, 0x0008 }, + { 0x0011, 0x0008 }, + { 0x0012, 0x0009 }, + { 0x0012, 0x000a }, + { 0x0012, 0x000b }, + { 0x0012, 0x000c }, + { 0x0012, 0x000d }, + { 0x0011, 0x0009 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec29[34][16] = -{ - {0x000fffff, 0x0010ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000dffff, 0x000effff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, }, - {0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002f, 0x0002002f, 0x0002002f, 0x0002002f, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, 0x00030001, }, - {0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, }, - {0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, }, - {0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, - {0x00010039, 0x00010039, 0x0001003a, 0x0001003a, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x00020006, 0x00020006, 0x00020006, 0x00020006, }, - {0x00020009, 0x00020009, 0x00020009, 0x00020009, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, }, - {0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x00020011, 0x00020011, 0x00020011, 0x00020011, }, - {0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00020013, 0x00020013, 0x00020013, 0x00020013, 0x00020014, 0x00020014, 0x00020014, 0x00020014, 0x00020015, 0x00020015, 0x00020015, 0x00020015, }, - {0x00020016, 0x00020016, 0x00020016, 0x00020016, 0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x00020019, 0x00020019, 0x00020019, 0x00020019, }, - {0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, }, - {0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, }, - {0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x00020023, 0x00020023, 0x00020023, 0x00020023, 0x00020024, 0x00020024, 0x00020024, 0x00020024, 0x00020025, 0x00020025, 0x00020025, 0x00020025, }, - {0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00020027, 0x00020027, 0x00020027, 0x00020027, 0x00020028, 0x00020028, 0x00020028, 0x00020028, 0x00020029, 0x00020029, 0x00020029, 0x00020029, }, - {0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002d, }, - {0x0016ffff, 0x0014ffff, 0x0015ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0000003b, 0x0000003c, 0x0000003d, 0x0000003e, 0x0000003f, 0x00000040, 0x00000041, 0x00000042, 0x00010030, 0x00010030, }, - {0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x00010036, 0x00010036, 0x00010037, 0x00010037, 0x00010038, 0x00010038, }, - {0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, }, - {0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, }, - {0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, }, - {0x00010052, 0x00010052, 0x00010053, 0x00010053, 0x00020049, 0x00020049, 0x00020049, 0x00020049, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004b, 0x0002004b, 0x0002004b, 0x0002004b, }, - {0x0002004c, 0x0002004c, 0x0002004c, 0x0002004c, 0x0002004d, 0x0002004d, 0x0002004d, 0x0002004d, 0x0002004e, 0x0002004e, 0x0002004e, 0x0002004e, 0x0002004f, 0x0002004f, 0x0002004f, 0x0002004f, }, - {0x001cffff, 0x001bffff, 0x0017ffff, 0x0018ffff, 0x0019ffff, 0x001affff, 0x00000054, 0x00000055, 0x00000056, 0x00000057, 0x00000058, 0x00000059, 0x00010050, 0x00010050, 0x00010051, 0x00010051, }, - {0x00020063, 0x00020063, 0x00020063, 0x00020063, 0x00020064, 0x00020064, 0x00020064, 0x00020064, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, }, - {0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, }, - {0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, }, - {0x0003005f, 0x0003005f, 0x0003005f, 0x0003005f, 0x0003005f, 0x0003005f, 0x0003005f, 0x0003005f, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, }, - {0x0001006a, 0x0001006a, 0x0001006c, 0x0001006c, 0x0001006e, 0x0001006e, 0x0001006f, 0x0001006f, 0x00020061, 0x00020061, 0x00020061, 0x00020061, 0x00020062, 0x00020062, 0x00020062, 0x00020062, }, - {0x001fffff, 0x0020ffff, 0x0021ffff, 0x001dffff, 0x001effff, 0x0000006d, 0x00000071, 0x00000072, 0x00010065, 0x00010065, 0x00010066, 0x00010066, 0x00010067, 0x00010067, 0x00010068, 0x00010068, }, - {0x0002007e, 0x0002007e, 0x0002007e, 0x0002007e, 0x0002007f, 0x0002007f, 0x0002007f, 0x0002007f, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, }, - {0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x00030080, 0x00030080, 0x00030080, 0x00030080, 0x00030080, 0x00030080, 0x00030080, 0x00030080, }, - {0x0002006b, 0x0002006b, 0x0002006b, 0x0002006b, 0x00020070, 0x00020070, 0x00020070, 0x00020070, 0x00020073, 0x00020073, 0x00020073, 0x00020073, 0x00020074, 0x00020074, 0x00020074, 0x00020074, }, - {0x00020075, 0x00020075, 0x00020075, 0x00020075, 0x00020076, 0x00020076, 0x00020076, 0x00020076, 0x00020077, 0x00020077, 0x00020077, 0x00020077, 0x00020078, 0x00020078, 0x00020078, 0x00020078, }, - {0x00020079, 0x00020079, 0x00020079, 0x00020079, 0x0002007b, 0x0002007b, 0x0002007b, 0x0002007b, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007d, 0x0002007d, 0x0002007d, 0x0002007d, }, +const uint32_t c_aauiCQMFHuffDec29[34][16] = { + { + 0x000fffff, + 0x0010ffff, + 0x0005ffff, + 0x0006ffff, + 0x0007ffff, + 0x0008ffff, + 0x0009ffff, + 0x000affff, + 0x000bffff, + 0x000cffff, + 0x000dffff, + 0x000effff, + 0x0001ffff, + 0x0002ffff, + 0x0003ffff, + 0x0004ffff, + }, + { + 0x0002002e, + 0x0002002e, + 0x0002002e, + 0x0002002e, + 0x0002002f, + 0x0002002f, + 0x0002002f, + 0x0002002f, + 0x00030001, + 0x00030001, + 0x00030001, + 0x00030001, + 0x00030001, + 0x00030001, + 0x00030001, + 0x00030001, + }, + { + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + }, + { + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + }, + { + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + }, + { + 0x00010039, + 0x00010039, + 0x0001003a, + 0x0001003a, + 0x00020000, + 0x00020000, + 0x00020000, + 0x00020000, + 0x00020002, + 0x00020002, + 0x00020002, + 0x00020002, + 0x00020006, + 0x00020006, + 0x00020006, + 0x00020006, + }, + { + 0x00020009, + 0x00020009, + 0x00020009, + 0x00020009, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0002000d, + }, + { + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0002000f, + 0x0002000f, + 0x0002000f, + 0x0002000f, + 0x00020010, + 0x00020010, + 0x00020010, + 0x00020010, + 0x00020011, + 0x00020011, + 0x00020011, + 0x00020011, + }, + { + 0x00020012, + 0x00020012, + 0x00020012, + 0x00020012, + 0x00020013, + 0x00020013, + 0x00020013, + 0x00020013, + 0x00020014, + 0x00020014, + 0x00020014, + 0x00020014, + 0x00020015, + 0x00020015, + 0x00020015, + 0x00020015, + }, + { + 0x00020016, + 0x00020016, + 0x00020016, + 0x00020016, + 0x00020017, + 0x00020017, + 0x00020017, + 0x00020017, + 0x00020018, + 0x00020018, + 0x00020018, + 0x00020018, + 0x00020019, + 0x00020019, + 0x00020019, + 0x00020019, + }, + { + 0x0002001a, + 0x0002001a, + 0x0002001a, + 0x0002001a, + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002001c, + 0x0002001c, + 0x0002001c, + 0x0002001c, + 0x0002001d, + 0x0002001d, + 0x0002001d, + 0x0002001d, + }, + { + 0x0002001e, + 0x0002001e, + 0x0002001e, + 0x0002001e, + 0x0002001f, + 0x0002001f, + 0x0002001f, + 0x0002001f, + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020021, + 0x00020021, + 0x00020021, + 0x00020021, + }, + { + 0x00020022, + 0x00020022, + 0x00020022, + 0x00020022, + 0x00020023, + 0x00020023, + 0x00020023, + 0x00020023, + 0x00020024, + 0x00020024, + 0x00020024, + 0x00020024, + 0x00020025, + 0x00020025, + 0x00020025, + 0x00020025, + }, + { + 0x00020026, + 0x00020026, + 0x00020026, + 0x00020026, + 0x00020027, + 0x00020027, + 0x00020027, + 0x00020027, + 0x00020028, + 0x00020028, + 0x00020028, + 0x00020028, + 0x00020029, + 0x00020029, + 0x00020029, + 0x00020029, + }, + { + 0x0002002a, + 0x0002002a, + 0x0002002a, + 0x0002002a, + 0x0002002b, + 0x0002002b, + 0x0002002b, + 0x0002002b, + 0x0002002c, + 0x0002002c, + 0x0002002c, + 0x0002002c, + 0x0002002d, + 0x0002002d, + 0x0002002d, + 0x0002002d, + }, + { + 0x0016ffff, + 0x0014ffff, + 0x0015ffff, + 0x0011ffff, + 0x0012ffff, + 0x0013ffff, + 0x0000003b, + 0x0000003c, + 0x0000003d, + 0x0000003e, + 0x0000003f, + 0x00000040, + 0x00000041, + 0x00000042, + 0x00010030, + 0x00010030, + }, + { + 0x00010031, + 0x00010031, + 0x00010032, + 0x00010032, + 0x00010033, + 0x00010033, + 0x00010034, + 0x00010034, + 0x00010035, + 0x00010035, + 0x00010036, + 0x00010036, + 0x00010037, + 0x00010037, + 0x00010038, + 0x00010038, + }, + { + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030044, + 0x00030044, + 0x00030044, + 0x00030044, + 0x00030044, + 0x00030044, + 0x00030044, + 0x00030044, + }, + { + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030046, + 0x00030046, + 0x00030046, + 0x00030046, + 0x00030046, + 0x00030046, + 0x00030046, + 0x00030046, + }, + { + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030048, + 0x00030048, + 0x00030048, + 0x00030048, + 0x00030048, + 0x00030048, + 0x00030048, + 0x00030048, + }, + { + 0x00010052, + 0x00010052, + 0x00010053, + 0x00010053, + 0x00020049, + 0x00020049, + 0x00020049, + 0x00020049, + 0x0002004a, + 0x0002004a, + 0x0002004a, + 0x0002004a, + 0x0002004b, + 0x0002004b, + 0x0002004b, + 0x0002004b, + }, + { + 0x0002004c, + 0x0002004c, + 0x0002004c, + 0x0002004c, + 0x0002004d, + 0x0002004d, + 0x0002004d, + 0x0002004d, + 0x0002004e, + 0x0002004e, + 0x0002004e, + 0x0002004e, + 0x0002004f, + 0x0002004f, + 0x0002004f, + 0x0002004f, + }, + { + 0x001cffff, + 0x001bffff, + 0x0017ffff, + 0x0018ffff, + 0x0019ffff, + 0x001affff, + 0x00000054, + 0x00000055, + 0x00000056, + 0x00000057, + 0x00000058, + 0x00000059, + 0x00010050, + 0x00010050, + 0x00010051, + 0x00010051, + }, + { + 0x00020063, + 0x00020063, + 0x00020063, + 0x00020063, + 0x00020064, + 0x00020064, + 0x00020064, + 0x00020064, + 0x0003005a, + 0x0003005a, + 0x0003005a, + 0x0003005a, + 0x0003005a, + 0x0003005a, + 0x0003005a, + 0x0003005a, + }, + { + 0x0003005b, + 0x0003005b, + 0x0003005b, + 0x0003005b, + 0x0003005b, + 0x0003005b, + 0x0003005b, + 0x0003005b, + 0x0003005c, + 0x0003005c, + 0x0003005c, + 0x0003005c, + 0x0003005c, + 0x0003005c, + 0x0003005c, + 0x0003005c, + }, + { + 0x0003005d, + 0x0003005d, + 0x0003005d, + 0x0003005d, + 0x0003005d, + 0x0003005d, + 0x0003005d, + 0x0003005d, + 0x0003005e, + 0x0003005e, + 0x0003005e, + 0x0003005e, + 0x0003005e, + 0x0003005e, + 0x0003005e, + 0x0003005e, + }, + { + 0x0003005f, + 0x0003005f, + 0x0003005f, + 0x0003005f, + 0x0003005f, + 0x0003005f, + 0x0003005f, + 0x0003005f, + 0x00030060, + 0x00030060, + 0x00030060, + 0x00030060, + 0x00030060, + 0x00030060, + 0x00030060, + 0x00030060, + }, + { + 0x0001006a, + 0x0001006a, + 0x0001006c, + 0x0001006c, + 0x0001006e, + 0x0001006e, + 0x0001006f, + 0x0001006f, + 0x00020061, + 0x00020061, + 0x00020061, + 0x00020061, + 0x00020062, + 0x00020062, + 0x00020062, + 0x00020062, + }, + { + 0x001fffff, + 0x0020ffff, + 0x0021ffff, + 0x001dffff, + 0x001effff, + 0x0000006d, + 0x00000071, + 0x00000072, + 0x00010065, + 0x00010065, + 0x00010066, + 0x00010066, + 0x00010067, + 0x00010067, + 0x00010068, + 0x00010068, + }, + { + 0x0002007e, + 0x0002007e, + 0x0002007e, + 0x0002007e, + 0x0002007f, + 0x0002007f, + 0x0002007f, + 0x0002007f, + 0x00030069, + 0x00030069, + 0x00030069, + 0x00030069, + 0x00030069, + 0x00030069, + 0x00030069, + 0x00030069, + }, + { + 0x0003007a, + 0x0003007a, + 0x0003007a, + 0x0003007a, + 0x0003007a, + 0x0003007a, + 0x0003007a, + 0x0003007a, + 0x00030080, + 0x00030080, + 0x00030080, + 0x00030080, + 0x00030080, + 0x00030080, + 0x00030080, + 0x00030080, + }, + { + 0x0002006b, + 0x0002006b, + 0x0002006b, + 0x0002006b, + 0x00020070, + 0x00020070, + 0x00020070, + 0x00020070, + 0x00020073, + 0x00020073, + 0x00020073, + 0x00020073, + 0x00020074, + 0x00020074, + 0x00020074, + 0x00020074, + }, + { + 0x00020075, + 0x00020075, + 0x00020075, + 0x00020075, + 0x00020076, + 0x00020076, + 0x00020076, + 0x00020076, + 0x00020077, + 0x00020077, + 0x00020077, + 0x00020077, + 0x00020078, + 0x00020078, + 0x00020078, + 0x00020078, + }, + { + 0x00020079, + 0x00020079, + 0x00020079, + 0x00020079, + 0x0002007b, + 0x0002007b, + 0x0002007b, + 0x0002007b, + 0x0002007c, + 0x0002007c, + 0x0002007c, + 0x0002007c, + 0x0002007d, + 0x0002007d, + 0x0002007d, + 0x0002007d, + }, }; #endif @@ -2111,72 +21297,867 @@ const uint32_t c_aauiCQMFHuffEnc30[153][2] = #else const uint16_t c_aauiCQMFHuffEnc30[153][2] = #endif -{ - {0x0007, 0x0009}, {0x0006, 0x000e}, {0x0006, 0x000f}, {0x0006, 0x0010}, {0x0006, 0x0011}, {0x0006, 0x0012}, {0x0006, 0x0013}, {0x0006, 0x0014}, - {0x0006, 0x0015}, {0x0006, 0x0016}, {0x0006, 0x0017}, {0x0006, 0x0018}, {0x0006, 0x0019}, {0x0006, 0x001a}, {0x0006, 0x001b}, {0x0006, 0x001c}, - {0x0006, 0x001d}, {0x0006, 0x001e}, {0x0006, 0x001f}, {0x0006, 0x0020}, {0x0006, 0x0021}, {0x0006, 0x0022}, {0x0006, 0x0023}, {0x0006, 0x0024}, - {0x0006, 0x0025}, {0x0006, 0x0026}, {0x0006, 0x0027}, {0x0006, 0x0028}, {0x0006, 0x0029}, {0x0006, 0x002a}, {0x0006, 0x002b}, {0x0006, 0x002c}, - {0x0006, 0x002d}, {0x0006, 0x002e}, {0x0006, 0x002f}, {0x0006, 0x0030}, {0x0006, 0x0031}, {0x0006, 0x0032}, {0x0006, 0x0033}, {0x0006, 0x0034}, - {0x0006, 0x0035}, {0x0006, 0x0036}, {0x0006, 0x0037}, {0x0006, 0x0038}, {0x0006, 0x0039}, {0x0006, 0x003a}, {0x0006, 0x003b}, {0x0006, 0x003c}, - {0x0006, 0x003d}, {0x0006, 0x003e}, {0x0006, 0x003f}, {0x0007, 0x000a}, {0x0007, 0x000b}, {0x0007, 0x000c}, {0x0007, 0x000d}, {0x0007, 0x000e}, - {0x0007, 0x000f}, {0x0007, 0x0010}, {0x0007, 0x0011}, {0x0007, 0x0012}, {0x0007, 0x0013}, {0x0007, 0x0014}, {0x0007, 0x0015}, {0x0007, 0x0016}, - {0x0007, 0x0017}, {0x0007, 0x0018}, {0x0007, 0x0019}, {0x0007, 0x001a}, {0x0007, 0x001b}, {0x0008, 0x0008}, {0x0008, 0x0009}, {0x0008, 0x000a}, - {0x0008, 0x000b}, {0x0008, 0x000c}, {0x0008, 0x000d}, {0x0008, 0x000e}, {0x0008, 0x000f}, {0x0008, 0x0010}, {0x0008, 0x0011}, {0x0009, 0x0007}, - {0x0009, 0x0008}, {0x0009, 0x0009}, {0x0009, 0x000a}, {0x0009, 0x000b}, {0x0009, 0x000c}, {0x0009, 0x000d}, {0x0009, 0x000e}, {0x000a, 0x0008}, - {0x0009, 0x000f}, {0x000a, 0x0009}, {0x000a, 0x000a}, {0x000a, 0x000b}, {0x000a, 0x000c}, {0x000a, 0x000d}, {0x000b, 0x0007}, {0x000b, 0x0008}, - {0x000b, 0x0009}, {0x000b, 0x000a}, {0x000b, 0x000b}, {0x000b, 0x000c}, {0x000b, 0x000d}, {0x000c, 0x0008}, {0x000b, 0x000e}, {0x000b, 0x000f}, - {0x000c, 0x0009}, {0x000c, 0x000a}, {0x000d, 0x0008}, {0x000c, 0x000b}, {0x000c, 0x000c}, {0x000d, 0x0009}, {0x000c, 0x000d}, {0x000d, 0x000a}, - {0x000d, 0x000b}, {0x000d, 0x000c}, {0x000d, 0x000d}, {0x000e, 0x0008}, {0x000d, 0x000e}, {0x000d, 0x000f}, {0x000e, 0x0009}, {0x000e, 0x000a}, - {0x000e, 0x000b}, {0x000e, 0x000c}, {0x000f, 0x0006}, {0x000f, 0x0007}, {0x000f, 0x0008}, {0x0010, 0x0006}, {0x000e, 0x000d}, {0x000e, 0x000e}, - {0x000e, 0x000f}, {0x0010, 0x0007}, {0x000f, 0x0009}, {0x0010, 0x0008}, {0x000f, 0x000a}, {0x000f, 0x000b}, {0x000f, 0x000c}, {0x000f, 0x000d}, - {0x0010, 0x0009}, {0x0011, 0x0000}, {0x0011, 0x0001}, {0x0011, 0x0002}, {0x000f, 0x000e}, {0x0010, 0x000a}, {0x0011, 0x0003}, {0x0011, 0x0004}, - {0x0011, 0x0005}, {0x000f, 0x000f}, {0x0011, 0x0006}, {0x0011, 0x0007}, {0x0011, 0x0008}, {0x0011, 0x0009}, {0x0011, 0x000a}, {0x0011, 0x000b}, - {0x0010, 0x000b}, + { + { 0x0007, 0x0009 }, + { 0x0006, 0x000e }, + { 0x0006, 0x000f }, + { 0x0006, 0x0010 }, + { 0x0006, 0x0011 }, + { 0x0006, 0x0012 }, + { 0x0006, 0x0013 }, + { 0x0006, 0x0014 }, + { 0x0006, 0x0015 }, + { 0x0006, 0x0016 }, + { 0x0006, 0x0017 }, + { 0x0006, 0x0018 }, + { 0x0006, 0x0019 }, + { 0x0006, 0x001a }, + { 0x0006, 0x001b }, + { 0x0006, 0x001c }, + { 0x0006, 0x001d }, + { 0x0006, 0x001e }, + { 0x0006, 0x001f }, + { 0x0006, 0x0020 }, + { 0x0006, 0x0021 }, + { 0x0006, 0x0022 }, + { 0x0006, 0x0023 }, + { 0x0006, 0x0024 }, + { 0x0006, 0x0025 }, + { 0x0006, 0x0026 }, + { 0x0006, 0x0027 }, + { 0x0006, 0x0028 }, + { 0x0006, 0x0029 }, + { 0x0006, 0x002a }, + { 0x0006, 0x002b }, + { 0x0006, 0x002c }, + { 0x0006, 0x002d }, + { 0x0006, 0x002e }, + { 0x0006, 0x002f }, + { 0x0006, 0x0030 }, + { 0x0006, 0x0031 }, + { 0x0006, 0x0032 }, + { 0x0006, 0x0033 }, + { 0x0006, 0x0034 }, + { 0x0006, 0x0035 }, + { 0x0006, 0x0036 }, + { 0x0006, 0x0037 }, + { 0x0006, 0x0038 }, + { 0x0006, 0x0039 }, + { 0x0006, 0x003a }, + { 0x0006, 0x003b }, + { 0x0006, 0x003c }, + { 0x0006, 0x003d }, + { 0x0006, 0x003e }, + { 0x0006, 0x003f }, + { 0x0007, 0x000a }, + { 0x0007, 0x000b }, + { 0x0007, 0x000c }, + { 0x0007, 0x000d }, + { 0x0007, 0x000e }, + { 0x0007, 0x000f }, + { 0x0007, 0x0010 }, + { 0x0007, 0x0011 }, + { 0x0007, 0x0012 }, + { 0x0007, 0x0013 }, + { 0x0007, 0x0014 }, + { 0x0007, 0x0015 }, + { 0x0007, 0x0016 }, + { 0x0007, 0x0017 }, + { 0x0007, 0x0018 }, + { 0x0007, 0x0019 }, + { 0x0007, 0x001a }, + { 0x0007, 0x001b }, + { 0x0008, 0x0008 }, + { 0x0008, 0x0009 }, + { 0x0008, 0x000a }, + { 0x0008, 0x000b }, + { 0x0008, 0x000c }, + { 0x0008, 0x000d }, + { 0x0008, 0x000e }, + { 0x0008, 0x000f }, + { 0x0008, 0x0010 }, + { 0x0008, 0x0011 }, + { 0x0009, 0x0007 }, + { 0x0009, 0x0008 }, + { 0x0009, 0x0009 }, + { 0x0009, 0x000a }, + { 0x0009, 0x000b }, + { 0x0009, 0x000c }, + { 0x0009, 0x000d }, + { 0x0009, 0x000e }, + { 0x000a, 0x0008 }, + { 0x0009, 0x000f }, + { 0x000a, 0x0009 }, + { 0x000a, 0x000a }, + { 0x000a, 0x000b }, + { 0x000a, 0x000c }, + { 0x000a, 0x000d }, + { 0x000b, 0x0007 }, + { 0x000b, 0x0008 }, + { 0x000b, 0x0009 }, + { 0x000b, 0x000a }, + { 0x000b, 0x000b }, + { 0x000b, 0x000c }, + { 0x000b, 0x000d }, + { 0x000c, 0x0008 }, + { 0x000b, 0x000e }, + { 0x000b, 0x000f }, + { 0x000c, 0x0009 }, + { 0x000c, 0x000a }, + { 0x000d, 0x0008 }, + { 0x000c, 0x000b }, + { 0x000c, 0x000c }, + { 0x000d, 0x0009 }, + { 0x000c, 0x000d }, + { 0x000d, 0x000a }, + { 0x000d, 0x000b }, + { 0x000d, 0x000c }, + { 0x000d, 0x000d }, + { 0x000e, 0x0008 }, + { 0x000d, 0x000e }, + { 0x000d, 0x000f }, + { 0x000e, 0x0009 }, + { 0x000e, 0x000a }, + { 0x000e, 0x000b }, + { 0x000e, 0x000c }, + { 0x000f, 0x0006 }, + { 0x000f, 0x0007 }, + { 0x000f, 0x0008 }, + { 0x0010, 0x0006 }, + { 0x000e, 0x000d }, + { 0x000e, 0x000e }, + { 0x000e, 0x000f }, + { 0x0010, 0x0007 }, + { 0x000f, 0x0009 }, + { 0x0010, 0x0008 }, + { 0x000f, 0x000a }, + { 0x000f, 0x000b }, + { 0x000f, 0x000c }, + { 0x000f, 0x000d }, + { 0x0010, 0x0009 }, + { 0x0011, 0x0000 }, + { 0x0011, 0x0001 }, + { 0x0011, 0x0002 }, + { 0x000f, 0x000e }, + { 0x0010, 0x000a }, + { 0x0011, 0x0003 }, + { 0x0011, 0x0004 }, + { 0x0011, 0x0005 }, + { 0x000f, 0x000f }, + { 0x0011, 0x0006 }, + { 0x0011, 0x0007 }, + { 0x0011, 0x0008 }, + { 0x0011, 0x0009 }, + { 0x0011, 0x000a }, + { 0x0011, 0x000b }, + { 0x0010, 0x000b }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec30[39][16] = -{ - {0x0010ffff, 0x000effff, 0x000fffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000dffff, }, - {0x00010041, 0x00010041, 0x00010042, 0x00010042, 0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00020002, 0x00020002, 0x00020002, 0x00020002, }, - {0x00020003, 0x00020003, 0x00020003, 0x00020003, 0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x00020005, 0x00020005, 0x00020005, 0x00020005, 0x00020006, 0x00020006, 0x00020006, 0x00020006, }, - {0x00020007, 0x00020007, 0x00020007, 0x00020007, 0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x00020009, 0x00020009, 0x00020009, 0x00020009, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, }, - {0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, }, - {0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x00020011, 0x00020011, 0x00020011, 0x00020011, 0x00020012, 0x00020012, 0x00020012, 0x00020012, }, - {0x00020013, 0x00020013, 0x00020013, 0x00020013, 0x00020014, 0x00020014, 0x00020014, 0x00020014, 0x00020015, 0x00020015, 0x00020015, 0x00020015, 0x00020016, 0x00020016, 0x00020016, 0x00020016, }, - {0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, }, - {0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, }, - {0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, }, - {0x00020023, 0x00020023, 0x00020023, 0x00020023, 0x00020024, 0x00020024, 0x00020024, 0x00020024, 0x00020025, 0x00020025, 0x00020025, 0x00020025, 0x00020026, 0x00020026, 0x00020026, 0x00020026, }, - {0x00020027, 0x00020027, 0x00020027, 0x00020027, 0x00020028, 0x00020028, 0x00020028, 0x00020028, 0x00020029, 0x00020029, 0x00020029, 0x00020029, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, }, - {0x0002002b, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, }, - {0x0002002f, 0x0002002f, 0x0002002f, 0x0002002f, 0x00020030, 0x00020030, 0x00020030, 0x00020030, 0x00020031, 0x00020031, 0x00020031, 0x00020031, 0x00020032, 0x00020032, 0x00020032, 0x00020032, }, - {0x0000004d, 0x0000004e, 0x00010000, 0x00010000, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x00010036, 0x00010036, 0x00010037, 0x00010037, 0x00010038, 0x00010038, }, - {0x00010039, 0x00010039, 0x0001003a, 0x0001003a, 0x0001003b, 0x0001003b, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, 0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x00010040, 0x00010040, }, - {0x0017ffff, 0x0018ffff, 0x0016ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, 0x00000045, 0x00000046, 0x00000047, 0x00000048, 0x00000049, 0x0000004a, 0x0000004b, 0x0000004c, }, - {0x0002005c, 0x0002005c, 0x0002005c, 0x0002005c, 0x0002005d, 0x0002005d, 0x0002005d, 0x0002005d, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, }, - {0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, }, - {0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, }, - {0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, }, - {0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, }, - {0x00020057, 0x00020057, 0x00020057, 0x00020057, 0x00020059, 0x00020059, 0x00020059, 0x00020059, 0x0002005a, 0x0002005a, 0x0002005a, 0x0002005a, 0x0002005b, 0x0002005b, 0x0002005b, 0x0002005b, }, - {0x001fffff, 0x0020ffff, 0x001dffff, 0x001effff, 0x0019ffff, 0x001affff, 0x001bffff, 0x001cffff, 0x00000065, 0x00000068, 0x00000069, 0x0000006b, 0x0000006c, 0x0000006e, 0x0001005e, 0x0001005e, }, - {0x0001005f, 0x0001005f, 0x00010060, 0x00010060, 0x00010061, 0x00010061, 0x00010062, 0x00010062, 0x00010063, 0x00010063, 0x00010064, 0x00010064, 0x00010066, 0x00010066, 0x00010067, 0x00010067, }, - {0x0003006a, 0x0003006a, 0x0003006a, 0x0003006a, 0x0003006a, 0x0003006a, 0x0003006a, 0x0003006a, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, 0x0003006d, }, - {0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, }, - {0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030072, 0x00030072, 0x00030072, 0x00030072, 0x00030072, 0x00030072, 0x00030072, 0x00030072, }, - {0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, 0x00030075, }, - {0x00020073, 0x00020073, 0x00020073, 0x00020073, 0x00020076, 0x00020076, 0x00020076, 0x00020076, 0x00020077, 0x00020077, 0x00020077, 0x00020077, 0x00020078, 0x00020078, 0x00020078, 0x00020078, }, - {0x00020079, 0x00020079, 0x00020079, 0x00020079, 0x0002007e, 0x0002007e, 0x0002007e, 0x0002007e, 0x0002007f, 0x0002007f, 0x0002007f, 0x0002007f, 0x00020080, 0x00020080, 0x00020080, 0x00020080, }, - {0x0021ffff, 0x0022ffff, 0x0023ffff, 0x0024ffff, 0x0025ffff, 0x0026ffff, 0x0000007d, 0x00000081, 0x00000083, 0x00000088, 0x0000008d, 0x00000098, 0x0001007a, 0x0001007a, 0x0001007b, 0x0001007b, }, - {0x0001007c, 0x0001007c, 0x00010082, 0x00010082, 0x00010084, 0x00010084, 0x00010085, 0x00010085, 0x00010086, 0x00010086, 0x00010087, 0x00010087, 0x0001008c, 0x0001008c, 0x00010091, 0x00010091, }, - {0x00030089, 0x00030089, 0x00030089, 0x00030089, 0x00030089, 0x00030089, 0x00030089, 0x00030089, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, }, - {0x0003008b, 0x0003008b, 0x0003008b, 0x0003008b, 0x0003008b, 0x0003008b, 0x0003008b, 0x0003008b, 0x0003008e, 0x0003008e, 0x0003008e, 0x0003008e, 0x0003008e, 0x0003008e, 0x0003008e, 0x0003008e, }, - {0x0003008f, 0x0003008f, 0x0003008f, 0x0003008f, 0x0003008f, 0x0003008f, 0x0003008f, 0x0003008f, 0x00030090, 0x00030090, 0x00030090, 0x00030090, 0x00030090, 0x00030090, 0x00030090, 0x00030090, }, - {0x00030092, 0x00030092, 0x00030092, 0x00030092, 0x00030092, 0x00030092, 0x00030092, 0x00030092, 0x00030093, 0x00030093, 0x00030093, 0x00030093, 0x00030093, 0x00030093, 0x00030093, 0x00030093, }, - {0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030095, 0x00030095, 0x00030095, 0x00030095, 0x00030095, 0x00030095, 0x00030095, 0x00030095, }, - {0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030096, 0x00030097, 0x00030097, 0x00030097, 0x00030097, 0x00030097, 0x00030097, 0x00030097, 0x00030097, }, +const uint32_t c_aauiCQMFHuffDec30[39][16] = { + { + 0x0010ffff, + 0x000effff, + 0x000fffff, + 0x0001ffff, + 0x0002ffff, + 0x0003ffff, + 0x0004ffff, + 0x0005ffff, + 0x0006ffff, + 0x0007ffff, + 0x0008ffff, + 0x0009ffff, + 0x000affff, + 0x000bffff, + 0x000cffff, + 0x000dffff, + }, + { + 0x00010041, + 0x00010041, + 0x00010042, + 0x00010042, + 0x00010043, + 0x00010043, + 0x00010044, + 0x00010044, + 0x00020001, + 0x00020001, + 0x00020001, + 0x00020001, + 0x00020002, + 0x00020002, + 0x00020002, + 0x00020002, + }, + { + 0x00020003, + 0x00020003, + 0x00020003, + 0x00020003, + 0x00020004, + 0x00020004, + 0x00020004, + 0x00020004, + 0x00020005, + 0x00020005, + 0x00020005, + 0x00020005, + 0x00020006, + 0x00020006, + 0x00020006, + 0x00020006, + }, + { + 0x00020007, + 0x00020007, + 0x00020007, + 0x00020007, + 0x00020008, + 0x00020008, + 0x00020008, + 0x00020008, + 0x00020009, + 0x00020009, + 0x00020009, + 0x00020009, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x0002000a, + }, + { + 0x0002000b, + 0x0002000b, + 0x0002000b, + 0x0002000b, + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0002000e, + }, + { + 0x0002000f, + 0x0002000f, + 0x0002000f, + 0x0002000f, + 0x00020010, + 0x00020010, + 0x00020010, + 0x00020010, + 0x00020011, + 0x00020011, + 0x00020011, + 0x00020011, + 0x00020012, + 0x00020012, + 0x00020012, + 0x00020012, + }, + { + 0x00020013, + 0x00020013, + 0x00020013, + 0x00020013, + 0x00020014, + 0x00020014, + 0x00020014, + 0x00020014, + 0x00020015, + 0x00020015, + 0x00020015, + 0x00020015, + 0x00020016, + 0x00020016, + 0x00020016, + 0x00020016, + }, + { + 0x00020017, + 0x00020017, + 0x00020017, + 0x00020017, + 0x00020018, + 0x00020018, + 0x00020018, + 0x00020018, + 0x00020019, + 0x00020019, + 0x00020019, + 0x00020019, + 0x0002001a, + 0x0002001a, + 0x0002001a, + 0x0002001a, + }, + { + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002001c, + 0x0002001c, + 0x0002001c, + 0x0002001c, + 0x0002001d, + 0x0002001d, + 0x0002001d, + 0x0002001d, + 0x0002001e, + 0x0002001e, + 0x0002001e, + 0x0002001e, + }, + { + 0x0002001f, + 0x0002001f, + 0x0002001f, + 0x0002001f, + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020021, + 0x00020021, + 0x00020021, + 0x00020021, + 0x00020022, + 0x00020022, + 0x00020022, + 0x00020022, + }, + { + 0x00020023, + 0x00020023, + 0x00020023, + 0x00020023, + 0x00020024, + 0x00020024, + 0x00020024, + 0x00020024, + 0x00020025, + 0x00020025, + 0x00020025, + 0x00020025, + 0x00020026, + 0x00020026, + 0x00020026, + 0x00020026, + }, + { + 0x00020027, + 0x00020027, + 0x00020027, + 0x00020027, + 0x00020028, + 0x00020028, + 0x00020028, + 0x00020028, + 0x00020029, + 0x00020029, + 0x00020029, + 0x00020029, + 0x0002002a, + 0x0002002a, + 0x0002002a, + 0x0002002a, + }, + { + 0x0002002b, + 0x0002002b, + 0x0002002b, + 0x0002002b, + 0x0002002c, + 0x0002002c, + 0x0002002c, + 0x0002002c, + 0x0002002d, + 0x0002002d, + 0x0002002d, + 0x0002002d, + 0x0002002e, + 0x0002002e, + 0x0002002e, + 0x0002002e, + }, + { + 0x0002002f, + 0x0002002f, + 0x0002002f, + 0x0002002f, + 0x00020030, + 0x00020030, + 0x00020030, + 0x00020030, + 0x00020031, + 0x00020031, + 0x00020031, + 0x00020031, + 0x00020032, + 0x00020032, + 0x00020032, + 0x00020032, + }, + { + 0x0000004d, + 0x0000004e, + 0x00010000, + 0x00010000, + 0x00010033, + 0x00010033, + 0x00010034, + 0x00010034, + 0x00010035, + 0x00010035, + 0x00010036, + 0x00010036, + 0x00010037, + 0x00010037, + 0x00010038, + 0x00010038, + }, + { + 0x00010039, + 0x00010039, + 0x0001003a, + 0x0001003a, + 0x0001003b, + 0x0001003b, + 0x0001003c, + 0x0001003c, + 0x0001003d, + 0x0001003d, + 0x0001003e, + 0x0001003e, + 0x0001003f, + 0x0001003f, + 0x00010040, + 0x00010040, + }, + { + 0x0017ffff, + 0x0018ffff, + 0x0016ffff, + 0x0011ffff, + 0x0012ffff, + 0x0013ffff, + 0x0014ffff, + 0x0015ffff, + 0x00000045, + 0x00000046, + 0x00000047, + 0x00000048, + 0x00000049, + 0x0000004a, + 0x0000004b, + 0x0000004c, + }, + { + 0x0002005c, + 0x0002005c, + 0x0002005c, + 0x0002005c, + 0x0002005d, + 0x0002005d, + 0x0002005d, + 0x0002005d, + 0x0003004f, + 0x0003004f, + 0x0003004f, + 0x0003004f, + 0x0003004f, + 0x0003004f, + 0x0003004f, + 0x0003004f, + }, + { + 0x00030050, + 0x00030050, + 0x00030050, + 0x00030050, + 0x00030050, + 0x00030050, + 0x00030050, + 0x00030050, + 0x00030051, + 0x00030051, + 0x00030051, + 0x00030051, + 0x00030051, + 0x00030051, + 0x00030051, + 0x00030051, + }, + { + 0x00030052, + 0x00030052, + 0x00030052, + 0x00030052, + 0x00030052, + 0x00030052, + 0x00030052, + 0x00030052, + 0x00030053, + 0x00030053, + 0x00030053, + 0x00030053, + 0x00030053, + 0x00030053, + 0x00030053, + 0x00030053, + }, + { + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030055, + }, + { + 0x00030056, + 0x00030056, + 0x00030056, + 0x00030056, + 0x00030056, + 0x00030056, + 0x00030056, + 0x00030056, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + }, + { + 0x00020057, + 0x00020057, + 0x00020057, + 0x00020057, + 0x00020059, + 0x00020059, + 0x00020059, + 0x00020059, + 0x0002005a, + 0x0002005a, + 0x0002005a, + 0x0002005a, + 0x0002005b, + 0x0002005b, + 0x0002005b, + 0x0002005b, + }, + { + 0x001fffff, + 0x0020ffff, + 0x001dffff, + 0x001effff, + 0x0019ffff, + 0x001affff, + 0x001bffff, + 0x001cffff, + 0x00000065, + 0x00000068, + 0x00000069, + 0x0000006b, + 0x0000006c, + 0x0000006e, + 0x0001005e, + 0x0001005e, + }, + { + 0x0001005f, + 0x0001005f, + 0x00010060, + 0x00010060, + 0x00010061, + 0x00010061, + 0x00010062, + 0x00010062, + 0x00010063, + 0x00010063, + 0x00010064, + 0x00010064, + 0x00010066, + 0x00010066, + 0x00010067, + 0x00010067, + }, + { + 0x0003006a, + 0x0003006a, + 0x0003006a, + 0x0003006a, + 0x0003006a, + 0x0003006a, + 0x0003006a, + 0x0003006a, + 0x0003006d, + 0x0003006d, + 0x0003006d, + 0x0003006d, + 0x0003006d, + 0x0003006d, + 0x0003006d, + 0x0003006d, + }, + { + 0x0003006f, + 0x0003006f, + 0x0003006f, + 0x0003006f, + 0x0003006f, + 0x0003006f, + 0x0003006f, + 0x0003006f, + 0x00030070, + 0x00030070, + 0x00030070, + 0x00030070, + 0x00030070, + 0x00030070, + 0x00030070, + 0x00030070, + }, + { + 0x00030071, + 0x00030071, + 0x00030071, + 0x00030071, + 0x00030071, + 0x00030071, + 0x00030071, + 0x00030071, + 0x00030072, + 0x00030072, + 0x00030072, + 0x00030072, + 0x00030072, + 0x00030072, + 0x00030072, + 0x00030072, + }, + { + 0x00030074, + 0x00030074, + 0x00030074, + 0x00030074, + 0x00030074, + 0x00030074, + 0x00030074, + 0x00030074, + 0x00030075, + 0x00030075, + 0x00030075, + 0x00030075, + 0x00030075, + 0x00030075, + 0x00030075, + 0x00030075, + }, + { + 0x00020073, + 0x00020073, + 0x00020073, + 0x00020073, + 0x00020076, + 0x00020076, + 0x00020076, + 0x00020076, + 0x00020077, + 0x00020077, + 0x00020077, + 0x00020077, + 0x00020078, + 0x00020078, + 0x00020078, + 0x00020078, + }, + { + 0x00020079, + 0x00020079, + 0x00020079, + 0x00020079, + 0x0002007e, + 0x0002007e, + 0x0002007e, + 0x0002007e, + 0x0002007f, + 0x0002007f, + 0x0002007f, + 0x0002007f, + 0x00020080, + 0x00020080, + 0x00020080, + 0x00020080, + }, + { + 0x0021ffff, + 0x0022ffff, + 0x0023ffff, + 0x0024ffff, + 0x0025ffff, + 0x0026ffff, + 0x0000007d, + 0x00000081, + 0x00000083, + 0x00000088, + 0x0000008d, + 0x00000098, + 0x0001007a, + 0x0001007a, + 0x0001007b, + 0x0001007b, + }, + { + 0x0001007c, + 0x0001007c, + 0x00010082, + 0x00010082, + 0x00010084, + 0x00010084, + 0x00010085, + 0x00010085, + 0x00010086, + 0x00010086, + 0x00010087, + 0x00010087, + 0x0001008c, + 0x0001008c, + 0x00010091, + 0x00010091, + }, + { + 0x00030089, + 0x00030089, + 0x00030089, + 0x00030089, + 0x00030089, + 0x00030089, + 0x00030089, + 0x00030089, + 0x0003008a, + 0x0003008a, + 0x0003008a, + 0x0003008a, + 0x0003008a, + 0x0003008a, + 0x0003008a, + 0x0003008a, + }, + { + 0x0003008b, + 0x0003008b, + 0x0003008b, + 0x0003008b, + 0x0003008b, + 0x0003008b, + 0x0003008b, + 0x0003008b, + 0x0003008e, + 0x0003008e, + 0x0003008e, + 0x0003008e, + 0x0003008e, + 0x0003008e, + 0x0003008e, + 0x0003008e, + }, + { + 0x0003008f, + 0x0003008f, + 0x0003008f, + 0x0003008f, + 0x0003008f, + 0x0003008f, + 0x0003008f, + 0x0003008f, + 0x00030090, + 0x00030090, + 0x00030090, + 0x00030090, + 0x00030090, + 0x00030090, + 0x00030090, + 0x00030090, + }, + { + 0x00030092, + 0x00030092, + 0x00030092, + 0x00030092, + 0x00030092, + 0x00030092, + 0x00030092, + 0x00030092, + 0x00030093, + 0x00030093, + 0x00030093, + 0x00030093, + 0x00030093, + 0x00030093, + 0x00030093, + 0x00030093, + }, + { + 0x00030094, + 0x00030094, + 0x00030094, + 0x00030094, + 0x00030094, + 0x00030094, + 0x00030094, + 0x00030094, + 0x00030095, + 0x00030095, + 0x00030095, + 0x00030095, + 0x00030095, + 0x00030095, + 0x00030095, + 0x00030095, + }, + { + 0x00030096, + 0x00030096, + 0x00030096, + 0x00030096, + 0x00030096, + 0x00030096, + 0x00030096, + 0x00030096, + 0x00030097, + 0x00030097, + 0x00030097, + 0x00030097, + 0x00030097, + 0x00030097, + 0x00030097, + 0x00030097, + }, }; #endif @@ -2185,79 +22166,967 @@ const uint32_t c_aauiCQMFHuffEnc31[181][2] = #else const uint16_t c_aauiCQMFHuffEnc31[181][2] = #endif -{ - {0x0007, 0x000b}, {0x0006, 0x0015}, {0x0006, 0x0016}, {0x0006, 0x0017}, {0x0006, 0x0018}, {0x0006, 0x0019}, {0x0006, 0x001a}, {0x0006, 0x001b}, - {0x0006, 0x001c}, {0x0006, 0x001d}, {0x0006, 0x001e}, {0x0006, 0x001f}, {0x0006, 0x0020}, {0x0006, 0x0021}, {0x0006, 0x0022}, {0x0006, 0x0023}, - {0x0006, 0x0024}, {0x0006, 0x0025}, {0x0006, 0x0026}, {0x0006, 0x0027}, {0x0006, 0x0028}, {0x0006, 0x0029}, {0x0006, 0x002a}, {0x0006, 0x002b}, - {0x0006, 0x002c}, {0x0006, 0x002d}, {0x0006, 0x002e}, {0x0006, 0x002f}, {0x0006, 0x0030}, {0x0006, 0x0031}, {0x0006, 0x0032}, {0x0006, 0x0033}, - {0x0006, 0x0034}, {0x0006, 0x0035}, {0x0006, 0x0036}, {0x0006, 0x0037}, {0x0006, 0x0038}, {0x0006, 0x0039}, {0x0006, 0x003a}, {0x0006, 0x003b}, - {0x0006, 0x003c}, {0x0006, 0x003d}, {0x0006, 0x003e}, {0x0007, 0x000c}, {0x0006, 0x003f}, {0x0007, 0x000d}, {0x0007, 0x000e}, {0x0007, 0x000f}, - {0x0007, 0x0010}, {0x0007, 0x0011}, {0x0007, 0x0012}, {0x0007, 0x0013}, {0x0007, 0x0014}, {0x0007, 0x0015}, {0x0007, 0x0016}, {0x0007, 0x0017}, - {0x0007, 0x0018}, {0x0007, 0x0019}, {0x0007, 0x001a}, {0x0007, 0x001b}, {0x0007, 0x001c}, {0x0007, 0x001d}, {0x0007, 0x001e}, {0x0007, 0x001f}, - {0x0007, 0x0020}, {0x0007, 0x0021}, {0x0007, 0x0022}, {0x0007, 0x0023}, {0x0007, 0x0024}, {0x0007, 0x0025}, {0x0007, 0x0026}, {0x0007, 0x0027}, - {0x0007, 0x0028}, {0x0007, 0x0029}, {0x0008, 0x0009}, {0x0008, 0x000a}, {0x0008, 0x000b}, {0x0008, 0x000c}, {0x0008, 0x000d}, {0x0008, 0x000e}, - {0x0008, 0x000f}, {0x0008, 0x0010}, {0x0008, 0x0011}, {0x0008, 0x0012}, {0x0008, 0x0013}, {0x0008, 0x0014}, {0x0008, 0x0015}, {0x0009, 0x0008}, - {0x0009, 0x0009}, {0x0009, 0x000a}, {0x0009, 0x000b}, {0x0009, 0x000c}, {0x0009, 0x000d}, {0x0009, 0x000e}, {0x0009, 0x000f}, {0x0009, 0x0010}, - {0x0009, 0x0011}, {0x000a, 0x0008}, {0x000a, 0x0009}, {0x000a, 0x000a}, {0x000a, 0x000b}, {0x000a, 0x000c}, {0x000a, 0x000d}, {0x000a, 0x000e}, - {0x000a, 0x000f}, {0x000b, 0x0008}, {0x000b, 0x0009}, {0x000b, 0x000a}, {0x000b, 0x000b}, {0x000b, 0x000c}, {0x000b, 0x000d}, {0x000b, 0x000e}, - {0x000c, 0x0008}, {0x000c, 0x0009}, {0x000b, 0x000f}, {0x000c, 0x000a}, {0x000c, 0x000b}, {0x000c, 0x000c}, {0x000c, 0x000d}, {0x000d, 0x0008}, - {0x000c, 0x000e}, {0x000d, 0x0009}, {0x000d, 0x000a}, {0x000c, 0x000f}, {0x000d, 0x000b}, {0x000d, 0x000c}, {0x000d, 0x000d}, {0x000d, 0x000e}, - {0x000d, 0x000f}, {0x000e, 0x0008}, {0x000e, 0x0009}, {0x000e, 0x000a}, {0x000e, 0x000b}, {0x000e, 0x000c}, {0x000e, 0x000d}, {0x000e, 0x000e}, - {0x000e, 0x000f}, {0x000f, 0x0009}, {0x000f, 0x000a}, {0x000f, 0x000b}, {0x000f, 0x000c}, {0x0010, 0x0009}, {0x000f, 0x000d}, {0x000f, 0x000e}, - {0x0010, 0x000a}, {0x0010, 0x000b}, {0x0010, 0x000c}, {0x0010, 0x000d}, {0x0011, 0x000a}, {0x0010, 0x000e}, {0x000f, 0x000f}, {0x0010, 0x000f}, - {0x0012, 0x0000}, {0x0012, 0x0001}, {0x0011, 0x000b}, {0x0011, 0x000c}, {0x0010, 0x0010}, {0x0012, 0x0002}, {0x0012, 0x0003}, {0x0011, 0x000d}, - {0x0011, 0x000e}, {0x0011, 0x000f}, {0x0011, 0x0010}, {0x0011, 0x0011}, {0x0010, 0x0011}, {0x0012, 0x0004}, {0x0012, 0x0005}, {0x0012, 0x0006}, - {0x0012, 0x0007}, {0x0012, 0x0008}, {0x0012, 0x0009}, {0x0012, 0x000a}, {0x0012, 0x000b}, {0x0012, 0x000c}, {0x0012, 0x000d}, {0x0012, 0x000e}, - {0x0012, 0x000f}, {0x0012, 0x0010}, {0x0012, 0x0011}, {0x0012, 0x0012}, {0x0012, 0x0013}, + { + { 0x0007, 0x000b }, + { 0x0006, 0x0015 }, + { 0x0006, 0x0016 }, + { 0x0006, 0x0017 }, + { 0x0006, 0x0018 }, + { 0x0006, 0x0019 }, + { 0x0006, 0x001a }, + { 0x0006, 0x001b }, + { 0x0006, 0x001c }, + { 0x0006, 0x001d }, + { 0x0006, 0x001e }, + { 0x0006, 0x001f }, + { 0x0006, 0x0020 }, + { 0x0006, 0x0021 }, + { 0x0006, 0x0022 }, + { 0x0006, 0x0023 }, + { 0x0006, 0x0024 }, + { 0x0006, 0x0025 }, + { 0x0006, 0x0026 }, + { 0x0006, 0x0027 }, + { 0x0006, 0x0028 }, + { 0x0006, 0x0029 }, + { 0x0006, 0x002a }, + { 0x0006, 0x002b }, + { 0x0006, 0x002c }, + { 0x0006, 0x002d }, + { 0x0006, 0x002e }, + { 0x0006, 0x002f }, + { 0x0006, 0x0030 }, + { 0x0006, 0x0031 }, + { 0x0006, 0x0032 }, + { 0x0006, 0x0033 }, + { 0x0006, 0x0034 }, + { 0x0006, 0x0035 }, + { 0x0006, 0x0036 }, + { 0x0006, 0x0037 }, + { 0x0006, 0x0038 }, + { 0x0006, 0x0039 }, + { 0x0006, 0x003a }, + { 0x0006, 0x003b }, + { 0x0006, 0x003c }, + { 0x0006, 0x003d }, + { 0x0006, 0x003e }, + { 0x0007, 0x000c }, + { 0x0006, 0x003f }, + { 0x0007, 0x000d }, + { 0x0007, 0x000e }, + { 0x0007, 0x000f }, + { 0x0007, 0x0010 }, + { 0x0007, 0x0011 }, + { 0x0007, 0x0012 }, + { 0x0007, 0x0013 }, + { 0x0007, 0x0014 }, + { 0x0007, 0x0015 }, + { 0x0007, 0x0016 }, + { 0x0007, 0x0017 }, + { 0x0007, 0x0018 }, + { 0x0007, 0x0019 }, + { 0x0007, 0x001a }, + { 0x0007, 0x001b }, + { 0x0007, 0x001c }, + { 0x0007, 0x001d }, + { 0x0007, 0x001e }, + { 0x0007, 0x001f }, + { 0x0007, 0x0020 }, + { 0x0007, 0x0021 }, + { 0x0007, 0x0022 }, + { 0x0007, 0x0023 }, + { 0x0007, 0x0024 }, + { 0x0007, 0x0025 }, + { 0x0007, 0x0026 }, + { 0x0007, 0x0027 }, + { 0x0007, 0x0028 }, + { 0x0007, 0x0029 }, + { 0x0008, 0x0009 }, + { 0x0008, 0x000a }, + { 0x0008, 0x000b }, + { 0x0008, 0x000c }, + { 0x0008, 0x000d }, + { 0x0008, 0x000e }, + { 0x0008, 0x000f }, + { 0x0008, 0x0010 }, + { 0x0008, 0x0011 }, + { 0x0008, 0x0012 }, + { 0x0008, 0x0013 }, + { 0x0008, 0x0014 }, + { 0x0008, 0x0015 }, + { 0x0009, 0x0008 }, + { 0x0009, 0x0009 }, + { 0x0009, 0x000a }, + { 0x0009, 0x000b }, + { 0x0009, 0x000c }, + { 0x0009, 0x000d }, + { 0x0009, 0x000e }, + { 0x0009, 0x000f }, + { 0x0009, 0x0010 }, + { 0x0009, 0x0011 }, + { 0x000a, 0x0008 }, + { 0x000a, 0x0009 }, + { 0x000a, 0x000a }, + { 0x000a, 0x000b }, + { 0x000a, 0x000c }, + { 0x000a, 0x000d }, + { 0x000a, 0x000e }, + { 0x000a, 0x000f }, + { 0x000b, 0x0008 }, + { 0x000b, 0x0009 }, + { 0x000b, 0x000a }, + { 0x000b, 0x000b }, + { 0x000b, 0x000c }, + { 0x000b, 0x000d }, + { 0x000b, 0x000e }, + { 0x000c, 0x0008 }, + { 0x000c, 0x0009 }, + { 0x000b, 0x000f }, + { 0x000c, 0x000a }, + { 0x000c, 0x000b }, + { 0x000c, 0x000c }, + { 0x000c, 0x000d }, + { 0x000d, 0x0008 }, + { 0x000c, 0x000e }, + { 0x000d, 0x0009 }, + { 0x000d, 0x000a }, + { 0x000c, 0x000f }, + { 0x000d, 0x000b }, + { 0x000d, 0x000c }, + { 0x000d, 0x000d }, + { 0x000d, 0x000e }, + { 0x000d, 0x000f }, + { 0x000e, 0x0008 }, + { 0x000e, 0x0009 }, + { 0x000e, 0x000a }, + { 0x000e, 0x000b }, + { 0x000e, 0x000c }, + { 0x000e, 0x000d }, + { 0x000e, 0x000e }, + { 0x000e, 0x000f }, + { 0x000f, 0x0009 }, + { 0x000f, 0x000a }, + { 0x000f, 0x000b }, + { 0x000f, 0x000c }, + { 0x0010, 0x0009 }, + { 0x000f, 0x000d }, + { 0x000f, 0x000e }, + { 0x0010, 0x000a }, + { 0x0010, 0x000b }, + { 0x0010, 0x000c }, + { 0x0010, 0x000d }, + { 0x0011, 0x000a }, + { 0x0010, 0x000e }, + { 0x000f, 0x000f }, + { 0x0010, 0x000f }, + { 0x0012, 0x0000 }, + { 0x0012, 0x0001 }, + { 0x0011, 0x000b }, + { 0x0011, 0x000c }, + { 0x0010, 0x0010 }, + { 0x0012, 0x0002 }, + { 0x0012, 0x0003 }, + { 0x0011, 0x000d }, + { 0x0011, 0x000e }, + { 0x0011, 0x000f }, + { 0x0011, 0x0010 }, + { 0x0011, 0x0011 }, + { 0x0010, 0x0011 }, + { 0x0012, 0x0004 }, + { 0x0012, 0x0005 }, + { 0x0012, 0x0006 }, + { 0x0012, 0x0007 }, + { 0x0012, 0x0008 }, + { 0x0012, 0x0009 }, + { 0x0012, 0x000a }, + { 0x0012, 0x000b }, + { 0x0012, 0x000c }, + { 0x0012, 0x000d }, + { 0x0012, 0x000e }, + { 0x0012, 0x000f }, + { 0x0012, 0x0010 }, + { 0x0012, 0x0011 }, + { 0x0012, 0x0012 }, + { 0x0012, 0x0013 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec31[43][16] = -{ - {0x0010ffff, 0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, }, - {0x00010048, 0x00010048, 0x00010049, 0x00010049, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x00020003, 0x00020003, 0x00020003, 0x00020003, }, - {0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x00020005, 0x00020005, 0x00020005, 0x00020005, 0x00020006, 0x00020006, 0x00020006, 0x00020006, 0x00020007, 0x00020007, 0x00020007, 0x00020007, }, - {0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x00020009, 0x00020009, 0x00020009, 0x00020009, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, }, - {0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, }, - {0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x00020011, 0x00020011, 0x00020011, 0x00020011, 0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00020013, 0x00020013, 0x00020013, 0x00020013, }, - {0x00020014, 0x00020014, 0x00020014, 0x00020014, 0x00020015, 0x00020015, 0x00020015, 0x00020015, 0x00020016, 0x00020016, 0x00020016, 0x00020016, 0x00020017, 0x00020017, 0x00020017, 0x00020017, }, - {0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, }, - {0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, }, - {0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x00020023, 0x00020023, 0x00020023, 0x00020023, }, - {0x00020024, 0x00020024, 0x00020024, 0x00020024, 0x00020025, 0x00020025, 0x00020025, 0x00020025, 0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00020027, 0x00020027, 0x00020027, 0x00020027, }, - {0x00020028, 0x00020028, 0x00020028, 0x00020028, 0x00020029, 0x00020029, 0x00020029, 0x00020029, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, }, - {0x00000051, 0x00000052, 0x00000053, 0x00000054, 0x00000055, 0x00000056, 0x00010000, 0x00010000, 0x0001002b, 0x0001002b, 0x0001002d, 0x0001002d, 0x0001002e, 0x0001002e, 0x0001002f, 0x0001002f, }, - {0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x00010036, 0x00010036, 0x00010037, 0x00010037, }, - {0x00010038, 0x00010038, 0x00010039, 0x00010039, 0x0001003a, 0x0001003a, 0x0001003b, 0x0001003b, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, 0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, }, - {0x00010040, 0x00010040, 0x00010041, 0x00010041, 0x00010042, 0x00010042, 0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, 0x00010046, 0x00010046, 0x00010047, 0x00010047, }, - {0x0019ffff, 0x0018ffff, 0x0016ffff, 0x0017ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, 0x0000004a, 0x0000004b, 0x0000004c, 0x0000004d, 0x0000004e, 0x0000004f, 0x00000050, }, - {0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, }, - {0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, }, - {0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, }, - {0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005d, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, 0x0003005e, }, - {0x0003005f, 0x0003005f, 0x0003005f, 0x0003005f, 0x0003005f, 0x0003005f, 0x0003005f, 0x0003005f, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, 0x00030060, }, - {0x00020061, 0x00020061, 0x00020061, 0x00020061, 0x00020062, 0x00020062, 0x00020062, 0x00020062, 0x00020063, 0x00020063, 0x00020063, 0x00020063, 0x00020064, 0x00020064, 0x00020064, 0x00020064, }, - {0x00020065, 0x00020065, 0x00020065, 0x00020065, 0x00020066, 0x00020066, 0x00020066, 0x00020066, 0x00020067, 0x00020067, 0x00020067, 0x00020067, 0x00020068, 0x00020068, 0x00020068, 0x00020068, }, - {0x00010069, 0x00010069, 0x0001006a, 0x0001006a, 0x0001006b, 0x0001006b, 0x0001006c, 0x0001006c, 0x0001006d, 0x0001006d, 0x0001006e, 0x0001006e, 0x0001006f, 0x0001006f, 0x00010072, 0x00010072, }, - {0x0021ffff, 0x0020ffff, 0x001effff, 0x001fffff, 0x001affff, 0x001bffff, 0x001cffff, 0x001dffff, 0x00000070, 0x00000071, 0x00000073, 0x00000074, 0x00000075, 0x00000076, 0x00000078, 0x0000007b, }, - {0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, }, - {0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007c, 0x0003007c, 0x0003007c, 0x0003007c, 0x0003007c, 0x0003007c, 0x0003007c, 0x0003007c, }, - {0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, }, - {0x0003007f, 0x0003007f, 0x0003007f, 0x0003007f, 0x0003007f, 0x0003007f, 0x0003007f, 0x0003007f, 0x00030080, 0x00030080, 0x00030080, 0x00030080, 0x00030080, 0x00030080, 0x00030080, 0x00030080, }, - {0x00020081, 0x00020081, 0x00020081, 0x00020081, 0x00020082, 0x00020082, 0x00020082, 0x00020082, 0x00020083, 0x00020083, 0x00020083, 0x00020083, 0x00020084, 0x00020084, 0x00020084, 0x00020084, }, - {0x00020085, 0x00020085, 0x00020085, 0x00020085, 0x00020086, 0x00020086, 0x00020086, 0x00020086, 0x00020087, 0x00020087, 0x00020087, 0x00020087, 0x00020088, 0x00020088, 0x00020088, 0x00020088, }, - {0x0000009c, 0x000000a4, 0x00010089, 0x00010089, 0x0001008a, 0x0001008a, 0x0001008b, 0x0001008b, 0x0001008c, 0x0001008c, 0x0001008e, 0x0001008e, 0x0001008f, 0x0001008f, 0x00010096, 0x00010096, }, - {0x0026ffff, 0x0027ffff, 0x0028ffff, 0x0029ffff, 0x002affff, 0x0022ffff, 0x0023ffff, 0x0024ffff, 0x0025ffff, 0x0000008d, 0x00000090, 0x00000091, 0x00000092, 0x00000093, 0x00000095, 0x00000097, }, - {0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x0003009a, 0x0003009a, 0x0003009a, 0x0003009a, 0x0003009a, 0x0003009a, 0x0003009a, 0x0003009a, }, - {0x0003009b, 0x0003009b, 0x0003009b, 0x0003009b, 0x0003009b, 0x0003009b, 0x0003009b, 0x0003009b, 0x0003009f, 0x0003009f, 0x0003009f, 0x0003009f, 0x0003009f, 0x0003009f, 0x0003009f, 0x0003009f, }, - {0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a0, 0x000300a1, 0x000300a1, 0x000300a1, 0x000300a1, 0x000300a1, 0x000300a1, 0x000300a1, 0x000300a1, }, - {0x000300a2, 0x000300a2, 0x000300a2, 0x000300a2, 0x000300a2, 0x000300a2, 0x000300a2, 0x000300a2, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, }, - {0x00020098, 0x00020098, 0x00020098, 0x00020098, 0x00020099, 0x00020099, 0x00020099, 0x00020099, 0x0002009d, 0x0002009d, 0x0002009d, 0x0002009d, 0x0002009e, 0x0002009e, 0x0002009e, 0x0002009e, }, - {0x000200a5, 0x000200a5, 0x000200a5, 0x000200a5, 0x000200a6, 0x000200a6, 0x000200a6, 0x000200a6, 0x000200a7, 0x000200a7, 0x000200a7, 0x000200a7, 0x000200a8, 0x000200a8, 0x000200a8, 0x000200a8, }, - {0x000200a9, 0x000200a9, 0x000200a9, 0x000200a9, 0x000200aa, 0x000200aa, 0x000200aa, 0x000200aa, 0x000200ab, 0x000200ab, 0x000200ab, 0x000200ab, 0x000200ac, 0x000200ac, 0x000200ac, 0x000200ac, }, - {0x000200ad, 0x000200ad, 0x000200ad, 0x000200ad, 0x000200ae, 0x000200ae, 0x000200ae, 0x000200ae, 0x000200af, 0x000200af, 0x000200af, 0x000200af, 0x000200b0, 0x000200b0, 0x000200b0, 0x000200b0, }, - {0x000200b1, 0x000200b1, 0x000200b1, 0x000200b1, 0x000200b2, 0x000200b2, 0x000200b2, 0x000200b2, 0x000200b3, 0x000200b3, 0x000200b3, 0x000200b3, 0x000200b4, 0x000200b4, 0x000200b4, 0x000200b4, }, +const uint32_t c_aauiCQMFHuffDec31[43][16] = { + { + 0x0010ffff, + 0x000cffff, + 0x000dffff, + 0x000effff, + 0x000fffff, + 0x0001ffff, + 0x0002ffff, + 0x0003ffff, + 0x0004ffff, + 0x0005ffff, + 0x0006ffff, + 0x0007ffff, + 0x0008ffff, + 0x0009ffff, + 0x000affff, + 0x000bffff, + }, + { + 0x00010048, + 0x00010048, + 0x00010049, + 0x00010049, + 0x00020001, + 0x00020001, + 0x00020001, + 0x00020001, + 0x00020002, + 0x00020002, + 0x00020002, + 0x00020002, + 0x00020003, + 0x00020003, + 0x00020003, + 0x00020003, + }, + { + 0x00020004, + 0x00020004, + 0x00020004, + 0x00020004, + 0x00020005, + 0x00020005, + 0x00020005, + 0x00020005, + 0x00020006, + 0x00020006, + 0x00020006, + 0x00020006, + 0x00020007, + 0x00020007, + 0x00020007, + 0x00020007, + }, + { + 0x00020008, + 0x00020008, + 0x00020008, + 0x00020008, + 0x00020009, + 0x00020009, + 0x00020009, + 0x00020009, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x0002000b, + 0x0002000b, + 0x0002000b, + 0x0002000b, + }, + { + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0002000f, + 0x0002000f, + 0x0002000f, + 0x0002000f, + }, + { + 0x00020010, + 0x00020010, + 0x00020010, + 0x00020010, + 0x00020011, + 0x00020011, + 0x00020011, + 0x00020011, + 0x00020012, + 0x00020012, + 0x00020012, + 0x00020012, + 0x00020013, + 0x00020013, + 0x00020013, + 0x00020013, + }, + { + 0x00020014, + 0x00020014, + 0x00020014, + 0x00020014, + 0x00020015, + 0x00020015, + 0x00020015, + 0x00020015, + 0x00020016, + 0x00020016, + 0x00020016, + 0x00020016, + 0x00020017, + 0x00020017, + 0x00020017, + 0x00020017, + }, + { + 0x00020018, + 0x00020018, + 0x00020018, + 0x00020018, + 0x00020019, + 0x00020019, + 0x00020019, + 0x00020019, + 0x0002001a, + 0x0002001a, + 0x0002001a, + 0x0002001a, + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002001b, + }, + { + 0x0002001c, + 0x0002001c, + 0x0002001c, + 0x0002001c, + 0x0002001d, + 0x0002001d, + 0x0002001d, + 0x0002001d, + 0x0002001e, + 0x0002001e, + 0x0002001e, + 0x0002001e, + 0x0002001f, + 0x0002001f, + 0x0002001f, + 0x0002001f, + }, + { + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020021, + 0x00020021, + 0x00020021, + 0x00020021, + 0x00020022, + 0x00020022, + 0x00020022, + 0x00020022, + 0x00020023, + 0x00020023, + 0x00020023, + 0x00020023, + }, + { + 0x00020024, + 0x00020024, + 0x00020024, + 0x00020024, + 0x00020025, + 0x00020025, + 0x00020025, + 0x00020025, + 0x00020026, + 0x00020026, + 0x00020026, + 0x00020026, + 0x00020027, + 0x00020027, + 0x00020027, + 0x00020027, + }, + { + 0x00020028, + 0x00020028, + 0x00020028, + 0x00020028, + 0x00020029, + 0x00020029, + 0x00020029, + 0x00020029, + 0x0002002a, + 0x0002002a, + 0x0002002a, + 0x0002002a, + 0x0002002c, + 0x0002002c, + 0x0002002c, + 0x0002002c, + }, + { + 0x00000051, + 0x00000052, + 0x00000053, + 0x00000054, + 0x00000055, + 0x00000056, + 0x00010000, + 0x00010000, + 0x0001002b, + 0x0001002b, + 0x0001002d, + 0x0001002d, + 0x0001002e, + 0x0001002e, + 0x0001002f, + 0x0001002f, + }, + { + 0x00010030, + 0x00010030, + 0x00010031, + 0x00010031, + 0x00010032, + 0x00010032, + 0x00010033, + 0x00010033, + 0x00010034, + 0x00010034, + 0x00010035, + 0x00010035, + 0x00010036, + 0x00010036, + 0x00010037, + 0x00010037, + }, + { + 0x00010038, + 0x00010038, + 0x00010039, + 0x00010039, + 0x0001003a, + 0x0001003a, + 0x0001003b, + 0x0001003b, + 0x0001003c, + 0x0001003c, + 0x0001003d, + 0x0001003d, + 0x0001003e, + 0x0001003e, + 0x0001003f, + 0x0001003f, + }, + { + 0x00010040, + 0x00010040, + 0x00010041, + 0x00010041, + 0x00010042, + 0x00010042, + 0x00010043, + 0x00010043, + 0x00010044, + 0x00010044, + 0x00010045, + 0x00010045, + 0x00010046, + 0x00010046, + 0x00010047, + 0x00010047, + }, + { + 0x0019ffff, + 0x0018ffff, + 0x0016ffff, + 0x0017ffff, + 0x0011ffff, + 0x0012ffff, + 0x0013ffff, + 0x0014ffff, + 0x0015ffff, + 0x0000004a, + 0x0000004b, + 0x0000004c, + 0x0000004d, + 0x0000004e, + 0x0000004f, + 0x00000050, + }, + { + 0x00030057, + 0x00030057, + 0x00030057, + 0x00030057, + 0x00030057, + 0x00030057, + 0x00030057, + 0x00030057, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + }, + { + 0x00030059, + 0x00030059, + 0x00030059, + 0x00030059, + 0x00030059, + 0x00030059, + 0x00030059, + 0x00030059, + 0x0003005a, + 0x0003005a, + 0x0003005a, + 0x0003005a, + 0x0003005a, + 0x0003005a, + 0x0003005a, + 0x0003005a, + }, + { + 0x0003005b, + 0x0003005b, + 0x0003005b, + 0x0003005b, + 0x0003005b, + 0x0003005b, + 0x0003005b, + 0x0003005b, + 0x0003005c, + 0x0003005c, + 0x0003005c, + 0x0003005c, + 0x0003005c, + 0x0003005c, + 0x0003005c, + 0x0003005c, + }, + { + 0x0003005d, + 0x0003005d, + 0x0003005d, + 0x0003005d, + 0x0003005d, + 0x0003005d, + 0x0003005d, + 0x0003005d, + 0x0003005e, + 0x0003005e, + 0x0003005e, + 0x0003005e, + 0x0003005e, + 0x0003005e, + 0x0003005e, + 0x0003005e, + }, + { + 0x0003005f, + 0x0003005f, + 0x0003005f, + 0x0003005f, + 0x0003005f, + 0x0003005f, + 0x0003005f, + 0x0003005f, + 0x00030060, + 0x00030060, + 0x00030060, + 0x00030060, + 0x00030060, + 0x00030060, + 0x00030060, + 0x00030060, + }, + { + 0x00020061, + 0x00020061, + 0x00020061, + 0x00020061, + 0x00020062, + 0x00020062, + 0x00020062, + 0x00020062, + 0x00020063, + 0x00020063, + 0x00020063, + 0x00020063, + 0x00020064, + 0x00020064, + 0x00020064, + 0x00020064, + }, + { + 0x00020065, + 0x00020065, + 0x00020065, + 0x00020065, + 0x00020066, + 0x00020066, + 0x00020066, + 0x00020066, + 0x00020067, + 0x00020067, + 0x00020067, + 0x00020067, + 0x00020068, + 0x00020068, + 0x00020068, + 0x00020068, + }, + { + 0x00010069, + 0x00010069, + 0x0001006a, + 0x0001006a, + 0x0001006b, + 0x0001006b, + 0x0001006c, + 0x0001006c, + 0x0001006d, + 0x0001006d, + 0x0001006e, + 0x0001006e, + 0x0001006f, + 0x0001006f, + 0x00010072, + 0x00010072, + }, + { + 0x0021ffff, + 0x0020ffff, + 0x001effff, + 0x001fffff, + 0x001affff, + 0x001bffff, + 0x001cffff, + 0x001dffff, + 0x00000070, + 0x00000071, + 0x00000073, + 0x00000074, + 0x00000075, + 0x00000076, + 0x00000078, + 0x0000007b, + }, + { + 0x00030077, + 0x00030077, + 0x00030077, + 0x00030077, + 0x00030077, + 0x00030077, + 0x00030077, + 0x00030077, + 0x00030079, + 0x00030079, + 0x00030079, + 0x00030079, + 0x00030079, + 0x00030079, + 0x00030079, + 0x00030079, + }, + { + 0x0003007a, + 0x0003007a, + 0x0003007a, + 0x0003007a, + 0x0003007a, + 0x0003007a, + 0x0003007a, + 0x0003007a, + 0x0003007c, + 0x0003007c, + 0x0003007c, + 0x0003007c, + 0x0003007c, + 0x0003007c, + 0x0003007c, + 0x0003007c, + }, + { + 0x0003007d, + 0x0003007d, + 0x0003007d, + 0x0003007d, + 0x0003007d, + 0x0003007d, + 0x0003007d, + 0x0003007d, + 0x0003007e, + 0x0003007e, + 0x0003007e, + 0x0003007e, + 0x0003007e, + 0x0003007e, + 0x0003007e, + 0x0003007e, + }, + { + 0x0003007f, + 0x0003007f, + 0x0003007f, + 0x0003007f, + 0x0003007f, + 0x0003007f, + 0x0003007f, + 0x0003007f, + 0x00030080, + 0x00030080, + 0x00030080, + 0x00030080, + 0x00030080, + 0x00030080, + 0x00030080, + 0x00030080, + }, + { + 0x00020081, + 0x00020081, + 0x00020081, + 0x00020081, + 0x00020082, + 0x00020082, + 0x00020082, + 0x00020082, + 0x00020083, + 0x00020083, + 0x00020083, + 0x00020083, + 0x00020084, + 0x00020084, + 0x00020084, + 0x00020084, + }, + { + 0x00020085, + 0x00020085, + 0x00020085, + 0x00020085, + 0x00020086, + 0x00020086, + 0x00020086, + 0x00020086, + 0x00020087, + 0x00020087, + 0x00020087, + 0x00020087, + 0x00020088, + 0x00020088, + 0x00020088, + 0x00020088, + }, + { + 0x0000009c, + 0x000000a4, + 0x00010089, + 0x00010089, + 0x0001008a, + 0x0001008a, + 0x0001008b, + 0x0001008b, + 0x0001008c, + 0x0001008c, + 0x0001008e, + 0x0001008e, + 0x0001008f, + 0x0001008f, + 0x00010096, + 0x00010096, + }, + { + 0x0026ffff, + 0x0027ffff, + 0x0028ffff, + 0x0029ffff, + 0x002affff, + 0x0022ffff, + 0x0023ffff, + 0x0024ffff, + 0x0025ffff, + 0x0000008d, + 0x00000090, + 0x00000091, + 0x00000092, + 0x00000093, + 0x00000095, + 0x00000097, + }, + { + 0x00030094, + 0x00030094, + 0x00030094, + 0x00030094, + 0x00030094, + 0x00030094, + 0x00030094, + 0x00030094, + 0x0003009a, + 0x0003009a, + 0x0003009a, + 0x0003009a, + 0x0003009a, + 0x0003009a, + 0x0003009a, + 0x0003009a, + }, + { + 0x0003009b, + 0x0003009b, + 0x0003009b, + 0x0003009b, + 0x0003009b, + 0x0003009b, + 0x0003009b, + 0x0003009b, + 0x0003009f, + 0x0003009f, + 0x0003009f, + 0x0003009f, + 0x0003009f, + 0x0003009f, + 0x0003009f, + 0x0003009f, + }, + { + 0x000300a0, + 0x000300a0, + 0x000300a0, + 0x000300a0, + 0x000300a0, + 0x000300a0, + 0x000300a0, + 0x000300a0, + 0x000300a1, + 0x000300a1, + 0x000300a1, + 0x000300a1, + 0x000300a1, + 0x000300a1, + 0x000300a1, + 0x000300a1, + }, + { + 0x000300a2, + 0x000300a2, + 0x000300a2, + 0x000300a2, + 0x000300a2, + 0x000300a2, + 0x000300a2, + 0x000300a2, + 0x000300a3, + 0x000300a3, + 0x000300a3, + 0x000300a3, + 0x000300a3, + 0x000300a3, + 0x000300a3, + 0x000300a3, + }, + { + 0x00020098, + 0x00020098, + 0x00020098, + 0x00020098, + 0x00020099, + 0x00020099, + 0x00020099, + 0x00020099, + 0x0002009d, + 0x0002009d, + 0x0002009d, + 0x0002009d, + 0x0002009e, + 0x0002009e, + 0x0002009e, + 0x0002009e, + }, + { + 0x000200a5, + 0x000200a5, + 0x000200a5, + 0x000200a5, + 0x000200a6, + 0x000200a6, + 0x000200a6, + 0x000200a6, + 0x000200a7, + 0x000200a7, + 0x000200a7, + 0x000200a7, + 0x000200a8, + 0x000200a8, + 0x000200a8, + 0x000200a8, + }, + { + 0x000200a9, + 0x000200a9, + 0x000200a9, + 0x000200a9, + 0x000200aa, + 0x000200aa, + 0x000200aa, + 0x000200aa, + 0x000200ab, + 0x000200ab, + 0x000200ab, + 0x000200ab, + 0x000200ac, + 0x000200ac, + 0x000200ac, + 0x000200ac, + }, + { + 0x000200ad, + 0x000200ad, + 0x000200ad, + 0x000200ad, + 0x000200ae, + 0x000200ae, + 0x000200ae, + 0x000200ae, + 0x000200af, + 0x000200af, + 0x000200af, + 0x000200af, + 0x000200b0, + 0x000200b0, + 0x000200b0, + 0x000200b0, + }, + { + 0x000200b1, + 0x000200b1, + 0x000200b1, + 0x000200b1, + 0x000200b2, + 0x000200b2, + 0x000200b2, + 0x000200b2, + 0x000200b3, + 0x000200b3, + 0x000200b3, + 0x000200b3, + 0x000200b4, + 0x000200b4, + 0x000200b4, + 0x000200b4, + }, }; #endif @@ -2266,16 +23135,63 @@ const uint32_t c_aauiCQMFHuffEnc33[16][2] = #else const uint16_t c_aauiCQMFHuffEnc33[16][2] = #endif -{ - {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0008, 0x0000}, {0x0008, 0x0001}, {0x0002, 0x0001}, {0x0004, 0x0001}, {0x0008, 0x0002}, {0x0008, 0x0003}, - {0x0008, 0x0004}, {0x0008, 0x0005}, {0x0008, 0x0006}, {0x0008, 0x0007}, {0x0007, 0x0004}, {0x0007, 0x0005}, {0x0007, 0x0006}, {0x0007, 0x0007}, -}; + { + { 0x0001, 0x0001 }, + { 0x0003, 0x0001 }, + { 0x0008, 0x0000 }, + { 0x0008, 0x0001 }, + { 0x0002, 0x0001 }, + { 0x0004, 0x0001 }, + { 0x0008, 0x0002 }, + { 0x0008, 0x0003 }, + { 0x0008, 0x0004 }, + { 0x0008, 0x0005 }, + { 0x0008, 0x0006 }, + { 0x0008, 0x0007 }, + { 0x0007, 0x0004 }, + { 0x0007, 0x0005 }, + { 0x0007, 0x0006 }, + { 0x0007, 0x0007 }, + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec33[2][16] = -{ - {0x0001ffff, 0x00000005, 0x00010001, 0x00010001, 0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x00000002, 0x00000003, 0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, }, +const uint32_t c_aauiCQMFHuffDec33[2][16] = { + { + 0x0001ffff, + 0x00000005, + 0x00010001, + 0x00010001, + 0x00020004, + 0x00020004, + 0x00020004, + 0x00020004, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + }, + { + 0x00000002, + 0x00000003, + 0x00000006, + 0x00000007, + 0x00000008, + 0x00000009, + 0x0000000a, + 0x0000000b, + 0x0001000c, + 0x0001000c, + 0x0001000d, + 0x0001000d, + 0x0001000e, + 0x0001000e, + 0x0001000f, + 0x0001000f, + }, }; #endif @@ -2284,16 +23200,63 @@ const uint32_t c_aauiCQMFHuffEnc34[16][2] = #else const uint16_t c_aauiCQMFHuffEnc34[16][2] = #endif -{ - {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0008, 0x0000}, {0x0008, 0x0001}, {0x0002, 0x0001}, {0x0004, 0x0001}, {0x0008, 0x0002}, {0x0008, 0x0003}, - {0x0008, 0x0004}, {0x0008, 0x0005}, {0x0008, 0x0006}, {0x0008, 0x0007}, {0x0007, 0x0004}, {0x0007, 0x0005}, {0x0007, 0x0006}, {0x0007, 0x0007}, -}; + { + { 0x0001, 0x0001 }, + { 0x0003, 0x0001 }, + { 0x0008, 0x0000 }, + { 0x0008, 0x0001 }, + { 0x0002, 0x0001 }, + { 0x0004, 0x0001 }, + { 0x0008, 0x0002 }, + { 0x0008, 0x0003 }, + { 0x0008, 0x0004 }, + { 0x0008, 0x0005 }, + { 0x0008, 0x0006 }, + { 0x0008, 0x0007 }, + { 0x0007, 0x0004 }, + { 0x0007, 0x0005 }, + { 0x0007, 0x0006 }, + { 0x0007, 0x0007 }, + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec34[2][16] = -{ - {0x0001ffff, 0x00000005, 0x00010001, 0x00010001, 0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x00000002, 0x00000003, 0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, }, +const uint32_t c_aauiCQMFHuffDec34[2][16] = { + { + 0x0001ffff, + 0x00000005, + 0x00010001, + 0x00010001, + 0x00020004, + 0x00020004, + 0x00020004, + 0x00020004, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + }, + { + 0x00000002, + 0x00000003, + 0x00000006, + 0x00000007, + 0x00000008, + 0x00000009, + 0x0000000a, + 0x0000000b, + 0x0001000c, + 0x0001000c, + 0x0001000d, + 0x0001000d, + 0x0001000e, + 0x0001000e, + 0x0001000f, + 0x0001000f, + }, }; #endif @@ -2302,26 +23265,199 @@ const uint32_t c_aauiCQMFHuffEnc35[25][2] = #else const uint16_t c_aauiCQMFHuffEnc35[25][2] = #endif -{ - {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0007, 0x0006}, {0x0009, 0x0000}, {0x0009, 0x0001}, {0x0002, 0x0001}, {0x0004, 0x0001}, {0x0009, 0x0002}, - {0x0009, 0x0003}, {0x0009, 0x0004}, {0x0007, 0x0007}, {0x0009, 0x0005}, {0x0009, 0x0006}, {0x0009, 0x0007}, {0x0009, 0x0008}, {0x0009, 0x0009}, - {0x0009, 0x000a}, {0x0009, 0x000b}, {0x0009, 0x000c}, {0x0009, 0x000d}, {0x0008, 0x0007}, {0x0008, 0x0008}, {0x0008, 0x0009}, {0x0008, 0x000a}, - {0x0008, 0x000b}, + { + { 0x0001, 0x0001 }, + { 0x0003, 0x0001 }, + { 0x0007, 0x0006 }, + { 0x0009, 0x0000 }, + { 0x0009, 0x0001 }, + { 0x0002, 0x0001 }, + { 0x0004, 0x0001 }, + { 0x0009, 0x0002 }, + { 0x0009, 0x0003 }, + { 0x0009, 0x0004 }, + { 0x0007, 0x0007 }, + { 0x0009, 0x0005 }, + { 0x0009, 0x0006 }, + { 0x0009, 0x0007 }, + { 0x0009, 0x0008 }, + { 0x0009, 0x0009 }, + { 0x0009, 0x000a }, + { 0x0009, 0x000b }, + { 0x0009, 0x000c }, + { 0x0009, 0x000d }, + { 0x0008, 0x0007 }, + { 0x0008, 0x0008 }, + { 0x0008, 0x0009 }, + { 0x0008, 0x000a }, + { 0x0008, 0x000b }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec35[9][16] = -{ - {0x0001ffff, 0x00000006, 0x00010001, 0x00010001, 0x00020005, 0x00020005, 0x00020005, 0x00020005, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x0007ffff, 0x0008ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0006ffff, 0x00000014, 0x00000015, 0x00000016, 0x00000017, 0x00000018, 0x00010002, 0x00010002, 0x0001000a, 0x0001000a, }, - {0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, - {0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, }, - {0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, - {0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, - {0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, }, - {0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, }, - {0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, }, +const uint32_t c_aauiCQMFHuffDec35[9][16] = { + { + 0x0001ffff, + 0x00000006, + 0x00010001, + 0x00010001, + 0x00020005, + 0x00020005, + 0x00020005, + 0x00020005, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + }, + { + 0x0007ffff, + 0x0008ffff, + 0x0002ffff, + 0x0003ffff, + 0x0004ffff, + 0x0005ffff, + 0x0006ffff, + 0x00000014, + 0x00000015, + 0x00000016, + 0x00000017, + 0x00000018, + 0x00010002, + 0x00010002, + 0x0001000a, + 0x0001000a, + }, + { + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + }, + { + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + }, + { + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + }, + { + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + }, + { + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + }, + { + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + }, + { + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + }, }; #endif @@ -2330,25 +23466,174 @@ const uint32_t c_aauiCQMFHuffEnc36[36][2] = #else const uint16_t c_aauiCQMFHuffEnc36[36][2] = #endif -{ - {0x0001, 0x0001}, {0x0002, 0x0001}, {0x0006, 0x0002}, {0x000b, 0x0000}, {0x000b, 0x0001}, {0x000b, 0x0002}, {0x0003, 0x0001}, {0x0004, 0x0001}, - {0x0008, 0x0005}, {0x000b, 0x0003}, {0x000b, 0x0004}, {0x000b, 0x0005}, {0x0006, 0x0003}, {0x0007, 0x0003}, {0x000b, 0x0006}, {0x000b, 0x0007}, - {0x000b, 0x0008}, {0x000b, 0x0009}, {0x000b, 0x000a}, {0x000b, 0x000b}, {0x000b, 0x000c}, {0x000b, 0x000d}, {0x000b, 0x000e}, {0x000b, 0x000f}, - {0x000a, 0x0008}, {0x000a, 0x0009}, {0x000a, 0x000a}, {0x000a, 0x000b}, {0x000a, 0x000c}, {0x000a, 0x000d}, {0x000a, 0x000e}, {0x000a, 0x000f}, - {0x000a, 0x0010}, {0x000a, 0x0011}, {0x000a, 0x0012}, {0x000a, 0x0013}, + { + { 0x0001, 0x0001 }, + { 0x0002, 0x0001 }, + { 0x0006, 0x0002 }, + { 0x000b, 0x0000 }, + { 0x000b, 0x0001 }, + { 0x000b, 0x0002 }, + { 0x0003, 0x0001 }, + { 0x0004, 0x0001 }, + { 0x0008, 0x0005 }, + { 0x000b, 0x0003 }, + { 0x000b, 0x0004 }, + { 0x000b, 0x0005 }, + { 0x0006, 0x0003 }, + { 0x0007, 0x0003 }, + { 0x000b, 0x0006 }, + { 0x000b, 0x0007 }, + { 0x000b, 0x0008 }, + { 0x000b, 0x0009 }, + { 0x000b, 0x000a }, + { 0x000b, 0x000b }, + { 0x000b, 0x000c }, + { 0x000b, 0x000d }, + { 0x000b, 0x000e }, + { 0x000b, 0x000f }, + { 0x000a, 0x0008 }, + { 0x000a, 0x0009 }, + { 0x000a, 0x000a }, + { 0x000a, 0x000b }, + { 0x000a, 0x000c }, + { 0x000a, 0x000d }, + { 0x000a, 0x000e }, + { 0x000a, 0x000f }, + { 0x000a, 0x0010 }, + { 0x000a, 0x0011 }, + { 0x000a, 0x0012 }, + { 0x000a, 0x0013 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec36[7][16] = -{ - {0x0001ffff, 0x00000007, 0x00010006, 0x00010006, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x0006ffff, 0x0005ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x00000008, 0x0001000d, 0x0001000d, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, }, - {0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, }, - {0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, }, - {0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x00020023, 0x00020023, 0x00020023, 0x00020023, }, - {0x00010010, 0x00010010, 0x00010011, 0x00010011, 0x00010012, 0x00010012, 0x00010013, 0x00010013, 0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, }, - {0x00010003, 0x00010003, 0x00010004, 0x00010004, 0x00010005, 0x00010005, 0x00010009, 0x00010009, 0x0001000a, 0x0001000a, 0x0001000b, 0x0001000b, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, }, +const uint32_t c_aauiCQMFHuffDec36[7][16] = { + { + 0x0001ffff, + 0x00000007, + 0x00010006, + 0x00010006, + 0x00020001, + 0x00020001, + 0x00020001, + 0x00020001, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + }, + { + 0x0006ffff, + 0x0005ffff, + 0x0002ffff, + 0x0003ffff, + 0x0004ffff, + 0x00000008, + 0x0001000d, + 0x0001000d, + 0x00020002, + 0x00020002, + 0x00020002, + 0x00020002, + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x0002000c, + }, + { + 0x00020018, + 0x00020018, + 0x00020018, + 0x00020018, + 0x00020019, + 0x00020019, + 0x00020019, + 0x00020019, + 0x0002001a, + 0x0002001a, + 0x0002001a, + 0x0002001a, + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002001b, + }, + { + 0x0002001c, + 0x0002001c, + 0x0002001c, + 0x0002001c, + 0x0002001d, + 0x0002001d, + 0x0002001d, + 0x0002001d, + 0x0002001e, + 0x0002001e, + 0x0002001e, + 0x0002001e, + 0x0002001f, + 0x0002001f, + 0x0002001f, + 0x0002001f, + }, + { + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020021, + 0x00020021, + 0x00020021, + 0x00020021, + 0x00020022, + 0x00020022, + 0x00020022, + 0x00020022, + 0x00020023, + 0x00020023, + 0x00020023, + 0x00020023, + }, + { + 0x00010010, + 0x00010010, + 0x00010011, + 0x00010011, + 0x00010012, + 0x00010012, + 0x00010013, + 0x00010013, + 0x00010014, + 0x00010014, + 0x00010015, + 0x00010015, + 0x00010016, + 0x00010016, + 0x00010017, + 0x00010017, + }, + { + 0x00010003, + 0x00010003, + 0x00010004, + 0x00010004, + 0x00010005, + 0x00010005, + 0x00010009, + 0x00010009, + 0x0001000a, + 0x0001000a, + 0x0001000b, + 0x0001000b, + 0x0001000e, + 0x0001000e, + 0x0001000f, + 0x0001000f, + }, }; #endif @@ -2357,22 +23642,120 @@ const uint32_t c_aauiCQMFHuffEnc37[36][2] = #else const uint16_t c_aauiCQMFHuffEnc37[36][2] = #endif -{ - {0x0001, 0x0001}, {0x0002, 0x0001}, {0x0006, 0x0001}, {0x000c, 0x0000}, {0x000c, 0x0001}, {0x000c, 0x0002}, {0x0003, 0x0001}, {0x0004, 0x0001}, - {0x0006, 0x0002}, {0x000c, 0x0003}, {0x000c, 0x0004}, {0x000c, 0x0005}, {0x0006, 0x0003}, {0x0007, 0x0001}, {0x000a, 0x0007}, {0x000c, 0x0006}, - {0x000c, 0x0007}, {0x000c, 0x0008}, {0x000c, 0x0009}, {0x000c, 0x000a}, {0x000c, 0x000b}, {0x000c, 0x000c}, {0x000c, 0x000d}, {0x000c, 0x000e}, - {0x000c, 0x000f}, {0x000c, 0x0010}, {0x000c, 0x0011}, {0x000c, 0x0012}, {0x000c, 0x0013}, {0x000c, 0x0014}, {0x000c, 0x0015}, {0x000c, 0x0016}, - {0x000c, 0x0017}, {0x000c, 0x0018}, {0x000c, 0x0019}, {0x000b, 0x000d}, + { + { 0x0001, 0x0001 }, + { 0x0002, 0x0001 }, + { 0x0006, 0x0001 }, + { 0x000c, 0x0000 }, + { 0x000c, 0x0001 }, + { 0x000c, 0x0002 }, + { 0x0003, 0x0001 }, + { 0x0004, 0x0001 }, + { 0x0006, 0x0002 }, + { 0x000c, 0x0003 }, + { 0x000c, 0x0004 }, + { 0x000c, 0x0005 }, + { 0x0006, 0x0003 }, + { 0x0007, 0x0001 }, + { 0x000a, 0x0007 }, + { 0x000c, 0x0006 }, + { 0x000c, 0x0007 }, + { 0x000c, 0x0008 }, + { 0x000c, 0x0009 }, + { 0x000c, 0x000a }, + { 0x000c, 0x000b }, + { 0x000c, 0x000c }, + { 0x000c, 0x000d }, + { 0x000c, 0x000e }, + { 0x000c, 0x000f }, + { 0x000c, 0x0010 }, + { 0x000c, 0x0011 }, + { 0x000c, 0x0012 }, + { 0x000c, 0x0013 }, + { 0x000c, 0x0014 }, + { 0x000c, 0x0015 }, + { 0x000c, 0x0016 }, + { 0x000c, 0x0017 }, + { 0x000c, 0x0018 }, + { 0x000c, 0x0019 }, + { 0x000b, 0x000d }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec37[4][16] = -{ - {0x0001ffff, 0x00000007, 0x00010006, 0x00010006, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x0003ffff, 0x0002ffff, 0x0001000d, 0x0001000d, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, }, - {0x00000019, 0x0000001a, 0x0000001b, 0x0000001c, 0x0000001d, 0x0000001e, 0x0000001f, 0x00000020, 0x00000021, 0x00000022, 0x00010023, 0x00010023, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, }, - {0x00000003, 0x00000004, 0x00000005, 0x00000009, 0x0000000a, 0x0000000b, 0x0000000f, 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000014, 0x00000015, 0x00000016, 0x00000017, 0x00000018, }, +const uint32_t c_aauiCQMFHuffDec37[4][16] = { + { + 0x0001ffff, + 0x00000007, + 0x00010006, + 0x00010006, + 0x00020001, + 0x00020001, + 0x00020001, + 0x00020001, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + }, + { + 0x0003ffff, + 0x0002ffff, + 0x0001000d, + 0x0001000d, + 0x00020002, + 0x00020002, + 0x00020002, + 0x00020002, + 0x00020008, + 0x00020008, + 0x00020008, + 0x00020008, + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x0002000c, + }, + { + 0x00000019, + 0x0000001a, + 0x0000001b, + 0x0000001c, + 0x0000001d, + 0x0000001e, + 0x0000001f, + 0x00000020, + 0x00000021, + 0x00000022, + 0x00010023, + 0x00010023, + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0002000e, + }, + { + 0x00000003, + 0x00000004, + 0x00000005, + 0x00000009, + 0x0000000a, + 0x0000000b, + 0x0000000f, + 0x00000010, + 0x00000011, + 0x00000012, + 0x00000013, + 0x00000014, + 0x00000015, + 0x00000016, + 0x00000017, + 0x00000018, + }, }; #endif @@ -2381,42 +23764,457 @@ const uint32_t c_aauiCQMFHuffEnc38[49][2] = #else const uint16_t c_aauiCQMFHuffEnc38[49][2] = #endif -{ - {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000c, 0x0012}, {0x000d, 0x0000}, {0x000d, 0x0001}, {0x000d, 0x0002}, {0x0002, 0x0001}, - {0x0004, 0x0001}, {0x0007, 0x0001}, {0x000b, 0x000a}, {0x000d, 0x0003}, {0x000d, 0x0004}, {0x000d, 0x0005}, {0x0006, 0x0002}, {0x0006, 0x0003}, - {0x0009, 0x0003}, {0x000d, 0x0006}, {0x000d, 0x0007}, {0x000d, 0x0008}, {0x000d, 0x0009}, {0x000c, 0x0013}, {0x000b, 0x000b}, {0x000d, 0x000a}, - {0x000d, 0x000b}, {0x000d, 0x000c}, {0x000d, 0x000d}, {0x000d, 0x000e}, {0x000d, 0x000f}, {0x000d, 0x0010}, {0x000d, 0x0011}, {0x000d, 0x0012}, - {0x000d, 0x0013}, {0x000d, 0x0014}, {0x000d, 0x0015}, {0x000d, 0x0016}, {0x000d, 0x0017}, {0x000d, 0x0018}, {0x000d, 0x0019}, {0x000d, 0x001a}, - {0x000d, 0x001b}, {0x000d, 0x001c}, {0x000d, 0x001d}, {0x000d, 0x001e}, {0x000d, 0x001f}, {0x000d, 0x0020}, {0x000d, 0x0021}, {0x000d, 0x0022}, - {0x000d, 0x0023}, + { + { 0x0001, 0x0001 }, + { 0x0003, 0x0001 }, + { 0x0006, 0x0001 }, + { 0x000c, 0x0012 }, + { 0x000d, 0x0000 }, + { 0x000d, 0x0001 }, + { 0x000d, 0x0002 }, + { 0x0002, 0x0001 }, + { 0x0004, 0x0001 }, + { 0x0007, 0x0001 }, + { 0x000b, 0x000a }, + { 0x000d, 0x0003 }, + { 0x000d, 0x0004 }, + { 0x000d, 0x0005 }, + { 0x0006, 0x0002 }, + { 0x0006, 0x0003 }, + { 0x0009, 0x0003 }, + { 0x000d, 0x0006 }, + { 0x000d, 0x0007 }, + { 0x000d, 0x0008 }, + { 0x000d, 0x0009 }, + { 0x000c, 0x0013 }, + { 0x000b, 0x000b }, + { 0x000d, 0x000a }, + { 0x000d, 0x000b }, + { 0x000d, 0x000c }, + { 0x000d, 0x000d }, + { 0x000d, 0x000e }, + { 0x000d, 0x000f }, + { 0x000d, 0x0010 }, + { 0x000d, 0x0011 }, + { 0x000d, 0x0012 }, + { 0x000d, 0x0013 }, + { 0x000d, 0x0014 }, + { 0x000d, 0x0015 }, + { 0x000d, 0x0016 }, + { 0x000d, 0x0017 }, + { 0x000d, 0x0018 }, + { 0x000d, 0x0019 }, + { 0x000d, 0x001a }, + { 0x000d, 0x001b }, + { 0x000d, 0x001c }, + { 0x000d, 0x001d }, + { 0x000d, 0x001e }, + { 0x000d, 0x001f }, + { 0x000d, 0x0020 }, + { 0x000d, 0x0021 }, + { 0x000d, 0x0022 }, + { 0x000d, 0x0023 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec38[22][16] = -{ - {0x0001ffff, 0x00000008, 0x00010001, 0x00010001, 0x00020007, 0x00020007, 0x00020007, 0x00020007, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x0003ffff, 0x0002ffff, 0x00010009, 0x00010009, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, }, - {0x0014ffff, 0x0015ffff, 0x00000003, 0x00000015, 0x0001000a, 0x0001000a, 0x00010016, 0x00010016, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, }, - {0x0005ffff, 0x0006ffff, 0x0004ffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, }, - {0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, }, - {0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, }, - {0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, - {0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, }, - {0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, }, - {0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, }, - {0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, }, - {0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, }, - {0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, }, - {0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, }, - {0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, }, - {0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, }, - {0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, }, - {0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, }, - {0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, }, - {0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, }, - {0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, }, - {0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, }, +const uint32_t c_aauiCQMFHuffDec38[22][16] = { + { + 0x0001ffff, + 0x00000008, + 0x00010001, + 0x00010001, + 0x00020007, + 0x00020007, + 0x00020007, + 0x00020007, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + }, + { + 0x0003ffff, + 0x0002ffff, + 0x00010009, + 0x00010009, + 0x00020002, + 0x00020002, + 0x00020002, + 0x00020002, + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0002000f, + 0x0002000f, + 0x0002000f, + 0x0002000f, + }, + { + 0x0014ffff, + 0x0015ffff, + 0x00000003, + 0x00000015, + 0x0001000a, + 0x0001000a, + 0x00010016, + 0x00010016, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + }, + { + 0x0005ffff, + 0x0006ffff, + 0x0004ffff, + 0x0007ffff, + 0x0008ffff, + 0x0009ffff, + 0x000affff, + 0x000bffff, + 0x000cffff, + 0x000dffff, + 0x000effff, + 0x000fffff, + 0x0010ffff, + 0x0011ffff, + 0x0012ffff, + 0x0013ffff, + }, + { + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + }, + { + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + }, + { + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + }, + { + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + }, + { + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + }, + { + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + }, + { + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + }, + { + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + }, + { + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + }, + { + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + }, + { + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + }, + { + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + }, + { + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + }, + { + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + }, + { + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + }, + { + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + }, + { + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + }, + { + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + }, }; #endif @@ -2425,32 +24223,291 @@ const uint32_t c_aauiCQMFHuffEnc39[64][2] = #else const uint16_t c_aauiCQMFHuffEnc39[64][2] = #endif -{ - {0x0001, 0x0001}, {0x0002, 0x0001}, {0x0006, 0x0001}, {0x000a, 0x0002}, {0x000f, 0x0000}, {0x000f, 0x0001}, {0x000f, 0x0002}, {0x000f, 0x0003}, - {0x0003, 0x0001}, {0x0004, 0x0001}, {0x0007, 0x0001}, {0x000a, 0x0003}, {0x000f, 0x0004}, {0x000f, 0x0005}, {0x000f, 0x0006}, {0x000f, 0x0007}, - {0x0006, 0x0002}, {0x0006, 0x0003}, {0x0009, 0x0003}, {0x000d, 0x000e}, {0x000f, 0x0008}, {0x000f, 0x0009}, {0x000f, 0x000a}, {0x000f, 0x000b}, - {0x000a, 0x0004}, {0x000a, 0x0005}, {0x000d, 0x000f}, {0x000f, 0x000c}, {0x000f, 0x000d}, {0x000f, 0x000e}, {0x000f, 0x000f}, {0x000f, 0x0010}, - {0x000f, 0x0011}, {0x000f, 0x0012}, {0x000f, 0x0013}, {0x000f, 0x0014}, {0x000f, 0x0015}, {0x000f, 0x0016}, {0x000f, 0x0017}, {0x000f, 0x0018}, - {0x000f, 0x0019}, {0x000f, 0x001a}, {0x000f, 0x001b}, {0x000f, 0x001c}, {0x000f, 0x001d}, {0x000f, 0x001e}, {0x000f, 0x001f}, {0x000f, 0x0020}, - {0x000f, 0x0021}, {0x000f, 0x0022}, {0x000f, 0x0023}, {0x000f, 0x0024}, {0x000f, 0x0025}, {0x000f, 0x0026}, {0x000f, 0x0027}, {0x000f, 0x0028}, - {0x000f, 0x0029}, {0x000e, 0x0015}, {0x000e, 0x0016}, {0x000e, 0x0017}, {0x000e, 0x0018}, {0x000e, 0x0019}, {0x000e, 0x001a}, {0x000e, 0x001b}, -}; + { + { 0x0001, 0x0001 }, + { 0x0002, 0x0001 }, + { 0x0006, 0x0001 }, + { 0x000a, 0x0002 }, + { 0x000f, 0x0000 }, + { 0x000f, 0x0001 }, + { 0x000f, 0x0002 }, + { 0x000f, 0x0003 }, + { 0x0003, 0x0001 }, + { 0x0004, 0x0001 }, + { 0x0007, 0x0001 }, + { 0x000a, 0x0003 }, + { 0x000f, 0x0004 }, + { 0x000f, 0x0005 }, + { 0x000f, 0x0006 }, + { 0x000f, 0x0007 }, + { 0x0006, 0x0002 }, + { 0x0006, 0x0003 }, + { 0x0009, 0x0003 }, + { 0x000d, 0x000e }, + { 0x000f, 0x0008 }, + { 0x000f, 0x0009 }, + { 0x000f, 0x000a }, + { 0x000f, 0x000b }, + { 0x000a, 0x0004 }, + { 0x000a, 0x0005 }, + { 0x000d, 0x000f }, + { 0x000f, 0x000c }, + { 0x000f, 0x000d }, + { 0x000f, 0x000e }, + { 0x000f, 0x000f }, + { 0x000f, 0x0010 }, + { 0x000f, 0x0011 }, + { 0x000f, 0x0012 }, + { 0x000f, 0x0013 }, + { 0x000f, 0x0014 }, + { 0x000f, 0x0015 }, + { 0x000f, 0x0016 }, + { 0x000f, 0x0017 }, + { 0x000f, 0x0018 }, + { 0x000f, 0x0019 }, + { 0x000f, 0x001a }, + { 0x000f, 0x001b }, + { 0x000f, 0x001c }, + { 0x000f, 0x001d }, + { 0x000f, 0x001e }, + { 0x000f, 0x001f }, + { 0x000f, 0x0020 }, + { 0x000f, 0x0021 }, + { 0x000f, 0x0022 }, + { 0x000f, 0x0023 }, + { 0x000f, 0x0024 }, + { 0x000f, 0x0025 }, + { 0x000f, 0x0026 }, + { 0x000f, 0x0027 }, + { 0x000f, 0x0028 }, + { 0x000f, 0x0029 }, + { 0x000e, 0x0015 }, + { 0x000e, 0x0016 }, + { 0x000e, 0x0017 }, + { 0x000e, 0x0018 }, + { 0x000e, 0x0019 }, + { 0x000e, 0x001a }, + { 0x000e, 0x001b }, + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec39[12][16] = -{ - {0x0001ffff, 0x00000009, 0x00010008, 0x00010008, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x0003ffff, 0x0002ffff, 0x0001000a, 0x0001000a, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x00020011, 0x00020011, 0x00020011, 0x00020011, }, - {0x00020018, 0x00020018, 0x00020018, 0x00020018, 0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, 0x00030012, }, - {0x0008ffff, 0x0007ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x0005ffff, 0x0006ffff, 0x0004ffff, 0x00020003, 0x00020003, 0x00020003, 0x00020003, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, }, - {0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, }, - {0x00010037, 0x00010037, 0x00010038, 0x00010038, 0x00020039, 0x00020039, 0x00020039, 0x00020039, 0x0002003a, 0x0002003a, 0x0002003a, 0x0002003a, 0x0002003b, 0x0002003b, 0x0002003b, 0x0002003b, }, - {0x0002003c, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002003f, 0x0002003f, 0x0002003f, 0x0002003f, }, - {0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x0001001b, 0x0001001b, 0x0001001c, 0x0001001c, 0x0001001d, 0x0001001d, 0x0001001e, 0x0001001e, }, - {0x00010004, 0x00010004, 0x00010005, 0x00010005, 0x00010006, 0x00010006, 0x00010007, 0x00010007, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, }, - {0x0001001f, 0x0001001f, 0x00010020, 0x00010020, 0x00010021, 0x00010021, 0x00010022, 0x00010022, 0x00010023, 0x00010023, 0x00010024, 0x00010024, 0x00010025, 0x00010025, 0x00010026, 0x00010026, }, - {0x00010027, 0x00010027, 0x00010028, 0x00010028, 0x00010029, 0x00010029, 0x0001002a, 0x0001002a, 0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, 0x0001002e, 0x0001002e, }, - {0x0001002f, 0x0001002f, 0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x00010036, 0x00010036, }, +const uint32_t c_aauiCQMFHuffDec39[12][16] = { + { + 0x0001ffff, + 0x00000009, + 0x00010008, + 0x00010008, + 0x00020001, + 0x00020001, + 0x00020001, + 0x00020001, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + }, + { + 0x0003ffff, + 0x0002ffff, + 0x0001000a, + 0x0001000a, + 0x00020002, + 0x00020002, + 0x00020002, + 0x00020002, + 0x00020010, + 0x00020010, + 0x00020010, + 0x00020010, + 0x00020011, + 0x00020011, + 0x00020011, + 0x00020011, + }, + { + 0x00020018, + 0x00020018, + 0x00020018, + 0x00020018, + 0x00020019, + 0x00020019, + 0x00020019, + 0x00020019, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + 0x00030012, + }, + { + 0x0008ffff, + 0x0007ffff, + 0x0009ffff, + 0x000affff, + 0x000bffff, + 0x0005ffff, + 0x0006ffff, + 0x0004ffff, + 0x00020003, + 0x00020003, + 0x00020003, + 0x00020003, + 0x0002000b, + 0x0002000b, + 0x0002000b, + 0x0002000b, + }, + { + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + }, + { + 0x00010037, + 0x00010037, + 0x00010038, + 0x00010038, + 0x00020039, + 0x00020039, + 0x00020039, + 0x00020039, + 0x0002003a, + 0x0002003a, + 0x0002003a, + 0x0002003a, + 0x0002003b, + 0x0002003b, + 0x0002003b, + 0x0002003b, + }, + { + 0x0002003c, + 0x0002003c, + 0x0002003c, + 0x0002003c, + 0x0002003d, + 0x0002003d, + 0x0002003d, + 0x0002003d, + 0x0002003e, + 0x0002003e, + 0x0002003e, + 0x0002003e, + 0x0002003f, + 0x0002003f, + 0x0002003f, + 0x0002003f, + }, + { + 0x00010014, + 0x00010014, + 0x00010015, + 0x00010015, + 0x00010016, + 0x00010016, + 0x00010017, + 0x00010017, + 0x0001001b, + 0x0001001b, + 0x0001001c, + 0x0001001c, + 0x0001001d, + 0x0001001d, + 0x0001001e, + 0x0001001e, + }, + { + 0x00010004, + 0x00010004, + 0x00010005, + 0x00010005, + 0x00010006, + 0x00010006, + 0x00010007, + 0x00010007, + 0x0001000c, + 0x0001000c, + 0x0001000d, + 0x0001000d, + 0x0001000e, + 0x0001000e, + 0x0001000f, + 0x0001000f, + }, + { + 0x0001001f, + 0x0001001f, + 0x00010020, + 0x00010020, + 0x00010021, + 0x00010021, + 0x00010022, + 0x00010022, + 0x00010023, + 0x00010023, + 0x00010024, + 0x00010024, + 0x00010025, + 0x00010025, + 0x00010026, + 0x00010026, + }, + { + 0x00010027, + 0x00010027, + 0x00010028, + 0x00010028, + 0x00010029, + 0x00010029, + 0x0001002a, + 0x0001002a, + 0x0001002b, + 0x0001002b, + 0x0001002c, + 0x0001002c, + 0x0001002d, + 0x0001002d, + 0x0001002e, + 0x0001002e, + }, + { + 0x0001002f, + 0x0001002f, + 0x00010030, + 0x00010030, + 0x00010031, + 0x00010031, + 0x00010032, + 0x00010032, + 0x00010033, + 0x00010033, + 0x00010034, + 0x00010034, + 0x00010035, + 0x00010035, + 0x00010036, + 0x00010036, + }, }; #endif @@ -2459,60 +24516,741 @@ const uint32_t c_aauiCQMFHuffEnc40[81][2] = #else const uint16_t c_aauiCQMFHuffEnc40[81][2] = #endif -{ - {0x0001, 0x0001}, {0x0002, 0x0001}, {0x0006, 0x0001}, {0x000b, 0x0002}, {0x000f, 0x0011}, {0x0011, 0x0000}, {0x0011, 0x0001}, {0x0011, 0x0002}, - {0x0011, 0x0003}, {0x0003, 0x0001}, {0x0004, 0x0001}, {0x0007, 0x0001}, {0x000a, 0x0002}, {0x000e, 0x0009}, {0x0011, 0x0004}, {0x0011, 0x0005}, - {0x0011, 0x0006}, {0x0011, 0x0007}, {0x0006, 0x0002}, {0x0006, 0x0003}, {0x0008, 0x0001}, {0x000d, 0x0005}, {0x0011, 0x0008}, {0x0011, 0x0009}, - {0x0011, 0x000a}, {0x0011, 0x000b}, {0x0011, 0x000c}, {0x000b, 0x0003}, {0x000a, 0x0003}, {0x000c, 0x0003}, {0x0011, 0x000d}, {0x0011, 0x000e}, - {0x0011, 0x000f}, {0x0011, 0x0010}, {0x0011, 0x0011}, {0x0011, 0x0012}, {0x0011, 0x0013}, {0x0011, 0x0014}, {0x0011, 0x0015}, {0x0011, 0x0016}, - {0x0011, 0x0017}, {0x0011, 0x0018}, {0x0011, 0x0019}, {0x0011, 0x001a}, {0x0011, 0x001b}, {0x0011, 0x001c}, {0x0011, 0x001d}, {0x0011, 0x001e}, - {0x0011, 0x001f}, {0x0011, 0x0020}, {0x0011, 0x0021}, {0x0011, 0x0022}, {0x0011, 0x0023}, {0x0011, 0x0024}, {0x0011, 0x0025}, {0x0011, 0x0026}, - {0x0011, 0x0027}, {0x0011, 0x0028}, {0x0011, 0x0029}, {0x0011, 0x002a}, {0x0011, 0x002b}, {0x0011, 0x002c}, {0x0011, 0x002d}, {0x0011, 0x002e}, - {0x0011, 0x002f}, {0x0011, 0x0030}, {0x0011, 0x0031}, {0x0011, 0x0032}, {0x0011, 0x0033}, {0x0011, 0x0034}, {0x0011, 0x0035}, {0x0011, 0x0036}, - {0x0011, 0x0037}, {0x0011, 0x0038}, {0x0011, 0x0039}, {0x0011, 0x003a}, {0x0011, 0x003b}, {0x0010, 0x001e}, {0x0010, 0x001f}, {0x0010, 0x0020}, - {0x0010, 0x0021}, + { + { 0x0001, 0x0001 }, + { 0x0002, 0x0001 }, + { 0x0006, 0x0001 }, + { 0x000b, 0x0002 }, + { 0x000f, 0x0011 }, + { 0x0011, 0x0000 }, + { 0x0011, 0x0001 }, + { 0x0011, 0x0002 }, + { 0x0011, 0x0003 }, + { 0x0003, 0x0001 }, + { 0x0004, 0x0001 }, + { 0x0007, 0x0001 }, + { 0x000a, 0x0002 }, + { 0x000e, 0x0009 }, + { 0x0011, 0x0004 }, + { 0x0011, 0x0005 }, + { 0x0011, 0x0006 }, + { 0x0011, 0x0007 }, + { 0x0006, 0x0002 }, + { 0x0006, 0x0003 }, + { 0x0008, 0x0001 }, + { 0x000d, 0x0005 }, + { 0x0011, 0x0008 }, + { 0x0011, 0x0009 }, + { 0x0011, 0x000a }, + { 0x0011, 0x000b }, + { 0x0011, 0x000c }, + { 0x000b, 0x0003 }, + { 0x000a, 0x0003 }, + { 0x000c, 0x0003 }, + { 0x0011, 0x000d }, + { 0x0011, 0x000e }, + { 0x0011, 0x000f }, + { 0x0011, 0x0010 }, + { 0x0011, 0x0011 }, + { 0x0011, 0x0012 }, + { 0x0011, 0x0013 }, + { 0x0011, 0x0014 }, + { 0x0011, 0x0015 }, + { 0x0011, 0x0016 }, + { 0x0011, 0x0017 }, + { 0x0011, 0x0018 }, + { 0x0011, 0x0019 }, + { 0x0011, 0x001a }, + { 0x0011, 0x001b }, + { 0x0011, 0x001c }, + { 0x0011, 0x001d }, + { 0x0011, 0x001e }, + { 0x0011, 0x001f }, + { 0x0011, 0x0020 }, + { 0x0011, 0x0021 }, + { 0x0011, 0x0022 }, + { 0x0011, 0x0023 }, + { 0x0011, 0x0024 }, + { 0x0011, 0x0025 }, + { 0x0011, 0x0026 }, + { 0x0011, 0x0027 }, + { 0x0011, 0x0028 }, + { 0x0011, 0x0029 }, + { 0x0011, 0x002a }, + { 0x0011, 0x002b }, + { 0x0011, 0x002c }, + { 0x0011, 0x002d }, + { 0x0011, 0x002e }, + { 0x0011, 0x002f }, + { 0x0011, 0x0030 }, + { 0x0011, 0x0031 }, + { 0x0011, 0x0032 }, + { 0x0011, 0x0033 }, + { 0x0011, 0x0034 }, + { 0x0011, 0x0035 }, + { 0x0011, 0x0036 }, + { 0x0011, 0x0037 }, + { 0x0011, 0x0038 }, + { 0x0011, 0x0039 }, + { 0x0011, 0x003a }, + { 0x0011, 0x003b }, + { 0x0010, 0x001e }, + { 0x0010, 0x001f }, + { 0x0010, 0x0020 }, + { 0x0010, 0x0021 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec40[36][16] = -{ - {0x0001ffff, 0x0000000a, 0x00010009, 0x00010009, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x0002ffff, 0x00000014, 0x0001000b, 0x0001000b, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00020013, 0x00020013, 0x00020013, 0x00020013, }, - {0x0005ffff, 0x0004ffff, 0x0003ffff, 0x0000001d, 0x00010003, 0x00010003, 0x0001001b, 0x0001001b, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, }, - {0x0000004f, 0x00000050, 0x00010004, 0x00010004, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, }, - {0x0015ffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x0019ffff, 0x001affff, 0x001bffff, 0x001cffff, 0x001dffff, 0x001effff, 0x001fffff, 0x0020ffff, 0x0021ffff, 0x0022ffff, 0x0000004d, 0x0000004e, }, - {0x0023ffff, 0x000affff, 0x0006ffff, 0x000bffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, }, - {0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, - {0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, }, - {0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, }, - {0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, }, - {0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, }, - {0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, - {0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, }, - {0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, }, - {0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, }, - {0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, }, - {0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, }, - {0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, }, - {0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, }, - {0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, }, - {0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, }, - {0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, }, - {0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, }, - {0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, }, - {0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, }, - {0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, }, - {0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, }, - {0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, }, - {0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, }, - {0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, }, - {0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, 0x00030044, }, - {0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, }, - {0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, }, - {0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, }, - {0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, }, - {0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, +const uint32_t c_aauiCQMFHuffDec40[36][16] = { + { + 0x0001ffff, + 0x0000000a, + 0x00010009, + 0x00010009, + 0x00020001, + 0x00020001, + 0x00020001, + 0x00020001, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + }, + { + 0x0002ffff, + 0x00000014, + 0x0001000b, + 0x0001000b, + 0x00020002, + 0x00020002, + 0x00020002, + 0x00020002, + 0x00020012, + 0x00020012, + 0x00020012, + 0x00020012, + 0x00020013, + 0x00020013, + 0x00020013, + 0x00020013, + }, + { + 0x0005ffff, + 0x0004ffff, + 0x0003ffff, + 0x0000001d, + 0x00010003, + 0x00010003, + 0x0001001b, + 0x0001001b, + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x0002001c, + 0x0002001c, + 0x0002001c, + 0x0002001c, + }, + { + 0x0000004f, + 0x00000050, + 0x00010004, + 0x00010004, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + }, + { + 0x0015ffff, + 0x0016ffff, + 0x0017ffff, + 0x0018ffff, + 0x0019ffff, + 0x001affff, + 0x001bffff, + 0x001cffff, + 0x001dffff, + 0x001effff, + 0x001fffff, + 0x0020ffff, + 0x0021ffff, + 0x0022ffff, + 0x0000004d, + 0x0000004e, + }, + { + 0x0023ffff, + 0x000affff, + 0x0006ffff, + 0x000bffff, + 0x0007ffff, + 0x0008ffff, + 0x0009ffff, + 0x000cffff, + 0x000dffff, + 0x000effff, + 0x000fffff, + 0x0010ffff, + 0x0011ffff, + 0x0012ffff, + 0x0013ffff, + 0x0014ffff, + }, + { + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + }, + { + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + }, + { + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + }, + { + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + }, + { + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + }, + { + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + }, + { + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + }, + { + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + }, + { + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + }, + { + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + }, + { + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + }, + { + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + }, + { + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + }, + { + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + }, + { + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + }, + { + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + }, + { + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + }, + { + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + }, + { + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + }, + { + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + }, + { + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + }, + { + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + }, + { + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x00030040, + 0x00030040, + 0x00030040, + 0x00030040, + 0x00030040, + 0x00030040, + 0x00030040, + 0x00030040, + }, + { + 0x00030041, + 0x00030041, + 0x00030041, + 0x00030041, + 0x00030041, + 0x00030041, + 0x00030041, + 0x00030041, + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030042, + }, + { + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030044, + 0x00030044, + 0x00030044, + 0x00030044, + 0x00030044, + 0x00030044, + 0x00030044, + 0x00030044, + }, + { + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030046, + 0x00030046, + 0x00030046, + 0x00030046, + 0x00030046, + 0x00030046, + 0x00030046, + 0x00030046, + }, + { + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030048, + 0x00030048, + 0x00030048, + 0x00030048, + 0x00030048, + 0x00030048, + 0x00030048, + 0x00030048, + }, + { + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + 0x0003004a, + 0x0003004a, + 0x0003004a, + 0x0003004a, + 0x0003004a, + 0x0003004a, + 0x0003004a, + 0x0003004a, + }, + { + 0x0003004b, + 0x0003004b, + 0x0003004b, + 0x0003004b, + 0x0003004b, + 0x0003004b, + 0x0003004b, + 0x0003004b, + 0x0003004c, + 0x0003004c, + 0x0003004c, + 0x0003004c, + 0x0003004c, + 0x0003004c, + 0x0003004c, + 0x0003004c, + }, + { + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + }, }; #endif @@ -2521,42 +25259,400 @@ const uint32_t c_aauiCQMFHuffEnc41[100][2] = #else const uint16_t c_aauiCQMFHuffEnc41[100][2] = #endif -{ - {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x000b, 0x0001}, {0x0011, 0x0014}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, - {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0002, 0x0001}, {0x0004, 0x0001}, {0x0007, 0x0001}, {0x000a, 0x0001}, {0x0010, 0x000b}, {0x0013, 0x0005}, - {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0006, 0x0002}, {0x0006, 0x0003}, {0x0008, 0x0001}, {0x000d, 0x0002}, - {0x0011, 0x0015}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0013, 0x000c}, {0x0013, 0x000d}, {0x0013, 0x000e}, {0x000a, 0x0002}, {0x000a, 0x0003}, - {0x000d, 0x0003}, {0x0010, 0x000c}, {0x0013, 0x000f}, {0x0013, 0x0010}, {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0013, 0x0014}, - {0x0010, 0x000d}, {0x000f, 0x0007}, {0x0012, 0x0027}, {0x0013, 0x0015}, {0x0013, 0x0016}, {0x0013, 0x0017}, {0x0013, 0x0018}, {0x0013, 0x0019}, - {0x0013, 0x001a}, {0x0013, 0x001b}, {0x0013, 0x001c}, {0x0013, 0x001d}, {0x0013, 0x001e}, {0x0013, 0x001f}, {0x0013, 0x0020}, {0x0013, 0x0021}, - {0x0013, 0x0022}, {0x0013, 0x0023}, {0x0013, 0x0024}, {0x0013, 0x0025}, {0x0013, 0x0026}, {0x0013, 0x0027}, {0x0013, 0x0028}, {0x0013, 0x0029}, - {0x0013, 0x002a}, {0x0013, 0x002b}, {0x0013, 0x002c}, {0x0013, 0x002d}, {0x0013, 0x002e}, {0x0013, 0x002f}, {0x0013, 0x0030}, {0x0013, 0x0031}, - {0x0013, 0x0032}, {0x0013, 0x0033}, {0x0013, 0x0034}, {0x0013, 0x0035}, {0x0013, 0x0036}, {0x0013, 0x0037}, {0x0013, 0x0038}, {0x0013, 0x0039}, - {0x0013, 0x003a}, {0x0013, 0x003b}, {0x0013, 0x003c}, {0x0013, 0x003d}, {0x0013, 0x003e}, {0x0013, 0x003f}, {0x0013, 0x0040}, {0x0013, 0x0041}, - {0x0013, 0x0042}, {0x0013, 0x0043}, {0x0013, 0x0044}, {0x0013, 0x0045}, {0x0013, 0x0046}, {0x0013, 0x0047}, {0x0013, 0x0048}, {0x0013, 0x0049}, - {0x0013, 0x004a}, {0x0013, 0x004b}, {0x0013, 0x004c}, {0x0013, 0x004d}, + { + { 0x0001, 0x0001 }, + { 0x0003, 0x0001 }, + { 0x0006, 0x0001 }, + { 0x000b, 0x0001 }, + { 0x0011, 0x0014 }, + { 0x0013, 0x0000 }, + { 0x0013, 0x0001 }, + { 0x0013, 0x0002 }, + { 0x0013, 0x0003 }, + { 0x0013, 0x0004 }, + { 0x0002, 0x0001 }, + { 0x0004, 0x0001 }, + { 0x0007, 0x0001 }, + { 0x000a, 0x0001 }, + { 0x0010, 0x000b }, + { 0x0013, 0x0005 }, + { 0x0013, 0x0006 }, + { 0x0013, 0x0007 }, + { 0x0013, 0x0008 }, + { 0x0013, 0x0009 }, + { 0x0006, 0x0002 }, + { 0x0006, 0x0003 }, + { 0x0008, 0x0001 }, + { 0x000d, 0x0002 }, + { 0x0011, 0x0015 }, + { 0x0013, 0x000a }, + { 0x0013, 0x000b }, + { 0x0013, 0x000c }, + { 0x0013, 0x000d }, + { 0x0013, 0x000e }, + { 0x000a, 0x0002 }, + { 0x000a, 0x0003 }, + { 0x000d, 0x0003 }, + { 0x0010, 0x000c }, + { 0x0013, 0x000f }, + { 0x0013, 0x0010 }, + { 0x0013, 0x0011 }, + { 0x0013, 0x0012 }, + { 0x0013, 0x0013 }, + { 0x0013, 0x0014 }, + { 0x0010, 0x000d }, + { 0x000f, 0x0007 }, + { 0x0012, 0x0027 }, + { 0x0013, 0x0015 }, + { 0x0013, 0x0016 }, + { 0x0013, 0x0017 }, + { 0x0013, 0x0018 }, + { 0x0013, 0x0019 }, + { 0x0013, 0x001a }, + { 0x0013, 0x001b }, + { 0x0013, 0x001c }, + { 0x0013, 0x001d }, + { 0x0013, 0x001e }, + { 0x0013, 0x001f }, + { 0x0013, 0x0020 }, + { 0x0013, 0x0021 }, + { 0x0013, 0x0022 }, + { 0x0013, 0x0023 }, + { 0x0013, 0x0024 }, + { 0x0013, 0x0025 }, + { 0x0013, 0x0026 }, + { 0x0013, 0x0027 }, + { 0x0013, 0x0028 }, + { 0x0013, 0x0029 }, + { 0x0013, 0x002a }, + { 0x0013, 0x002b }, + { 0x0013, 0x002c }, + { 0x0013, 0x002d }, + { 0x0013, 0x002e }, + { 0x0013, 0x002f }, + { 0x0013, 0x0030 }, + { 0x0013, 0x0031 }, + { 0x0013, 0x0032 }, + { 0x0013, 0x0033 }, + { 0x0013, 0x0034 }, + { 0x0013, 0x0035 }, + { 0x0013, 0x0036 }, + { 0x0013, 0x0037 }, + { 0x0013, 0x0038 }, + { 0x0013, 0x0039 }, + { 0x0013, 0x003a }, + { 0x0013, 0x003b }, + { 0x0013, 0x003c }, + { 0x0013, 0x003d }, + { 0x0013, 0x003e }, + { 0x0013, 0x003f }, + { 0x0013, 0x0040 }, + { 0x0013, 0x0041 }, + { 0x0013, 0x0042 }, + { 0x0013, 0x0043 }, + { 0x0013, 0x0044 }, + { 0x0013, 0x0045 }, + { 0x0013, 0x0046 }, + { 0x0013, 0x0047 }, + { 0x0013, 0x0048 }, + { 0x0013, 0x0049 }, + { 0x0013, 0x004a }, + { 0x0013, 0x004b }, + { 0x0013, 0x004c }, + { 0x0013, 0x004d }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec41[16][16] = -{ - {0x0001ffff, 0x0000000b, 0x00010001, 0x00010001, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x0002ffff, 0x00000016, 0x0001000c, 0x0001000c, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x00020014, 0x00020014, 0x00020014, 0x00020014, 0x00020015, 0x00020015, 0x00020015, 0x00020015, }, - {0x0004ffff, 0x0003ffff, 0x00010003, 0x00010003, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, }, - {0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, }, - {0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x0006ffff, 0x0005ffff, 0x0000000e, 0x00000021, 0x00000028, 0x00010029, 0x00010029, }, - {0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, }, - {0x0001005e, 0x0001005e, 0x0001005f, 0x0001005f, 0x00010060, 0x00010060, 0x00010061, 0x00010061, 0x00010062, 0x00010062, 0x00010063, 0x00010063, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, }, - {0x00010005, 0x00010005, 0x00010006, 0x00010006, 0x00010007, 0x00010007, 0x00010008, 0x00010008, 0x00010009, 0x00010009, 0x0001000f, 0x0001000f, 0x00010010, 0x00010010, 0x00010011, 0x00010011, }, - {0x00010012, 0x00010012, 0x00010013, 0x00010013, 0x00010019, 0x00010019, 0x0001001a, 0x0001001a, 0x0001001b, 0x0001001b, 0x0001001c, 0x0001001c, 0x0001001d, 0x0001001d, 0x00010022, 0x00010022, }, - {0x00010023, 0x00010023, 0x00010024, 0x00010024, 0x00010025, 0x00010025, 0x00010026, 0x00010026, 0x00010027, 0x00010027, 0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, }, - {0x0001002e, 0x0001002e, 0x0001002f, 0x0001002f, 0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, }, - {0x00010036, 0x00010036, 0x00010037, 0x00010037, 0x00010038, 0x00010038, 0x00010039, 0x00010039, 0x0001003a, 0x0001003a, 0x0001003b, 0x0001003b, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, }, - {0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x00010040, 0x00010040, 0x00010041, 0x00010041, 0x00010042, 0x00010042, 0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, }, - {0x00010046, 0x00010046, 0x00010047, 0x00010047, 0x00010048, 0x00010048, 0x00010049, 0x00010049, 0x0001004a, 0x0001004a, 0x0001004b, 0x0001004b, 0x0001004c, 0x0001004c, 0x0001004d, 0x0001004d, }, - {0x0001004e, 0x0001004e, 0x0001004f, 0x0001004f, 0x00010050, 0x00010050, 0x00010051, 0x00010051, 0x00010052, 0x00010052, 0x00010053, 0x00010053, 0x00010054, 0x00010054, 0x00010055, 0x00010055, }, - {0x00010056, 0x00010056, 0x00010057, 0x00010057, 0x00010058, 0x00010058, 0x00010059, 0x00010059, 0x0001005a, 0x0001005a, 0x0001005b, 0x0001005b, 0x0001005c, 0x0001005c, 0x0001005d, 0x0001005d, }, +const uint32_t c_aauiCQMFHuffDec41[16][16] = { + { + 0x0001ffff, + 0x0000000b, + 0x00010001, + 0x00010001, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + }, + { + 0x0002ffff, + 0x00000016, + 0x0001000c, + 0x0001000c, + 0x00020002, + 0x00020002, + 0x00020002, + 0x00020002, + 0x00020014, + 0x00020014, + 0x00020014, + 0x00020014, + 0x00020015, + 0x00020015, + 0x00020015, + 0x00020015, + }, + { + 0x0004ffff, + 0x0003ffff, + 0x00010003, + 0x00010003, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0002001e, + 0x0002001e, + 0x0002001e, + 0x0002001e, + 0x0002001f, + 0x0002001f, + 0x0002001f, + 0x0002001f, + }, + { + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + }, + { + 0x0007ffff, + 0x0008ffff, + 0x0009ffff, + 0x000affff, + 0x000bffff, + 0x000cffff, + 0x000dffff, + 0x000effff, + 0x000fffff, + 0x0006ffff, + 0x0005ffff, + 0x0000000e, + 0x00000021, + 0x00000028, + 0x00010029, + 0x00010029, + }, + { + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + }, + { + 0x0001005e, + 0x0001005e, + 0x0001005f, + 0x0001005f, + 0x00010060, + 0x00010060, + 0x00010061, + 0x00010061, + 0x00010062, + 0x00010062, + 0x00010063, + 0x00010063, + 0x0002002a, + 0x0002002a, + 0x0002002a, + 0x0002002a, + }, + { + 0x00010005, + 0x00010005, + 0x00010006, + 0x00010006, + 0x00010007, + 0x00010007, + 0x00010008, + 0x00010008, + 0x00010009, + 0x00010009, + 0x0001000f, + 0x0001000f, + 0x00010010, + 0x00010010, + 0x00010011, + 0x00010011, + }, + { + 0x00010012, + 0x00010012, + 0x00010013, + 0x00010013, + 0x00010019, + 0x00010019, + 0x0001001a, + 0x0001001a, + 0x0001001b, + 0x0001001b, + 0x0001001c, + 0x0001001c, + 0x0001001d, + 0x0001001d, + 0x00010022, + 0x00010022, + }, + { + 0x00010023, + 0x00010023, + 0x00010024, + 0x00010024, + 0x00010025, + 0x00010025, + 0x00010026, + 0x00010026, + 0x00010027, + 0x00010027, + 0x0001002b, + 0x0001002b, + 0x0001002c, + 0x0001002c, + 0x0001002d, + 0x0001002d, + }, + { + 0x0001002e, + 0x0001002e, + 0x0001002f, + 0x0001002f, + 0x00010030, + 0x00010030, + 0x00010031, + 0x00010031, + 0x00010032, + 0x00010032, + 0x00010033, + 0x00010033, + 0x00010034, + 0x00010034, + 0x00010035, + 0x00010035, + }, + { + 0x00010036, + 0x00010036, + 0x00010037, + 0x00010037, + 0x00010038, + 0x00010038, + 0x00010039, + 0x00010039, + 0x0001003a, + 0x0001003a, + 0x0001003b, + 0x0001003b, + 0x0001003c, + 0x0001003c, + 0x0001003d, + 0x0001003d, + }, + { + 0x0001003e, + 0x0001003e, + 0x0001003f, + 0x0001003f, + 0x00010040, + 0x00010040, + 0x00010041, + 0x00010041, + 0x00010042, + 0x00010042, + 0x00010043, + 0x00010043, + 0x00010044, + 0x00010044, + 0x00010045, + 0x00010045, + }, + { + 0x00010046, + 0x00010046, + 0x00010047, + 0x00010047, + 0x00010048, + 0x00010048, + 0x00010049, + 0x00010049, + 0x0001004a, + 0x0001004a, + 0x0001004b, + 0x0001004b, + 0x0001004c, + 0x0001004c, + 0x0001004d, + 0x0001004d, + }, + { + 0x0001004e, + 0x0001004e, + 0x0001004f, + 0x0001004f, + 0x00010050, + 0x00010050, + 0x00010051, + 0x00010051, + 0x00010052, + 0x00010052, + 0x00010053, + 0x00010053, + 0x00010054, + 0x00010054, + 0x00010055, + 0x00010055, + }, + { + 0x00010056, + 0x00010056, + 0x00010057, + 0x00010057, + 0x00010058, + 0x00010058, + 0x00010059, + 0x00010059, + 0x0001005a, + 0x0001005a, + 0x0001005b, + 0x0001005b, + 0x0001005c, + 0x0001005c, + 0x0001005d, + 0x0001005d, + }, }; #endif @@ -2565,63 +25661,685 @@ const uint32_t c_aauiCQMFHuffEnc42[169][2] = #else const uint16_t c_aauiCQMFHuffEnc42[169][2] = #endif -{ - {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x0009, 0x0001}, {0x000e, 0x0006}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, - {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0005, 0x0001}, - {0x0009, 0x0002}, {0x000d, 0x0004}, {0x0010, 0x0013}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0013, 0x000c}, - {0x0013, 0x000d}, {0x0013, 0x000e}, {0x0005, 0x0002}, {0x0005, 0x0003}, {0x0008, 0x0002}, {0x000b, 0x0002}, {0x000f, 0x000b}, {0x0011, 0x0025}, - {0x0013, 0x000f}, {0x0013, 0x0010}, {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0013, 0x0014}, {0x0013, 0x0015}, {0x0009, 0x0003}, - {0x0008, 0x0003}, {0x000b, 0x0003}, {0x000d, 0x0005}, {0x0010, 0x0014}, {0x0013, 0x0016}, {0x0013, 0x0017}, {0x0013, 0x0018}, {0x0013, 0x0019}, - {0x0013, 0x001a}, {0x0013, 0x001b}, {0x0013, 0x001c}, {0x0013, 0x001d}, {0x000d, 0x0006}, {0x000d, 0x0007}, {0x000e, 0x0007}, {0x0010, 0x0015}, - {0x0013, 0x001e}, {0x0013, 0x001f}, {0x0013, 0x0020}, {0x0013, 0x0021}, {0x0013, 0x0022}, {0x0013, 0x0023}, {0x0013, 0x0024}, {0x0013, 0x0025}, - {0x0013, 0x0026}, {0x0012, 0x0045}, {0x0013, 0x0027}, {0x0013, 0x0028}, {0x0013, 0x0029}, {0x0013, 0x002a}, {0x0013, 0x002b}, {0x0013, 0x002c}, - {0x0013, 0x002d}, {0x0013, 0x002e}, {0x0013, 0x002f}, {0x0013, 0x0030}, {0x0013, 0x0031}, {0x0013, 0x0032}, {0x0013, 0x0033}, {0x0013, 0x0034}, - {0x0013, 0x0035}, {0x0013, 0x0036}, {0x0013, 0x0037}, {0x0013, 0x0038}, {0x0013, 0x0039}, {0x0013, 0x003a}, {0x0013, 0x003b}, {0x0013, 0x003c}, - {0x0013, 0x003d}, {0x0013, 0x003e}, {0x0013, 0x003f}, {0x0013, 0x0040}, {0x0013, 0x0041}, {0x0013, 0x0042}, {0x0013, 0x0043}, {0x0013, 0x0044}, - {0x0013, 0x0045}, {0x0013, 0x0046}, {0x0013, 0x0047}, {0x0013, 0x0048}, {0x0013, 0x0049}, {0x0013, 0x004a}, {0x0013, 0x004b}, {0x0013, 0x004c}, - {0x0013, 0x004d}, {0x0013, 0x004e}, {0x0013, 0x004f}, {0x0013, 0x0050}, {0x0013, 0x0051}, {0x0013, 0x0052}, {0x0013, 0x0053}, {0x0013, 0x0054}, - {0x0013, 0x0055}, {0x0013, 0x0056}, {0x0013, 0x0057}, {0x0013, 0x0058}, {0x0013, 0x0059}, {0x0013, 0x005a}, {0x0013, 0x005b}, {0x0013, 0x005c}, - {0x0013, 0x005d}, {0x0013, 0x005e}, {0x0013, 0x005f}, {0x0013, 0x0060}, {0x0013, 0x0061}, {0x0013, 0x0062}, {0x0013, 0x0063}, {0x0013, 0x0064}, - {0x0013, 0x0065}, {0x0013, 0x0066}, {0x0013, 0x0067}, {0x0013, 0x0068}, {0x0013, 0x0069}, {0x0013, 0x006a}, {0x0013, 0x006b}, {0x0013, 0x006c}, - {0x0013, 0x006d}, {0x0013, 0x006e}, {0x0013, 0x006f}, {0x0013, 0x0070}, {0x0013, 0x0071}, {0x0013, 0x0072}, {0x0013, 0x0073}, {0x0013, 0x0074}, - {0x0013, 0x0075}, {0x0013, 0x0076}, {0x0013, 0x0077}, {0x0013, 0x0078}, {0x0013, 0x0079}, {0x0013, 0x007a}, {0x0013, 0x007b}, {0x0013, 0x007c}, - {0x0013, 0x007d}, {0x0013, 0x007e}, {0x0013, 0x007f}, {0x0013, 0x0080}, {0x0013, 0x0081}, {0x0013, 0x0082}, {0x0013, 0x0083}, {0x0013, 0x0084}, - {0x0013, 0x0085}, {0x0013, 0x0086}, {0x0013, 0x0087}, {0x0013, 0x0088}, {0x0013, 0x0089}, {0x0012, 0x0046}, {0x0012, 0x0047}, {0x0012, 0x0048}, - {0x0012, 0x0049}, + { + { 0x0001, 0x0001 }, + { 0x0003, 0x0001 }, + { 0x0006, 0x0001 }, + { 0x0009, 0x0001 }, + { 0x000e, 0x0006 }, + { 0x0013, 0x0000 }, + { 0x0013, 0x0001 }, + { 0x0013, 0x0002 }, + { 0x0013, 0x0003 }, + { 0x0013, 0x0004 }, + { 0x0013, 0x0005 }, + { 0x0013, 0x0006 }, + { 0x0013, 0x0007 }, + { 0x0003, 0x0002 }, + { 0x0003, 0x0003 }, + { 0x0005, 0x0001 }, + { 0x0009, 0x0002 }, + { 0x000d, 0x0004 }, + { 0x0010, 0x0013 }, + { 0x0013, 0x0008 }, + { 0x0013, 0x0009 }, + { 0x0013, 0x000a }, + { 0x0013, 0x000b }, + { 0x0013, 0x000c }, + { 0x0013, 0x000d }, + { 0x0013, 0x000e }, + { 0x0005, 0x0002 }, + { 0x0005, 0x0003 }, + { 0x0008, 0x0002 }, + { 0x000b, 0x0002 }, + { 0x000f, 0x000b }, + { 0x0011, 0x0025 }, + { 0x0013, 0x000f }, + { 0x0013, 0x0010 }, + { 0x0013, 0x0011 }, + { 0x0013, 0x0012 }, + { 0x0013, 0x0013 }, + { 0x0013, 0x0014 }, + { 0x0013, 0x0015 }, + { 0x0009, 0x0003 }, + { 0x0008, 0x0003 }, + { 0x000b, 0x0003 }, + { 0x000d, 0x0005 }, + { 0x0010, 0x0014 }, + { 0x0013, 0x0016 }, + { 0x0013, 0x0017 }, + { 0x0013, 0x0018 }, + { 0x0013, 0x0019 }, + { 0x0013, 0x001a }, + { 0x0013, 0x001b }, + { 0x0013, 0x001c }, + { 0x0013, 0x001d }, + { 0x000d, 0x0006 }, + { 0x000d, 0x0007 }, + { 0x000e, 0x0007 }, + { 0x0010, 0x0015 }, + { 0x0013, 0x001e }, + { 0x0013, 0x001f }, + { 0x0013, 0x0020 }, + { 0x0013, 0x0021 }, + { 0x0013, 0x0022 }, + { 0x0013, 0x0023 }, + { 0x0013, 0x0024 }, + { 0x0013, 0x0025 }, + { 0x0013, 0x0026 }, + { 0x0012, 0x0045 }, + { 0x0013, 0x0027 }, + { 0x0013, 0x0028 }, + { 0x0013, 0x0029 }, + { 0x0013, 0x002a }, + { 0x0013, 0x002b }, + { 0x0013, 0x002c }, + { 0x0013, 0x002d }, + { 0x0013, 0x002e }, + { 0x0013, 0x002f }, + { 0x0013, 0x0030 }, + { 0x0013, 0x0031 }, + { 0x0013, 0x0032 }, + { 0x0013, 0x0033 }, + { 0x0013, 0x0034 }, + { 0x0013, 0x0035 }, + { 0x0013, 0x0036 }, + { 0x0013, 0x0037 }, + { 0x0013, 0x0038 }, + { 0x0013, 0x0039 }, + { 0x0013, 0x003a }, + { 0x0013, 0x003b }, + { 0x0013, 0x003c }, + { 0x0013, 0x003d }, + { 0x0013, 0x003e }, + { 0x0013, 0x003f }, + { 0x0013, 0x0040 }, + { 0x0013, 0x0041 }, + { 0x0013, 0x0042 }, + { 0x0013, 0x0043 }, + { 0x0013, 0x0044 }, + { 0x0013, 0x0045 }, + { 0x0013, 0x0046 }, + { 0x0013, 0x0047 }, + { 0x0013, 0x0048 }, + { 0x0013, 0x0049 }, + { 0x0013, 0x004a }, + { 0x0013, 0x004b }, + { 0x0013, 0x004c }, + { 0x0013, 0x004d }, + { 0x0013, 0x004e }, + { 0x0013, 0x004f }, + { 0x0013, 0x0050 }, + { 0x0013, 0x0051 }, + { 0x0013, 0x0052 }, + { 0x0013, 0x0053 }, + { 0x0013, 0x0054 }, + { 0x0013, 0x0055 }, + { 0x0013, 0x0056 }, + { 0x0013, 0x0057 }, + { 0x0013, 0x0058 }, + { 0x0013, 0x0059 }, + { 0x0013, 0x005a }, + { 0x0013, 0x005b }, + { 0x0013, 0x005c }, + { 0x0013, 0x005d }, + { 0x0013, 0x005e }, + { 0x0013, 0x005f }, + { 0x0013, 0x0060 }, + { 0x0013, 0x0061 }, + { 0x0013, 0x0062 }, + { 0x0013, 0x0063 }, + { 0x0013, 0x0064 }, + { 0x0013, 0x0065 }, + { 0x0013, 0x0066 }, + { 0x0013, 0x0067 }, + { 0x0013, 0x0068 }, + { 0x0013, 0x0069 }, + { 0x0013, 0x006a }, + { 0x0013, 0x006b }, + { 0x0013, 0x006c }, + { 0x0013, 0x006d }, + { 0x0013, 0x006e }, + { 0x0013, 0x006f }, + { 0x0013, 0x0070 }, + { 0x0013, 0x0071 }, + { 0x0013, 0x0072 }, + { 0x0013, 0x0073 }, + { 0x0013, 0x0074 }, + { 0x0013, 0x0075 }, + { 0x0013, 0x0076 }, + { 0x0013, 0x0077 }, + { 0x0013, 0x0078 }, + { 0x0013, 0x0079 }, + { 0x0013, 0x007a }, + { 0x0013, 0x007b }, + { 0x0013, 0x007c }, + { 0x0013, 0x007d }, + { 0x0013, 0x007e }, + { 0x0013, 0x007f }, + { 0x0013, 0x0080 }, + { 0x0013, 0x0081 }, + { 0x0013, 0x0082 }, + { 0x0013, 0x0083 }, + { 0x0013, 0x0084 }, + { 0x0013, 0x0085 }, + { 0x0013, 0x0086 }, + { 0x0013, 0x0087 }, + { 0x0013, 0x0088 }, + { 0x0013, 0x0089 }, + { 0x0012, 0x0046 }, + { 0x0012, 0x0047 }, + { 0x0012, 0x0048 }, + { 0x0012, 0x0049 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec42[28][16] = -{ - {0x0001ffff, 0x0002ffff, 0x00010001, 0x00010001, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x0003ffff, 0x0004ffff, 0x0000001c, 0x00000028, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, - {0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001a, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, }, - {0x000affff, 0x0007ffff, 0x0005ffff, 0x0006ffff, 0x0001001d, 0x0001001d, 0x00010029, 0x00010029, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, }, - {0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, }, - {0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, }, - {0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, }, - {0x001bffff, 0x0009ffff, 0x0008ffff, 0x00000012, 0x0000002b, 0x00000037, 0x0001001e, 0x0001001e, 0x00020004, 0x00020004, 0x00020004, 0x00020004, 0x00020036, 0x00020036, 0x00020036, 0x00020036, }, - {0x000200a7, 0x000200a7, 0x000200a7, 0x000200a7, 0x000200a8, 0x000200a8, 0x000200a8, 0x000200a8, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, }, - {0x000100a3, 0x000100a3, 0x000100a4, 0x000100a4, 0x00020041, 0x00020041, 0x00020041, 0x00020041, 0x000200a5, 0x000200a5, 0x000200a5, 0x000200a5, 0x000200a6, 0x000200a6, 0x000200a6, 0x000200a6, }, - {0x000dffff, 0x000bffff, 0x000cffff, 0x000effff, 0x000fffff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x0019ffff, 0x001affff, }, - {0x00010013, 0x00010013, 0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x00010020, 0x00010020, }, - {0x00010021, 0x00010021, 0x00010022, 0x00010022, 0x00010023, 0x00010023, 0x00010024, 0x00010024, 0x00010025, 0x00010025, 0x00010026, 0x00010026, 0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, }, - {0x00010005, 0x00010005, 0x00010006, 0x00010006, 0x00010007, 0x00010007, 0x00010008, 0x00010008, 0x00010009, 0x00010009, 0x0001000a, 0x0001000a, 0x0001000b, 0x0001000b, 0x0001000c, 0x0001000c, }, - {0x0001002e, 0x0001002e, 0x0001002f, 0x0001002f, 0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010038, 0x00010038, 0x00010039, 0x00010039, }, - {0x0001003a, 0x0001003a, 0x0001003b, 0x0001003b, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, 0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x00010040, 0x00010040, 0x00010042, 0x00010042, }, - {0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, 0x00010046, 0x00010046, 0x00010047, 0x00010047, 0x00010048, 0x00010048, 0x00010049, 0x00010049, 0x0001004a, 0x0001004a, }, - {0x0001004b, 0x0001004b, 0x0001004c, 0x0001004c, 0x0001004d, 0x0001004d, 0x0001004e, 0x0001004e, 0x0001004f, 0x0001004f, 0x00010050, 0x00010050, 0x00010051, 0x00010051, 0x00010052, 0x00010052, }, - {0x00010053, 0x00010053, 0x00010054, 0x00010054, 0x00010055, 0x00010055, 0x00010056, 0x00010056, 0x00010057, 0x00010057, 0x00010058, 0x00010058, 0x00010059, 0x00010059, 0x0001005a, 0x0001005a, }, - {0x0001005b, 0x0001005b, 0x0001005c, 0x0001005c, 0x0001005d, 0x0001005d, 0x0001005e, 0x0001005e, 0x0001005f, 0x0001005f, 0x00010060, 0x00010060, 0x00010061, 0x00010061, 0x00010062, 0x00010062, }, - {0x00010063, 0x00010063, 0x00010064, 0x00010064, 0x00010065, 0x00010065, 0x00010066, 0x00010066, 0x00010067, 0x00010067, 0x00010068, 0x00010068, 0x00010069, 0x00010069, 0x0001006a, 0x0001006a, }, - {0x0001006b, 0x0001006b, 0x0001006c, 0x0001006c, 0x0001006d, 0x0001006d, 0x0001006e, 0x0001006e, 0x0001006f, 0x0001006f, 0x00010070, 0x00010070, 0x00010071, 0x00010071, 0x00010072, 0x00010072, }, - {0x00010073, 0x00010073, 0x00010074, 0x00010074, 0x00010075, 0x00010075, 0x00010076, 0x00010076, 0x00010077, 0x00010077, 0x00010078, 0x00010078, 0x00010079, 0x00010079, 0x0001007a, 0x0001007a, }, - {0x0001007b, 0x0001007b, 0x0001007c, 0x0001007c, 0x0001007d, 0x0001007d, 0x0001007e, 0x0001007e, 0x0001007f, 0x0001007f, 0x00010080, 0x00010080, 0x00010081, 0x00010081, 0x00010082, 0x00010082, }, - {0x00010083, 0x00010083, 0x00010084, 0x00010084, 0x00010085, 0x00010085, 0x00010086, 0x00010086, 0x00010087, 0x00010087, 0x00010088, 0x00010088, 0x00010089, 0x00010089, 0x0001008a, 0x0001008a, }, - {0x0001008b, 0x0001008b, 0x0001008c, 0x0001008c, 0x0001008d, 0x0001008d, 0x0001008e, 0x0001008e, 0x0001008f, 0x0001008f, 0x00010090, 0x00010090, 0x00010091, 0x00010091, 0x00010092, 0x00010092, }, - {0x00010093, 0x00010093, 0x00010094, 0x00010094, 0x00010095, 0x00010095, 0x00010096, 0x00010096, 0x00010097, 0x00010097, 0x00010098, 0x00010098, 0x00010099, 0x00010099, 0x0001009a, 0x0001009a, }, - {0x0001009b, 0x0001009b, 0x0001009c, 0x0001009c, 0x0001009d, 0x0001009d, 0x0001009e, 0x0001009e, 0x0001009f, 0x0001009f, 0x000100a0, 0x000100a0, 0x000100a1, 0x000100a1, 0x000100a2, 0x000100a2, }, +const uint32_t c_aauiCQMFHuffDec42[28][16] = { + { + 0x0001ffff, + 0x0002ffff, + 0x00010001, + 0x00010001, + 0x0001000d, + 0x0001000d, + 0x0001000e, + 0x0001000e, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + }, + { + 0x0003ffff, + 0x0004ffff, + 0x0000001c, + 0x00000028, + 0x00020002, + 0x00020002, + 0x00020002, + 0x00020002, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + }, + { + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001a, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + }, + { + 0x000affff, + 0x0007ffff, + 0x0005ffff, + 0x0006ffff, + 0x0001001d, + 0x0001001d, + 0x00010029, + 0x00010029, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + }, + { + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + }, + { + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + }, + { + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + }, + { + 0x001bffff, + 0x0009ffff, + 0x0008ffff, + 0x00000012, + 0x0000002b, + 0x00000037, + 0x0001001e, + 0x0001001e, + 0x00020004, + 0x00020004, + 0x00020004, + 0x00020004, + 0x00020036, + 0x00020036, + 0x00020036, + 0x00020036, + }, + { + 0x000200a7, + 0x000200a7, + 0x000200a7, + 0x000200a7, + 0x000200a8, + 0x000200a8, + 0x000200a8, + 0x000200a8, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + }, + { + 0x000100a3, + 0x000100a3, + 0x000100a4, + 0x000100a4, + 0x00020041, + 0x00020041, + 0x00020041, + 0x00020041, + 0x000200a5, + 0x000200a5, + 0x000200a5, + 0x000200a5, + 0x000200a6, + 0x000200a6, + 0x000200a6, + 0x000200a6, + }, + { + 0x000dffff, + 0x000bffff, + 0x000cffff, + 0x000effff, + 0x000fffff, + 0x0010ffff, + 0x0011ffff, + 0x0012ffff, + 0x0013ffff, + 0x0014ffff, + 0x0015ffff, + 0x0016ffff, + 0x0017ffff, + 0x0018ffff, + 0x0019ffff, + 0x001affff, + }, + { + 0x00010013, + 0x00010013, + 0x00010014, + 0x00010014, + 0x00010015, + 0x00010015, + 0x00010016, + 0x00010016, + 0x00010017, + 0x00010017, + 0x00010018, + 0x00010018, + 0x00010019, + 0x00010019, + 0x00010020, + 0x00010020, + }, + { + 0x00010021, + 0x00010021, + 0x00010022, + 0x00010022, + 0x00010023, + 0x00010023, + 0x00010024, + 0x00010024, + 0x00010025, + 0x00010025, + 0x00010026, + 0x00010026, + 0x0001002c, + 0x0001002c, + 0x0001002d, + 0x0001002d, + }, + { + 0x00010005, + 0x00010005, + 0x00010006, + 0x00010006, + 0x00010007, + 0x00010007, + 0x00010008, + 0x00010008, + 0x00010009, + 0x00010009, + 0x0001000a, + 0x0001000a, + 0x0001000b, + 0x0001000b, + 0x0001000c, + 0x0001000c, + }, + { + 0x0001002e, + 0x0001002e, + 0x0001002f, + 0x0001002f, + 0x00010030, + 0x00010030, + 0x00010031, + 0x00010031, + 0x00010032, + 0x00010032, + 0x00010033, + 0x00010033, + 0x00010038, + 0x00010038, + 0x00010039, + 0x00010039, + }, + { + 0x0001003a, + 0x0001003a, + 0x0001003b, + 0x0001003b, + 0x0001003c, + 0x0001003c, + 0x0001003d, + 0x0001003d, + 0x0001003e, + 0x0001003e, + 0x0001003f, + 0x0001003f, + 0x00010040, + 0x00010040, + 0x00010042, + 0x00010042, + }, + { + 0x00010043, + 0x00010043, + 0x00010044, + 0x00010044, + 0x00010045, + 0x00010045, + 0x00010046, + 0x00010046, + 0x00010047, + 0x00010047, + 0x00010048, + 0x00010048, + 0x00010049, + 0x00010049, + 0x0001004a, + 0x0001004a, + }, + { + 0x0001004b, + 0x0001004b, + 0x0001004c, + 0x0001004c, + 0x0001004d, + 0x0001004d, + 0x0001004e, + 0x0001004e, + 0x0001004f, + 0x0001004f, + 0x00010050, + 0x00010050, + 0x00010051, + 0x00010051, + 0x00010052, + 0x00010052, + }, + { + 0x00010053, + 0x00010053, + 0x00010054, + 0x00010054, + 0x00010055, + 0x00010055, + 0x00010056, + 0x00010056, + 0x00010057, + 0x00010057, + 0x00010058, + 0x00010058, + 0x00010059, + 0x00010059, + 0x0001005a, + 0x0001005a, + }, + { + 0x0001005b, + 0x0001005b, + 0x0001005c, + 0x0001005c, + 0x0001005d, + 0x0001005d, + 0x0001005e, + 0x0001005e, + 0x0001005f, + 0x0001005f, + 0x00010060, + 0x00010060, + 0x00010061, + 0x00010061, + 0x00010062, + 0x00010062, + }, + { + 0x00010063, + 0x00010063, + 0x00010064, + 0x00010064, + 0x00010065, + 0x00010065, + 0x00010066, + 0x00010066, + 0x00010067, + 0x00010067, + 0x00010068, + 0x00010068, + 0x00010069, + 0x00010069, + 0x0001006a, + 0x0001006a, + }, + { + 0x0001006b, + 0x0001006b, + 0x0001006c, + 0x0001006c, + 0x0001006d, + 0x0001006d, + 0x0001006e, + 0x0001006e, + 0x0001006f, + 0x0001006f, + 0x00010070, + 0x00010070, + 0x00010071, + 0x00010071, + 0x00010072, + 0x00010072, + }, + { + 0x00010073, + 0x00010073, + 0x00010074, + 0x00010074, + 0x00010075, + 0x00010075, + 0x00010076, + 0x00010076, + 0x00010077, + 0x00010077, + 0x00010078, + 0x00010078, + 0x00010079, + 0x00010079, + 0x0001007a, + 0x0001007a, + }, + { + 0x0001007b, + 0x0001007b, + 0x0001007c, + 0x0001007c, + 0x0001007d, + 0x0001007d, + 0x0001007e, + 0x0001007e, + 0x0001007f, + 0x0001007f, + 0x00010080, + 0x00010080, + 0x00010081, + 0x00010081, + 0x00010082, + 0x00010082, + }, + { + 0x00010083, + 0x00010083, + 0x00010084, + 0x00010084, + 0x00010085, + 0x00010085, + 0x00010086, + 0x00010086, + 0x00010087, + 0x00010087, + 0x00010088, + 0x00010088, + 0x00010089, + 0x00010089, + 0x0001008a, + 0x0001008a, + }, + { + 0x0001008b, + 0x0001008b, + 0x0001008c, + 0x0001008c, + 0x0001008d, + 0x0001008d, + 0x0001008e, + 0x0001008e, + 0x0001008f, + 0x0001008f, + 0x00010090, + 0x00010090, + 0x00010091, + 0x00010091, + 0x00010092, + 0x00010092, + }, + { + 0x00010093, + 0x00010093, + 0x00010094, + 0x00010094, + 0x00010095, + 0x00010095, + 0x00010096, + 0x00010096, + 0x00010097, + 0x00010097, + 0x00010098, + 0x00010098, + 0x00010099, + 0x00010099, + 0x0001009a, + 0x0001009a, + }, + { + 0x0001009b, + 0x0001009b, + 0x0001009c, + 0x0001009c, + 0x0001009d, + 0x0001009d, + 0x0001009e, + 0x0001009e, + 0x0001009f, + 0x0001009f, + 0x000100a0, + 0x000100a0, + 0x000100a1, + 0x000100a1, + 0x000100a2, + 0x000100a2, + }, }; #endif @@ -2630,70 +26348,784 @@ const uint32_t c_aauiCQMFHuffEnc43[196][2] = #else const uint16_t c_aauiCQMFHuffEnc43[196][2] = #endif -{ - {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0001}, {0x0009, 0x0002}, {0x000c, 0x0003}, {0x0010, 0x0017}, {0x0013, 0x0000}, {0x0013, 0x0001}, - {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0003, 0x0002}, {0x0003, 0x0003}, - {0x0005, 0x0001}, {0x0009, 0x0003}, {0x000c, 0x0004}, {0x0010, 0x0018}, {0x0012, 0x0050}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, - {0x0013, 0x000b}, {0x0013, 0x000c}, {0x0013, 0x000d}, {0x0013, 0x000e}, {0x0005, 0x0002}, {0x0005, 0x0003}, {0x0008, 0x0003}, {0x000a, 0x0002}, - {0x000d, 0x0004}, {0x0011, 0x002a}, {0x0013, 0x000f}, {0x0013, 0x0010}, {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0013, 0x0014}, - {0x0013, 0x0015}, {0x0013, 0x0016}, {0x0009, 0x0004}, {0x0009, 0x0005}, {0x000a, 0x0003}, {0x000c, 0x0005}, {0x000f, 0x000d}, {0x0012, 0x0051}, - {0x0013, 0x0017}, {0x0013, 0x0018}, {0x0013, 0x0019}, {0x0013, 0x001a}, {0x0013, 0x001b}, {0x0013, 0x001c}, {0x0013, 0x001d}, {0x0013, 0x001e}, - {0x000c, 0x0006}, {0x000c, 0x0007}, {0x000d, 0x0005}, {0x000f, 0x000e}, {0x0011, 0x002b}, {0x0013, 0x001f}, {0x0013, 0x0020}, {0x0013, 0x0021}, - {0x0013, 0x0022}, {0x0013, 0x0023}, {0x0013, 0x0024}, {0x0013, 0x0025}, {0x0013, 0x0026}, {0x0013, 0x0027}, {0x0011, 0x002c}, {0x000f, 0x000f}, - {0x0010, 0x0019}, {0x0012, 0x0052}, {0x0012, 0x0053}, {0x0013, 0x0028}, {0x0013, 0x0029}, {0x0013, 0x002a}, {0x0013, 0x002b}, {0x0013, 0x002c}, - {0x0013, 0x002d}, {0x0013, 0x002e}, {0x0013, 0x002f}, {0x0013, 0x0030}, {0x0013, 0x0031}, {0x0011, 0x002d}, {0x0013, 0x0032}, {0x0013, 0x0033}, - {0x0013, 0x0034}, {0x0013, 0x0035}, {0x0013, 0x0036}, {0x0013, 0x0037}, {0x0013, 0x0038}, {0x0013, 0x0039}, {0x0013, 0x003a}, {0x0013, 0x003b}, - {0x0013, 0x003c}, {0x0013, 0x003d}, {0x0013, 0x003e}, {0x0013, 0x003f}, {0x0013, 0x0040}, {0x0013, 0x0041}, {0x0013, 0x0042}, {0x0013, 0x0043}, - {0x0013, 0x0044}, {0x0013, 0x0045}, {0x0013, 0x0046}, {0x0013, 0x0047}, {0x0013, 0x0048}, {0x0013, 0x0049}, {0x0013, 0x004a}, {0x0013, 0x004b}, - {0x0013, 0x004c}, {0x0013, 0x004d}, {0x0013, 0x004e}, {0x0013, 0x004f}, {0x0013, 0x0050}, {0x0013, 0x0051}, {0x0013, 0x0052}, {0x0013, 0x0053}, - {0x0013, 0x0054}, {0x0013, 0x0055}, {0x0013, 0x0056}, {0x0013, 0x0057}, {0x0013, 0x0058}, {0x0013, 0x0059}, {0x0013, 0x005a}, {0x0013, 0x005b}, - {0x0013, 0x005c}, {0x0013, 0x005d}, {0x0013, 0x005e}, {0x0013, 0x005f}, {0x0013, 0x0060}, {0x0013, 0x0061}, {0x0013, 0x0062}, {0x0013, 0x0063}, - {0x0013, 0x0064}, {0x0013, 0x0065}, {0x0013, 0x0066}, {0x0013, 0x0067}, {0x0013, 0x0068}, {0x0013, 0x0069}, {0x0013, 0x006a}, {0x0013, 0x006b}, - {0x0013, 0x006c}, {0x0013, 0x006d}, {0x0013, 0x006e}, {0x0013, 0x006f}, {0x0013, 0x0070}, {0x0013, 0x0071}, {0x0013, 0x0072}, {0x0013, 0x0073}, - {0x0013, 0x0074}, {0x0013, 0x0075}, {0x0013, 0x0076}, {0x0013, 0x0077}, {0x0013, 0x0078}, {0x0013, 0x0079}, {0x0013, 0x007a}, {0x0013, 0x007b}, - {0x0013, 0x007c}, {0x0013, 0x007d}, {0x0013, 0x007e}, {0x0013, 0x007f}, {0x0013, 0x0080}, {0x0013, 0x0081}, {0x0013, 0x0082}, {0x0013, 0x0083}, - {0x0013, 0x0084}, {0x0013, 0x0085}, {0x0013, 0x0086}, {0x0013, 0x0087}, {0x0013, 0x0088}, {0x0013, 0x0089}, {0x0013, 0x008a}, {0x0013, 0x008b}, - {0x0013, 0x008c}, {0x0013, 0x008d}, {0x0013, 0x008e}, {0x0013, 0x008f}, {0x0013, 0x0090}, {0x0013, 0x0091}, {0x0013, 0x0092}, {0x0013, 0x0093}, - {0x0013, 0x0094}, {0x0013, 0x0095}, {0x0013, 0x0096}, {0x0013, 0x0097}, {0x0013, 0x0098}, {0x0013, 0x0099}, {0x0013, 0x009a}, {0x0013, 0x009b}, - {0x0013, 0x009c}, {0x0013, 0x009d}, {0x0013, 0x009e}, {0x0013, 0x009f}, + { + { 0x0001, 0x0001 }, + { 0x0003, 0x0001 }, + { 0x0006, 0x0001 }, + { 0x0009, 0x0002 }, + { 0x000c, 0x0003 }, + { 0x0010, 0x0017 }, + { 0x0013, 0x0000 }, + { 0x0013, 0x0001 }, + { 0x0013, 0x0002 }, + { 0x0013, 0x0003 }, + { 0x0013, 0x0004 }, + { 0x0013, 0x0005 }, + { 0x0013, 0x0006 }, + { 0x0013, 0x0007 }, + { 0x0003, 0x0002 }, + { 0x0003, 0x0003 }, + { 0x0005, 0x0001 }, + { 0x0009, 0x0003 }, + { 0x000c, 0x0004 }, + { 0x0010, 0x0018 }, + { 0x0012, 0x0050 }, + { 0x0013, 0x0008 }, + { 0x0013, 0x0009 }, + { 0x0013, 0x000a }, + { 0x0013, 0x000b }, + { 0x0013, 0x000c }, + { 0x0013, 0x000d }, + { 0x0013, 0x000e }, + { 0x0005, 0x0002 }, + { 0x0005, 0x0003 }, + { 0x0008, 0x0003 }, + { 0x000a, 0x0002 }, + { 0x000d, 0x0004 }, + { 0x0011, 0x002a }, + { 0x0013, 0x000f }, + { 0x0013, 0x0010 }, + { 0x0013, 0x0011 }, + { 0x0013, 0x0012 }, + { 0x0013, 0x0013 }, + { 0x0013, 0x0014 }, + { 0x0013, 0x0015 }, + { 0x0013, 0x0016 }, + { 0x0009, 0x0004 }, + { 0x0009, 0x0005 }, + { 0x000a, 0x0003 }, + { 0x000c, 0x0005 }, + { 0x000f, 0x000d }, + { 0x0012, 0x0051 }, + { 0x0013, 0x0017 }, + { 0x0013, 0x0018 }, + { 0x0013, 0x0019 }, + { 0x0013, 0x001a }, + { 0x0013, 0x001b }, + { 0x0013, 0x001c }, + { 0x0013, 0x001d }, + { 0x0013, 0x001e }, + { 0x000c, 0x0006 }, + { 0x000c, 0x0007 }, + { 0x000d, 0x0005 }, + { 0x000f, 0x000e }, + { 0x0011, 0x002b }, + { 0x0013, 0x001f }, + { 0x0013, 0x0020 }, + { 0x0013, 0x0021 }, + { 0x0013, 0x0022 }, + { 0x0013, 0x0023 }, + { 0x0013, 0x0024 }, + { 0x0013, 0x0025 }, + { 0x0013, 0x0026 }, + { 0x0013, 0x0027 }, + { 0x0011, 0x002c }, + { 0x000f, 0x000f }, + { 0x0010, 0x0019 }, + { 0x0012, 0x0052 }, + { 0x0012, 0x0053 }, + { 0x0013, 0x0028 }, + { 0x0013, 0x0029 }, + { 0x0013, 0x002a }, + { 0x0013, 0x002b }, + { 0x0013, 0x002c }, + { 0x0013, 0x002d }, + { 0x0013, 0x002e }, + { 0x0013, 0x002f }, + { 0x0013, 0x0030 }, + { 0x0013, 0x0031 }, + { 0x0011, 0x002d }, + { 0x0013, 0x0032 }, + { 0x0013, 0x0033 }, + { 0x0013, 0x0034 }, + { 0x0013, 0x0035 }, + { 0x0013, 0x0036 }, + { 0x0013, 0x0037 }, + { 0x0013, 0x0038 }, + { 0x0013, 0x0039 }, + { 0x0013, 0x003a }, + { 0x0013, 0x003b }, + { 0x0013, 0x003c }, + { 0x0013, 0x003d }, + { 0x0013, 0x003e }, + { 0x0013, 0x003f }, + { 0x0013, 0x0040 }, + { 0x0013, 0x0041 }, + { 0x0013, 0x0042 }, + { 0x0013, 0x0043 }, + { 0x0013, 0x0044 }, + { 0x0013, 0x0045 }, + { 0x0013, 0x0046 }, + { 0x0013, 0x0047 }, + { 0x0013, 0x0048 }, + { 0x0013, 0x0049 }, + { 0x0013, 0x004a }, + { 0x0013, 0x004b }, + { 0x0013, 0x004c }, + { 0x0013, 0x004d }, + { 0x0013, 0x004e }, + { 0x0013, 0x004f }, + { 0x0013, 0x0050 }, + { 0x0013, 0x0051 }, + { 0x0013, 0x0052 }, + { 0x0013, 0x0053 }, + { 0x0013, 0x0054 }, + { 0x0013, 0x0055 }, + { 0x0013, 0x0056 }, + { 0x0013, 0x0057 }, + { 0x0013, 0x0058 }, + { 0x0013, 0x0059 }, + { 0x0013, 0x005a }, + { 0x0013, 0x005b }, + { 0x0013, 0x005c }, + { 0x0013, 0x005d }, + { 0x0013, 0x005e }, + { 0x0013, 0x005f }, + { 0x0013, 0x0060 }, + { 0x0013, 0x0061 }, + { 0x0013, 0x0062 }, + { 0x0013, 0x0063 }, + { 0x0013, 0x0064 }, + { 0x0013, 0x0065 }, + { 0x0013, 0x0066 }, + { 0x0013, 0x0067 }, + { 0x0013, 0x0068 }, + { 0x0013, 0x0069 }, + { 0x0013, 0x006a }, + { 0x0013, 0x006b }, + { 0x0013, 0x006c }, + { 0x0013, 0x006d }, + { 0x0013, 0x006e }, + { 0x0013, 0x006f }, + { 0x0013, 0x0070 }, + { 0x0013, 0x0071 }, + { 0x0013, 0x0072 }, + { 0x0013, 0x0073 }, + { 0x0013, 0x0074 }, + { 0x0013, 0x0075 }, + { 0x0013, 0x0076 }, + { 0x0013, 0x0077 }, + { 0x0013, 0x0078 }, + { 0x0013, 0x0079 }, + { 0x0013, 0x007a }, + { 0x0013, 0x007b }, + { 0x0013, 0x007c }, + { 0x0013, 0x007d }, + { 0x0013, 0x007e }, + { 0x0013, 0x007f }, + { 0x0013, 0x0080 }, + { 0x0013, 0x0081 }, + { 0x0013, 0x0082 }, + { 0x0013, 0x0083 }, + { 0x0013, 0x0084 }, + { 0x0013, 0x0085 }, + { 0x0013, 0x0086 }, + { 0x0013, 0x0087 }, + { 0x0013, 0x0088 }, + { 0x0013, 0x0089 }, + { 0x0013, 0x008a }, + { 0x0013, 0x008b }, + { 0x0013, 0x008c }, + { 0x0013, 0x008d }, + { 0x0013, 0x008e }, + { 0x0013, 0x008f }, + { 0x0013, 0x0090 }, + { 0x0013, 0x0091 }, + { 0x0013, 0x0092 }, + { 0x0013, 0x0093 }, + { 0x0013, 0x0094 }, + { 0x0013, 0x0095 }, + { 0x0013, 0x0096 }, + { 0x0013, 0x0097 }, + { 0x0013, 0x0098 }, + { 0x0013, 0x0099 }, + { 0x0013, 0x009a }, + { 0x0013, 0x009b }, + { 0x0013, 0x009c }, + { 0x0013, 0x009d }, + { 0x0013, 0x009e }, + { 0x0013, 0x009f }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec43[32][16] = -{ - {0x0001ffff, 0x0002ffff, 0x00010001, 0x00010001, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x0005ffff, 0x0003ffff, 0x0004ffff, 0x0000001e, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, }, - {0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, }, - {0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030003, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, 0x00030011, }, - {0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, }, - {0x000bffff, 0x0007ffff, 0x0006ffff, 0x00000004, 0x00000012, 0x0000002d, 0x00000038, 0x00000039, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, }, - {0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, }, - {0x001cffff, 0x001dffff, 0x001effff, 0x001fffff, 0x000affff, 0x0008ffff, 0x0009ffff, 0x00000005, 0x00000013, 0x00000048, 0x0001002e, 0x0001002e, 0x0001003b, 0x0001003b, 0x00010047, 0x00010047, }, - {0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, }, - {0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, }, - {0x00020014, 0x00020014, 0x00020014, 0x00020014, 0x0002002f, 0x0002002f, 0x0002002f, 0x0002002f, 0x00020049, 0x00020049, 0x00020049, 0x00020049, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, }, - {0x000dffff, 0x000effff, 0x000cffff, 0x000fffff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x0019ffff, 0x001affff, 0x001bffff, }, - {0x00010023, 0x00010023, 0x00010024, 0x00010024, 0x00010025, 0x00010025, 0x00010026, 0x00010026, 0x00010027, 0x00010027, 0x00010028, 0x00010028, 0x00010029, 0x00010029, 0x00010030, 0x00010030, }, - {0x00010006, 0x00010006, 0x00010007, 0x00010007, 0x00010008, 0x00010008, 0x00010009, 0x00010009, 0x0001000a, 0x0001000a, 0x0001000b, 0x0001000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, }, - {0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x0001001a, 0x0001001a, 0x0001001b, 0x0001001b, 0x00010022, 0x00010022, }, - {0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x00010036, 0x00010036, 0x00010037, 0x00010037, 0x0001003d, 0x0001003d, }, - {0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x00010040, 0x00010040, 0x00010041, 0x00010041, 0x00010042, 0x00010042, 0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, }, - {0x0001004b, 0x0001004b, 0x0001004c, 0x0001004c, 0x0001004d, 0x0001004d, 0x0001004e, 0x0001004e, 0x0001004f, 0x0001004f, 0x00010050, 0x00010050, 0x00010051, 0x00010051, 0x00010052, 0x00010052, }, - {0x00010053, 0x00010053, 0x00010054, 0x00010054, 0x00010056, 0x00010056, 0x00010057, 0x00010057, 0x00010058, 0x00010058, 0x00010059, 0x00010059, 0x0001005a, 0x0001005a, 0x0001005b, 0x0001005b, }, - {0x0001005c, 0x0001005c, 0x0001005d, 0x0001005d, 0x0001005e, 0x0001005e, 0x0001005f, 0x0001005f, 0x00010060, 0x00010060, 0x00010061, 0x00010061, 0x00010062, 0x00010062, 0x00010063, 0x00010063, }, - {0x00010064, 0x00010064, 0x00010065, 0x00010065, 0x00010066, 0x00010066, 0x00010067, 0x00010067, 0x00010068, 0x00010068, 0x00010069, 0x00010069, 0x0001006a, 0x0001006a, 0x0001006b, 0x0001006b, }, - {0x0001006c, 0x0001006c, 0x0001006d, 0x0001006d, 0x0001006e, 0x0001006e, 0x0001006f, 0x0001006f, 0x00010070, 0x00010070, 0x00010071, 0x00010071, 0x00010072, 0x00010072, 0x00010073, 0x00010073, }, - {0x00010074, 0x00010074, 0x00010075, 0x00010075, 0x00010076, 0x00010076, 0x00010077, 0x00010077, 0x00010078, 0x00010078, 0x00010079, 0x00010079, 0x0001007a, 0x0001007a, 0x0001007b, 0x0001007b, }, - {0x0001007c, 0x0001007c, 0x0001007d, 0x0001007d, 0x0001007e, 0x0001007e, 0x0001007f, 0x0001007f, 0x00010080, 0x00010080, 0x00010081, 0x00010081, 0x00010082, 0x00010082, 0x00010083, 0x00010083, }, - {0x00010084, 0x00010084, 0x00010085, 0x00010085, 0x00010086, 0x00010086, 0x00010087, 0x00010087, 0x00010088, 0x00010088, 0x00010089, 0x00010089, 0x0001008a, 0x0001008a, 0x0001008b, 0x0001008b, }, - {0x0001008c, 0x0001008c, 0x0001008d, 0x0001008d, 0x0001008e, 0x0001008e, 0x0001008f, 0x0001008f, 0x00010090, 0x00010090, 0x00010091, 0x00010091, 0x00010092, 0x00010092, 0x00010093, 0x00010093, }, - {0x00010094, 0x00010094, 0x00010095, 0x00010095, 0x00010096, 0x00010096, 0x00010097, 0x00010097, 0x00010098, 0x00010098, 0x00010099, 0x00010099, 0x0001009a, 0x0001009a, 0x0001009b, 0x0001009b, }, - {0x0001009c, 0x0001009c, 0x0001009d, 0x0001009d, 0x0001009e, 0x0001009e, 0x0001009f, 0x0001009f, 0x000100a0, 0x000100a0, 0x000100a1, 0x000100a1, 0x000100a2, 0x000100a2, 0x000100a3, 0x000100a3, }, - {0x000100a4, 0x000100a4, 0x000100a5, 0x000100a5, 0x000100a6, 0x000100a6, 0x000100a7, 0x000100a7, 0x000100a8, 0x000100a8, 0x000100a9, 0x000100a9, 0x000100aa, 0x000100aa, 0x000100ab, 0x000100ab, }, - {0x000100ac, 0x000100ac, 0x000100ad, 0x000100ad, 0x000100ae, 0x000100ae, 0x000100af, 0x000100af, 0x000100b0, 0x000100b0, 0x000100b1, 0x000100b1, 0x000100b2, 0x000100b2, 0x000100b3, 0x000100b3, }, - {0x000100b4, 0x000100b4, 0x000100b5, 0x000100b5, 0x000100b6, 0x000100b6, 0x000100b7, 0x000100b7, 0x000100b8, 0x000100b8, 0x000100b9, 0x000100b9, 0x000100ba, 0x000100ba, 0x000100bb, 0x000100bb, }, - {0x000100bc, 0x000100bc, 0x000100bd, 0x000100bd, 0x000100be, 0x000100be, 0x000100bf, 0x000100bf, 0x000100c0, 0x000100c0, 0x000100c1, 0x000100c1, 0x000100c2, 0x000100c2, 0x000100c3, 0x000100c3, }, +const uint32_t c_aauiCQMFHuffDec43[32][16] = { + { + 0x0001ffff, + 0x0002ffff, + 0x00010001, + 0x00010001, + 0x0001000e, + 0x0001000e, + 0x0001000f, + 0x0001000f, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + }, + { + 0x0005ffff, + 0x0003ffff, + 0x0004ffff, + 0x0000001e, + 0x00020002, + 0x00020002, + 0x00020002, + 0x00020002, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + }, + { + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + }, + { + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030003, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + 0x00030011, + }, + { + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + }, + { + 0x000bffff, + 0x0007ffff, + 0x0006ffff, + 0x00000004, + 0x00000012, + 0x0000002d, + 0x00000038, + 0x00000039, + 0x0002001f, + 0x0002001f, + 0x0002001f, + 0x0002001f, + 0x0002002c, + 0x0002002c, + 0x0002002c, + 0x0002002c, + }, + { + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + }, + { + 0x001cffff, + 0x001dffff, + 0x001effff, + 0x001fffff, + 0x000affff, + 0x0008ffff, + 0x0009ffff, + 0x00000005, + 0x00000013, + 0x00000048, + 0x0001002e, + 0x0001002e, + 0x0001003b, + 0x0001003b, + 0x00010047, + 0x00010047, + }, + { + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + }, + { + 0x00030046, + 0x00030046, + 0x00030046, + 0x00030046, + 0x00030046, + 0x00030046, + 0x00030046, + 0x00030046, + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030055, + }, + { + 0x00020014, + 0x00020014, + 0x00020014, + 0x00020014, + 0x0002002f, + 0x0002002f, + 0x0002002f, + 0x0002002f, + 0x00020049, + 0x00020049, + 0x00020049, + 0x00020049, + 0x0002004a, + 0x0002004a, + 0x0002004a, + 0x0002004a, + }, + { + 0x000dffff, + 0x000effff, + 0x000cffff, + 0x000fffff, + 0x0010ffff, + 0x0011ffff, + 0x0012ffff, + 0x0013ffff, + 0x0014ffff, + 0x0015ffff, + 0x0016ffff, + 0x0017ffff, + 0x0018ffff, + 0x0019ffff, + 0x001affff, + 0x001bffff, + }, + { + 0x00010023, + 0x00010023, + 0x00010024, + 0x00010024, + 0x00010025, + 0x00010025, + 0x00010026, + 0x00010026, + 0x00010027, + 0x00010027, + 0x00010028, + 0x00010028, + 0x00010029, + 0x00010029, + 0x00010030, + 0x00010030, + }, + { + 0x00010006, + 0x00010006, + 0x00010007, + 0x00010007, + 0x00010008, + 0x00010008, + 0x00010009, + 0x00010009, + 0x0001000a, + 0x0001000a, + 0x0001000b, + 0x0001000b, + 0x0001000c, + 0x0001000c, + 0x0001000d, + 0x0001000d, + }, + { + 0x00010015, + 0x00010015, + 0x00010016, + 0x00010016, + 0x00010017, + 0x00010017, + 0x00010018, + 0x00010018, + 0x00010019, + 0x00010019, + 0x0001001a, + 0x0001001a, + 0x0001001b, + 0x0001001b, + 0x00010022, + 0x00010022, + }, + { + 0x00010031, + 0x00010031, + 0x00010032, + 0x00010032, + 0x00010033, + 0x00010033, + 0x00010034, + 0x00010034, + 0x00010035, + 0x00010035, + 0x00010036, + 0x00010036, + 0x00010037, + 0x00010037, + 0x0001003d, + 0x0001003d, + }, + { + 0x0001003e, + 0x0001003e, + 0x0001003f, + 0x0001003f, + 0x00010040, + 0x00010040, + 0x00010041, + 0x00010041, + 0x00010042, + 0x00010042, + 0x00010043, + 0x00010043, + 0x00010044, + 0x00010044, + 0x00010045, + 0x00010045, + }, + { + 0x0001004b, + 0x0001004b, + 0x0001004c, + 0x0001004c, + 0x0001004d, + 0x0001004d, + 0x0001004e, + 0x0001004e, + 0x0001004f, + 0x0001004f, + 0x00010050, + 0x00010050, + 0x00010051, + 0x00010051, + 0x00010052, + 0x00010052, + }, + { + 0x00010053, + 0x00010053, + 0x00010054, + 0x00010054, + 0x00010056, + 0x00010056, + 0x00010057, + 0x00010057, + 0x00010058, + 0x00010058, + 0x00010059, + 0x00010059, + 0x0001005a, + 0x0001005a, + 0x0001005b, + 0x0001005b, + }, + { + 0x0001005c, + 0x0001005c, + 0x0001005d, + 0x0001005d, + 0x0001005e, + 0x0001005e, + 0x0001005f, + 0x0001005f, + 0x00010060, + 0x00010060, + 0x00010061, + 0x00010061, + 0x00010062, + 0x00010062, + 0x00010063, + 0x00010063, + }, + { + 0x00010064, + 0x00010064, + 0x00010065, + 0x00010065, + 0x00010066, + 0x00010066, + 0x00010067, + 0x00010067, + 0x00010068, + 0x00010068, + 0x00010069, + 0x00010069, + 0x0001006a, + 0x0001006a, + 0x0001006b, + 0x0001006b, + }, + { + 0x0001006c, + 0x0001006c, + 0x0001006d, + 0x0001006d, + 0x0001006e, + 0x0001006e, + 0x0001006f, + 0x0001006f, + 0x00010070, + 0x00010070, + 0x00010071, + 0x00010071, + 0x00010072, + 0x00010072, + 0x00010073, + 0x00010073, + }, + { + 0x00010074, + 0x00010074, + 0x00010075, + 0x00010075, + 0x00010076, + 0x00010076, + 0x00010077, + 0x00010077, + 0x00010078, + 0x00010078, + 0x00010079, + 0x00010079, + 0x0001007a, + 0x0001007a, + 0x0001007b, + 0x0001007b, + }, + { + 0x0001007c, + 0x0001007c, + 0x0001007d, + 0x0001007d, + 0x0001007e, + 0x0001007e, + 0x0001007f, + 0x0001007f, + 0x00010080, + 0x00010080, + 0x00010081, + 0x00010081, + 0x00010082, + 0x00010082, + 0x00010083, + 0x00010083, + }, + { + 0x00010084, + 0x00010084, + 0x00010085, + 0x00010085, + 0x00010086, + 0x00010086, + 0x00010087, + 0x00010087, + 0x00010088, + 0x00010088, + 0x00010089, + 0x00010089, + 0x0001008a, + 0x0001008a, + 0x0001008b, + 0x0001008b, + }, + { + 0x0001008c, + 0x0001008c, + 0x0001008d, + 0x0001008d, + 0x0001008e, + 0x0001008e, + 0x0001008f, + 0x0001008f, + 0x00010090, + 0x00010090, + 0x00010091, + 0x00010091, + 0x00010092, + 0x00010092, + 0x00010093, + 0x00010093, + }, + { + 0x00010094, + 0x00010094, + 0x00010095, + 0x00010095, + 0x00010096, + 0x00010096, + 0x00010097, + 0x00010097, + 0x00010098, + 0x00010098, + 0x00010099, + 0x00010099, + 0x0001009a, + 0x0001009a, + 0x0001009b, + 0x0001009b, + }, + { + 0x0001009c, + 0x0001009c, + 0x0001009d, + 0x0001009d, + 0x0001009e, + 0x0001009e, + 0x0001009f, + 0x0001009f, + 0x000100a0, + 0x000100a0, + 0x000100a1, + 0x000100a1, + 0x000100a2, + 0x000100a2, + 0x000100a3, + 0x000100a3, + }, + { + 0x000100a4, + 0x000100a4, + 0x000100a5, + 0x000100a5, + 0x000100a6, + 0x000100a6, + 0x000100a7, + 0x000100a7, + 0x000100a8, + 0x000100a8, + 0x000100a9, + 0x000100a9, + 0x000100aa, + 0x000100aa, + 0x000100ab, + 0x000100ab, + }, + { + 0x000100ac, + 0x000100ac, + 0x000100ad, + 0x000100ad, + 0x000100ae, + 0x000100ae, + 0x000100af, + 0x000100af, + 0x000100b0, + 0x000100b0, + 0x000100b1, + 0x000100b1, + 0x000100b2, + 0x000100b2, + 0x000100b3, + 0x000100b3, + }, + { + 0x000100b4, + 0x000100b4, + 0x000100b5, + 0x000100b5, + 0x000100b6, + 0x000100b6, + 0x000100b7, + 0x000100b7, + 0x000100b8, + 0x000100b8, + 0x000100b9, + 0x000100b9, + 0x000100ba, + 0x000100ba, + 0x000100bb, + 0x000100bb, + }, + { + 0x000100bc, + 0x000100bc, + 0x000100bd, + 0x000100bd, + 0x000100be, + 0x000100be, + 0x000100bf, + 0x000100bf, + 0x000100c0, + 0x000100c0, + 0x000100c1, + 0x000100c1, + 0x000100c2, + 0x000100c2, + 0x000100c3, + 0x000100c3, + }, }; #endif @@ -2702,77 +27134,787 @@ const uint32_t c_aauiCQMFHuffEnc44[289][2] = #else const uint16_t c_aauiCQMFHuffEnc44[289][2] = #endif -{ - {0x0001, 0x0001}, {0x0003, 0x0001}, {0x0006, 0x0002}, {0x0008, 0x0002}, {0x000b, 0x0002}, {0x000f, 0x000a}, {0x0011, 0x0022}, {0x0014, 0x0000}, - {0x0014, 0x0001}, {0x0014, 0x0002}, {0x0014, 0x0003}, {0x0014, 0x0004}, {0x0014, 0x0005}, {0x0014, 0x0006}, {0x0014, 0x0007}, {0x0014, 0x0008}, - {0x0014, 0x0009}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0005, 0x0002}, {0x0008, 0x0003}, {0x000b, 0x0003}, {0x000e, 0x0007}, {0x0012, 0x003f}, - {0x0014, 0x000a}, {0x0014, 0x000b}, {0x0014, 0x000c}, {0x0014, 0x000d}, {0x0014, 0x000e}, {0x0014, 0x000f}, {0x0014, 0x0010}, {0x0014, 0x0011}, - {0x0014, 0x0012}, {0x0014, 0x0013}, {0x0006, 0x0003}, {0x0005, 0x0003}, {0x0007, 0x0003}, {0x0009, 0x0002}, {0x000c, 0x0003}, {0x000f, 0x000b}, - {0x0012, 0x0040}, {0x0014, 0x0014}, {0x0014, 0x0015}, {0x0014, 0x0016}, {0x0014, 0x0017}, {0x0014, 0x0018}, {0x0014, 0x0019}, {0x0014, 0x001a}, - {0x0014, 0x001b}, {0x0014, 0x001c}, {0x0014, 0x001d}, {0x0008, 0x0004}, {0x0008, 0x0005}, {0x0009, 0x0003}, {0x000b, 0x0004}, {0x000d, 0x0005}, - {0x0010, 0x0013}, {0x0014, 0x001e}, {0x0014, 0x001f}, {0x0014, 0x0020}, {0x0014, 0x0021}, {0x0014, 0x0022}, {0x0014, 0x0023}, {0x0014, 0x0024}, - {0x0014, 0x0025}, {0x0014, 0x0026}, {0x0014, 0x0027}, {0x0014, 0x0028}, {0x000b, 0x0005}, {0x000b, 0x0006}, {0x000b, 0x0007}, {0x000e, 0x0008}, - {0x0011, 0x0023}, {0x0012, 0x0041}, {0x0014, 0x0029}, {0x0014, 0x002a}, {0x0013, 0x007b}, {0x0014, 0x002b}, {0x0014, 0x002c}, {0x0014, 0x002d}, - {0x0014, 0x002e}, {0x0014, 0x002f}, {0x0014, 0x0030}, {0x0014, 0x0031}, {0x0014, 0x0032}, {0x000f, 0x000c}, {0x000e, 0x0009}, {0x000f, 0x000d}, - {0x0011, 0x0024}, {0x0012, 0x0042}, {0x0014, 0x0033}, {0x0014, 0x0034}, {0x0014, 0x0035}, {0x0014, 0x0036}, {0x0014, 0x0037}, {0x0014, 0x0038}, - {0x0014, 0x0039}, {0x0014, 0x003a}, {0x0014, 0x003b}, {0x0014, 0x003c}, {0x0014, 0x003d}, {0x0014, 0x003e}, {0x0013, 0x007c}, {0x0011, 0x0025}, - {0x0012, 0x0043}, {0x0014, 0x003f}, {0x0014, 0x0040}, {0x0014, 0x0041}, {0x0014, 0x0042}, {0x0014, 0x0043}, {0x0014, 0x0044}, {0x0014, 0x0045}, - {0x0014, 0x0046}, {0x0014, 0x0047}, {0x0014, 0x0048}, {0x0014, 0x0049}, {0x0014, 0x004a}, {0x0014, 0x004b}, {0x0014, 0x004c}, {0x0014, 0x004d}, - {0x0014, 0x004e}, {0x0014, 0x004f}, {0x0014, 0x0050}, {0x0014, 0x0051}, {0x0014, 0x0052}, {0x0014, 0x0053}, {0x0014, 0x0054}, {0x0014, 0x0055}, - {0x0014, 0x0056}, {0x0014, 0x0057}, {0x0014, 0x0058}, {0x0014, 0x0059}, {0x0014, 0x005a}, {0x0014, 0x005b}, {0x0014, 0x005c}, {0x0014, 0x005d}, - {0x0014, 0x005e}, {0x0014, 0x005f}, {0x0014, 0x0060}, {0x0014, 0x0061}, {0x0014, 0x0062}, {0x0014, 0x0063}, {0x0014, 0x0064}, {0x0014, 0x0065}, - {0x0014, 0x0066}, {0x0014, 0x0067}, {0x0014, 0x0068}, {0x0014, 0x0069}, {0x0014, 0x006a}, {0x0014, 0x006b}, {0x0014, 0x006c}, {0x0014, 0x006d}, - {0x0014, 0x006e}, {0x0014, 0x006f}, {0x0014, 0x0070}, {0x0014, 0x0071}, {0x0014, 0x0072}, {0x0014, 0x0073}, {0x0014, 0x0074}, {0x0014, 0x0075}, - {0x0014, 0x0076}, {0x0014, 0x0077}, {0x0014, 0x0078}, {0x0014, 0x0079}, {0x0014, 0x007a}, {0x0014, 0x007b}, {0x0014, 0x007c}, {0x0014, 0x007d}, - {0x0014, 0x007e}, {0x0014, 0x007f}, {0x0014, 0x0080}, {0x0014, 0x0081}, {0x0014, 0x0082}, {0x0014, 0x0083}, {0x0014, 0x0084}, {0x0014, 0x0085}, - {0x0014, 0x0086}, {0x0014, 0x0087}, {0x0014, 0x0088}, {0x0014, 0x0089}, {0x0014, 0x008a}, {0x0014, 0x008b}, {0x0014, 0x008c}, {0x0014, 0x008d}, - {0x0014, 0x008e}, {0x0014, 0x008f}, {0x0014, 0x0090}, {0x0014, 0x0091}, {0x0014, 0x0092}, {0x0014, 0x0093}, {0x0014, 0x0094}, {0x0014, 0x0095}, - {0x0014, 0x0096}, {0x0014, 0x0097}, {0x0014, 0x0098}, {0x0014, 0x0099}, {0x0014, 0x009a}, {0x0014, 0x009b}, {0x0014, 0x009c}, {0x0014, 0x009d}, - {0x0014, 0x009e}, {0x0014, 0x009f}, {0x0014, 0x00a0}, {0x0014, 0x00a1}, {0x0014, 0x00a2}, {0x0014, 0x00a3}, {0x0014, 0x00a4}, {0x0014, 0x00a5}, - {0x0014, 0x00a6}, {0x0014, 0x00a7}, {0x0014, 0x00a8}, {0x0014, 0x00a9}, {0x0014, 0x00aa}, {0x0014, 0x00ab}, {0x0014, 0x00ac}, {0x0014, 0x00ad}, - {0x0014, 0x00ae}, {0x0014, 0x00af}, {0x0014, 0x00b0}, {0x0014, 0x00b1}, {0x0014, 0x00b2}, {0x0014, 0x00b3}, {0x0014, 0x00b4}, {0x0014, 0x00b5}, - {0x0014, 0x00b6}, {0x0014, 0x00b7}, {0x0014, 0x00b8}, {0x0014, 0x00b9}, {0x0014, 0x00ba}, {0x0014, 0x00bb}, {0x0014, 0x00bc}, {0x0014, 0x00bd}, - {0x0014, 0x00be}, {0x0014, 0x00bf}, {0x0014, 0x00c0}, {0x0014, 0x00c1}, {0x0014, 0x00c2}, {0x0014, 0x00c3}, {0x0014, 0x00c4}, {0x0014, 0x00c5}, - {0x0014, 0x00c6}, {0x0014, 0x00c7}, {0x0014, 0x00c8}, {0x0014, 0x00c9}, {0x0014, 0x00ca}, {0x0014, 0x00cb}, {0x0014, 0x00cc}, {0x0014, 0x00cd}, - {0x0014, 0x00ce}, {0x0014, 0x00cf}, {0x0014, 0x00d0}, {0x0014, 0x00d1}, {0x0014, 0x00d2}, {0x0014, 0x00d3}, {0x0014, 0x00d4}, {0x0014, 0x00d5}, - {0x0014, 0x00d6}, {0x0014, 0x00d7}, {0x0014, 0x00d8}, {0x0014, 0x00d9}, {0x0014, 0x00da}, {0x0014, 0x00db}, {0x0014, 0x00dc}, {0x0014, 0x00dd}, - {0x0014, 0x00de}, {0x0014, 0x00df}, {0x0014, 0x00e0}, {0x0014, 0x00e1}, {0x0014, 0x00e2}, {0x0014, 0x00e3}, {0x0014, 0x00e4}, {0x0014, 0x00e5}, - {0x0014, 0x00e6}, {0x0014, 0x00e7}, {0x0014, 0x00e8}, {0x0014, 0x00e9}, {0x0014, 0x00ea}, {0x0014, 0x00eb}, {0x0014, 0x00ec}, {0x0014, 0x00ed}, - {0x0014, 0x00ee}, {0x0014, 0x00ef}, {0x0014, 0x00f0}, {0x0014, 0x00f1}, {0x0014, 0x00f2}, {0x0014, 0x00f3}, {0x0014, 0x00f4}, {0x0014, 0x00f5}, - {0x0013, 0x007d}, + { + { 0x0001, 0x0001 }, + { 0x0003, 0x0001 }, + { 0x0006, 0x0002 }, + { 0x0008, 0x0002 }, + { 0x000b, 0x0002 }, + { 0x000f, 0x000a }, + { 0x0011, 0x0022 }, + { 0x0014, 0x0000 }, + { 0x0014, 0x0001 }, + { 0x0014, 0x0002 }, + { 0x0014, 0x0003 }, + { 0x0014, 0x0004 }, + { 0x0014, 0x0005 }, + { 0x0014, 0x0006 }, + { 0x0014, 0x0007 }, + { 0x0014, 0x0008 }, + { 0x0014, 0x0009 }, + { 0x0003, 0x0002 }, + { 0x0003, 0x0003 }, + { 0x0005, 0x0002 }, + { 0x0008, 0x0003 }, + { 0x000b, 0x0003 }, + { 0x000e, 0x0007 }, + { 0x0012, 0x003f }, + { 0x0014, 0x000a }, + { 0x0014, 0x000b }, + { 0x0014, 0x000c }, + { 0x0014, 0x000d }, + { 0x0014, 0x000e }, + { 0x0014, 0x000f }, + { 0x0014, 0x0010 }, + { 0x0014, 0x0011 }, + { 0x0014, 0x0012 }, + { 0x0014, 0x0013 }, + { 0x0006, 0x0003 }, + { 0x0005, 0x0003 }, + { 0x0007, 0x0003 }, + { 0x0009, 0x0002 }, + { 0x000c, 0x0003 }, + { 0x000f, 0x000b }, + { 0x0012, 0x0040 }, + { 0x0014, 0x0014 }, + { 0x0014, 0x0015 }, + { 0x0014, 0x0016 }, + { 0x0014, 0x0017 }, + { 0x0014, 0x0018 }, + { 0x0014, 0x0019 }, + { 0x0014, 0x001a }, + { 0x0014, 0x001b }, + { 0x0014, 0x001c }, + { 0x0014, 0x001d }, + { 0x0008, 0x0004 }, + { 0x0008, 0x0005 }, + { 0x0009, 0x0003 }, + { 0x000b, 0x0004 }, + { 0x000d, 0x0005 }, + { 0x0010, 0x0013 }, + { 0x0014, 0x001e }, + { 0x0014, 0x001f }, + { 0x0014, 0x0020 }, + { 0x0014, 0x0021 }, + { 0x0014, 0x0022 }, + { 0x0014, 0x0023 }, + { 0x0014, 0x0024 }, + { 0x0014, 0x0025 }, + { 0x0014, 0x0026 }, + { 0x0014, 0x0027 }, + { 0x0014, 0x0028 }, + { 0x000b, 0x0005 }, + { 0x000b, 0x0006 }, + { 0x000b, 0x0007 }, + { 0x000e, 0x0008 }, + { 0x0011, 0x0023 }, + { 0x0012, 0x0041 }, + { 0x0014, 0x0029 }, + { 0x0014, 0x002a }, + { 0x0013, 0x007b }, + { 0x0014, 0x002b }, + { 0x0014, 0x002c }, + { 0x0014, 0x002d }, + { 0x0014, 0x002e }, + { 0x0014, 0x002f }, + { 0x0014, 0x0030 }, + { 0x0014, 0x0031 }, + { 0x0014, 0x0032 }, + { 0x000f, 0x000c }, + { 0x000e, 0x0009 }, + { 0x000f, 0x000d }, + { 0x0011, 0x0024 }, + { 0x0012, 0x0042 }, + { 0x0014, 0x0033 }, + { 0x0014, 0x0034 }, + { 0x0014, 0x0035 }, + { 0x0014, 0x0036 }, + { 0x0014, 0x0037 }, + { 0x0014, 0x0038 }, + { 0x0014, 0x0039 }, + { 0x0014, 0x003a }, + { 0x0014, 0x003b }, + { 0x0014, 0x003c }, + { 0x0014, 0x003d }, + { 0x0014, 0x003e }, + { 0x0013, 0x007c }, + { 0x0011, 0x0025 }, + { 0x0012, 0x0043 }, + { 0x0014, 0x003f }, + { 0x0014, 0x0040 }, + { 0x0014, 0x0041 }, + { 0x0014, 0x0042 }, + { 0x0014, 0x0043 }, + { 0x0014, 0x0044 }, + { 0x0014, 0x0045 }, + { 0x0014, 0x0046 }, + { 0x0014, 0x0047 }, + { 0x0014, 0x0048 }, + { 0x0014, 0x0049 }, + { 0x0014, 0x004a }, + { 0x0014, 0x004b }, + { 0x0014, 0x004c }, + { 0x0014, 0x004d }, + { 0x0014, 0x004e }, + { 0x0014, 0x004f }, + { 0x0014, 0x0050 }, + { 0x0014, 0x0051 }, + { 0x0014, 0x0052 }, + { 0x0014, 0x0053 }, + { 0x0014, 0x0054 }, + { 0x0014, 0x0055 }, + { 0x0014, 0x0056 }, + { 0x0014, 0x0057 }, + { 0x0014, 0x0058 }, + { 0x0014, 0x0059 }, + { 0x0014, 0x005a }, + { 0x0014, 0x005b }, + { 0x0014, 0x005c }, + { 0x0014, 0x005d }, + { 0x0014, 0x005e }, + { 0x0014, 0x005f }, + { 0x0014, 0x0060 }, + { 0x0014, 0x0061 }, + { 0x0014, 0x0062 }, + { 0x0014, 0x0063 }, + { 0x0014, 0x0064 }, + { 0x0014, 0x0065 }, + { 0x0014, 0x0066 }, + { 0x0014, 0x0067 }, + { 0x0014, 0x0068 }, + { 0x0014, 0x0069 }, + { 0x0014, 0x006a }, + { 0x0014, 0x006b }, + { 0x0014, 0x006c }, + { 0x0014, 0x006d }, + { 0x0014, 0x006e }, + { 0x0014, 0x006f }, + { 0x0014, 0x0070 }, + { 0x0014, 0x0071 }, + { 0x0014, 0x0072 }, + { 0x0014, 0x0073 }, + { 0x0014, 0x0074 }, + { 0x0014, 0x0075 }, + { 0x0014, 0x0076 }, + { 0x0014, 0x0077 }, + { 0x0014, 0x0078 }, + { 0x0014, 0x0079 }, + { 0x0014, 0x007a }, + { 0x0014, 0x007b }, + { 0x0014, 0x007c }, + { 0x0014, 0x007d }, + { 0x0014, 0x007e }, + { 0x0014, 0x007f }, + { 0x0014, 0x0080 }, + { 0x0014, 0x0081 }, + { 0x0014, 0x0082 }, + { 0x0014, 0x0083 }, + { 0x0014, 0x0084 }, + { 0x0014, 0x0085 }, + { 0x0014, 0x0086 }, + { 0x0014, 0x0087 }, + { 0x0014, 0x0088 }, + { 0x0014, 0x0089 }, + { 0x0014, 0x008a }, + { 0x0014, 0x008b }, + { 0x0014, 0x008c }, + { 0x0014, 0x008d }, + { 0x0014, 0x008e }, + { 0x0014, 0x008f }, + { 0x0014, 0x0090 }, + { 0x0014, 0x0091 }, + { 0x0014, 0x0092 }, + { 0x0014, 0x0093 }, + { 0x0014, 0x0094 }, + { 0x0014, 0x0095 }, + { 0x0014, 0x0096 }, + { 0x0014, 0x0097 }, + { 0x0014, 0x0098 }, + { 0x0014, 0x0099 }, + { 0x0014, 0x009a }, + { 0x0014, 0x009b }, + { 0x0014, 0x009c }, + { 0x0014, 0x009d }, + { 0x0014, 0x009e }, + { 0x0014, 0x009f }, + { 0x0014, 0x00a0 }, + { 0x0014, 0x00a1 }, + { 0x0014, 0x00a2 }, + { 0x0014, 0x00a3 }, + { 0x0014, 0x00a4 }, + { 0x0014, 0x00a5 }, + { 0x0014, 0x00a6 }, + { 0x0014, 0x00a7 }, + { 0x0014, 0x00a8 }, + { 0x0014, 0x00a9 }, + { 0x0014, 0x00aa }, + { 0x0014, 0x00ab }, + { 0x0014, 0x00ac }, + { 0x0014, 0x00ad }, + { 0x0014, 0x00ae }, + { 0x0014, 0x00af }, + { 0x0014, 0x00b0 }, + { 0x0014, 0x00b1 }, + { 0x0014, 0x00b2 }, + { 0x0014, 0x00b3 }, + { 0x0014, 0x00b4 }, + { 0x0014, 0x00b5 }, + { 0x0014, 0x00b6 }, + { 0x0014, 0x00b7 }, + { 0x0014, 0x00b8 }, + { 0x0014, 0x00b9 }, + { 0x0014, 0x00ba }, + { 0x0014, 0x00bb }, + { 0x0014, 0x00bc }, + { 0x0014, 0x00bd }, + { 0x0014, 0x00be }, + { 0x0014, 0x00bf }, + { 0x0014, 0x00c0 }, + { 0x0014, 0x00c1 }, + { 0x0014, 0x00c2 }, + { 0x0014, 0x00c3 }, + { 0x0014, 0x00c4 }, + { 0x0014, 0x00c5 }, + { 0x0014, 0x00c6 }, + { 0x0014, 0x00c7 }, + { 0x0014, 0x00c8 }, + { 0x0014, 0x00c9 }, + { 0x0014, 0x00ca }, + { 0x0014, 0x00cb }, + { 0x0014, 0x00cc }, + { 0x0014, 0x00cd }, + { 0x0014, 0x00ce }, + { 0x0014, 0x00cf }, + { 0x0014, 0x00d0 }, + { 0x0014, 0x00d1 }, + { 0x0014, 0x00d2 }, + { 0x0014, 0x00d3 }, + { 0x0014, 0x00d4 }, + { 0x0014, 0x00d5 }, + { 0x0014, 0x00d6 }, + { 0x0014, 0x00d7 }, + { 0x0014, 0x00d8 }, + { 0x0014, 0x00d9 }, + { 0x0014, 0x00da }, + { 0x0014, 0x00db }, + { 0x0014, 0x00dc }, + { 0x0014, 0x00dd }, + { 0x0014, 0x00de }, + { 0x0014, 0x00df }, + { 0x0014, 0x00e0 }, + { 0x0014, 0x00e1 }, + { 0x0014, 0x00e2 }, + { 0x0014, 0x00e3 }, + { 0x0014, 0x00e4 }, + { 0x0014, 0x00e5 }, + { 0x0014, 0x00e6 }, + { 0x0014, 0x00e7 }, + { 0x0014, 0x00e8 }, + { 0x0014, 0x00e9 }, + { 0x0014, 0x00ea }, + { 0x0014, 0x00eb }, + { 0x0014, 0x00ec }, + { 0x0014, 0x00ed }, + { 0x0014, 0x00ee }, + { 0x0014, 0x00ef }, + { 0x0014, 0x00f0 }, + { 0x0014, 0x00f1 }, + { 0x0014, 0x00f2 }, + { 0x0014, 0x00f3 }, + { 0x0014, 0x00f4 }, + { 0x0014, 0x00f5 }, + { 0x0013, 0x007d }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec44[27][16] = -{ - {0x0002ffff, 0x0001ffff, 0x00010001, 0x00010001, 0x00010011, 0x00010011, 0x00010012, 0x00010012, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, }, - {0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, }, - {0x0004ffff, 0x0003ffff, 0x00000003, 0x00000014, 0x00000033, 0x00000034, 0x00010024, 0x00010024, 0x00020002, 0x00020002, 0x00020002, 0x00020002, 0x00020022, 0x00020022, 0x00020022, 0x00020022, }, - {0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, }, - {0x000affff, 0x0006ffff, 0x0005ffff, 0x00000026, 0x00010004, 0x00010004, 0x00010015, 0x00010015, 0x00010036, 0x00010036, 0x00010044, 0x00010044, 0x00010045, 0x00010045, 0x00010046, 0x00010046, }, - {0x00020047, 0x00020047, 0x00020047, 0x00020047, 0x00020056, 0x00020056, 0x00020056, 0x00020056, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, }, - {0x0009ffff, 0x0007ffff, 0x0008ffff, 0x00000038, 0x00010005, 0x00010005, 0x00010027, 0x00010027, 0x00010055, 0x00010055, 0x00010057, 0x00010057, 0x00020016, 0x00020016, 0x00020016, 0x00020016, }, - {0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, }, - {0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, 0x00030067, }, - {0x00020028, 0x00020028, 0x00020028, 0x00020028, 0x00020049, 0x00020049, 0x00020049, 0x00020049, 0x00020059, 0x00020059, 0x00020059, 0x00020059, 0x00020068, 0x00020068, 0x00020068, 0x00020068, }, - {0x000dffff, 0x000cffff, 0x000effff, 0x000fffff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x0019ffff, 0x001affff, 0x000bffff, }, - {0x0000011a, 0x0000011b, 0x0000011c, 0x0000011d, 0x0000011e, 0x0000011f, 0x0001004c, 0x0001004c, 0x00010066, 0x00010066, 0x00010120, 0x00010120, 0x00020017, 0x00020017, 0x00020017, 0x00020017, }, - {0x0000001e, 0x0000001f, 0x00000020, 0x00000021, 0x00000029, 0x0000002a, 0x0000002b, 0x0000002c, 0x0000002d, 0x0000002e, 0x0000002f, 0x00000030, 0x00000031, 0x00000032, 0x00000039, 0x0000003a, }, - {0x00000007, 0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0000000c, 0x0000000d, 0x0000000e, 0x0000000f, 0x00000010, 0x00000018, 0x00000019, 0x0000001a, 0x0000001b, 0x0000001c, 0x0000001d, }, - {0x0000003b, 0x0000003c, 0x0000003d, 0x0000003e, 0x0000003f, 0x00000040, 0x00000041, 0x00000042, 0x00000043, 0x0000004a, 0x0000004b, 0x0000004d, 0x0000004e, 0x0000004f, 0x00000050, 0x00000051, }, - {0x00000052, 0x00000053, 0x00000054, 0x0000005a, 0x0000005b, 0x0000005c, 0x0000005d, 0x0000005e, 0x0000005f, 0x00000060, 0x00000061, 0x00000062, 0x00000063, 0x00000064, 0x00000065, 0x00000069, }, - {0x0000006a, 0x0000006b, 0x0000006c, 0x0000006d, 0x0000006e, 0x0000006f, 0x00000070, 0x00000071, 0x00000072, 0x00000073, 0x00000074, 0x00000075, 0x00000076, 0x00000077, 0x00000078, 0x00000079, }, - {0x0000007a, 0x0000007b, 0x0000007c, 0x0000007d, 0x0000007e, 0x0000007f, 0x00000080, 0x00000081, 0x00000082, 0x00000083, 0x00000084, 0x00000085, 0x00000086, 0x00000087, 0x00000088, 0x00000089, }, - {0x0000008a, 0x0000008b, 0x0000008c, 0x0000008d, 0x0000008e, 0x0000008f, 0x00000090, 0x00000091, 0x00000092, 0x00000093, 0x00000094, 0x00000095, 0x00000096, 0x00000097, 0x00000098, 0x00000099, }, - {0x0000009a, 0x0000009b, 0x0000009c, 0x0000009d, 0x0000009e, 0x0000009f, 0x000000a0, 0x000000a1, 0x000000a2, 0x000000a3, 0x000000a4, 0x000000a5, 0x000000a6, 0x000000a7, 0x000000a8, 0x000000a9, }, - {0x000000aa, 0x000000ab, 0x000000ac, 0x000000ad, 0x000000ae, 0x000000af, 0x000000b0, 0x000000b1, 0x000000b2, 0x000000b3, 0x000000b4, 0x000000b5, 0x000000b6, 0x000000b7, 0x000000b8, 0x000000b9, }, - {0x000000ba, 0x000000bb, 0x000000bc, 0x000000bd, 0x000000be, 0x000000bf, 0x000000c0, 0x000000c1, 0x000000c2, 0x000000c3, 0x000000c4, 0x000000c5, 0x000000c6, 0x000000c7, 0x000000c8, 0x000000c9, }, - {0x000000ca, 0x000000cb, 0x000000cc, 0x000000cd, 0x000000ce, 0x000000cf, 0x000000d0, 0x000000d1, 0x000000d2, 0x000000d3, 0x000000d4, 0x000000d5, 0x000000d6, 0x000000d7, 0x000000d8, 0x000000d9, }, - {0x000000da, 0x000000db, 0x000000dc, 0x000000dd, 0x000000de, 0x000000df, 0x000000e0, 0x000000e1, 0x000000e2, 0x000000e3, 0x000000e4, 0x000000e5, 0x000000e6, 0x000000e7, 0x000000e8, 0x000000e9, }, - {0x000000ea, 0x000000eb, 0x000000ec, 0x000000ed, 0x000000ee, 0x000000ef, 0x000000f0, 0x000000f1, 0x000000f2, 0x000000f3, 0x000000f4, 0x000000f5, 0x000000f6, 0x000000f7, 0x000000f8, 0x000000f9, }, - {0x000000fa, 0x000000fb, 0x000000fc, 0x000000fd, 0x000000fe, 0x000000ff, 0x00000100, 0x00000101, 0x00000102, 0x00000103, 0x00000104, 0x00000105, 0x00000106, 0x00000107, 0x00000108, 0x00000109, }, - {0x0000010a, 0x0000010b, 0x0000010c, 0x0000010d, 0x0000010e, 0x0000010f, 0x00000110, 0x00000111, 0x00000112, 0x00000113, 0x00000114, 0x00000115, 0x00000116, 0x00000117, 0x00000118, 0x00000119, }, +const uint32_t c_aauiCQMFHuffDec44[27][16] = { + { + 0x0002ffff, + 0x0001ffff, + 0x00010001, + 0x00010001, + 0x00010011, + 0x00010011, + 0x00010012, + 0x00010012, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + 0x00030000, + }, + { + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + }, + { + 0x0004ffff, + 0x0003ffff, + 0x00000003, + 0x00000014, + 0x00000033, + 0x00000034, + 0x00010024, + 0x00010024, + 0x00020002, + 0x00020002, + 0x00020002, + 0x00020002, + 0x00020022, + 0x00020022, + 0x00020022, + 0x00020022, + }, + { + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + }, + { + 0x000affff, + 0x0006ffff, + 0x0005ffff, + 0x00000026, + 0x00010004, + 0x00010004, + 0x00010015, + 0x00010015, + 0x00010036, + 0x00010036, + 0x00010044, + 0x00010044, + 0x00010045, + 0x00010045, + 0x00010046, + 0x00010046, + }, + { + 0x00020047, + 0x00020047, + 0x00020047, + 0x00020047, + 0x00020056, + 0x00020056, + 0x00020056, + 0x00020056, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + }, + { + 0x0009ffff, + 0x0007ffff, + 0x0008ffff, + 0x00000038, + 0x00010005, + 0x00010005, + 0x00010027, + 0x00010027, + 0x00010055, + 0x00010055, + 0x00010057, + 0x00010057, + 0x00020016, + 0x00020016, + 0x00020016, + 0x00020016, + }, + { + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030048, + 0x00030048, + 0x00030048, + 0x00030048, + 0x00030048, + 0x00030048, + 0x00030048, + 0x00030048, + }, + { + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030067, + 0x00030067, + 0x00030067, + 0x00030067, + 0x00030067, + 0x00030067, + 0x00030067, + 0x00030067, + }, + { + 0x00020028, + 0x00020028, + 0x00020028, + 0x00020028, + 0x00020049, + 0x00020049, + 0x00020049, + 0x00020049, + 0x00020059, + 0x00020059, + 0x00020059, + 0x00020059, + 0x00020068, + 0x00020068, + 0x00020068, + 0x00020068, + }, + { + 0x000dffff, + 0x000cffff, + 0x000effff, + 0x000fffff, + 0x0010ffff, + 0x0011ffff, + 0x0012ffff, + 0x0013ffff, + 0x0014ffff, + 0x0015ffff, + 0x0016ffff, + 0x0017ffff, + 0x0018ffff, + 0x0019ffff, + 0x001affff, + 0x000bffff, + }, + { + 0x0000011a, + 0x0000011b, + 0x0000011c, + 0x0000011d, + 0x0000011e, + 0x0000011f, + 0x0001004c, + 0x0001004c, + 0x00010066, + 0x00010066, + 0x00010120, + 0x00010120, + 0x00020017, + 0x00020017, + 0x00020017, + 0x00020017, + }, + { + 0x0000001e, + 0x0000001f, + 0x00000020, + 0x00000021, + 0x00000029, + 0x0000002a, + 0x0000002b, + 0x0000002c, + 0x0000002d, + 0x0000002e, + 0x0000002f, + 0x00000030, + 0x00000031, + 0x00000032, + 0x00000039, + 0x0000003a, + }, + { + 0x00000007, + 0x00000008, + 0x00000009, + 0x0000000a, + 0x0000000b, + 0x0000000c, + 0x0000000d, + 0x0000000e, + 0x0000000f, + 0x00000010, + 0x00000018, + 0x00000019, + 0x0000001a, + 0x0000001b, + 0x0000001c, + 0x0000001d, + }, + { + 0x0000003b, + 0x0000003c, + 0x0000003d, + 0x0000003e, + 0x0000003f, + 0x00000040, + 0x00000041, + 0x00000042, + 0x00000043, + 0x0000004a, + 0x0000004b, + 0x0000004d, + 0x0000004e, + 0x0000004f, + 0x00000050, + 0x00000051, + }, + { + 0x00000052, + 0x00000053, + 0x00000054, + 0x0000005a, + 0x0000005b, + 0x0000005c, + 0x0000005d, + 0x0000005e, + 0x0000005f, + 0x00000060, + 0x00000061, + 0x00000062, + 0x00000063, + 0x00000064, + 0x00000065, + 0x00000069, + }, + { + 0x0000006a, + 0x0000006b, + 0x0000006c, + 0x0000006d, + 0x0000006e, + 0x0000006f, + 0x00000070, + 0x00000071, + 0x00000072, + 0x00000073, + 0x00000074, + 0x00000075, + 0x00000076, + 0x00000077, + 0x00000078, + 0x00000079, + }, + { + 0x0000007a, + 0x0000007b, + 0x0000007c, + 0x0000007d, + 0x0000007e, + 0x0000007f, + 0x00000080, + 0x00000081, + 0x00000082, + 0x00000083, + 0x00000084, + 0x00000085, + 0x00000086, + 0x00000087, + 0x00000088, + 0x00000089, + }, + { + 0x0000008a, + 0x0000008b, + 0x0000008c, + 0x0000008d, + 0x0000008e, + 0x0000008f, + 0x00000090, + 0x00000091, + 0x00000092, + 0x00000093, + 0x00000094, + 0x00000095, + 0x00000096, + 0x00000097, + 0x00000098, + 0x00000099, + }, + { + 0x0000009a, + 0x0000009b, + 0x0000009c, + 0x0000009d, + 0x0000009e, + 0x0000009f, + 0x000000a0, + 0x000000a1, + 0x000000a2, + 0x000000a3, + 0x000000a4, + 0x000000a5, + 0x000000a6, + 0x000000a7, + 0x000000a8, + 0x000000a9, + }, + { + 0x000000aa, + 0x000000ab, + 0x000000ac, + 0x000000ad, + 0x000000ae, + 0x000000af, + 0x000000b0, + 0x000000b1, + 0x000000b2, + 0x000000b3, + 0x000000b4, + 0x000000b5, + 0x000000b6, + 0x000000b7, + 0x000000b8, + 0x000000b9, + }, + { + 0x000000ba, + 0x000000bb, + 0x000000bc, + 0x000000bd, + 0x000000be, + 0x000000bf, + 0x000000c0, + 0x000000c1, + 0x000000c2, + 0x000000c3, + 0x000000c4, + 0x000000c5, + 0x000000c6, + 0x000000c7, + 0x000000c8, + 0x000000c9, + }, + { + 0x000000ca, + 0x000000cb, + 0x000000cc, + 0x000000cd, + 0x000000ce, + 0x000000cf, + 0x000000d0, + 0x000000d1, + 0x000000d2, + 0x000000d3, + 0x000000d4, + 0x000000d5, + 0x000000d6, + 0x000000d7, + 0x000000d8, + 0x000000d9, + }, + { + 0x000000da, + 0x000000db, + 0x000000dc, + 0x000000dd, + 0x000000de, + 0x000000df, + 0x000000e0, + 0x000000e1, + 0x000000e2, + 0x000000e3, + 0x000000e4, + 0x000000e5, + 0x000000e6, + 0x000000e7, + 0x000000e8, + 0x000000e9, + }, + { + 0x000000ea, + 0x000000eb, + 0x000000ec, + 0x000000ed, + 0x000000ee, + 0x000000ef, + 0x000000f0, + 0x000000f1, + 0x000000f2, + 0x000000f3, + 0x000000f4, + 0x000000f5, + 0x000000f6, + 0x000000f7, + 0x000000f8, + 0x000000f9, + }, + { + 0x000000fa, + 0x000000fb, + 0x000000fc, + 0x000000fd, + 0x000000fe, + 0x000000ff, + 0x00000100, + 0x00000101, + 0x00000102, + 0x00000103, + 0x00000104, + 0x00000105, + 0x00000106, + 0x00000107, + 0x00000108, + 0x00000109, + }, + { + 0x0000010a, + 0x0000010b, + 0x0000010c, + 0x0000010d, + 0x0000010e, + 0x0000010f, + 0x00000110, + 0x00000111, + 0x00000112, + 0x00000113, + 0x00000114, + 0x00000115, + 0x00000116, + 0x00000117, + 0x00000118, + 0x00000119, + }, }; #endif @@ -2781,104 +27923,1236 @@ const uint32_t c_aauiCQMFHuffEnc45[324][2] = #else const uint16_t c_aauiCQMFHuffEnc45[324][2] = #endif -{ - {0x0002, 0x0002}, {0x0003, 0x0002}, {0x0005, 0x0003}, {0x0007, 0x0002}, {0x0009, 0x0003}, {0x000c, 0x0005}, {0x0010, 0x0025}, {0x0012, 0x0088}, - {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, {0x0013, 0x0006}, {0x0013, 0x0007}, - {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0002, 0x0003}, {0x0003, 0x0003}, {0x0005, 0x0004}, {0x0006, 0x0003}, {0x0009, 0x0004}, {0x000b, 0x0004}, - {0x000f, 0x0014}, {0x0011, 0x0048}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0013, 0x000c}, {0x0013, 0x000d}, {0x0013, 0x000e}, {0x0013, 0x000f}, - {0x0013, 0x0010}, {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0005, 0x0005}, {0x0004, 0x0003}, {0x0006, 0x0004}, {0x0007, 0x0003}, - {0x000a, 0x0004}, {0x000d, 0x0007}, {0x000f, 0x0015}, {0x0013, 0x0014}, {0x0013, 0x0015}, {0x0013, 0x0016}, {0x0013, 0x0017}, {0x0013, 0x0018}, - {0x0013, 0x0019}, {0x0013, 0x001a}, {0x0013, 0x001b}, {0x0013, 0x001c}, {0x0013, 0x001d}, {0x0013, 0x001e}, {0x0007, 0x0004}, {0x0006, 0x0005}, - {0x0007, 0x0005}, {0x0009, 0x0005}, {0x000b, 0x0005}, {0x000d, 0x0008}, {0x0010, 0x0026}, {0x0012, 0x0089}, {0x0012, 0x008a}, {0x0013, 0x001f}, - {0x0013, 0x0020}, {0x0013, 0x0021}, {0x0013, 0x0022}, {0x0013, 0x0023}, {0x0013, 0x0024}, {0x0013, 0x0025}, {0x0013, 0x0026}, {0x0013, 0x0027}, - {0x0009, 0x0006}, {0x0009, 0x0007}, {0x000a, 0x0005}, {0x000b, 0x0006}, {0x000d, 0x0009}, {0x000f, 0x0016}, {0x0011, 0x0049}, {0x0013, 0x0028}, - {0x0013, 0x0029}, {0x0013, 0x002a}, {0x0013, 0x002b}, {0x0013, 0x002c}, {0x0013, 0x002d}, {0x0013, 0x002e}, {0x0013, 0x002f}, {0x0013, 0x0030}, - {0x0013, 0x0031}, {0x0013, 0x0032}, {0x000c, 0x0006}, {0x000b, 0x0007}, {0x000c, 0x0007}, {0x000e, 0x000d}, {0x0010, 0x0027}, {0x0012, 0x008b}, - {0x0012, 0x008c}, {0x0013, 0x0033}, {0x0013, 0x0034}, {0x0013, 0x0035}, {0x0013, 0x0036}, {0x0013, 0x0037}, {0x0013, 0x0038}, {0x0013, 0x0039}, - {0x0013, 0x003a}, {0x0013, 0x003b}, {0x0013, 0x003c}, {0x0013, 0x003d}, {0x000f, 0x0017}, {0x000f, 0x0018}, {0x000f, 0x0019}, {0x0012, 0x008d}, - {0x0013, 0x003e}, {0x0013, 0x003f}, {0x0013, 0x0040}, {0x0013, 0x0041}, {0x0013, 0x0042}, {0x0013, 0x0043}, {0x0013, 0x0044}, {0x0013, 0x0045}, - {0x0013, 0x0046}, {0x0013, 0x0047}, {0x0013, 0x0048}, {0x0013, 0x0049}, {0x0013, 0x004a}, {0x0013, 0x004b}, {0x0013, 0x004c}, {0x0012, 0x008e}, - {0x0012, 0x008f}, {0x0013, 0x004d}, {0x0013, 0x004e}, {0x0013, 0x004f}, {0x0013, 0x0050}, {0x0013, 0x0051}, {0x0013, 0x0052}, {0x0013, 0x0053}, - {0x0013, 0x0054}, {0x0013, 0x0055}, {0x0013, 0x0056}, {0x0013, 0x0057}, {0x0013, 0x0058}, {0x0013, 0x0059}, {0x0013, 0x005a}, {0x0013, 0x005b}, - {0x0013, 0x005c}, {0x0013, 0x005d}, {0x0013, 0x005e}, {0x0013, 0x005f}, {0x0013, 0x0060}, {0x0013, 0x0061}, {0x0013, 0x0062}, {0x0013, 0x0063}, - {0x0013, 0x0064}, {0x0013, 0x0065}, {0x0013, 0x0066}, {0x0013, 0x0067}, {0x0013, 0x0068}, {0x0013, 0x0069}, {0x0013, 0x006a}, {0x0013, 0x006b}, - {0x0013, 0x006c}, {0x0013, 0x006d}, {0x0013, 0x006e}, {0x0013, 0x006f}, {0x0013, 0x0070}, {0x0013, 0x0071}, {0x0013, 0x0072}, {0x0013, 0x0073}, - {0x0013, 0x0074}, {0x0013, 0x0075}, {0x0013, 0x0076}, {0x0013, 0x0077}, {0x0013, 0x0078}, {0x0013, 0x0079}, {0x0013, 0x007a}, {0x0013, 0x007b}, - {0x0013, 0x007c}, {0x0013, 0x007d}, {0x0013, 0x007e}, {0x0013, 0x007f}, {0x0013, 0x0080}, {0x0013, 0x0081}, {0x0013, 0x0082}, {0x0013, 0x0083}, - {0x0013, 0x0084}, {0x0013, 0x0085}, {0x0013, 0x0086}, {0x0013, 0x0087}, {0x0013, 0x0088}, {0x0013, 0x0089}, {0x0013, 0x008a}, {0x0013, 0x008b}, - {0x0013, 0x008c}, {0x0013, 0x008d}, {0x0013, 0x008e}, {0x0013, 0x008f}, {0x0013, 0x0090}, {0x0013, 0x0091}, {0x0013, 0x0092}, {0x0013, 0x0093}, - {0x0013, 0x0094}, {0x0013, 0x0095}, {0x0013, 0x0096}, {0x0013, 0x0097}, {0x0013, 0x0098}, {0x0013, 0x0099}, {0x0013, 0x009a}, {0x0013, 0x009b}, - {0x0013, 0x009c}, {0x0013, 0x009d}, {0x0013, 0x009e}, {0x0013, 0x009f}, {0x0013, 0x00a0}, {0x0013, 0x00a1}, {0x0013, 0x00a2}, {0x0013, 0x00a3}, - {0x0013, 0x00a4}, {0x0013, 0x00a5}, {0x0013, 0x00a6}, {0x0013, 0x00a7}, {0x0013, 0x00a8}, {0x0013, 0x00a9}, {0x0013, 0x00aa}, {0x0013, 0x00ab}, - {0x0013, 0x00ac}, {0x0013, 0x00ad}, {0x0013, 0x00ae}, {0x0013, 0x00af}, {0x0013, 0x00b0}, {0x0013, 0x00b1}, {0x0013, 0x00b2}, {0x0013, 0x00b3}, - {0x0013, 0x00b4}, {0x0013, 0x00b5}, {0x0013, 0x00b6}, {0x0013, 0x00b7}, {0x0013, 0x00b8}, {0x0013, 0x00b9}, {0x0013, 0x00ba}, {0x0013, 0x00bb}, - {0x0013, 0x00bc}, {0x0013, 0x00bd}, {0x0013, 0x00be}, {0x0013, 0x00bf}, {0x0013, 0x00c0}, {0x0013, 0x00c1}, {0x0013, 0x00c2}, {0x0013, 0x00c3}, - {0x0013, 0x00c4}, {0x0013, 0x00c5}, {0x0013, 0x00c6}, {0x0013, 0x00c7}, {0x0013, 0x00c8}, {0x0013, 0x00c9}, {0x0013, 0x00ca}, {0x0013, 0x00cb}, - {0x0013, 0x00cc}, {0x0013, 0x00cd}, {0x0013, 0x00ce}, {0x0013, 0x00cf}, {0x0013, 0x00d0}, {0x0013, 0x00d1}, {0x0013, 0x00d2}, {0x0013, 0x00d3}, - {0x0013, 0x00d4}, {0x0013, 0x00d5}, {0x0013, 0x00d6}, {0x0013, 0x00d7}, {0x0013, 0x00d8}, {0x0013, 0x00d9}, {0x0013, 0x00da}, {0x0013, 0x00db}, - {0x0013, 0x00dc}, {0x0013, 0x00dd}, {0x0013, 0x00de}, {0x0013, 0x00df}, {0x0013, 0x00e0}, {0x0013, 0x00e1}, {0x0013, 0x00e2}, {0x0013, 0x00e3}, - {0x0013, 0x00e4}, {0x0013, 0x00e5}, {0x0013, 0x00e6}, {0x0013, 0x00e7}, {0x0013, 0x00e8}, {0x0013, 0x00e9}, {0x0013, 0x00ea}, {0x0013, 0x00eb}, - {0x0013, 0x00ec}, {0x0013, 0x00ed}, {0x0013, 0x00ee}, {0x0013, 0x00ef}, {0x0013, 0x00f0}, {0x0013, 0x00f1}, {0x0013, 0x00f2}, {0x0013, 0x00f3}, - {0x0013, 0x00f4}, {0x0013, 0x00f5}, {0x0013, 0x00f6}, {0x0013, 0x00f7}, {0x0013, 0x00f8}, {0x0013, 0x00f9}, {0x0013, 0x00fa}, {0x0013, 0x00fb}, - {0x0013, 0x00fc}, {0x0013, 0x00fd}, {0x0013, 0x00fe}, {0x0013, 0x00ff}, {0x0013, 0x0100}, {0x0013, 0x0101}, {0x0013, 0x0102}, {0x0013, 0x0103}, - {0x0013, 0x0104}, {0x0013, 0x0105}, {0x0013, 0x0106}, {0x0013, 0x0107}, {0x0013, 0x0108}, {0x0013, 0x0109}, {0x0013, 0x010a}, {0x0013, 0x010b}, - {0x0013, 0x010c}, {0x0013, 0x010d}, {0x0013, 0x010e}, {0x0013, 0x010f}, + { + { 0x0002, 0x0002 }, + { 0x0003, 0x0002 }, + { 0x0005, 0x0003 }, + { 0x0007, 0x0002 }, + { 0x0009, 0x0003 }, + { 0x000c, 0x0005 }, + { 0x0010, 0x0025 }, + { 0x0012, 0x0088 }, + { 0x0013, 0x0000 }, + { 0x0013, 0x0001 }, + { 0x0013, 0x0002 }, + { 0x0013, 0x0003 }, + { 0x0013, 0x0004 }, + { 0x0013, 0x0005 }, + { 0x0013, 0x0006 }, + { 0x0013, 0x0007 }, + { 0x0013, 0x0008 }, + { 0x0013, 0x0009 }, + { 0x0002, 0x0003 }, + { 0x0003, 0x0003 }, + { 0x0005, 0x0004 }, + { 0x0006, 0x0003 }, + { 0x0009, 0x0004 }, + { 0x000b, 0x0004 }, + { 0x000f, 0x0014 }, + { 0x0011, 0x0048 }, + { 0x0013, 0x000a }, + { 0x0013, 0x000b }, + { 0x0013, 0x000c }, + { 0x0013, 0x000d }, + { 0x0013, 0x000e }, + { 0x0013, 0x000f }, + { 0x0013, 0x0010 }, + { 0x0013, 0x0011 }, + { 0x0013, 0x0012 }, + { 0x0013, 0x0013 }, + { 0x0005, 0x0005 }, + { 0x0004, 0x0003 }, + { 0x0006, 0x0004 }, + { 0x0007, 0x0003 }, + { 0x000a, 0x0004 }, + { 0x000d, 0x0007 }, + { 0x000f, 0x0015 }, + { 0x0013, 0x0014 }, + { 0x0013, 0x0015 }, + { 0x0013, 0x0016 }, + { 0x0013, 0x0017 }, + { 0x0013, 0x0018 }, + { 0x0013, 0x0019 }, + { 0x0013, 0x001a }, + { 0x0013, 0x001b }, + { 0x0013, 0x001c }, + { 0x0013, 0x001d }, + { 0x0013, 0x001e }, + { 0x0007, 0x0004 }, + { 0x0006, 0x0005 }, + { 0x0007, 0x0005 }, + { 0x0009, 0x0005 }, + { 0x000b, 0x0005 }, + { 0x000d, 0x0008 }, + { 0x0010, 0x0026 }, + { 0x0012, 0x0089 }, + { 0x0012, 0x008a }, + { 0x0013, 0x001f }, + { 0x0013, 0x0020 }, + { 0x0013, 0x0021 }, + { 0x0013, 0x0022 }, + { 0x0013, 0x0023 }, + { 0x0013, 0x0024 }, + { 0x0013, 0x0025 }, + { 0x0013, 0x0026 }, + { 0x0013, 0x0027 }, + { 0x0009, 0x0006 }, + { 0x0009, 0x0007 }, + { 0x000a, 0x0005 }, + { 0x000b, 0x0006 }, + { 0x000d, 0x0009 }, + { 0x000f, 0x0016 }, + { 0x0011, 0x0049 }, + { 0x0013, 0x0028 }, + { 0x0013, 0x0029 }, + { 0x0013, 0x002a }, + { 0x0013, 0x002b }, + { 0x0013, 0x002c }, + { 0x0013, 0x002d }, + { 0x0013, 0x002e }, + { 0x0013, 0x002f }, + { 0x0013, 0x0030 }, + { 0x0013, 0x0031 }, + { 0x0013, 0x0032 }, + { 0x000c, 0x0006 }, + { 0x000b, 0x0007 }, + { 0x000c, 0x0007 }, + { 0x000e, 0x000d }, + { 0x0010, 0x0027 }, + { 0x0012, 0x008b }, + { 0x0012, 0x008c }, + { 0x0013, 0x0033 }, + { 0x0013, 0x0034 }, + { 0x0013, 0x0035 }, + { 0x0013, 0x0036 }, + { 0x0013, 0x0037 }, + { 0x0013, 0x0038 }, + { 0x0013, 0x0039 }, + { 0x0013, 0x003a }, + { 0x0013, 0x003b }, + { 0x0013, 0x003c }, + { 0x0013, 0x003d }, + { 0x000f, 0x0017 }, + { 0x000f, 0x0018 }, + { 0x000f, 0x0019 }, + { 0x0012, 0x008d }, + { 0x0013, 0x003e }, + { 0x0013, 0x003f }, + { 0x0013, 0x0040 }, + { 0x0013, 0x0041 }, + { 0x0013, 0x0042 }, + { 0x0013, 0x0043 }, + { 0x0013, 0x0044 }, + { 0x0013, 0x0045 }, + { 0x0013, 0x0046 }, + { 0x0013, 0x0047 }, + { 0x0013, 0x0048 }, + { 0x0013, 0x0049 }, + { 0x0013, 0x004a }, + { 0x0013, 0x004b }, + { 0x0013, 0x004c }, + { 0x0012, 0x008e }, + { 0x0012, 0x008f }, + { 0x0013, 0x004d }, + { 0x0013, 0x004e }, + { 0x0013, 0x004f }, + { 0x0013, 0x0050 }, + { 0x0013, 0x0051 }, + { 0x0013, 0x0052 }, + { 0x0013, 0x0053 }, + { 0x0013, 0x0054 }, + { 0x0013, 0x0055 }, + { 0x0013, 0x0056 }, + { 0x0013, 0x0057 }, + { 0x0013, 0x0058 }, + { 0x0013, 0x0059 }, + { 0x0013, 0x005a }, + { 0x0013, 0x005b }, + { 0x0013, 0x005c }, + { 0x0013, 0x005d }, + { 0x0013, 0x005e }, + { 0x0013, 0x005f }, + { 0x0013, 0x0060 }, + { 0x0013, 0x0061 }, + { 0x0013, 0x0062 }, + { 0x0013, 0x0063 }, + { 0x0013, 0x0064 }, + { 0x0013, 0x0065 }, + { 0x0013, 0x0066 }, + { 0x0013, 0x0067 }, + { 0x0013, 0x0068 }, + { 0x0013, 0x0069 }, + { 0x0013, 0x006a }, + { 0x0013, 0x006b }, + { 0x0013, 0x006c }, + { 0x0013, 0x006d }, + { 0x0013, 0x006e }, + { 0x0013, 0x006f }, + { 0x0013, 0x0070 }, + { 0x0013, 0x0071 }, + { 0x0013, 0x0072 }, + { 0x0013, 0x0073 }, + { 0x0013, 0x0074 }, + { 0x0013, 0x0075 }, + { 0x0013, 0x0076 }, + { 0x0013, 0x0077 }, + { 0x0013, 0x0078 }, + { 0x0013, 0x0079 }, + { 0x0013, 0x007a }, + { 0x0013, 0x007b }, + { 0x0013, 0x007c }, + { 0x0013, 0x007d }, + { 0x0013, 0x007e }, + { 0x0013, 0x007f }, + { 0x0013, 0x0080 }, + { 0x0013, 0x0081 }, + { 0x0013, 0x0082 }, + { 0x0013, 0x0083 }, + { 0x0013, 0x0084 }, + { 0x0013, 0x0085 }, + { 0x0013, 0x0086 }, + { 0x0013, 0x0087 }, + { 0x0013, 0x0088 }, + { 0x0013, 0x0089 }, + { 0x0013, 0x008a }, + { 0x0013, 0x008b }, + { 0x0013, 0x008c }, + { 0x0013, 0x008d }, + { 0x0013, 0x008e }, + { 0x0013, 0x008f }, + { 0x0013, 0x0090 }, + { 0x0013, 0x0091 }, + { 0x0013, 0x0092 }, + { 0x0013, 0x0093 }, + { 0x0013, 0x0094 }, + { 0x0013, 0x0095 }, + { 0x0013, 0x0096 }, + { 0x0013, 0x0097 }, + { 0x0013, 0x0098 }, + { 0x0013, 0x0099 }, + { 0x0013, 0x009a }, + { 0x0013, 0x009b }, + { 0x0013, 0x009c }, + { 0x0013, 0x009d }, + { 0x0013, 0x009e }, + { 0x0013, 0x009f }, + { 0x0013, 0x00a0 }, + { 0x0013, 0x00a1 }, + { 0x0013, 0x00a2 }, + { 0x0013, 0x00a3 }, + { 0x0013, 0x00a4 }, + { 0x0013, 0x00a5 }, + { 0x0013, 0x00a6 }, + { 0x0013, 0x00a7 }, + { 0x0013, 0x00a8 }, + { 0x0013, 0x00a9 }, + { 0x0013, 0x00aa }, + { 0x0013, 0x00ab }, + { 0x0013, 0x00ac }, + { 0x0013, 0x00ad }, + { 0x0013, 0x00ae }, + { 0x0013, 0x00af }, + { 0x0013, 0x00b0 }, + { 0x0013, 0x00b1 }, + { 0x0013, 0x00b2 }, + { 0x0013, 0x00b3 }, + { 0x0013, 0x00b4 }, + { 0x0013, 0x00b5 }, + { 0x0013, 0x00b6 }, + { 0x0013, 0x00b7 }, + { 0x0013, 0x00b8 }, + { 0x0013, 0x00b9 }, + { 0x0013, 0x00ba }, + { 0x0013, 0x00bb }, + { 0x0013, 0x00bc }, + { 0x0013, 0x00bd }, + { 0x0013, 0x00be }, + { 0x0013, 0x00bf }, + { 0x0013, 0x00c0 }, + { 0x0013, 0x00c1 }, + { 0x0013, 0x00c2 }, + { 0x0013, 0x00c3 }, + { 0x0013, 0x00c4 }, + { 0x0013, 0x00c5 }, + { 0x0013, 0x00c6 }, + { 0x0013, 0x00c7 }, + { 0x0013, 0x00c8 }, + { 0x0013, 0x00c9 }, + { 0x0013, 0x00ca }, + { 0x0013, 0x00cb }, + { 0x0013, 0x00cc }, + { 0x0013, 0x00cd }, + { 0x0013, 0x00ce }, + { 0x0013, 0x00cf }, + { 0x0013, 0x00d0 }, + { 0x0013, 0x00d1 }, + { 0x0013, 0x00d2 }, + { 0x0013, 0x00d3 }, + { 0x0013, 0x00d4 }, + { 0x0013, 0x00d5 }, + { 0x0013, 0x00d6 }, + { 0x0013, 0x00d7 }, + { 0x0013, 0x00d8 }, + { 0x0013, 0x00d9 }, + { 0x0013, 0x00da }, + { 0x0013, 0x00db }, + { 0x0013, 0x00dc }, + { 0x0013, 0x00dd }, + { 0x0013, 0x00de }, + { 0x0013, 0x00df }, + { 0x0013, 0x00e0 }, + { 0x0013, 0x00e1 }, + { 0x0013, 0x00e2 }, + { 0x0013, 0x00e3 }, + { 0x0013, 0x00e4 }, + { 0x0013, 0x00e5 }, + { 0x0013, 0x00e6 }, + { 0x0013, 0x00e7 }, + { 0x0013, 0x00e8 }, + { 0x0013, 0x00e9 }, + { 0x0013, 0x00ea }, + { 0x0013, 0x00eb }, + { 0x0013, 0x00ec }, + { 0x0013, 0x00ed }, + { 0x0013, 0x00ee }, + { 0x0013, 0x00ef }, + { 0x0013, 0x00f0 }, + { 0x0013, 0x00f1 }, + { 0x0013, 0x00f2 }, + { 0x0013, 0x00f3 }, + { 0x0013, 0x00f4 }, + { 0x0013, 0x00f5 }, + { 0x0013, 0x00f6 }, + { 0x0013, 0x00f7 }, + { 0x0013, 0x00f8 }, + { 0x0013, 0x00f9 }, + { 0x0013, 0x00fa }, + { 0x0013, 0x00fb }, + { 0x0013, 0x00fc }, + { 0x0013, 0x00fd }, + { 0x0013, 0x00fe }, + { 0x0013, 0x00ff }, + { 0x0013, 0x0100 }, + { 0x0013, 0x0101 }, + { 0x0013, 0x0102 }, + { 0x0013, 0x0103 }, + { 0x0013, 0x0104 }, + { 0x0013, 0x0105 }, + { 0x0013, 0x0106 }, + { 0x0013, 0x0107 }, + { 0x0013, 0x0108 }, + { 0x0013, 0x0109 }, + { 0x0013, 0x010a }, + { 0x0013, 0x010b }, + { 0x0013, 0x010c }, + { 0x0013, 0x010d }, + { 0x0013, 0x010e }, + { 0x0013, 0x010f }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec45[50][16] = -{ - {0x0003ffff, 0x0001ffff, 0x0002ffff, 0x00000025, 0x00010001, 0x00010001, 0x00010013, 0x00010013, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020012, 0x00020012, 0x00020012, 0x00020012, }, - {0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00020037, 0x00020037, 0x00020037, 0x00020037, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, }, - {0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, }, - {0x0007ffff, 0x0005ffff, 0x0004ffff, 0x0006ffff, 0x00010003, 0x00010003, 0x00010027, 0x00010027, 0x00010036, 0x00010036, 0x00010038, 0x00010038, 0x00020015, 0x00020015, 0x00020015, 0x00020015, }, - {0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, 0x00030039, }, - {0x00020028, 0x00020028, 0x00020028, 0x00020028, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, }, - {0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, }, - {0x000effff, 0x001fffff, 0x000affff, 0x0008ffff, 0x0009ffff, 0x00000005, 0x0000005a, 0x0000005c, 0x00010017, 0x00010017, 0x0001003a, 0x0001003a, 0x0001004b, 0x0001004b, 0x0001005b, 0x0001005b, }, - {0x0001006d, 0x0001006d, 0x0001006e, 0x0001006e, 0x0002005d, 0x0002005d, 0x0002005d, 0x0002005d, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, }, - {0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, }, - {0x0030ffff, 0x0031ffff, 0x000cffff, 0x000dffff, 0x000bffff, 0x00000006, 0x0000003c, 0x0000005e, 0x00010018, 0x00010018, 0x0001002a, 0x0001002a, 0x0001004d, 0x0001004d, 0x0001006c, 0x0001006c, }, - {0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, }, - {0x00020007, 0x00020007, 0x00020007, 0x00020007, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002005f, 0x0002005f, 0x0002005f, 0x0002005f, }, - {0x00020060, 0x00020060, 0x00020060, 0x00020060, 0x0002006f, 0x0002006f, 0x0002006f, 0x0002006f, 0x0002007f, 0x0002007f, 0x0002007f, 0x0002007f, 0x00020080, 0x00020080, 0x00020080, 0x00020080, }, - {0x0010ffff, 0x0011ffff, 0x0012ffff, 0x000fffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x0019ffff, 0x001affff, 0x001bffff, 0x001cffff, 0x001dffff, 0x001effff, }, - {0x0001002f, 0x0001002f, 0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x0001003f, 0x0001003f, }, - {0x00010008, 0x00010008, 0x00010009, 0x00010009, 0x0001000a, 0x0001000a, 0x0001000b, 0x0001000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, }, - {0x00010010, 0x00010010, 0x00010011, 0x00010011, 0x0001001a, 0x0001001a, 0x0001001b, 0x0001001b, 0x0001001c, 0x0001001c, 0x0001001d, 0x0001001d, 0x0001001e, 0x0001001e, 0x0001001f, 0x0001001f, }, - {0x00010020, 0x00010020, 0x00010021, 0x00010021, 0x00010022, 0x00010022, 0x00010023, 0x00010023, 0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, 0x0001002e, 0x0001002e, }, - {0x00010040, 0x00010040, 0x00010041, 0x00010041, 0x00010042, 0x00010042, 0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, 0x00010046, 0x00010046, 0x00010047, 0x00010047, }, - {0x0001004f, 0x0001004f, 0x00010050, 0x00010050, 0x00010051, 0x00010051, 0x00010052, 0x00010052, 0x00010053, 0x00010053, 0x00010054, 0x00010054, 0x00010055, 0x00010055, 0x00010056, 0x00010056, }, - {0x00010057, 0x00010057, 0x00010058, 0x00010058, 0x00010059, 0x00010059, 0x00010061, 0x00010061, 0x00010062, 0x00010062, 0x00010063, 0x00010063, 0x00010064, 0x00010064, 0x00010065, 0x00010065, }, - {0x00010066, 0x00010066, 0x00010067, 0x00010067, 0x00010068, 0x00010068, 0x00010069, 0x00010069, 0x0001006a, 0x0001006a, 0x0001006b, 0x0001006b, 0x00010070, 0x00010070, 0x00010071, 0x00010071, }, - {0x00010072, 0x00010072, 0x00010073, 0x00010073, 0x00010074, 0x00010074, 0x00010075, 0x00010075, 0x00010076, 0x00010076, 0x00010077, 0x00010077, 0x00010078, 0x00010078, 0x00010079, 0x00010079, }, - {0x0001007a, 0x0001007a, 0x0001007b, 0x0001007b, 0x0001007c, 0x0001007c, 0x0001007d, 0x0001007d, 0x0001007e, 0x0001007e, 0x00010081, 0x00010081, 0x00010082, 0x00010082, 0x00010083, 0x00010083, }, - {0x00010084, 0x00010084, 0x00010085, 0x00010085, 0x00010086, 0x00010086, 0x00010087, 0x00010087, 0x00010088, 0x00010088, 0x00010089, 0x00010089, 0x0001008a, 0x0001008a, 0x0001008b, 0x0001008b, }, - {0x0001008c, 0x0001008c, 0x0001008d, 0x0001008d, 0x0001008e, 0x0001008e, 0x0001008f, 0x0001008f, 0x00010090, 0x00010090, 0x00010091, 0x00010091, 0x00010092, 0x00010092, 0x00010093, 0x00010093, }, - {0x00010094, 0x00010094, 0x00010095, 0x00010095, 0x00010096, 0x00010096, 0x00010097, 0x00010097, 0x00010098, 0x00010098, 0x00010099, 0x00010099, 0x0001009a, 0x0001009a, 0x0001009b, 0x0001009b, }, - {0x0001009c, 0x0001009c, 0x0001009d, 0x0001009d, 0x0001009e, 0x0001009e, 0x0001009f, 0x0001009f, 0x000100a0, 0x000100a0, 0x000100a1, 0x000100a1, 0x000100a2, 0x000100a2, 0x000100a3, 0x000100a3, }, - {0x000100a4, 0x000100a4, 0x000100a5, 0x000100a5, 0x000100a6, 0x000100a6, 0x000100a7, 0x000100a7, 0x000100a8, 0x000100a8, 0x000100a9, 0x000100a9, 0x000100aa, 0x000100aa, 0x000100ab, 0x000100ab, }, - {0x000100ac, 0x000100ac, 0x000100ad, 0x000100ad, 0x000100ae, 0x000100ae, 0x000100af, 0x000100af, 0x000100b0, 0x000100b0, 0x000100b1, 0x000100b1, 0x000100b2, 0x000100b2, 0x000100b3, 0x000100b3, }, - {0x0020ffff, 0x0021ffff, 0x0022ffff, 0x0023ffff, 0x0024ffff, 0x0025ffff, 0x0026ffff, 0x0027ffff, 0x0028ffff, 0x0029ffff, 0x002affff, 0x002bffff, 0x002cffff, 0x002dffff, 0x002effff, 0x002fffff, }, - {0x000100b4, 0x000100b4, 0x000100b5, 0x000100b5, 0x000100b6, 0x000100b6, 0x000100b7, 0x000100b7, 0x000100b8, 0x000100b8, 0x000100b9, 0x000100b9, 0x000100ba, 0x000100ba, 0x000100bb, 0x000100bb, }, - {0x000100bc, 0x000100bc, 0x000100bd, 0x000100bd, 0x000100be, 0x000100be, 0x000100bf, 0x000100bf, 0x000100c0, 0x000100c0, 0x000100c1, 0x000100c1, 0x000100c2, 0x000100c2, 0x000100c3, 0x000100c3, }, - {0x000100c4, 0x000100c4, 0x000100c5, 0x000100c5, 0x000100c6, 0x000100c6, 0x000100c7, 0x000100c7, 0x000100c8, 0x000100c8, 0x000100c9, 0x000100c9, 0x000100ca, 0x000100ca, 0x000100cb, 0x000100cb, }, - {0x000100cc, 0x000100cc, 0x000100cd, 0x000100cd, 0x000100ce, 0x000100ce, 0x000100cf, 0x000100cf, 0x000100d0, 0x000100d0, 0x000100d1, 0x000100d1, 0x000100d2, 0x000100d2, 0x000100d3, 0x000100d3, }, - {0x000100d4, 0x000100d4, 0x000100d5, 0x000100d5, 0x000100d6, 0x000100d6, 0x000100d7, 0x000100d7, 0x000100d8, 0x000100d8, 0x000100d9, 0x000100d9, 0x000100da, 0x000100da, 0x000100db, 0x000100db, }, - {0x000100dc, 0x000100dc, 0x000100dd, 0x000100dd, 0x000100de, 0x000100de, 0x000100df, 0x000100df, 0x000100e0, 0x000100e0, 0x000100e1, 0x000100e1, 0x000100e2, 0x000100e2, 0x000100e3, 0x000100e3, }, - {0x000100e4, 0x000100e4, 0x000100e5, 0x000100e5, 0x000100e6, 0x000100e6, 0x000100e7, 0x000100e7, 0x000100e8, 0x000100e8, 0x000100e9, 0x000100e9, 0x000100ea, 0x000100ea, 0x000100eb, 0x000100eb, }, - {0x000100ec, 0x000100ec, 0x000100ed, 0x000100ed, 0x000100ee, 0x000100ee, 0x000100ef, 0x000100ef, 0x000100f0, 0x000100f0, 0x000100f1, 0x000100f1, 0x000100f2, 0x000100f2, 0x000100f3, 0x000100f3, }, - {0x000100f4, 0x000100f4, 0x000100f5, 0x000100f5, 0x000100f6, 0x000100f6, 0x000100f7, 0x000100f7, 0x000100f8, 0x000100f8, 0x000100f9, 0x000100f9, 0x000100fa, 0x000100fa, 0x000100fb, 0x000100fb, }, - {0x000100fc, 0x000100fc, 0x000100fd, 0x000100fd, 0x000100fe, 0x000100fe, 0x000100ff, 0x000100ff, 0x00010100, 0x00010100, 0x00010101, 0x00010101, 0x00010102, 0x00010102, 0x00010103, 0x00010103, }, - {0x00010104, 0x00010104, 0x00010105, 0x00010105, 0x00010106, 0x00010106, 0x00010107, 0x00010107, 0x00010108, 0x00010108, 0x00010109, 0x00010109, 0x0001010a, 0x0001010a, 0x0001010b, 0x0001010b, }, - {0x0001010c, 0x0001010c, 0x0001010d, 0x0001010d, 0x0001010e, 0x0001010e, 0x0001010f, 0x0001010f, 0x00010110, 0x00010110, 0x00010111, 0x00010111, 0x00010112, 0x00010112, 0x00010113, 0x00010113, }, - {0x00010114, 0x00010114, 0x00010115, 0x00010115, 0x00010116, 0x00010116, 0x00010117, 0x00010117, 0x00010118, 0x00010118, 0x00010119, 0x00010119, 0x0001011a, 0x0001011a, 0x0001011b, 0x0001011b, }, - {0x0001011c, 0x0001011c, 0x0001011d, 0x0001011d, 0x0001011e, 0x0001011e, 0x0001011f, 0x0001011f, 0x00010120, 0x00010120, 0x00010121, 0x00010121, 0x00010122, 0x00010122, 0x00010123, 0x00010123, }, - {0x00010124, 0x00010124, 0x00010125, 0x00010125, 0x00010126, 0x00010126, 0x00010127, 0x00010127, 0x00010128, 0x00010128, 0x00010129, 0x00010129, 0x0001012a, 0x0001012a, 0x0001012b, 0x0001012b, }, - {0x0001012c, 0x0001012c, 0x0001012d, 0x0001012d, 0x0001012e, 0x0001012e, 0x0001012f, 0x0001012f, 0x00010130, 0x00010130, 0x00010131, 0x00010131, 0x00010132, 0x00010132, 0x00010133, 0x00010133, }, - {0x00010134, 0x00010134, 0x00010135, 0x00010135, 0x00010136, 0x00010136, 0x00010137, 0x00010137, 0x00010138, 0x00010138, 0x00010139, 0x00010139, 0x0001013a, 0x0001013a, 0x0001013b, 0x0001013b, }, - {0x0001013c, 0x0001013c, 0x0001013d, 0x0001013d, 0x0001013e, 0x0001013e, 0x0001013f, 0x0001013f, 0x00010140, 0x00010140, 0x00010141, 0x00010141, 0x00010142, 0x00010142, 0x00010143, 0x00010143, }, +const uint32_t c_aauiCQMFHuffDec45[50][16] = { + { + 0x0003ffff, + 0x0001ffff, + 0x0002ffff, + 0x00000025, + 0x00010001, + 0x00010001, + 0x00010013, + 0x00010013, + 0x00020000, + 0x00020000, + 0x00020000, + 0x00020000, + 0x00020012, + 0x00020012, + 0x00020012, + 0x00020012, + }, + { + 0x00020026, + 0x00020026, + 0x00020026, + 0x00020026, + 0x00020037, + 0x00020037, + 0x00020037, + 0x00020037, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + }, + { + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + }, + { + 0x0007ffff, + 0x0005ffff, + 0x0004ffff, + 0x0006ffff, + 0x00010003, + 0x00010003, + 0x00010027, + 0x00010027, + 0x00010036, + 0x00010036, + 0x00010038, + 0x00010038, + 0x00020015, + 0x00020015, + 0x00020015, + 0x00020015, + }, + { + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + 0x00030039, + }, + { + 0x00020028, + 0x00020028, + 0x00020028, + 0x00020028, + 0x0002004a, + 0x0002004a, + 0x0002004a, + 0x0002004a, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + }, + { + 0x00030048, + 0x00030048, + 0x00030048, + 0x00030048, + 0x00030048, + 0x00030048, + 0x00030048, + 0x00030048, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + }, + { + 0x000effff, + 0x001fffff, + 0x000affff, + 0x0008ffff, + 0x0009ffff, + 0x00000005, + 0x0000005a, + 0x0000005c, + 0x00010017, + 0x00010017, + 0x0001003a, + 0x0001003a, + 0x0001004b, + 0x0001004b, + 0x0001005b, + 0x0001005b, + }, + { + 0x0001006d, + 0x0001006d, + 0x0001006e, + 0x0001006e, + 0x0002005d, + 0x0002005d, + 0x0002005d, + 0x0002005d, + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + }, + { + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003004c, + 0x0003004c, + 0x0003004c, + 0x0003004c, + 0x0003004c, + 0x0003004c, + 0x0003004c, + 0x0003004c, + }, + { + 0x0030ffff, + 0x0031ffff, + 0x000cffff, + 0x000dffff, + 0x000bffff, + 0x00000006, + 0x0000003c, + 0x0000005e, + 0x00010018, + 0x00010018, + 0x0001002a, + 0x0001002a, + 0x0001004d, + 0x0001004d, + 0x0001006c, + 0x0001006c, + }, + { + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x0003004e, + }, + { + 0x00020007, + 0x00020007, + 0x00020007, + 0x00020007, + 0x0002003d, + 0x0002003d, + 0x0002003d, + 0x0002003d, + 0x0002003e, + 0x0002003e, + 0x0002003e, + 0x0002003e, + 0x0002005f, + 0x0002005f, + 0x0002005f, + 0x0002005f, + }, + { + 0x00020060, + 0x00020060, + 0x00020060, + 0x00020060, + 0x0002006f, + 0x0002006f, + 0x0002006f, + 0x0002006f, + 0x0002007f, + 0x0002007f, + 0x0002007f, + 0x0002007f, + 0x00020080, + 0x00020080, + 0x00020080, + 0x00020080, + }, + { + 0x0010ffff, + 0x0011ffff, + 0x0012ffff, + 0x000fffff, + 0x0013ffff, + 0x0014ffff, + 0x0015ffff, + 0x0016ffff, + 0x0017ffff, + 0x0018ffff, + 0x0019ffff, + 0x001affff, + 0x001bffff, + 0x001cffff, + 0x001dffff, + 0x001effff, + }, + { + 0x0001002f, + 0x0001002f, + 0x00010030, + 0x00010030, + 0x00010031, + 0x00010031, + 0x00010032, + 0x00010032, + 0x00010033, + 0x00010033, + 0x00010034, + 0x00010034, + 0x00010035, + 0x00010035, + 0x0001003f, + 0x0001003f, + }, + { + 0x00010008, + 0x00010008, + 0x00010009, + 0x00010009, + 0x0001000a, + 0x0001000a, + 0x0001000b, + 0x0001000b, + 0x0001000c, + 0x0001000c, + 0x0001000d, + 0x0001000d, + 0x0001000e, + 0x0001000e, + 0x0001000f, + 0x0001000f, + }, + { + 0x00010010, + 0x00010010, + 0x00010011, + 0x00010011, + 0x0001001a, + 0x0001001a, + 0x0001001b, + 0x0001001b, + 0x0001001c, + 0x0001001c, + 0x0001001d, + 0x0001001d, + 0x0001001e, + 0x0001001e, + 0x0001001f, + 0x0001001f, + }, + { + 0x00010020, + 0x00010020, + 0x00010021, + 0x00010021, + 0x00010022, + 0x00010022, + 0x00010023, + 0x00010023, + 0x0001002b, + 0x0001002b, + 0x0001002c, + 0x0001002c, + 0x0001002d, + 0x0001002d, + 0x0001002e, + 0x0001002e, + }, + { + 0x00010040, + 0x00010040, + 0x00010041, + 0x00010041, + 0x00010042, + 0x00010042, + 0x00010043, + 0x00010043, + 0x00010044, + 0x00010044, + 0x00010045, + 0x00010045, + 0x00010046, + 0x00010046, + 0x00010047, + 0x00010047, + }, + { + 0x0001004f, + 0x0001004f, + 0x00010050, + 0x00010050, + 0x00010051, + 0x00010051, + 0x00010052, + 0x00010052, + 0x00010053, + 0x00010053, + 0x00010054, + 0x00010054, + 0x00010055, + 0x00010055, + 0x00010056, + 0x00010056, + }, + { + 0x00010057, + 0x00010057, + 0x00010058, + 0x00010058, + 0x00010059, + 0x00010059, + 0x00010061, + 0x00010061, + 0x00010062, + 0x00010062, + 0x00010063, + 0x00010063, + 0x00010064, + 0x00010064, + 0x00010065, + 0x00010065, + }, + { + 0x00010066, + 0x00010066, + 0x00010067, + 0x00010067, + 0x00010068, + 0x00010068, + 0x00010069, + 0x00010069, + 0x0001006a, + 0x0001006a, + 0x0001006b, + 0x0001006b, + 0x00010070, + 0x00010070, + 0x00010071, + 0x00010071, + }, + { + 0x00010072, + 0x00010072, + 0x00010073, + 0x00010073, + 0x00010074, + 0x00010074, + 0x00010075, + 0x00010075, + 0x00010076, + 0x00010076, + 0x00010077, + 0x00010077, + 0x00010078, + 0x00010078, + 0x00010079, + 0x00010079, + }, + { + 0x0001007a, + 0x0001007a, + 0x0001007b, + 0x0001007b, + 0x0001007c, + 0x0001007c, + 0x0001007d, + 0x0001007d, + 0x0001007e, + 0x0001007e, + 0x00010081, + 0x00010081, + 0x00010082, + 0x00010082, + 0x00010083, + 0x00010083, + }, + { + 0x00010084, + 0x00010084, + 0x00010085, + 0x00010085, + 0x00010086, + 0x00010086, + 0x00010087, + 0x00010087, + 0x00010088, + 0x00010088, + 0x00010089, + 0x00010089, + 0x0001008a, + 0x0001008a, + 0x0001008b, + 0x0001008b, + }, + { + 0x0001008c, + 0x0001008c, + 0x0001008d, + 0x0001008d, + 0x0001008e, + 0x0001008e, + 0x0001008f, + 0x0001008f, + 0x00010090, + 0x00010090, + 0x00010091, + 0x00010091, + 0x00010092, + 0x00010092, + 0x00010093, + 0x00010093, + }, + { + 0x00010094, + 0x00010094, + 0x00010095, + 0x00010095, + 0x00010096, + 0x00010096, + 0x00010097, + 0x00010097, + 0x00010098, + 0x00010098, + 0x00010099, + 0x00010099, + 0x0001009a, + 0x0001009a, + 0x0001009b, + 0x0001009b, + }, + { + 0x0001009c, + 0x0001009c, + 0x0001009d, + 0x0001009d, + 0x0001009e, + 0x0001009e, + 0x0001009f, + 0x0001009f, + 0x000100a0, + 0x000100a0, + 0x000100a1, + 0x000100a1, + 0x000100a2, + 0x000100a2, + 0x000100a3, + 0x000100a3, + }, + { + 0x000100a4, + 0x000100a4, + 0x000100a5, + 0x000100a5, + 0x000100a6, + 0x000100a6, + 0x000100a7, + 0x000100a7, + 0x000100a8, + 0x000100a8, + 0x000100a9, + 0x000100a9, + 0x000100aa, + 0x000100aa, + 0x000100ab, + 0x000100ab, + }, + { + 0x000100ac, + 0x000100ac, + 0x000100ad, + 0x000100ad, + 0x000100ae, + 0x000100ae, + 0x000100af, + 0x000100af, + 0x000100b0, + 0x000100b0, + 0x000100b1, + 0x000100b1, + 0x000100b2, + 0x000100b2, + 0x000100b3, + 0x000100b3, + }, + { + 0x0020ffff, + 0x0021ffff, + 0x0022ffff, + 0x0023ffff, + 0x0024ffff, + 0x0025ffff, + 0x0026ffff, + 0x0027ffff, + 0x0028ffff, + 0x0029ffff, + 0x002affff, + 0x002bffff, + 0x002cffff, + 0x002dffff, + 0x002effff, + 0x002fffff, + }, + { + 0x000100b4, + 0x000100b4, + 0x000100b5, + 0x000100b5, + 0x000100b6, + 0x000100b6, + 0x000100b7, + 0x000100b7, + 0x000100b8, + 0x000100b8, + 0x000100b9, + 0x000100b9, + 0x000100ba, + 0x000100ba, + 0x000100bb, + 0x000100bb, + }, + { + 0x000100bc, + 0x000100bc, + 0x000100bd, + 0x000100bd, + 0x000100be, + 0x000100be, + 0x000100bf, + 0x000100bf, + 0x000100c0, + 0x000100c0, + 0x000100c1, + 0x000100c1, + 0x000100c2, + 0x000100c2, + 0x000100c3, + 0x000100c3, + }, + { + 0x000100c4, + 0x000100c4, + 0x000100c5, + 0x000100c5, + 0x000100c6, + 0x000100c6, + 0x000100c7, + 0x000100c7, + 0x000100c8, + 0x000100c8, + 0x000100c9, + 0x000100c9, + 0x000100ca, + 0x000100ca, + 0x000100cb, + 0x000100cb, + }, + { + 0x000100cc, + 0x000100cc, + 0x000100cd, + 0x000100cd, + 0x000100ce, + 0x000100ce, + 0x000100cf, + 0x000100cf, + 0x000100d0, + 0x000100d0, + 0x000100d1, + 0x000100d1, + 0x000100d2, + 0x000100d2, + 0x000100d3, + 0x000100d3, + }, + { + 0x000100d4, + 0x000100d4, + 0x000100d5, + 0x000100d5, + 0x000100d6, + 0x000100d6, + 0x000100d7, + 0x000100d7, + 0x000100d8, + 0x000100d8, + 0x000100d9, + 0x000100d9, + 0x000100da, + 0x000100da, + 0x000100db, + 0x000100db, + }, + { + 0x000100dc, + 0x000100dc, + 0x000100dd, + 0x000100dd, + 0x000100de, + 0x000100de, + 0x000100df, + 0x000100df, + 0x000100e0, + 0x000100e0, + 0x000100e1, + 0x000100e1, + 0x000100e2, + 0x000100e2, + 0x000100e3, + 0x000100e3, + }, + { + 0x000100e4, + 0x000100e4, + 0x000100e5, + 0x000100e5, + 0x000100e6, + 0x000100e6, + 0x000100e7, + 0x000100e7, + 0x000100e8, + 0x000100e8, + 0x000100e9, + 0x000100e9, + 0x000100ea, + 0x000100ea, + 0x000100eb, + 0x000100eb, + }, + { + 0x000100ec, + 0x000100ec, + 0x000100ed, + 0x000100ed, + 0x000100ee, + 0x000100ee, + 0x000100ef, + 0x000100ef, + 0x000100f0, + 0x000100f0, + 0x000100f1, + 0x000100f1, + 0x000100f2, + 0x000100f2, + 0x000100f3, + 0x000100f3, + }, + { + 0x000100f4, + 0x000100f4, + 0x000100f5, + 0x000100f5, + 0x000100f6, + 0x000100f6, + 0x000100f7, + 0x000100f7, + 0x000100f8, + 0x000100f8, + 0x000100f9, + 0x000100f9, + 0x000100fa, + 0x000100fa, + 0x000100fb, + 0x000100fb, + }, + { + 0x000100fc, + 0x000100fc, + 0x000100fd, + 0x000100fd, + 0x000100fe, + 0x000100fe, + 0x000100ff, + 0x000100ff, + 0x00010100, + 0x00010100, + 0x00010101, + 0x00010101, + 0x00010102, + 0x00010102, + 0x00010103, + 0x00010103, + }, + { + 0x00010104, + 0x00010104, + 0x00010105, + 0x00010105, + 0x00010106, + 0x00010106, + 0x00010107, + 0x00010107, + 0x00010108, + 0x00010108, + 0x00010109, + 0x00010109, + 0x0001010a, + 0x0001010a, + 0x0001010b, + 0x0001010b, + }, + { + 0x0001010c, + 0x0001010c, + 0x0001010d, + 0x0001010d, + 0x0001010e, + 0x0001010e, + 0x0001010f, + 0x0001010f, + 0x00010110, + 0x00010110, + 0x00010111, + 0x00010111, + 0x00010112, + 0x00010112, + 0x00010113, + 0x00010113, + }, + { + 0x00010114, + 0x00010114, + 0x00010115, + 0x00010115, + 0x00010116, + 0x00010116, + 0x00010117, + 0x00010117, + 0x00010118, + 0x00010118, + 0x00010119, + 0x00010119, + 0x0001011a, + 0x0001011a, + 0x0001011b, + 0x0001011b, + }, + { + 0x0001011c, + 0x0001011c, + 0x0001011d, + 0x0001011d, + 0x0001011e, + 0x0001011e, + 0x0001011f, + 0x0001011f, + 0x00010120, + 0x00010120, + 0x00010121, + 0x00010121, + 0x00010122, + 0x00010122, + 0x00010123, + 0x00010123, + }, + { + 0x00010124, + 0x00010124, + 0x00010125, + 0x00010125, + 0x00010126, + 0x00010126, + 0x00010127, + 0x00010127, + 0x00010128, + 0x00010128, + 0x00010129, + 0x00010129, + 0x0001012a, + 0x0001012a, + 0x0001012b, + 0x0001012b, + }, + { + 0x0001012c, + 0x0001012c, + 0x0001012d, + 0x0001012d, + 0x0001012e, + 0x0001012e, + 0x0001012f, + 0x0001012f, + 0x00010130, + 0x00010130, + 0x00010131, + 0x00010131, + 0x00010132, + 0x00010132, + 0x00010133, + 0x00010133, + }, + { + 0x00010134, + 0x00010134, + 0x00010135, + 0x00010135, + 0x00010136, + 0x00010136, + 0x00010137, + 0x00010137, + 0x00010138, + 0x00010138, + 0x00010139, + 0x00010139, + 0x0001013a, + 0x0001013a, + 0x0001013b, + 0x0001013b, + }, + { + 0x0001013c, + 0x0001013c, + 0x0001013d, + 0x0001013d, + 0x0001013e, + 0x0001013e, + 0x0001013f, + 0x0001013f, + 0x00010140, + 0x00010140, + 0x00010141, + 0x00010141, + 0x00010142, + 0x00010142, + 0x00010143, + 0x00010143, + }, }; #endif @@ -2887,123 +29161,1509 @@ const uint32_t c_aauiCQMFHuffEnc46[400][2] = #else const uint16_t c_aauiCQMFHuffEnc46[400][2] = #endif -{ - {0x0002, 0x0002}, {0x0003, 0x0002}, {0x0005, 0x0003}, {0x0007, 0x0004}, {0x0009, 0x0005}, {0x000b, 0x0006}, {0x000d, 0x000a}, {0x000f, 0x0018}, - {0x0012, 0x00a6}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, {0x0013, 0x0006}, - {0x0013, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0002, 0x0003}, {0x0003, 0x0003}, {0x0005, 0x0004}, {0x0006, 0x0004}, - {0x0008, 0x0004}, {0x000a, 0x0006}, {0x000c, 0x0008}, {0x000e, 0x0011}, {0x0012, 0x00a7}, {0x0013, 0x000b}, {0x0013, 0x000c}, {0x0013, 0x000d}, - {0x0013, 0x000e}, {0x0013, 0x000f}, {0x0013, 0x0010}, {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0013, 0x0014}, {0x0013, 0x0015}, - {0x0005, 0x0005}, {0x0005, 0x0006}, {0x0005, 0x0007}, {0x0007, 0x0005}, {0x0009, 0x0006}, {0x000b, 0x0007}, {0x000d, 0x000b}, {0x000f, 0x0019}, - {0x0013, 0x0016}, {0x0013, 0x0017}, {0x0013, 0x0018}, {0x0013, 0x0019}, {0x0013, 0x001a}, {0x0013, 0x001b}, {0x0013, 0x001c}, {0x0013, 0x001d}, - {0x0013, 0x001e}, {0x0013, 0x001f}, {0x0013, 0x0020}, {0x0013, 0x0021}, {0x0007, 0x0006}, {0x0006, 0x0005}, {0x0007, 0x0007}, {0x0008, 0x0005}, - {0x000a, 0x0007}, {0x000c, 0x0009}, {0x000e, 0x0012}, {0x000f, 0x001a}, {0x0012, 0x00a8}, {0x0013, 0x0022}, {0x0013, 0x0023}, {0x0013, 0x0024}, - {0x0013, 0x0025}, {0x0013, 0x0026}, {0x0013, 0x0027}, {0x0013, 0x0028}, {0x0013, 0x0029}, {0x0013, 0x002a}, {0x0013, 0x002b}, {0x0013, 0x002c}, - {0x0009, 0x0007}, {0x0008, 0x0006}, {0x0008, 0x0007}, {0x000a, 0x0008}, {0x000b, 0x0008}, {0x000d, 0x000c}, {0x000e, 0x0013}, {0x0010, 0x002c}, - {0x0013, 0x002d}, {0x0013, 0x002e}, {0x0013, 0x002f}, {0x0013, 0x0030}, {0x0013, 0x0031}, {0x0013, 0x0032}, {0x0013, 0x0033}, {0x0013, 0x0034}, - {0x0013, 0x0035}, {0x0013, 0x0036}, {0x0013, 0x0037}, {0x0013, 0x0038}, {0x000b, 0x0009}, {0x000a, 0x0009}, {0x000b, 0x000a}, {0x000b, 0x000b}, - {0x000d, 0x000d}, {0x000f, 0x001b}, {0x0010, 0x002d}, {0x0013, 0x0039}, {0x0013, 0x003a}, {0x0013, 0x003b}, {0x0013, 0x003c}, {0x0013, 0x003d}, - {0x0013, 0x003e}, {0x0013, 0x003f}, {0x0013, 0x0040}, {0x0013, 0x0041}, {0x0013, 0x0042}, {0x0013, 0x0043}, {0x0013, 0x0044}, {0x0013, 0x0045}, - {0x000d, 0x000e}, {0x000c, 0x000a}, {0x000c, 0x000b}, {0x000d, 0x000f}, {0x000f, 0x001c}, {0x000f, 0x001d}, {0x0013, 0x0046}, {0x0013, 0x0047}, - {0x0013, 0x0048}, {0x0013, 0x0049}, {0x0013, 0x004a}, {0x0013, 0x004b}, {0x0013, 0x004c}, {0x0013, 0x004d}, {0x0013, 0x004e}, {0x0013, 0x004f}, - {0x0013, 0x0050}, {0x0013, 0x0051}, {0x0013, 0x0052}, {0x0013, 0x0053}, {0x000f, 0x001e}, {0x000f, 0x001f}, {0x000f, 0x0020}, {0x000f, 0x0021}, - {0x0010, 0x002e}, {0x0012, 0x00a9}, {0x0013, 0x0054}, {0x0013, 0x0055}, {0x0012, 0x00aa}, {0x0013, 0x0056}, {0x0013, 0x0057}, {0x0013, 0x0058}, - {0x0013, 0x0059}, {0x0013, 0x005a}, {0x0013, 0x005b}, {0x0013, 0x005c}, {0x0013, 0x005d}, {0x0013, 0x005e}, {0x0013, 0x005f}, {0x0013, 0x0060}, - {0x0013, 0x0061}, {0x0010, 0x002f}, {0x0013, 0x0062}, {0x0011, 0x0057}, {0x0013, 0x0063}, {0x0013, 0x0064}, {0x0013, 0x0065}, {0x0013, 0x0066}, - {0x0013, 0x0067}, {0x0013, 0x0068}, {0x0013, 0x0069}, {0x0013, 0x006a}, {0x0013, 0x006b}, {0x0013, 0x006c}, {0x0013, 0x006d}, {0x0013, 0x006e}, - {0x0013, 0x006f}, {0x0013, 0x0070}, {0x0013, 0x0071}, {0x0013, 0x0072}, {0x0013, 0x0073}, {0x0013, 0x0074}, {0x0013, 0x0075}, {0x0013, 0x0076}, - {0x0013, 0x0077}, {0x0013, 0x0078}, {0x0013, 0x0079}, {0x0013, 0x007a}, {0x0013, 0x007b}, {0x0013, 0x007c}, {0x0013, 0x007d}, {0x0013, 0x007e}, - {0x0013, 0x007f}, {0x0013, 0x0080}, {0x0013, 0x0081}, {0x0013, 0x0082}, {0x0013, 0x0083}, {0x0013, 0x0084}, {0x0013, 0x0085}, {0x0013, 0x0086}, - {0x0013, 0x0087}, {0x0013, 0x0088}, {0x0013, 0x0089}, {0x0013, 0x008a}, {0x0013, 0x008b}, {0x0013, 0x008c}, {0x0013, 0x008d}, {0x0013, 0x008e}, - {0x0013, 0x008f}, {0x0013, 0x0090}, {0x0013, 0x0091}, {0x0013, 0x0092}, {0x0013, 0x0093}, {0x0013, 0x0094}, {0x0013, 0x0095}, {0x0013, 0x0096}, - {0x0013, 0x0097}, {0x0013, 0x0098}, {0x0013, 0x0099}, {0x0013, 0x009a}, {0x0013, 0x009b}, {0x0013, 0x009c}, {0x0013, 0x009d}, {0x0013, 0x009e}, - {0x0013, 0x009f}, {0x0013, 0x00a0}, {0x0013, 0x00a1}, {0x0013, 0x00a2}, {0x0013, 0x00a3}, {0x0013, 0x00a4}, {0x0013, 0x00a5}, {0x0013, 0x00a6}, - {0x0013, 0x00a7}, {0x0013, 0x00a8}, {0x0013, 0x00a9}, {0x0013, 0x00aa}, {0x0013, 0x00ab}, {0x0013, 0x00ac}, {0x0013, 0x00ad}, {0x0013, 0x00ae}, - {0x0013, 0x00af}, {0x0013, 0x00b0}, {0x0013, 0x00b1}, {0x0013, 0x00b2}, {0x0013, 0x00b3}, {0x0013, 0x00b4}, {0x0013, 0x00b5}, {0x0013, 0x00b6}, - {0x0013, 0x00b7}, {0x0013, 0x00b8}, {0x0013, 0x00b9}, {0x0013, 0x00ba}, {0x0013, 0x00bb}, {0x0013, 0x00bc}, {0x0013, 0x00bd}, {0x0013, 0x00be}, - {0x0013, 0x00bf}, {0x0013, 0x00c0}, {0x0013, 0x00c1}, {0x0013, 0x00c2}, {0x0013, 0x00c3}, {0x0013, 0x00c4}, {0x0013, 0x00c5}, {0x0013, 0x00c6}, - {0x0013, 0x00c7}, {0x0013, 0x00c8}, {0x0013, 0x00c9}, {0x0013, 0x00ca}, {0x0013, 0x00cb}, {0x0013, 0x00cc}, {0x0013, 0x00cd}, {0x0013, 0x00ce}, - {0x0013, 0x00cf}, {0x0013, 0x00d0}, {0x0013, 0x00d1}, {0x0013, 0x00d2}, {0x0013, 0x00d3}, {0x0013, 0x00d4}, {0x0013, 0x00d5}, {0x0013, 0x00d6}, - {0x0013, 0x00d7}, {0x0013, 0x00d8}, {0x0013, 0x00d9}, {0x0013, 0x00da}, {0x0013, 0x00db}, {0x0013, 0x00dc}, {0x0013, 0x00dd}, {0x0013, 0x00de}, - {0x0013, 0x00df}, {0x0013, 0x00e0}, {0x0013, 0x00e1}, {0x0013, 0x00e2}, {0x0013, 0x00e3}, {0x0013, 0x00e4}, {0x0013, 0x00e5}, {0x0013, 0x00e6}, - {0x0013, 0x00e7}, {0x0013, 0x00e8}, {0x0013, 0x00e9}, {0x0013, 0x00ea}, {0x0013, 0x00eb}, {0x0013, 0x00ec}, {0x0013, 0x00ed}, {0x0013, 0x00ee}, - {0x0013, 0x00ef}, {0x0013, 0x00f0}, {0x0013, 0x00f1}, {0x0013, 0x00f2}, {0x0013, 0x00f3}, {0x0013, 0x00f4}, {0x0013, 0x00f5}, {0x0013, 0x00f6}, - {0x0013, 0x00f7}, {0x0013, 0x00f8}, {0x0013, 0x00f9}, {0x0013, 0x00fa}, {0x0013, 0x00fb}, {0x0013, 0x00fc}, {0x0013, 0x00fd}, {0x0013, 0x00fe}, - {0x0013, 0x00ff}, {0x0013, 0x0100}, {0x0013, 0x0101}, {0x0013, 0x0102}, {0x0013, 0x0103}, {0x0013, 0x0104}, {0x0013, 0x0105}, {0x0013, 0x0106}, - {0x0013, 0x0107}, {0x0013, 0x0108}, {0x0013, 0x0109}, {0x0013, 0x010a}, {0x0013, 0x010b}, {0x0013, 0x010c}, {0x0013, 0x010d}, {0x0013, 0x010e}, - {0x0013, 0x010f}, {0x0013, 0x0110}, {0x0013, 0x0111}, {0x0013, 0x0112}, {0x0013, 0x0113}, {0x0013, 0x0114}, {0x0013, 0x0115}, {0x0013, 0x0116}, - {0x0013, 0x0117}, {0x0013, 0x0118}, {0x0013, 0x0119}, {0x0013, 0x011a}, {0x0013, 0x011b}, {0x0013, 0x011c}, {0x0013, 0x011d}, {0x0013, 0x011e}, - {0x0013, 0x011f}, {0x0013, 0x0120}, {0x0013, 0x0121}, {0x0013, 0x0122}, {0x0013, 0x0123}, {0x0013, 0x0124}, {0x0013, 0x0125}, {0x0013, 0x0126}, - {0x0013, 0x0127}, {0x0013, 0x0128}, {0x0013, 0x0129}, {0x0013, 0x012a}, {0x0013, 0x012b}, {0x0013, 0x012c}, {0x0013, 0x012d}, {0x0013, 0x012e}, - {0x0013, 0x012f}, {0x0013, 0x0130}, {0x0013, 0x0131}, {0x0013, 0x0132}, {0x0013, 0x0133}, {0x0013, 0x0134}, {0x0013, 0x0135}, {0x0013, 0x0136}, - {0x0013, 0x0137}, {0x0013, 0x0138}, {0x0013, 0x0139}, {0x0013, 0x013a}, {0x0013, 0x013b}, {0x0013, 0x013c}, {0x0013, 0x013d}, {0x0013, 0x013e}, - {0x0013, 0x013f}, {0x0013, 0x0140}, {0x0013, 0x0141}, {0x0013, 0x0142}, {0x0013, 0x0143}, {0x0013, 0x0144}, {0x0013, 0x0145}, {0x0013, 0x0146}, - {0x0013, 0x0147}, {0x0013, 0x0148}, {0x0013, 0x0149}, {0x0013, 0x014a}, {0x0013, 0x014b}, {0x0012, 0x00ab}, {0x0012, 0x00ac}, {0x0012, 0x00ad}, -}; + { + { 0x0002, 0x0002 }, + { 0x0003, 0x0002 }, + { 0x0005, 0x0003 }, + { 0x0007, 0x0004 }, + { 0x0009, 0x0005 }, + { 0x000b, 0x0006 }, + { 0x000d, 0x000a }, + { 0x000f, 0x0018 }, + { 0x0012, 0x00a6 }, + { 0x0013, 0x0000 }, + { 0x0013, 0x0001 }, + { 0x0013, 0x0002 }, + { 0x0013, 0x0003 }, + { 0x0013, 0x0004 }, + { 0x0013, 0x0005 }, + { 0x0013, 0x0006 }, + { 0x0013, 0x0007 }, + { 0x0013, 0x0008 }, + { 0x0013, 0x0009 }, + { 0x0013, 0x000a }, + { 0x0002, 0x0003 }, + { 0x0003, 0x0003 }, + { 0x0005, 0x0004 }, + { 0x0006, 0x0004 }, + { 0x0008, 0x0004 }, + { 0x000a, 0x0006 }, + { 0x000c, 0x0008 }, + { 0x000e, 0x0011 }, + { 0x0012, 0x00a7 }, + { 0x0013, 0x000b }, + { 0x0013, 0x000c }, + { 0x0013, 0x000d }, + { 0x0013, 0x000e }, + { 0x0013, 0x000f }, + { 0x0013, 0x0010 }, + { 0x0013, 0x0011 }, + { 0x0013, 0x0012 }, + { 0x0013, 0x0013 }, + { 0x0013, 0x0014 }, + { 0x0013, 0x0015 }, + { 0x0005, 0x0005 }, + { 0x0005, 0x0006 }, + { 0x0005, 0x0007 }, + { 0x0007, 0x0005 }, + { 0x0009, 0x0006 }, + { 0x000b, 0x0007 }, + { 0x000d, 0x000b }, + { 0x000f, 0x0019 }, + { 0x0013, 0x0016 }, + { 0x0013, 0x0017 }, + { 0x0013, 0x0018 }, + { 0x0013, 0x0019 }, + { 0x0013, 0x001a }, + { 0x0013, 0x001b }, + { 0x0013, 0x001c }, + { 0x0013, 0x001d }, + { 0x0013, 0x001e }, + { 0x0013, 0x001f }, + { 0x0013, 0x0020 }, + { 0x0013, 0x0021 }, + { 0x0007, 0x0006 }, + { 0x0006, 0x0005 }, + { 0x0007, 0x0007 }, + { 0x0008, 0x0005 }, + { 0x000a, 0x0007 }, + { 0x000c, 0x0009 }, + { 0x000e, 0x0012 }, + { 0x000f, 0x001a }, + { 0x0012, 0x00a8 }, + { 0x0013, 0x0022 }, + { 0x0013, 0x0023 }, + { 0x0013, 0x0024 }, + { 0x0013, 0x0025 }, + { 0x0013, 0x0026 }, + { 0x0013, 0x0027 }, + { 0x0013, 0x0028 }, + { 0x0013, 0x0029 }, + { 0x0013, 0x002a }, + { 0x0013, 0x002b }, + { 0x0013, 0x002c }, + { 0x0009, 0x0007 }, + { 0x0008, 0x0006 }, + { 0x0008, 0x0007 }, + { 0x000a, 0x0008 }, + { 0x000b, 0x0008 }, + { 0x000d, 0x000c }, + { 0x000e, 0x0013 }, + { 0x0010, 0x002c }, + { 0x0013, 0x002d }, + { 0x0013, 0x002e }, + { 0x0013, 0x002f }, + { 0x0013, 0x0030 }, + { 0x0013, 0x0031 }, + { 0x0013, 0x0032 }, + { 0x0013, 0x0033 }, + { 0x0013, 0x0034 }, + { 0x0013, 0x0035 }, + { 0x0013, 0x0036 }, + { 0x0013, 0x0037 }, + { 0x0013, 0x0038 }, + { 0x000b, 0x0009 }, + { 0x000a, 0x0009 }, + { 0x000b, 0x000a }, + { 0x000b, 0x000b }, + { 0x000d, 0x000d }, + { 0x000f, 0x001b }, + { 0x0010, 0x002d }, + { 0x0013, 0x0039 }, + { 0x0013, 0x003a }, + { 0x0013, 0x003b }, + { 0x0013, 0x003c }, + { 0x0013, 0x003d }, + { 0x0013, 0x003e }, + { 0x0013, 0x003f }, + { 0x0013, 0x0040 }, + { 0x0013, 0x0041 }, + { 0x0013, 0x0042 }, + { 0x0013, 0x0043 }, + { 0x0013, 0x0044 }, + { 0x0013, 0x0045 }, + { 0x000d, 0x000e }, + { 0x000c, 0x000a }, + { 0x000c, 0x000b }, + { 0x000d, 0x000f }, + { 0x000f, 0x001c }, + { 0x000f, 0x001d }, + { 0x0013, 0x0046 }, + { 0x0013, 0x0047 }, + { 0x0013, 0x0048 }, + { 0x0013, 0x0049 }, + { 0x0013, 0x004a }, + { 0x0013, 0x004b }, + { 0x0013, 0x004c }, + { 0x0013, 0x004d }, + { 0x0013, 0x004e }, + { 0x0013, 0x004f }, + { 0x0013, 0x0050 }, + { 0x0013, 0x0051 }, + { 0x0013, 0x0052 }, + { 0x0013, 0x0053 }, + { 0x000f, 0x001e }, + { 0x000f, 0x001f }, + { 0x000f, 0x0020 }, + { 0x000f, 0x0021 }, + { 0x0010, 0x002e }, + { 0x0012, 0x00a9 }, + { 0x0013, 0x0054 }, + { 0x0013, 0x0055 }, + { 0x0012, 0x00aa }, + { 0x0013, 0x0056 }, + { 0x0013, 0x0057 }, + { 0x0013, 0x0058 }, + { 0x0013, 0x0059 }, + { 0x0013, 0x005a }, + { 0x0013, 0x005b }, + { 0x0013, 0x005c }, + { 0x0013, 0x005d }, + { 0x0013, 0x005e }, + { 0x0013, 0x005f }, + { 0x0013, 0x0060 }, + { 0x0013, 0x0061 }, + { 0x0010, 0x002f }, + { 0x0013, 0x0062 }, + { 0x0011, 0x0057 }, + { 0x0013, 0x0063 }, + { 0x0013, 0x0064 }, + { 0x0013, 0x0065 }, + { 0x0013, 0x0066 }, + { 0x0013, 0x0067 }, + { 0x0013, 0x0068 }, + { 0x0013, 0x0069 }, + { 0x0013, 0x006a }, + { 0x0013, 0x006b }, + { 0x0013, 0x006c }, + { 0x0013, 0x006d }, + { 0x0013, 0x006e }, + { 0x0013, 0x006f }, + { 0x0013, 0x0070 }, + { 0x0013, 0x0071 }, + { 0x0013, 0x0072 }, + { 0x0013, 0x0073 }, + { 0x0013, 0x0074 }, + { 0x0013, 0x0075 }, + { 0x0013, 0x0076 }, + { 0x0013, 0x0077 }, + { 0x0013, 0x0078 }, + { 0x0013, 0x0079 }, + { 0x0013, 0x007a }, + { 0x0013, 0x007b }, + { 0x0013, 0x007c }, + { 0x0013, 0x007d }, + { 0x0013, 0x007e }, + { 0x0013, 0x007f }, + { 0x0013, 0x0080 }, + { 0x0013, 0x0081 }, + { 0x0013, 0x0082 }, + { 0x0013, 0x0083 }, + { 0x0013, 0x0084 }, + { 0x0013, 0x0085 }, + { 0x0013, 0x0086 }, + { 0x0013, 0x0087 }, + { 0x0013, 0x0088 }, + { 0x0013, 0x0089 }, + { 0x0013, 0x008a }, + { 0x0013, 0x008b }, + { 0x0013, 0x008c }, + { 0x0013, 0x008d }, + { 0x0013, 0x008e }, + { 0x0013, 0x008f }, + { 0x0013, 0x0090 }, + { 0x0013, 0x0091 }, + { 0x0013, 0x0092 }, + { 0x0013, 0x0093 }, + { 0x0013, 0x0094 }, + { 0x0013, 0x0095 }, + { 0x0013, 0x0096 }, + { 0x0013, 0x0097 }, + { 0x0013, 0x0098 }, + { 0x0013, 0x0099 }, + { 0x0013, 0x009a }, + { 0x0013, 0x009b }, + { 0x0013, 0x009c }, + { 0x0013, 0x009d }, + { 0x0013, 0x009e }, + { 0x0013, 0x009f }, + { 0x0013, 0x00a0 }, + { 0x0013, 0x00a1 }, + { 0x0013, 0x00a2 }, + { 0x0013, 0x00a3 }, + { 0x0013, 0x00a4 }, + { 0x0013, 0x00a5 }, + { 0x0013, 0x00a6 }, + { 0x0013, 0x00a7 }, + { 0x0013, 0x00a8 }, + { 0x0013, 0x00a9 }, + { 0x0013, 0x00aa }, + { 0x0013, 0x00ab }, + { 0x0013, 0x00ac }, + { 0x0013, 0x00ad }, + { 0x0013, 0x00ae }, + { 0x0013, 0x00af }, + { 0x0013, 0x00b0 }, + { 0x0013, 0x00b1 }, + { 0x0013, 0x00b2 }, + { 0x0013, 0x00b3 }, + { 0x0013, 0x00b4 }, + { 0x0013, 0x00b5 }, + { 0x0013, 0x00b6 }, + { 0x0013, 0x00b7 }, + { 0x0013, 0x00b8 }, + { 0x0013, 0x00b9 }, + { 0x0013, 0x00ba }, + { 0x0013, 0x00bb }, + { 0x0013, 0x00bc }, + { 0x0013, 0x00bd }, + { 0x0013, 0x00be }, + { 0x0013, 0x00bf }, + { 0x0013, 0x00c0 }, + { 0x0013, 0x00c1 }, + { 0x0013, 0x00c2 }, + { 0x0013, 0x00c3 }, + { 0x0013, 0x00c4 }, + { 0x0013, 0x00c5 }, + { 0x0013, 0x00c6 }, + { 0x0013, 0x00c7 }, + { 0x0013, 0x00c8 }, + { 0x0013, 0x00c9 }, + { 0x0013, 0x00ca }, + { 0x0013, 0x00cb }, + { 0x0013, 0x00cc }, + { 0x0013, 0x00cd }, + { 0x0013, 0x00ce }, + { 0x0013, 0x00cf }, + { 0x0013, 0x00d0 }, + { 0x0013, 0x00d1 }, + { 0x0013, 0x00d2 }, + { 0x0013, 0x00d3 }, + { 0x0013, 0x00d4 }, + { 0x0013, 0x00d5 }, + { 0x0013, 0x00d6 }, + { 0x0013, 0x00d7 }, + { 0x0013, 0x00d8 }, + { 0x0013, 0x00d9 }, + { 0x0013, 0x00da }, + { 0x0013, 0x00db }, + { 0x0013, 0x00dc }, + { 0x0013, 0x00dd }, + { 0x0013, 0x00de }, + { 0x0013, 0x00df }, + { 0x0013, 0x00e0 }, + { 0x0013, 0x00e1 }, + { 0x0013, 0x00e2 }, + { 0x0013, 0x00e3 }, + { 0x0013, 0x00e4 }, + { 0x0013, 0x00e5 }, + { 0x0013, 0x00e6 }, + { 0x0013, 0x00e7 }, + { 0x0013, 0x00e8 }, + { 0x0013, 0x00e9 }, + { 0x0013, 0x00ea }, + { 0x0013, 0x00eb }, + { 0x0013, 0x00ec }, + { 0x0013, 0x00ed }, + { 0x0013, 0x00ee }, + { 0x0013, 0x00ef }, + { 0x0013, 0x00f0 }, + { 0x0013, 0x00f1 }, + { 0x0013, 0x00f2 }, + { 0x0013, 0x00f3 }, + { 0x0013, 0x00f4 }, + { 0x0013, 0x00f5 }, + { 0x0013, 0x00f6 }, + { 0x0013, 0x00f7 }, + { 0x0013, 0x00f8 }, + { 0x0013, 0x00f9 }, + { 0x0013, 0x00fa }, + { 0x0013, 0x00fb }, + { 0x0013, 0x00fc }, + { 0x0013, 0x00fd }, + { 0x0013, 0x00fe }, + { 0x0013, 0x00ff }, + { 0x0013, 0x0100 }, + { 0x0013, 0x0101 }, + { 0x0013, 0x0102 }, + { 0x0013, 0x0103 }, + { 0x0013, 0x0104 }, + { 0x0013, 0x0105 }, + { 0x0013, 0x0106 }, + { 0x0013, 0x0107 }, + { 0x0013, 0x0108 }, + { 0x0013, 0x0109 }, + { 0x0013, 0x010a }, + { 0x0013, 0x010b }, + { 0x0013, 0x010c }, + { 0x0013, 0x010d }, + { 0x0013, 0x010e }, + { 0x0013, 0x010f }, + { 0x0013, 0x0110 }, + { 0x0013, 0x0111 }, + { 0x0013, 0x0112 }, + { 0x0013, 0x0113 }, + { 0x0013, 0x0114 }, + { 0x0013, 0x0115 }, + { 0x0013, 0x0116 }, + { 0x0013, 0x0117 }, + { 0x0013, 0x0118 }, + { 0x0013, 0x0119 }, + { 0x0013, 0x011a }, + { 0x0013, 0x011b }, + { 0x0013, 0x011c }, + { 0x0013, 0x011d }, + { 0x0013, 0x011e }, + { 0x0013, 0x011f }, + { 0x0013, 0x0120 }, + { 0x0013, 0x0121 }, + { 0x0013, 0x0122 }, + { 0x0013, 0x0123 }, + { 0x0013, 0x0124 }, + { 0x0013, 0x0125 }, + { 0x0013, 0x0126 }, + { 0x0013, 0x0127 }, + { 0x0013, 0x0128 }, + { 0x0013, 0x0129 }, + { 0x0013, 0x012a }, + { 0x0013, 0x012b }, + { 0x0013, 0x012c }, + { 0x0013, 0x012d }, + { 0x0013, 0x012e }, + { 0x0013, 0x012f }, + { 0x0013, 0x0130 }, + { 0x0013, 0x0131 }, + { 0x0013, 0x0132 }, + { 0x0013, 0x0133 }, + { 0x0013, 0x0134 }, + { 0x0013, 0x0135 }, + { 0x0013, 0x0136 }, + { 0x0013, 0x0137 }, + { 0x0013, 0x0138 }, + { 0x0013, 0x0139 }, + { 0x0013, 0x013a }, + { 0x0013, 0x013b }, + { 0x0013, 0x013c }, + { 0x0013, 0x013d }, + { 0x0013, 0x013e }, + { 0x0013, 0x013f }, + { 0x0013, 0x0140 }, + { 0x0013, 0x0141 }, + { 0x0013, 0x0142 }, + { 0x0013, 0x0143 }, + { 0x0013, 0x0144 }, + { 0x0013, 0x0145 }, + { 0x0013, 0x0146 }, + { 0x0013, 0x0147 }, + { 0x0013, 0x0148 }, + { 0x0013, 0x0149 }, + { 0x0013, 0x014a }, + { 0x0013, 0x014b }, + { 0x0012, 0x00ab }, + { 0x0012, 0x00ac }, + { 0x0012, 0x00ad }, + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec46[61][16] = -{ - {0x0004ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x00010001, 0x00010001, 0x00010015, 0x00010015, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020014, 0x00020014, 0x00020014, 0x00020014, }, - {0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003d, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, }, - {0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, }, - {0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, }, - {0x0008ffff, 0x0007ffff, 0x0005ffff, 0x0006ffff, 0x00000018, 0x0000003f, 0x00000051, 0x00000052, 0x00010003, 0x00010003, 0x0001002b, 0x0001002b, 0x0001003c, 0x0001003c, 0x0001003e, 0x0001003e, }, - {0x00020053, 0x00020053, 0x00020053, 0x00020053, 0x00020065, 0x00020065, 0x00020065, 0x00020065, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, }, - {0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, 0x00030050, }, - {0x00010054, 0x00010054, 0x00010064, 0x00010064, 0x00010066, 0x00010066, 0x00010067, 0x00010067, 0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x00020040, 0x00020040, 0x00020040, 0x00020040, }, - {0x0012ffff, 0x0023ffff, 0x000effff, 0x000dffff, 0x000cffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x0000001a, 0x00000041, 0x00000079, 0x0000007a, 0x00010005, 0x00010005, 0x0001002d, 0x0001002d, }, - {0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, }, - {0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, }, - {0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x00030078, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, 0x0003007b, }, - {0x0001008e, 0x0001008e, 0x0001008f, 0x0001008f, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x00020042, 0x00020042, 0x00020042, 0x00020042, 0x00020056, 0x00020056, 0x00020056, 0x00020056, }, - {0x00010007, 0x00010007, 0x0001002f, 0x0001002f, 0x00010043, 0x00010043, 0x00010069, 0x00010069, 0x0001007c, 0x0001007c, 0x0001007d, 0x0001007d, 0x0001008c, 0x0001008c, 0x0001008d, 0x0001008d, }, - {0x0034ffff, 0x0035ffff, 0x0036ffff, 0x0037ffff, 0x0038ffff, 0x0039ffff, 0x003affff, 0x003bffff, 0x003cffff, 0x0010ffff, 0x0011ffff, 0x000fffff, 0x00000057, 0x0000006a, 0x00000090, 0x000000a1, }, - {0x0002018e, 0x0002018e, 0x0002018e, 0x0002018e, 0x0002018f, 0x0002018f, 0x0002018f, 0x0002018f, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, }, - {0x00010189, 0x00010189, 0x0001018a, 0x0001018a, 0x0001018b, 0x0001018b, 0x0001018c, 0x0001018c, 0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, }, - {0x00020044, 0x00020044, 0x00020044, 0x00020044, 0x00020091, 0x00020091, 0x00020091, 0x00020091, 0x00020094, 0x00020094, 0x00020094, 0x00020094, 0x0002018d, 0x0002018d, 0x0002018d, 0x0002018d, }, - {0x0013ffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x0014ffff, 0x0015ffff, 0x0019ffff, 0x001affff, 0x001bffff, 0x001cffff, 0x001dffff, 0x001effff, 0x001fffff, 0x0020ffff, 0x0021ffff, 0x0022ffff, }, - {0x00010009, 0x00010009, 0x0001000a, 0x0001000a, 0x0001000b, 0x0001000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, 0x00010010, 0x00010010, }, - {0x0001003a, 0x0001003a, 0x0001003b, 0x0001003b, 0x00010045, 0x00010045, 0x00010046, 0x00010046, 0x00010047, 0x00010047, 0x00010048, 0x00010048, 0x00010049, 0x00010049, 0x0001004a, 0x0001004a, }, - {0x0001004b, 0x0001004b, 0x0001004c, 0x0001004c, 0x0001004d, 0x0001004d, 0x0001004e, 0x0001004e, 0x0001004f, 0x0001004f, 0x00010058, 0x00010058, 0x00010059, 0x00010059, 0x0001005a, 0x0001005a, }, - {0x00010011, 0x00010011, 0x00010012, 0x00010012, 0x00010013, 0x00010013, 0x0001001d, 0x0001001d, 0x0001001e, 0x0001001e, 0x0001001f, 0x0001001f, 0x00010020, 0x00010020, 0x00010021, 0x00010021, }, - {0x00010022, 0x00010022, 0x00010023, 0x00010023, 0x00010024, 0x00010024, 0x00010025, 0x00010025, 0x00010026, 0x00010026, 0x00010027, 0x00010027, 0x00010030, 0x00010030, 0x00010031, 0x00010031, }, - {0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x00010036, 0x00010036, 0x00010037, 0x00010037, 0x00010038, 0x00010038, 0x00010039, 0x00010039, }, - {0x0001005b, 0x0001005b, 0x0001005c, 0x0001005c, 0x0001005d, 0x0001005d, 0x0001005e, 0x0001005e, 0x0001005f, 0x0001005f, 0x00010060, 0x00010060, 0x00010061, 0x00010061, 0x00010062, 0x00010062, }, - {0x00010063, 0x00010063, 0x0001006b, 0x0001006b, 0x0001006c, 0x0001006c, 0x0001006d, 0x0001006d, 0x0001006e, 0x0001006e, 0x0001006f, 0x0001006f, 0x00010070, 0x00010070, 0x00010071, 0x00010071, }, - {0x00010072, 0x00010072, 0x00010073, 0x00010073, 0x00010074, 0x00010074, 0x00010075, 0x00010075, 0x00010076, 0x00010076, 0x00010077, 0x00010077, 0x0001007e, 0x0001007e, 0x0001007f, 0x0001007f, }, - {0x00010080, 0x00010080, 0x00010081, 0x00010081, 0x00010082, 0x00010082, 0x00010083, 0x00010083, 0x00010084, 0x00010084, 0x00010085, 0x00010085, 0x00010086, 0x00010086, 0x00010087, 0x00010087, }, - {0x00010088, 0x00010088, 0x00010089, 0x00010089, 0x0001008a, 0x0001008a, 0x0001008b, 0x0001008b, 0x00010092, 0x00010092, 0x00010093, 0x00010093, 0x00010095, 0x00010095, 0x00010096, 0x00010096, }, - {0x00010097, 0x00010097, 0x00010098, 0x00010098, 0x00010099, 0x00010099, 0x0001009a, 0x0001009a, 0x0001009b, 0x0001009b, 0x0001009c, 0x0001009c, 0x0001009d, 0x0001009d, 0x0001009e, 0x0001009e, }, - {0x0001009f, 0x0001009f, 0x000100a0, 0x000100a0, 0x000100a2, 0x000100a2, 0x000100a4, 0x000100a4, 0x000100a5, 0x000100a5, 0x000100a6, 0x000100a6, 0x000100a7, 0x000100a7, 0x000100a8, 0x000100a8, }, - {0x000100a9, 0x000100a9, 0x000100aa, 0x000100aa, 0x000100ab, 0x000100ab, 0x000100ac, 0x000100ac, 0x000100ad, 0x000100ad, 0x000100ae, 0x000100ae, 0x000100af, 0x000100af, 0x000100b0, 0x000100b0, }, - {0x000100b1, 0x000100b1, 0x000100b2, 0x000100b2, 0x000100b3, 0x000100b3, 0x000100b4, 0x000100b4, 0x000100b5, 0x000100b5, 0x000100b6, 0x000100b6, 0x000100b7, 0x000100b7, 0x000100b8, 0x000100b8, }, - {0x000100b9, 0x000100b9, 0x000100ba, 0x000100ba, 0x000100bb, 0x000100bb, 0x000100bc, 0x000100bc, 0x000100bd, 0x000100bd, 0x000100be, 0x000100be, 0x000100bf, 0x000100bf, 0x000100c0, 0x000100c0, }, - {0x0024ffff, 0x0025ffff, 0x0026ffff, 0x0027ffff, 0x0028ffff, 0x0029ffff, 0x002affff, 0x002bffff, 0x002cffff, 0x002dffff, 0x002effff, 0x002fffff, 0x0030ffff, 0x0031ffff, 0x0032ffff, 0x0033ffff, }, - {0x000100c1, 0x000100c1, 0x000100c2, 0x000100c2, 0x000100c3, 0x000100c3, 0x000100c4, 0x000100c4, 0x000100c5, 0x000100c5, 0x000100c6, 0x000100c6, 0x000100c7, 0x000100c7, 0x000100c8, 0x000100c8, }, - {0x000100c9, 0x000100c9, 0x000100ca, 0x000100ca, 0x000100cb, 0x000100cb, 0x000100cc, 0x000100cc, 0x000100cd, 0x000100cd, 0x000100ce, 0x000100ce, 0x000100cf, 0x000100cf, 0x000100d0, 0x000100d0, }, - {0x000100d1, 0x000100d1, 0x000100d2, 0x000100d2, 0x000100d3, 0x000100d3, 0x000100d4, 0x000100d4, 0x000100d5, 0x000100d5, 0x000100d6, 0x000100d6, 0x000100d7, 0x000100d7, 0x000100d8, 0x000100d8, }, - {0x000100d9, 0x000100d9, 0x000100da, 0x000100da, 0x000100db, 0x000100db, 0x000100dc, 0x000100dc, 0x000100dd, 0x000100dd, 0x000100de, 0x000100de, 0x000100df, 0x000100df, 0x000100e0, 0x000100e0, }, - {0x000100e1, 0x000100e1, 0x000100e2, 0x000100e2, 0x000100e3, 0x000100e3, 0x000100e4, 0x000100e4, 0x000100e5, 0x000100e5, 0x000100e6, 0x000100e6, 0x000100e7, 0x000100e7, 0x000100e8, 0x000100e8, }, - {0x000100e9, 0x000100e9, 0x000100ea, 0x000100ea, 0x000100eb, 0x000100eb, 0x000100ec, 0x000100ec, 0x000100ed, 0x000100ed, 0x000100ee, 0x000100ee, 0x000100ef, 0x000100ef, 0x000100f0, 0x000100f0, }, - {0x000100f1, 0x000100f1, 0x000100f2, 0x000100f2, 0x000100f3, 0x000100f3, 0x000100f4, 0x000100f4, 0x000100f5, 0x000100f5, 0x000100f6, 0x000100f6, 0x000100f7, 0x000100f7, 0x000100f8, 0x000100f8, }, - {0x000100f9, 0x000100f9, 0x000100fa, 0x000100fa, 0x000100fb, 0x000100fb, 0x000100fc, 0x000100fc, 0x000100fd, 0x000100fd, 0x000100fe, 0x000100fe, 0x000100ff, 0x000100ff, 0x00010100, 0x00010100, }, - {0x00010101, 0x00010101, 0x00010102, 0x00010102, 0x00010103, 0x00010103, 0x00010104, 0x00010104, 0x00010105, 0x00010105, 0x00010106, 0x00010106, 0x00010107, 0x00010107, 0x00010108, 0x00010108, }, - {0x00010109, 0x00010109, 0x0001010a, 0x0001010a, 0x0001010b, 0x0001010b, 0x0001010c, 0x0001010c, 0x0001010d, 0x0001010d, 0x0001010e, 0x0001010e, 0x0001010f, 0x0001010f, 0x00010110, 0x00010110, }, - {0x00010111, 0x00010111, 0x00010112, 0x00010112, 0x00010113, 0x00010113, 0x00010114, 0x00010114, 0x00010115, 0x00010115, 0x00010116, 0x00010116, 0x00010117, 0x00010117, 0x00010118, 0x00010118, }, - {0x00010119, 0x00010119, 0x0001011a, 0x0001011a, 0x0001011b, 0x0001011b, 0x0001011c, 0x0001011c, 0x0001011d, 0x0001011d, 0x0001011e, 0x0001011e, 0x0001011f, 0x0001011f, 0x00010120, 0x00010120, }, - {0x00010121, 0x00010121, 0x00010122, 0x00010122, 0x00010123, 0x00010123, 0x00010124, 0x00010124, 0x00010125, 0x00010125, 0x00010126, 0x00010126, 0x00010127, 0x00010127, 0x00010128, 0x00010128, }, - {0x00010129, 0x00010129, 0x0001012a, 0x0001012a, 0x0001012b, 0x0001012b, 0x0001012c, 0x0001012c, 0x0001012d, 0x0001012d, 0x0001012e, 0x0001012e, 0x0001012f, 0x0001012f, 0x00010130, 0x00010130, }, - {0x00010131, 0x00010131, 0x00010132, 0x00010132, 0x00010133, 0x00010133, 0x00010134, 0x00010134, 0x00010135, 0x00010135, 0x00010136, 0x00010136, 0x00010137, 0x00010137, 0x00010138, 0x00010138, }, - {0x00010139, 0x00010139, 0x0001013a, 0x0001013a, 0x0001013b, 0x0001013b, 0x0001013c, 0x0001013c, 0x0001013d, 0x0001013d, 0x0001013e, 0x0001013e, 0x0001013f, 0x0001013f, 0x00010140, 0x00010140, }, - {0x00010141, 0x00010141, 0x00010142, 0x00010142, 0x00010143, 0x00010143, 0x00010144, 0x00010144, 0x00010145, 0x00010145, 0x00010146, 0x00010146, 0x00010147, 0x00010147, 0x00010148, 0x00010148, }, - {0x00010149, 0x00010149, 0x0001014a, 0x0001014a, 0x0001014b, 0x0001014b, 0x0001014c, 0x0001014c, 0x0001014d, 0x0001014d, 0x0001014e, 0x0001014e, 0x0001014f, 0x0001014f, 0x00010150, 0x00010150, }, - {0x00010151, 0x00010151, 0x00010152, 0x00010152, 0x00010153, 0x00010153, 0x00010154, 0x00010154, 0x00010155, 0x00010155, 0x00010156, 0x00010156, 0x00010157, 0x00010157, 0x00010158, 0x00010158, }, - {0x00010159, 0x00010159, 0x0001015a, 0x0001015a, 0x0001015b, 0x0001015b, 0x0001015c, 0x0001015c, 0x0001015d, 0x0001015d, 0x0001015e, 0x0001015e, 0x0001015f, 0x0001015f, 0x00010160, 0x00010160, }, - {0x00010161, 0x00010161, 0x00010162, 0x00010162, 0x00010163, 0x00010163, 0x00010164, 0x00010164, 0x00010165, 0x00010165, 0x00010166, 0x00010166, 0x00010167, 0x00010167, 0x00010168, 0x00010168, }, - {0x00010169, 0x00010169, 0x0001016a, 0x0001016a, 0x0001016b, 0x0001016b, 0x0001016c, 0x0001016c, 0x0001016d, 0x0001016d, 0x0001016e, 0x0001016e, 0x0001016f, 0x0001016f, 0x00010170, 0x00010170, }, - {0x00010171, 0x00010171, 0x00010172, 0x00010172, 0x00010173, 0x00010173, 0x00010174, 0x00010174, 0x00010175, 0x00010175, 0x00010176, 0x00010176, 0x00010177, 0x00010177, 0x00010178, 0x00010178, }, - {0x00010179, 0x00010179, 0x0001017a, 0x0001017a, 0x0001017b, 0x0001017b, 0x0001017c, 0x0001017c, 0x0001017d, 0x0001017d, 0x0001017e, 0x0001017e, 0x0001017f, 0x0001017f, 0x00010180, 0x00010180, }, - {0x00010181, 0x00010181, 0x00010182, 0x00010182, 0x00010183, 0x00010183, 0x00010184, 0x00010184, 0x00010185, 0x00010185, 0x00010186, 0x00010186, 0x00010187, 0x00010187, 0x00010188, 0x00010188, }, +const uint32_t c_aauiCQMFHuffDec46[61][16] = { + { + 0x0004ffff, + 0x0001ffff, + 0x0002ffff, + 0x0003ffff, + 0x00010001, + 0x00010001, + 0x00010015, + 0x00010015, + 0x00020000, + 0x00020000, + 0x00020000, + 0x00020000, + 0x00020014, + 0x00020014, + 0x00020014, + 0x00020014, + }, + { + 0x00020017, + 0x00020017, + 0x00020017, + 0x00020017, + 0x0002003d, + 0x0002003d, + 0x0002003d, + 0x0002003d, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + }, + { + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + }, + { + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + }, + { + 0x0008ffff, + 0x0007ffff, + 0x0005ffff, + 0x0006ffff, + 0x00000018, + 0x0000003f, + 0x00000051, + 0x00000052, + 0x00010003, + 0x00010003, + 0x0001002b, + 0x0001002b, + 0x0001003c, + 0x0001003c, + 0x0001003e, + 0x0001003e, + }, + { + 0x00020053, + 0x00020053, + 0x00020053, + 0x00020053, + 0x00020065, + 0x00020065, + 0x00020065, + 0x00020065, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + }, + { + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x00030050, + 0x00030050, + 0x00030050, + 0x00030050, + 0x00030050, + 0x00030050, + 0x00030050, + 0x00030050, + }, + { + 0x00010054, + 0x00010054, + 0x00010064, + 0x00010064, + 0x00010066, + 0x00010066, + 0x00010067, + 0x00010067, + 0x00020019, + 0x00020019, + 0x00020019, + 0x00020019, + 0x00020040, + 0x00020040, + 0x00020040, + 0x00020040, + }, + { + 0x0012ffff, + 0x0023ffff, + 0x000effff, + 0x000dffff, + 0x000cffff, + 0x0009ffff, + 0x000affff, + 0x000bffff, + 0x0000001a, + 0x00000041, + 0x00000079, + 0x0000007a, + 0x00010005, + 0x00010005, + 0x0001002d, + 0x0001002d, + }, + { + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + }, + { + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030068, + }, + { + 0x00030078, + 0x00030078, + 0x00030078, + 0x00030078, + 0x00030078, + 0x00030078, + 0x00030078, + 0x00030078, + 0x0003007b, + 0x0003007b, + 0x0003007b, + 0x0003007b, + 0x0003007b, + 0x0003007b, + 0x0003007b, + 0x0003007b, + }, + { + 0x0001008e, + 0x0001008e, + 0x0001008f, + 0x0001008f, + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x00020042, + 0x00020042, + 0x00020042, + 0x00020042, + 0x00020056, + 0x00020056, + 0x00020056, + 0x00020056, + }, + { + 0x00010007, + 0x00010007, + 0x0001002f, + 0x0001002f, + 0x00010043, + 0x00010043, + 0x00010069, + 0x00010069, + 0x0001007c, + 0x0001007c, + 0x0001007d, + 0x0001007d, + 0x0001008c, + 0x0001008c, + 0x0001008d, + 0x0001008d, + }, + { + 0x0034ffff, + 0x0035ffff, + 0x0036ffff, + 0x0037ffff, + 0x0038ffff, + 0x0039ffff, + 0x003affff, + 0x003bffff, + 0x003cffff, + 0x0010ffff, + 0x0011ffff, + 0x000fffff, + 0x00000057, + 0x0000006a, + 0x00000090, + 0x000000a1, + }, + { + 0x0002018e, + 0x0002018e, + 0x0002018e, + 0x0002018e, + 0x0002018f, + 0x0002018f, + 0x0002018f, + 0x0002018f, + 0x000300a3, + 0x000300a3, + 0x000300a3, + 0x000300a3, + 0x000300a3, + 0x000300a3, + 0x000300a3, + 0x000300a3, + }, + { + 0x00010189, + 0x00010189, + 0x0001018a, + 0x0001018a, + 0x0001018b, + 0x0001018b, + 0x0001018c, + 0x0001018c, + 0x00020008, + 0x00020008, + 0x00020008, + 0x00020008, + 0x0002001c, + 0x0002001c, + 0x0002001c, + 0x0002001c, + }, + { + 0x00020044, + 0x00020044, + 0x00020044, + 0x00020044, + 0x00020091, + 0x00020091, + 0x00020091, + 0x00020091, + 0x00020094, + 0x00020094, + 0x00020094, + 0x00020094, + 0x0002018d, + 0x0002018d, + 0x0002018d, + 0x0002018d, + }, + { + 0x0013ffff, + 0x0016ffff, + 0x0017ffff, + 0x0018ffff, + 0x0014ffff, + 0x0015ffff, + 0x0019ffff, + 0x001affff, + 0x001bffff, + 0x001cffff, + 0x001dffff, + 0x001effff, + 0x001fffff, + 0x0020ffff, + 0x0021ffff, + 0x0022ffff, + }, + { + 0x00010009, + 0x00010009, + 0x0001000a, + 0x0001000a, + 0x0001000b, + 0x0001000b, + 0x0001000c, + 0x0001000c, + 0x0001000d, + 0x0001000d, + 0x0001000e, + 0x0001000e, + 0x0001000f, + 0x0001000f, + 0x00010010, + 0x00010010, + }, + { + 0x0001003a, + 0x0001003a, + 0x0001003b, + 0x0001003b, + 0x00010045, + 0x00010045, + 0x00010046, + 0x00010046, + 0x00010047, + 0x00010047, + 0x00010048, + 0x00010048, + 0x00010049, + 0x00010049, + 0x0001004a, + 0x0001004a, + }, + { + 0x0001004b, + 0x0001004b, + 0x0001004c, + 0x0001004c, + 0x0001004d, + 0x0001004d, + 0x0001004e, + 0x0001004e, + 0x0001004f, + 0x0001004f, + 0x00010058, + 0x00010058, + 0x00010059, + 0x00010059, + 0x0001005a, + 0x0001005a, + }, + { + 0x00010011, + 0x00010011, + 0x00010012, + 0x00010012, + 0x00010013, + 0x00010013, + 0x0001001d, + 0x0001001d, + 0x0001001e, + 0x0001001e, + 0x0001001f, + 0x0001001f, + 0x00010020, + 0x00010020, + 0x00010021, + 0x00010021, + }, + { + 0x00010022, + 0x00010022, + 0x00010023, + 0x00010023, + 0x00010024, + 0x00010024, + 0x00010025, + 0x00010025, + 0x00010026, + 0x00010026, + 0x00010027, + 0x00010027, + 0x00010030, + 0x00010030, + 0x00010031, + 0x00010031, + }, + { + 0x00010032, + 0x00010032, + 0x00010033, + 0x00010033, + 0x00010034, + 0x00010034, + 0x00010035, + 0x00010035, + 0x00010036, + 0x00010036, + 0x00010037, + 0x00010037, + 0x00010038, + 0x00010038, + 0x00010039, + 0x00010039, + }, + { + 0x0001005b, + 0x0001005b, + 0x0001005c, + 0x0001005c, + 0x0001005d, + 0x0001005d, + 0x0001005e, + 0x0001005e, + 0x0001005f, + 0x0001005f, + 0x00010060, + 0x00010060, + 0x00010061, + 0x00010061, + 0x00010062, + 0x00010062, + }, + { + 0x00010063, + 0x00010063, + 0x0001006b, + 0x0001006b, + 0x0001006c, + 0x0001006c, + 0x0001006d, + 0x0001006d, + 0x0001006e, + 0x0001006e, + 0x0001006f, + 0x0001006f, + 0x00010070, + 0x00010070, + 0x00010071, + 0x00010071, + }, + { + 0x00010072, + 0x00010072, + 0x00010073, + 0x00010073, + 0x00010074, + 0x00010074, + 0x00010075, + 0x00010075, + 0x00010076, + 0x00010076, + 0x00010077, + 0x00010077, + 0x0001007e, + 0x0001007e, + 0x0001007f, + 0x0001007f, + }, + { + 0x00010080, + 0x00010080, + 0x00010081, + 0x00010081, + 0x00010082, + 0x00010082, + 0x00010083, + 0x00010083, + 0x00010084, + 0x00010084, + 0x00010085, + 0x00010085, + 0x00010086, + 0x00010086, + 0x00010087, + 0x00010087, + }, + { + 0x00010088, + 0x00010088, + 0x00010089, + 0x00010089, + 0x0001008a, + 0x0001008a, + 0x0001008b, + 0x0001008b, + 0x00010092, + 0x00010092, + 0x00010093, + 0x00010093, + 0x00010095, + 0x00010095, + 0x00010096, + 0x00010096, + }, + { + 0x00010097, + 0x00010097, + 0x00010098, + 0x00010098, + 0x00010099, + 0x00010099, + 0x0001009a, + 0x0001009a, + 0x0001009b, + 0x0001009b, + 0x0001009c, + 0x0001009c, + 0x0001009d, + 0x0001009d, + 0x0001009e, + 0x0001009e, + }, + { + 0x0001009f, + 0x0001009f, + 0x000100a0, + 0x000100a0, + 0x000100a2, + 0x000100a2, + 0x000100a4, + 0x000100a4, + 0x000100a5, + 0x000100a5, + 0x000100a6, + 0x000100a6, + 0x000100a7, + 0x000100a7, + 0x000100a8, + 0x000100a8, + }, + { + 0x000100a9, + 0x000100a9, + 0x000100aa, + 0x000100aa, + 0x000100ab, + 0x000100ab, + 0x000100ac, + 0x000100ac, + 0x000100ad, + 0x000100ad, + 0x000100ae, + 0x000100ae, + 0x000100af, + 0x000100af, + 0x000100b0, + 0x000100b0, + }, + { + 0x000100b1, + 0x000100b1, + 0x000100b2, + 0x000100b2, + 0x000100b3, + 0x000100b3, + 0x000100b4, + 0x000100b4, + 0x000100b5, + 0x000100b5, + 0x000100b6, + 0x000100b6, + 0x000100b7, + 0x000100b7, + 0x000100b8, + 0x000100b8, + }, + { + 0x000100b9, + 0x000100b9, + 0x000100ba, + 0x000100ba, + 0x000100bb, + 0x000100bb, + 0x000100bc, + 0x000100bc, + 0x000100bd, + 0x000100bd, + 0x000100be, + 0x000100be, + 0x000100bf, + 0x000100bf, + 0x000100c0, + 0x000100c0, + }, + { + 0x0024ffff, + 0x0025ffff, + 0x0026ffff, + 0x0027ffff, + 0x0028ffff, + 0x0029ffff, + 0x002affff, + 0x002bffff, + 0x002cffff, + 0x002dffff, + 0x002effff, + 0x002fffff, + 0x0030ffff, + 0x0031ffff, + 0x0032ffff, + 0x0033ffff, + }, + { + 0x000100c1, + 0x000100c1, + 0x000100c2, + 0x000100c2, + 0x000100c3, + 0x000100c3, + 0x000100c4, + 0x000100c4, + 0x000100c5, + 0x000100c5, + 0x000100c6, + 0x000100c6, + 0x000100c7, + 0x000100c7, + 0x000100c8, + 0x000100c8, + }, + { + 0x000100c9, + 0x000100c9, + 0x000100ca, + 0x000100ca, + 0x000100cb, + 0x000100cb, + 0x000100cc, + 0x000100cc, + 0x000100cd, + 0x000100cd, + 0x000100ce, + 0x000100ce, + 0x000100cf, + 0x000100cf, + 0x000100d0, + 0x000100d0, + }, + { + 0x000100d1, + 0x000100d1, + 0x000100d2, + 0x000100d2, + 0x000100d3, + 0x000100d3, + 0x000100d4, + 0x000100d4, + 0x000100d5, + 0x000100d5, + 0x000100d6, + 0x000100d6, + 0x000100d7, + 0x000100d7, + 0x000100d8, + 0x000100d8, + }, + { + 0x000100d9, + 0x000100d9, + 0x000100da, + 0x000100da, + 0x000100db, + 0x000100db, + 0x000100dc, + 0x000100dc, + 0x000100dd, + 0x000100dd, + 0x000100de, + 0x000100de, + 0x000100df, + 0x000100df, + 0x000100e0, + 0x000100e0, + }, + { + 0x000100e1, + 0x000100e1, + 0x000100e2, + 0x000100e2, + 0x000100e3, + 0x000100e3, + 0x000100e4, + 0x000100e4, + 0x000100e5, + 0x000100e5, + 0x000100e6, + 0x000100e6, + 0x000100e7, + 0x000100e7, + 0x000100e8, + 0x000100e8, + }, + { + 0x000100e9, + 0x000100e9, + 0x000100ea, + 0x000100ea, + 0x000100eb, + 0x000100eb, + 0x000100ec, + 0x000100ec, + 0x000100ed, + 0x000100ed, + 0x000100ee, + 0x000100ee, + 0x000100ef, + 0x000100ef, + 0x000100f0, + 0x000100f0, + }, + { + 0x000100f1, + 0x000100f1, + 0x000100f2, + 0x000100f2, + 0x000100f3, + 0x000100f3, + 0x000100f4, + 0x000100f4, + 0x000100f5, + 0x000100f5, + 0x000100f6, + 0x000100f6, + 0x000100f7, + 0x000100f7, + 0x000100f8, + 0x000100f8, + }, + { + 0x000100f9, + 0x000100f9, + 0x000100fa, + 0x000100fa, + 0x000100fb, + 0x000100fb, + 0x000100fc, + 0x000100fc, + 0x000100fd, + 0x000100fd, + 0x000100fe, + 0x000100fe, + 0x000100ff, + 0x000100ff, + 0x00010100, + 0x00010100, + }, + { + 0x00010101, + 0x00010101, + 0x00010102, + 0x00010102, + 0x00010103, + 0x00010103, + 0x00010104, + 0x00010104, + 0x00010105, + 0x00010105, + 0x00010106, + 0x00010106, + 0x00010107, + 0x00010107, + 0x00010108, + 0x00010108, + }, + { + 0x00010109, + 0x00010109, + 0x0001010a, + 0x0001010a, + 0x0001010b, + 0x0001010b, + 0x0001010c, + 0x0001010c, + 0x0001010d, + 0x0001010d, + 0x0001010e, + 0x0001010e, + 0x0001010f, + 0x0001010f, + 0x00010110, + 0x00010110, + }, + { + 0x00010111, + 0x00010111, + 0x00010112, + 0x00010112, + 0x00010113, + 0x00010113, + 0x00010114, + 0x00010114, + 0x00010115, + 0x00010115, + 0x00010116, + 0x00010116, + 0x00010117, + 0x00010117, + 0x00010118, + 0x00010118, + }, + { + 0x00010119, + 0x00010119, + 0x0001011a, + 0x0001011a, + 0x0001011b, + 0x0001011b, + 0x0001011c, + 0x0001011c, + 0x0001011d, + 0x0001011d, + 0x0001011e, + 0x0001011e, + 0x0001011f, + 0x0001011f, + 0x00010120, + 0x00010120, + }, + { + 0x00010121, + 0x00010121, + 0x00010122, + 0x00010122, + 0x00010123, + 0x00010123, + 0x00010124, + 0x00010124, + 0x00010125, + 0x00010125, + 0x00010126, + 0x00010126, + 0x00010127, + 0x00010127, + 0x00010128, + 0x00010128, + }, + { + 0x00010129, + 0x00010129, + 0x0001012a, + 0x0001012a, + 0x0001012b, + 0x0001012b, + 0x0001012c, + 0x0001012c, + 0x0001012d, + 0x0001012d, + 0x0001012e, + 0x0001012e, + 0x0001012f, + 0x0001012f, + 0x00010130, + 0x00010130, + }, + { + 0x00010131, + 0x00010131, + 0x00010132, + 0x00010132, + 0x00010133, + 0x00010133, + 0x00010134, + 0x00010134, + 0x00010135, + 0x00010135, + 0x00010136, + 0x00010136, + 0x00010137, + 0x00010137, + 0x00010138, + 0x00010138, + }, + { + 0x00010139, + 0x00010139, + 0x0001013a, + 0x0001013a, + 0x0001013b, + 0x0001013b, + 0x0001013c, + 0x0001013c, + 0x0001013d, + 0x0001013d, + 0x0001013e, + 0x0001013e, + 0x0001013f, + 0x0001013f, + 0x00010140, + 0x00010140, + }, + { + 0x00010141, + 0x00010141, + 0x00010142, + 0x00010142, + 0x00010143, + 0x00010143, + 0x00010144, + 0x00010144, + 0x00010145, + 0x00010145, + 0x00010146, + 0x00010146, + 0x00010147, + 0x00010147, + 0x00010148, + 0x00010148, + }, + { + 0x00010149, + 0x00010149, + 0x0001014a, + 0x0001014a, + 0x0001014b, + 0x0001014b, + 0x0001014c, + 0x0001014c, + 0x0001014d, + 0x0001014d, + 0x0001014e, + 0x0001014e, + 0x0001014f, + 0x0001014f, + 0x00010150, + 0x00010150, + }, + { + 0x00010151, + 0x00010151, + 0x00010152, + 0x00010152, + 0x00010153, + 0x00010153, + 0x00010154, + 0x00010154, + 0x00010155, + 0x00010155, + 0x00010156, + 0x00010156, + 0x00010157, + 0x00010157, + 0x00010158, + 0x00010158, + }, + { + 0x00010159, + 0x00010159, + 0x0001015a, + 0x0001015a, + 0x0001015b, + 0x0001015b, + 0x0001015c, + 0x0001015c, + 0x0001015d, + 0x0001015d, + 0x0001015e, + 0x0001015e, + 0x0001015f, + 0x0001015f, + 0x00010160, + 0x00010160, + }, + { + 0x00010161, + 0x00010161, + 0x00010162, + 0x00010162, + 0x00010163, + 0x00010163, + 0x00010164, + 0x00010164, + 0x00010165, + 0x00010165, + 0x00010166, + 0x00010166, + 0x00010167, + 0x00010167, + 0x00010168, + 0x00010168, + }, + { + 0x00010169, + 0x00010169, + 0x0001016a, + 0x0001016a, + 0x0001016b, + 0x0001016b, + 0x0001016c, + 0x0001016c, + 0x0001016d, + 0x0001016d, + 0x0001016e, + 0x0001016e, + 0x0001016f, + 0x0001016f, + 0x00010170, + 0x00010170, + }, + { + 0x00010171, + 0x00010171, + 0x00010172, + 0x00010172, + 0x00010173, + 0x00010173, + 0x00010174, + 0x00010174, + 0x00010175, + 0x00010175, + 0x00010176, + 0x00010176, + 0x00010177, + 0x00010177, + 0x00010178, + 0x00010178, + }, + { + 0x00010179, + 0x00010179, + 0x0001017a, + 0x0001017a, + 0x0001017b, + 0x0001017b, + 0x0001017c, + 0x0001017c, + 0x0001017d, + 0x0001017d, + 0x0001017e, + 0x0001017e, + 0x0001017f, + 0x0001017f, + 0x00010180, + 0x00010180, + }, + { + 0x00010181, + 0x00010181, + 0x00010182, + 0x00010182, + 0x00010183, + 0x00010183, + 0x00010184, + 0x00010184, + 0x00010185, + 0x00010185, + 0x00010186, + 0x00010186, + 0x00010187, + 0x00010187, + 0x00010188, + 0x00010188, + }, }; #endif @@ -3012,171 +30672,2153 @@ const uint32_t c_aauiCQMFHuffEnc47[576][2] = #else const uint16_t c_aauiCQMFHuffEnc47[576][2] = #endif -{ - {0x0002, 0x0003}, {0x0003, 0x0003}, {0x0005, 0x0005}, {0x0006, 0x0004}, {0x0008, 0x0006}, {0x000a, 0x0007}, {0x000c, 0x000b}, {0x000d, 0x000d}, - {0x0010, 0x0041}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, {0x0013, 0x0006}, - {0x0013, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0013, 0x000c}, {0x0013, 0x000d}, {0x0013, 0x000e}, - {0x0003, 0x0004}, {0x0003, 0x0005}, {0x0004, 0x0004}, {0x0006, 0x0005}, {0x0007, 0x0005}, {0x0009, 0x0006}, {0x000b, 0x0007}, {0x000d, 0x000e}, - {0x000f, 0x0025}, {0x000f, 0x0026}, {0x0012, 0x00f6}, {0x0013, 0x000f}, {0x0013, 0x0010}, {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, - {0x0013, 0x0014}, {0x0013, 0x0015}, {0x0013, 0x0016}, {0x0013, 0x0017}, {0x0013, 0x0018}, {0x0013, 0x0019}, {0x0013, 0x001a}, {0x0013, 0x001b}, - {0x0005, 0x0006}, {0x0004, 0x0005}, {0x0005, 0x0007}, {0x0006, 0x0006}, {0x0008, 0x0007}, {0x0009, 0x0007}, {0x000b, 0x0008}, {0x000d, 0x000f}, - {0x000f, 0x0027}, {0x0012, 0x00f7}, {0x0013, 0x001c}, {0x0013, 0x001d}, {0x0013, 0x001e}, {0x0013, 0x001f}, {0x0013, 0x0020}, {0x0013, 0x0021}, - {0x0013, 0x0022}, {0x0013, 0x0023}, {0x0013, 0x0024}, {0x0013, 0x0025}, {0x0013, 0x0026}, {0x0013, 0x0027}, {0x0013, 0x0028}, {0x0013, 0x0029}, - {0x0006, 0x0007}, {0x0006, 0x0008}, {0x0006, 0x0009}, {0x0007, 0x0006}, {0x0009, 0x0008}, {0x000a, 0x0008}, {0x000c, 0x000c}, {0x000e, 0x0017}, - {0x0010, 0x0042}, {0x0012, 0x00f8}, {0x0013, 0x002a}, {0x0013, 0x002b}, {0x0013, 0x002c}, {0x0013, 0x002d}, {0x0013, 0x002e}, {0x0013, 0x002f}, - {0x0013, 0x0030}, {0x0013, 0x0031}, {0x0013, 0x0032}, {0x0013, 0x0033}, {0x0013, 0x0034}, {0x0013, 0x0035}, {0x0013, 0x0036}, {0x0013, 0x0037}, - {0x0008, 0x0008}, {0x0007, 0x0007}, {0x0008, 0x0009}, {0x0009, 0x0009}, {0x000a, 0x0009}, {0x000b, 0x0009}, {0x000d, 0x0010}, {0x000f, 0x0028}, - {0x000f, 0x0029}, {0x0011, 0x007f}, {0x0013, 0x0038}, {0x0013, 0x0039}, {0x0013, 0x003a}, {0x0013, 0x003b}, {0x0013, 0x003c}, {0x0013, 0x003d}, - {0x0013, 0x003e}, {0x0013, 0x003f}, {0x0013, 0x0040}, {0x0013, 0x0041}, {0x0013, 0x0042}, {0x0013, 0x0043}, {0x0013, 0x0044}, {0x0013, 0x0045}, - {0x000a, 0x000a}, {0x0009, 0x000a}, {0x0009, 0x000b}, {0x000a, 0x000b}, {0x000b, 0x000a}, {0x000d, 0x0011}, {0x000f, 0x002a}, {0x0010, 0x0043}, - {0x0012, 0x00f9}, {0x0013, 0x0046}, {0x0013, 0x0047}, {0x0013, 0x0048}, {0x0013, 0x0049}, {0x0013, 0x004a}, {0x0013, 0x004b}, {0x0013, 0x004c}, - {0x0013, 0x004d}, {0x0013, 0x004e}, {0x0013, 0x004f}, {0x0013, 0x0050}, {0x0013, 0x0051}, {0x0013, 0x0052}, {0x0013, 0x0053}, {0x0013, 0x0054}, - {0x000b, 0x000b}, {0x000b, 0x000c}, {0x000b, 0x000d}, {0x000c, 0x000d}, {0x000d, 0x0012}, {0x000e, 0x0018}, {0x0010, 0x0044}, {0x0013, 0x0055}, - {0x0013, 0x0056}, {0x0013, 0x0057}, {0x0013, 0x0058}, {0x0013, 0x0059}, {0x0013, 0x005a}, {0x0013, 0x005b}, {0x0013, 0x005c}, {0x0013, 0x005d}, - {0x0013, 0x005e}, {0x0013, 0x005f}, {0x0013, 0x0060}, {0x0013, 0x0061}, {0x0013, 0x0062}, {0x0013, 0x0063}, {0x0013, 0x0064}, {0x0013, 0x0065}, - {0x000e, 0x0019}, {0x000d, 0x0013}, {0x000d, 0x0014}, {0x000d, 0x0015}, {0x000f, 0x002b}, {0x0010, 0x0045}, {0x0013, 0x0066}, {0x0012, 0x00fa}, - {0x0013, 0x0067}, {0x0013, 0x0068}, {0x0013, 0x0069}, {0x0013, 0x006a}, {0x0013, 0x006b}, {0x0013, 0x006c}, {0x0013, 0x006d}, {0x0013, 0x006e}, - {0x0013, 0x006f}, {0x0013, 0x0070}, {0x0013, 0x0071}, {0x0013, 0x0072}, {0x0013, 0x0073}, {0x0013, 0x0074}, {0x0013, 0x0075}, {0x0013, 0x0076}, - {0x0010, 0x0046}, {0x000f, 0x002c}, {0x000f, 0x002d}, {0x0010, 0x0047}, {0x0011, 0x0080}, {0x0013, 0x0077}, {0x0013, 0x0078}, {0x0013, 0x0079}, - {0x0013, 0x007a}, {0x0013, 0x007b}, {0x0013, 0x007c}, {0x0013, 0x007d}, {0x0013, 0x007e}, {0x0013, 0x007f}, {0x0013, 0x0080}, {0x0013, 0x0081}, - {0x0013, 0x0082}, {0x0013, 0x0083}, {0x0013, 0x0084}, {0x0013, 0x0085}, {0x0013, 0x0086}, {0x0013, 0x0087}, {0x0013, 0x0088}, {0x0013, 0x0089}, - {0x0013, 0x008a}, {0x0010, 0x0048}, {0x0010, 0x0049}, {0x0011, 0x0081}, {0x0013, 0x008b}, {0x0012, 0x00fb}, {0x0013, 0x008c}, {0x0013, 0x008d}, - {0x0013, 0x008e}, {0x0013, 0x008f}, {0x0013, 0x0090}, {0x0013, 0x0091}, {0x0013, 0x0092}, {0x0013, 0x0093}, {0x0013, 0x0094}, {0x0013, 0x0095}, - {0x0013, 0x0096}, {0x0013, 0x0097}, {0x0013, 0x0098}, {0x0013, 0x0099}, {0x0013, 0x009a}, {0x0013, 0x009b}, {0x0013, 0x009c}, {0x0013, 0x009d}, - {0x0013, 0x009e}, {0x0013, 0x009f}, {0x0013, 0x00a0}, {0x0012, 0x00fc}, {0x0013, 0x00a1}, {0x0013, 0x00a2}, {0x0013, 0x00a3}, {0x0013, 0x00a4}, - {0x0013, 0x00a5}, {0x0013, 0x00a6}, {0x0013, 0x00a7}, {0x0013, 0x00a8}, {0x0013, 0x00a9}, {0x0013, 0x00aa}, {0x0013, 0x00ab}, {0x0013, 0x00ac}, - {0x0013, 0x00ad}, {0x0013, 0x00ae}, {0x0013, 0x00af}, {0x0013, 0x00b0}, {0x0013, 0x00b1}, {0x0013, 0x00b2}, {0x0013, 0x00b3}, {0x0013, 0x00b4}, - {0x0013, 0x00b5}, {0x0013, 0x00b6}, {0x0013, 0x00b7}, {0x0013, 0x00b8}, {0x0013, 0x00b9}, {0x0013, 0x00ba}, {0x0013, 0x00bb}, {0x0013, 0x00bc}, - {0x0013, 0x00bd}, {0x0013, 0x00be}, {0x0013, 0x00bf}, {0x0013, 0x00c0}, {0x0013, 0x00c1}, {0x0013, 0x00c2}, {0x0013, 0x00c3}, {0x0013, 0x00c4}, - {0x0013, 0x00c5}, {0x0013, 0x00c6}, {0x0013, 0x00c7}, {0x0013, 0x00c8}, {0x0013, 0x00c9}, {0x0013, 0x00ca}, {0x0013, 0x00cb}, {0x0013, 0x00cc}, - {0x0013, 0x00cd}, {0x0013, 0x00ce}, {0x0013, 0x00cf}, {0x0013, 0x00d0}, {0x0013, 0x00d1}, {0x0013, 0x00d2}, {0x0013, 0x00d3}, {0x0013, 0x00d4}, - {0x0013, 0x00d5}, {0x0013, 0x00d6}, {0x0013, 0x00d7}, {0x0013, 0x00d8}, {0x0013, 0x00d9}, {0x0013, 0x00da}, {0x0013, 0x00db}, {0x0013, 0x00dc}, - {0x0013, 0x00dd}, {0x0013, 0x00de}, {0x0013, 0x00df}, {0x0013, 0x00e0}, {0x0013, 0x00e1}, {0x0013, 0x00e2}, {0x0013, 0x00e3}, {0x0013, 0x00e4}, - {0x0013, 0x00e5}, {0x0013, 0x00e6}, {0x0013, 0x00e7}, {0x0013, 0x00e8}, {0x0013, 0x00e9}, {0x0013, 0x00ea}, {0x0013, 0x00eb}, {0x0013, 0x00ec}, - {0x0013, 0x00ed}, {0x0013, 0x00ee}, {0x0013, 0x00ef}, {0x0013, 0x00f0}, {0x0013, 0x00f1}, {0x0013, 0x00f2}, {0x0013, 0x00f3}, {0x0013, 0x00f4}, - {0x0013, 0x00f5}, {0x0013, 0x00f6}, {0x0013, 0x00f7}, {0x0013, 0x00f8}, {0x0013, 0x00f9}, {0x0013, 0x00fa}, {0x0013, 0x00fb}, {0x0013, 0x00fc}, - {0x0013, 0x00fd}, {0x0013, 0x00fe}, {0x0013, 0x00ff}, {0x0013, 0x0100}, {0x0013, 0x0101}, {0x0013, 0x0102}, {0x0013, 0x0103}, {0x0013, 0x0104}, - {0x0013, 0x0105}, {0x0013, 0x0106}, {0x0013, 0x0107}, {0x0013, 0x0108}, {0x0013, 0x0109}, {0x0013, 0x010a}, {0x0013, 0x010b}, {0x0013, 0x010c}, - {0x0013, 0x010d}, {0x0013, 0x010e}, {0x0013, 0x010f}, {0x0013, 0x0110}, {0x0013, 0x0111}, {0x0013, 0x0112}, {0x0013, 0x0113}, {0x0013, 0x0114}, - {0x0013, 0x0115}, {0x0013, 0x0116}, {0x0013, 0x0117}, {0x0013, 0x0118}, {0x0013, 0x0119}, {0x0013, 0x011a}, {0x0013, 0x011b}, {0x0013, 0x011c}, - {0x0013, 0x011d}, {0x0013, 0x011e}, {0x0013, 0x011f}, {0x0013, 0x0120}, {0x0013, 0x0121}, {0x0013, 0x0122}, {0x0013, 0x0123}, {0x0013, 0x0124}, - {0x0013, 0x0125}, {0x0013, 0x0126}, {0x0013, 0x0127}, {0x0013, 0x0128}, {0x0013, 0x0129}, {0x0013, 0x012a}, {0x0013, 0x012b}, {0x0013, 0x012c}, - {0x0013, 0x012d}, {0x0013, 0x012e}, {0x0013, 0x012f}, {0x0013, 0x0130}, {0x0013, 0x0131}, {0x0013, 0x0132}, {0x0013, 0x0133}, {0x0013, 0x0134}, - {0x0013, 0x0135}, {0x0013, 0x0136}, {0x0013, 0x0137}, {0x0013, 0x0138}, {0x0013, 0x0139}, {0x0013, 0x013a}, {0x0013, 0x013b}, {0x0013, 0x013c}, - {0x0013, 0x013d}, {0x0013, 0x013e}, {0x0013, 0x013f}, {0x0013, 0x0140}, {0x0013, 0x0141}, {0x0013, 0x0142}, {0x0013, 0x0143}, {0x0013, 0x0144}, - {0x0013, 0x0145}, {0x0013, 0x0146}, {0x0013, 0x0147}, {0x0013, 0x0148}, {0x0013, 0x0149}, {0x0013, 0x014a}, {0x0013, 0x014b}, {0x0013, 0x014c}, - {0x0013, 0x014d}, {0x0013, 0x014e}, {0x0013, 0x014f}, {0x0013, 0x0150}, {0x0013, 0x0151}, {0x0013, 0x0152}, {0x0013, 0x0153}, {0x0013, 0x0154}, - {0x0013, 0x0155}, {0x0013, 0x0156}, {0x0013, 0x0157}, {0x0013, 0x0158}, {0x0013, 0x0159}, {0x0013, 0x015a}, {0x0013, 0x015b}, {0x0013, 0x015c}, - {0x0013, 0x015d}, {0x0013, 0x015e}, {0x0013, 0x015f}, {0x0013, 0x0160}, {0x0013, 0x0161}, {0x0013, 0x0162}, {0x0013, 0x0163}, {0x0013, 0x0164}, - {0x0013, 0x0165}, {0x0013, 0x0166}, {0x0013, 0x0167}, {0x0013, 0x0168}, {0x0013, 0x0169}, {0x0013, 0x016a}, {0x0013, 0x016b}, {0x0013, 0x016c}, - {0x0013, 0x016d}, {0x0013, 0x016e}, {0x0013, 0x016f}, {0x0013, 0x0170}, {0x0013, 0x0171}, {0x0013, 0x0172}, {0x0013, 0x0173}, {0x0013, 0x0174}, - {0x0013, 0x0175}, {0x0013, 0x0176}, {0x0013, 0x0177}, {0x0013, 0x0178}, {0x0013, 0x0179}, {0x0013, 0x017a}, {0x0013, 0x017b}, {0x0013, 0x017c}, - {0x0013, 0x017d}, {0x0013, 0x017e}, {0x0013, 0x017f}, {0x0013, 0x0180}, {0x0013, 0x0181}, {0x0013, 0x0182}, {0x0013, 0x0183}, {0x0013, 0x0184}, - {0x0013, 0x0185}, {0x0013, 0x0186}, {0x0013, 0x0187}, {0x0013, 0x0188}, {0x0013, 0x0189}, {0x0013, 0x018a}, {0x0013, 0x018b}, {0x0013, 0x018c}, - {0x0013, 0x018d}, {0x0013, 0x018e}, {0x0013, 0x018f}, {0x0013, 0x0190}, {0x0013, 0x0191}, {0x0013, 0x0192}, {0x0013, 0x0193}, {0x0013, 0x0194}, - {0x0013, 0x0195}, {0x0013, 0x0196}, {0x0013, 0x0197}, {0x0013, 0x0198}, {0x0013, 0x0199}, {0x0013, 0x019a}, {0x0013, 0x019b}, {0x0013, 0x019c}, - {0x0013, 0x019d}, {0x0013, 0x019e}, {0x0013, 0x019f}, {0x0013, 0x01a0}, {0x0013, 0x01a1}, {0x0013, 0x01a2}, {0x0013, 0x01a3}, {0x0013, 0x01a4}, - {0x0013, 0x01a5}, {0x0013, 0x01a6}, {0x0013, 0x01a7}, {0x0013, 0x01a8}, {0x0013, 0x01a9}, {0x0013, 0x01aa}, {0x0013, 0x01ab}, {0x0013, 0x01ac}, - {0x0013, 0x01ad}, {0x0013, 0x01ae}, {0x0013, 0x01af}, {0x0013, 0x01b0}, {0x0013, 0x01b1}, {0x0013, 0x01b2}, {0x0013, 0x01b3}, {0x0013, 0x01b4}, - {0x0013, 0x01b5}, {0x0013, 0x01b6}, {0x0013, 0x01b7}, {0x0013, 0x01b8}, {0x0013, 0x01b9}, {0x0013, 0x01ba}, {0x0013, 0x01bb}, {0x0013, 0x01bc}, - {0x0013, 0x01bd}, {0x0013, 0x01be}, {0x0013, 0x01bf}, {0x0013, 0x01c0}, {0x0013, 0x01c1}, {0x0013, 0x01c2}, {0x0013, 0x01c3}, {0x0013, 0x01c4}, - {0x0013, 0x01c5}, {0x0013, 0x01c6}, {0x0013, 0x01c7}, {0x0013, 0x01c8}, {0x0013, 0x01c9}, {0x0013, 0x01ca}, {0x0013, 0x01cb}, {0x0013, 0x01cc}, - {0x0013, 0x01cd}, {0x0013, 0x01ce}, {0x0013, 0x01cf}, {0x0013, 0x01d0}, {0x0013, 0x01d1}, {0x0013, 0x01d2}, {0x0013, 0x01d3}, {0x0013, 0x01d4}, - {0x0013, 0x01d5}, {0x0013, 0x01d6}, {0x0013, 0x01d7}, {0x0013, 0x01d8}, {0x0013, 0x01d9}, {0x0013, 0x01da}, {0x0013, 0x01db}, {0x0013, 0x01dc}, - {0x0013, 0x01dd}, {0x0013, 0x01de}, {0x0013, 0x01df}, {0x0013, 0x01e0}, {0x0013, 0x01e1}, {0x0013, 0x01e2}, {0x0013, 0x01e3}, {0x0013, 0x01e4}, - {0x0013, 0x01e5}, {0x0013, 0x01e6}, {0x0013, 0x01e7}, {0x0013, 0x01e8}, {0x0013, 0x01e9}, {0x0013, 0x01ea}, {0x0013, 0x01eb}, {0x0012, 0x00fd}, -}; + { + { 0x0002, 0x0003 }, + { 0x0003, 0x0003 }, + { 0x0005, 0x0005 }, + { 0x0006, 0x0004 }, + { 0x0008, 0x0006 }, + { 0x000a, 0x0007 }, + { 0x000c, 0x000b }, + { 0x000d, 0x000d }, + { 0x0010, 0x0041 }, + { 0x0013, 0x0000 }, + { 0x0013, 0x0001 }, + { 0x0013, 0x0002 }, + { 0x0013, 0x0003 }, + { 0x0013, 0x0004 }, + { 0x0013, 0x0005 }, + { 0x0013, 0x0006 }, + { 0x0013, 0x0007 }, + { 0x0013, 0x0008 }, + { 0x0013, 0x0009 }, + { 0x0013, 0x000a }, + { 0x0013, 0x000b }, + { 0x0013, 0x000c }, + { 0x0013, 0x000d }, + { 0x0013, 0x000e }, + { 0x0003, 0x0004 }, + { 0x0003, 0x0005 }, + { 0x0004, 0x0004 }, + { 0x0006, 0x0005 }, + { 0x0007, 0x0005 }, + { 0x0009, 0x0006 }, + { 0x000b, 0x0007 }, + { 0x000d, 0x000e }, + { 0x000f, 0x0025 }, + { 0x000f, 0x0026 }, + { 0x0012, 0x00f6 }, + { 0x0013, 0x000f }, + { 0x0013, 0x0010 }, + { 0x0013, 0x0011 }, + { 0x0013, 0x0012 }, + { 0x0013, 0x0013 }, + { 0x0013, 0x0014 }, + { 0x0013, 0x0015 }, + { 0x0013, 0x0016 }, + { 0x0013, 0x0017 }, + { 0x0013, 0x0018 }, + { 0x0013, 0x0019 }, + { 0x0013, 0x001a }, + { 0x0013, 0x001b }, + { 0x0005, 0x0006 }, + { 0x0004, 0x0005 }, + { 0x0005, 0x0007 }, + { 0x0006, 0x0006 }, + { 0x0008, 0x0007 }, + { 0x0009, 0x0007 }, + { 0x000b, 0x0008 }, + { 0x000d, 0x000f }, + { 0x000f, 0x0027 }, + { 0x0012, 0x00f7 }, + { 0x0013, 0x001c }, + { 0x0013, 0x001d }, + { 0x0013, 0x001e }, + { 0x0013, 0x001f }, + { 0x0013, 0x0020 }, + { 0x0013, 0x0021 }, + { 0x0013, 0x0022 }, + { 0x0013, 0x0023 }, + { 0x0013, 0x0024 }, + { 0x0013, 0x0025 }, + { 0x0013, 0x0026 }, + { 0x0013, 0x0027 }, + { 0x0013, 0x0028 }, + { 0x0013, 0x0029 }, + { 0x0006, 0x0007 }, + { 0x0006, 0x0008 }, + { 0x0006, 0x0009 }, + { 0x0007, 0x0006 }, + { 0x0009, 0x0008 }, + { 0x000a, 0x0008 }, + { 0x000c, 0x000c }, + { 0x000e, 0x0017 }, + { 0x0010, 0x0042 }, + { 0x0012, 0x00f8 }, + { 0x0013, 0x002a }, + { 0x0013, 0x002b }, + { 0x0013, 0x002c }, + { 0x0013, 0x002d }, + { 0x0013, 0x002e }, + { 0x0013, 0x002f }, + { 0x0013, 0x0030 }, + { 0x0013, 0x0031 }, + { 0x0013, 0x0032 }, + { 0x0013, 0x0033 }, + { 0x0013, 0x0034 }, + { 0x0013, 0x0035 }, + { 0x0013, 0x0036 }, + { 0x0013, 0x0037 }, + { 0x0008, 0x0008 }, + { 0x0007, 0x0007 }, + { 0x0008, 0x0009 }, + { 0x0009, 0x0009 }, + { 0x000a, 0x0009 }, + { 0x000b, 0x0009 }, + { 0x000d, 0x0010 }, + { 0x000f, 0x0028 }, + { 0x000f, 0x0029 }, + { 0x0011, 0x007f }, + { 0x0013, 0x0038 }, + { 0x0013, 0x0039 }, + { 0x0013, 0x003a }, + { 0x0013, 0x003b }, + { 0x0013, 0x003c }, + { 0x0013, 0x003d }, + { 0x0013, 0x003e }, + { 0x0013, 0x003f }, + { 0x0013, 0x0040 }, + { 0x0013, 0x0041 }, + { 0x0013, 0x0042 }, + { 0x0013, 0x0043 }, + { 0x0013, 0x0044 }, + { 0x0013, 0x0045 }, + { 0x000a, 0x000a }, + { 0x0009, 0x000a }, + { 0x0009, 0x000b }, + { 0x000a, 0x000b }, + { 0x000b, 0x000a }, + { 0x000d, 0x0011 }, + { 0x000f, 0x002a }, + { 0x0010, 0x0043 }, + { 0x0012, 0x00f9 }, + { 0x0013, 0x0046 }, + { 0x0013, 0x0047 }, + { 0x0013, 0x0048 }, + { 0x0013, 0x0049 }, + { 0x0013, 0x004a }, + { 0x0013, 0x004b }, + { 0x0013, 0x004c }, + { 0x0013, 0x004d }, + { 0x0013, 0x004e }, + { 0x0013, 0x004f }, + { 0x0013, 0x0050 }, + { 0x0013, 0x0051 }, + { 0x0013, 0x0052 }, + { 0x0013, 0x0053 }, + { 0x0013, 0x0054 }, + { 0x000b, 0x000b }, + { 0x000b, 0x000c }, + { 0x000b, 0x000d }, + { 0x000c, 0x000d }, + { 0x000d, 0x0012 }, + { 0x000e, 0x0018 }, + { 0x0010, 0x0044 }, + { 0x0013, 0x0055 }, + { 0x0013, 0x0056 }, + { 0x0013, 0x0057 }, + { 0x0013, 0x0058 }, + { 0x0013, 0x0059 }, + { 0x0013, 0x005a }, + { 0x0013, 0x005b }, + { 0x0013, 0x005c }, + { 0x0013, 0x005d }, + { 0x0013, 0x005e }, + { 0x0013, 0x005f }, + { 0x0013, 0x0060 }, + { 0x0013, 0x0061 }, + { 0x0013, 0x0062 }, + { 0x0013, 0x0063 }, + { 0x0013, 0x0064 }, + { 0x0013, 0x0065 }, + { 0x000e, 0x0019 }, + { 0x000d, 0x0013 }, + { 0x000d, 0x0014 }, + { 0x000d, 0x0015 }, + { 0x000f, 0x002b }, + { 0x0010, 0x0045 }, + { 0x0013, 0x0066 }, + { 0x0012, 0x00fa }, + { 0x0013, 0x0067 }, + { 0x0013, 0x0068 }, + { 0x0013, 0x0069 }, + { 0x0013, 0x006a }, + { 0x0013, 0x006b }, + { 0x0013, 0x006c }, + { 0x0013, 0x006d }, + { 0x0013, 0x006e }, + { 0x0013, 0x006f }, + { 0x0013, 0x0070 }, + { 0x0013, 0x0071 }, + { 0x0013, 0x0072 }, + { 0x0013, 0x0073 }, + { 0x0013, 0x0074 }, + { 0x0013, 0x0075 }, + { 0x0013, 0x0076 }, + { 0x0010, 0x0046 }, + { 0x000f, 0x002c }, + { 0x000f, 0x002d }, + { 0x0010, 0x0047 }, + { 0x0011, 0x0080 }, + { 0x0013, 0x0077 }, + { 0x0013, 0x0078 }, + { 0x0013, 0x0079 }, + { 0x0013, 0x007a }, + { 0x0013, 0x007b }, + { 0x0013, 0x007c }, + { 0x0013, 0x007d }, + { 0x0013, 0x007e }, + { 0x0013, 0x007f }, + { 0x0013, 0x0080 }, + { 0x0013, 0x0081 }, + { 0x0013, 0x0082 }, + { 0x0013, 0x0083 }, + { 0x0013, 0x0084 }, + { 0x0013, 0x0085 }, + { 0x0013, 0x0086 }, + { 0x0013, 0x0087 }, + { 0x0013, 0x0088 }, + { 0x0013, 0x0089 }, + { 0x0013, 0x008a }, + { 0x0010, 0x0048 }, + { 0x0010, 0x0049 }, + { 0x0011, 0x0081 }, + { 0x0013, 0x008b }, + { 0x0012, 0x00fb }, + { 0x0013, 0x008c }, + { 0x0013, 0x008d }, + { 0x0013, 0x008e }, + { 0x0013, 0x008f }, + { 0x0013, 0x0090 }, + { 0x0013, 0x0091 }, + { 0x0013, 0x0092 }, + { 0x0013, 0x0093 }, + { 0x0013, 0x0094 }, + { 0x0013, 0x0095 }, + { 0x0013, 0x0096 }, + { 0x0013, 0x0097 }, + { 0x0013, 0x0098 }, + { 0x0013, 0x0099 }, + { 0x0013, 0x009a }, + { 0x0013, 0x009b }, + { 0x0013, 0x009c }, + { 0x0013, 0x009d }, + { 0x0013, 0x009e }, + { 0x0013, 0x009f }, + { 0x0013, 0x00a0 }, + { 0x0012, 0x00fc }, + { 0x0013, 0x00a1 }, + { 0x0013, 0x00a2 }, + { 0x0013, 0x00a3 }, + { 0x0013, 0x00a4 }, + { 0x0013, 0x00a5 }, + { 0x0013, 0x00a6 }, + { 0x0013, 0x00a7 }, + { 0x0013, 0x00a8 }, + { 0x0013, 0x00a9 }, + { 0x0013, 0x00aa }, + { 0x0013, 0x00ab }, + { 0x0013, 0x00ac }, + { 0x0013, 0x00ad }, + { 0x0013, 0x00ae }, + { 0x0013, 0x00af }, + { 0x0013, 0x00b0 }, + { 0x0013, 0x00b1 }, + { 0x0013, 0x00b2 }, + { 0x0013, 0x00b3 }, + { 0x0013, 0x00b4 }, + { 0x0013, 0x00b5 }, + { 0x0013, 0x00b6 }, + { 0x0013, 0x00b7 }, + { 0x0013, 0x00b8 }, + { 0x0013, 0x00b9 }, + { 0x0013, 0x00ba }, + { 0x0013, 0x00bb }, + { 0x0013, 0x00bc }, + { 0x0013, 0x00bd }, + { 0x0013, 0x00be }, + { 0x0013, 0x00bf }, + { 0x0013, 0x00c0 }, + { 0x0013, 0x00c1 }, + { 0x0013, 0x00c2 }, + { 0x0013, 0x00c3 }, + { 0x0013, 0x00c4 }, + { 0x0013, 0x00c5 }, + { 0x0013, 0x00c6 }, + { 0x0013, 0x00c7 }, + { 0x0013, 0x00c8 }, + { 0x0013, 0x00c9 }, + { 0x0013, 0x00ca }, + { 0x0013, 0x00cb }, + { 0x0013, 0x00cc }, + { 0x0013, 0x00cd }, + { 0x0013, 0x00ce }, + { 0x0013, 0x00cf }, + { 0x0013, 0x00d0 }, + { 0x0013, 0x00d1 }, + { 0x0013, 0x00d2 }, + { 0x0013, 0x00d3 }, + { 0x0013, 0x00d4 }, + { 0x0013, 0x00d5 }, + { 0x0013, 0x00d6 }, + { 0x0013, 0x00d7 }, + { 0x0013, 0x00d8 }, + { 0x0013, 0x00d9 }, + { 0x0013, 0x00da }, + { 0x0013, 0x00db }, + { 0x0013, 0x00dc }, + { 0x0013, 0x00dd }, + { 0x0013, 0x00de }, + { 0x0013, 0x00df }, + { 0x0013, 0x00e0 }, + { 0x0013, 0x00e1 }, + { 0x0013, 0x00e2 }, + { 0x0013, 0x00e3 }, + { 0x0013, 0x00e4 }, + { 0x0013, 0x00e5 }, + { 0x0013, 0x00e6 }, + { 0x0013, 0x00e7 }, + { 0x0013, 0x00e8 }, + { 0x0013, 0x00e9 }, + { 0x0013, 0x00ea }, + { 0x0013, 0x00eb }, + { 0x0013, 0x00ec }, + { 0x0013, 0x00ed }, + { 0x0013, 0x00ee }, + { 0x0013, 0x00ef }, + { 0x0013, 0x00f0 }, + { 0x0013, 0x00f1 }, + { 0x0013, 0x00f2 }, + { 0x0013, 0x00f3 }, + { 0x0013, 0x00f4 }, + { 0x0013, 0x00f5 }, + { 0x0013, 0x00f6 }, + { 0x0013, 0x00f7 }, + { 0x0013, 0x00f8 }, + { 0x0013, 0x00f9 }, + { 0x0013, 0x00fa }, + { 0x0013, 0x00fb }, + { 0x0013, 0x00fc }, + { 0x0013, 0x00fd }, + { 0x0013, 0x00fe }, + { 0x0013, 0x00ff }, + { 0x0013, 0x0100 }, + { 0x0013, 0x0101 }, + { 0x0013, 0x0102 }, + { 0x0013, 0x0103 }, + { 0x0013, 0x0104 }, + { 0x0013, 0x0105 }, + { 0x0013, 0x0106 }, + { 0x0013, 0x0107 }, + { 0x0013, 0x0108 }, + { 0x0013, 0x0109 }, + { 0x0013, 0x010a }, + { 0x0013, 0x010b }, + { 0x0013, 0x010c }, + { 0x0013, 0x010d }, + { 0x0013, 0x010e }, + { 0x0013, 0x010f }, + { 0x0013, 0x0110 }, + { 0x0013, 0x0111 }, + { 0x0013, 0x0112 }, + { 0x0013, 0x0113 }, + { 0x0013, 0x0114 }, + { 0x0013, 0x0115 }, + { 0x0013, 0x0116 }, + { 0x0013, 0x0117 }, + { 0x0013, 0x0118 }, + { 0x0013, 0x0119 }, + { 0x0013, 0x011a }, + { 0x0013, 0x011b }, + { 0x0013, 0x011c }, + { 0x0013, 0x011d }, + { 0x0013, 0x011e }, + { 0x0013, 0x011f }, + { 0x0013, 0x0120 }, + { 0x0013, 0x0121 }, + { 0x0013, 0x0122 }, + { 0x0013, 0x0123 }, + { 0x0013, 0x0124 }, + { 0x0013, 0x0125 }, + { 0x0013, 0x0126 }, + { 0x0013, 0x0127 }, + { 0x0013, 0x0128 }, + { 0x0013, 0x0129 }, + { 0x0013, 0x012a }, + { 0x0013, 0x012b }, + { 0x0013, 0x012c }, + { 0x0013, 0x012d }, + { 0x0013, 0x012e }, + { 0x0013, 0x012f }, + { 0x0013, 0x0130 }, + { 0x0013, 0x0131 }, + { 0x0013, 0x0132 }, + { 0x0013, 0x0133 }, + { 0x0013, 0x0134 }, + { 0x0013, 0x0135 }, + { 0x0013, 0x0136 }, + { 0x0013, 0x0137 }, + { 0x0013, 0x0138 }, + { 0x0013, 0x0139 }, + { 0x0013, 0x013a }, + { 0x0013, 0x013b }, + { 0x0013, 0x013c }, + { 0x0013, 0x013d }, + { 0x0013, 0x013e }, + { 0x0013, 0x013f }, + { 0x0013, 0x0140 }, + { 0x0013, 0x0141 }, + { 0x0013, 0x0142 }, + { 0x0013, 0x0143 }, + { 0x0013, 0x0144 }, + { 0x0013, 0x0145 }, + { 0x0013, 0x0146 }, + { 0x0013, 0x0147 }, + { 0x0013, 0x0148 }, + { 0x0013, 0x0149 }, + { 0x0013, 0x014a }, + { 0x0013, 0x014b }, + { 0x0013, 0x014c }, + { 0x0013, 0x014d }, + { 0x0013, 0x014e }, + { 0x0013, 0x014f }, + { 0x0013, 0x0150 }, + { 0x0013, 0x0151 }, + { 0x0013, 0x0152 }, + { 0x0013, 0x0153 }, + { 0x0013, 0x0154 }, + { 0x0013, 0x0155 }, + { 0x0013, 0x0156 }, + { 0x0013, 0x0157 }, + { 0x0013, 0x0158 }, + { 0x0013, 0x0159 }, + { 0x0013, 0x015a }, + { 0x0013, 0x015b }, + { 0x0013, 0x015c }, + { 0x0013, 0x015d }, + { 0x0013, 0x015e }, + { 0x0013, 0x015f }, + { 0x0013, 0x0160 }, + { 0x0013, 0x0161 }, + { 0x0013, 0x0162 }, + { 0x0013, 0x0163 }, + { 0x0013, 0x0164 }, + { 0x0013, 0x0165 }, + { 0x0013, 0x0166 }, + { 0x0013, 0x0167 }, + { 0x0013, 0x0168 }, + { 0x0013, 0x0169 }, + { 0x0013, 0x016a }, + { 0x0013, 0x016b }, + { 0x0013, 0x016c }, + { 0x0013, 0x016d }, + { 0x0013, 0x016e }, + { 0x0013, 0x016f }, + { 0x0013, 0x0170 }, + { 0x0013, 0x0171 }, + { 0x0013, 0x0172 }, + { 0x0013, 0x0173 }, + { 0x0013, 0x0174 }, + { 0x0013, 0x0175 }, + { 0x0013, 0x0176 }, + { 0x0013, 0x0177 }, + { 0x0013, 0x0178 }, + { 0x0013, 0x0179 }, + { 0x0013, 0x017a }, + { 0x0013, 0x017b }, + { 0x0013, 0x017c }, + { 0x0013, 0x017d }, + { 0x0013, 0x017e }, + { 0x0013, 0x017f }, + { 0x0013, 0x0180 }, + { 0x0013, 0x0181 }, + { 0x0013, 0x0182 }, + { 0x0013, 0x0183 }, + { 0x0013, 0x0184 }, + { 0x0013, 0x0185 }, + { 0x0013, 0x0186 }, + { 0x0013, 0x0187 }, + { 0x0013, 0x0188 }, + { 0x0013, 0x0189 }, + { 0x0013, 0x018a }, + { 0x0013, 0x018b }, + { 0x0013, 0x018c }, + { 0x0013, 0x018d }, + { 0x0013, 0x018e }, + { 0x0013, 0x018f }, + { 0x0013, 0x0190 }, + { 0x0013, 0x0191 }, + { 0x0013, 0x0192 }, + { 0x0013, 0x0193 }, + { 0x0013, 0x0194 }, + { 0x0013, 0x0195 }, + { 0x0013, 0x0196 }, + { 0x0013, 0x0197 }, + { 0x0013, 0x0198 }, + { 0x0013, 0x0199 }, + { 0x0013, 0x019a }, + { 0x0013, 0x019b }, + { 0x0013, 0x019c }, + { 0x0013, 0x019d }, + { 0x0013, 0x019e }, + { 0x0013, 0x019f }, + { 0x0013, 0x01a0 }, + { 0x0013, 0x01a1 }, + { 0x0013, 0x01a2 }, + { 0x0013, 0x01a3 }, + { 0x0013, 0x01a4 }, + { 0x0013, 0x01a5 }, + { 0x0013, 0x01a6 }, + { 0x0013, 0x01a7 }, + { 0x0013, 0x01a8 }, + { 0x0013, 0x01a9 }, + { 0x0013, 0x01aa }, + { 0x0013, 0x01ab }, + { 0x0013, 0x01ac }, + { 0x0013, 0x01ad }, + { 0x0013, 0x01ae }, + { 0x0013, 0x01af }, + { 0x0013, 0x01b0 }, + { 0x0013, 0x01b1 }, + { 0x0013, 0x01b2 }, + { 0x0013, 0x01b3 }, + { 0x0013, 0x01b4 }, + { 0x0013, 0x01b5 }, + { 0x0013, 0x01b6 }, + { 0x0013, 0x01b7 }, + { 0x0013, 0x01b8 }, + { 0x0013, 0x01b9 }, + { 0x0013, 0x01ba }, + { 0x0013, 0x01bb }, + { 0x0013, 0x01bc }, + { 0x0013, 0x01bd }, + { 0x0013, 0x01be }, + { 0x0013, 0x01bf }, + { 0x0013, 0x01c0 }, + { 0x0013, 0x01c1 }, + { 0x0013, 0x01c2 }, + { 0x0013, 0x01c3 }, + { 0x0013, 0x01c4 }, + { 0x0013, 0x01c5 }, + { 0x0013, 0x01c6 }, + { 0x0013, 0x01c7 }, + { 0x0013, 0x01c8 }, + { 0x0013, 0x01c9 }, + { 0x0013, 0x01ca }, + { 0x0013, 0x01cb }, + { 0x0013, 0x01cc }, + { 0x0013, 0x01cd }, + { 0x0013, 0x01ce }, + { 0x0013, 0x01cf }, + { 0x0013, 0x01d0 }, + { 0x0013, 0x01d1 }, + { 0x0013, 0x01d2 }, + { 0x0013, 0x01d3 }, + { 0x0013, 0x01d4 }, + { 0x0013, 0x01d5 }, + { 0x0013, 0x01d6 }, + { 0x0013, 0x01d7 }, + { 0x0013, 0x01d8 }, + { 0x0013, 0x01d9 }, + { 0x0013, 0x01da }, + { 0x0013, 0x01db }, + { 0x0013, 0x01dc }, + { 0x0013, 0x01dd }, + { 0x0013, 0x01de }, + { 0x0013, 0x01df }, + { 0x0013, 0x01e0 }, + { 0x0013, 0x01e1 }, + { 0x0013, 0x01e2 }, + { 0x0013, 0x01e3 }, + { 0x0013, 0x01e4 }, + { 0x0013, 0x01e5 }, + { 0x0013, 0x01e6 }, + { 0x0013, 0x01e7 }, + { 0x0013, 0x01e8 }, + { 0x0013, 0x01e9 }, + { 0x0013, 0x01ea }, + { 0x0013, 0x01eb }, + { 0x0012, 0x00fd }, + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec47[87][16] = -{ - {0x0004ffff, 0x0003ffff, 0x0001ffff, 0x0002ffff, 0x0000001a, 0x00000031, 0x00010001, 0x00010001, 0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x00020000, 0x00020000, 0x00020000, 0x00020000, }, - {0x00020049, 0x00020049, 0x00020049, 0x00020049, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, }, - {0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, }, - {0x00020003, 0x00020003, 0x00020003, 0x00020003, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x00020033, 0x00020033, 0x00020033, 0x00020033, 0x00020048, 0x00020048, 0x00020048, 0x00020048, }, - {0x000affff, 0x0008ffff, 0x0009ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x00000004, 0x00000034, 0x00000060, 0x00000062, 0x0001001c, 0x0001001c, 0x0001004b, 0x0001004b, 0x00010061, 0x00010061, }, - {0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, }, - {0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, }, - {0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x00030079, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, 0x0003007a, }, - {0x00010036, 0x00010036, 0x00010065, 0x00010065, 0x0001007c, 0x0001007c, 0x00010090, 0x00010090, 0x00010091, 0x00010091, 0x00010092, 0x00010092, 0x00020005, 0x00020005, 0x00020005, 0x00020005, }, - {0x0002004d, 0x0002004d, 0x0002004d, 0x0002004d, 0x00020064, 0x00020064, 0x00020064, 0x00020064, 0x00020078, 0x00020078, 0x00020078, 0x00020078, 0x0002007b, 0x0002007b, 0x0002007b, 0x0002007b, }, - {0x0017ffff, 0x0028ffff, 0x0039ffff, 0x0012ffff, 0x0011ffff, 0x0010ffff, 0x000bffff, 0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x00000006, 0x0000004e, 0x00000093, 0x0001001e, 0x0001001e, }, - {0x00020095, 0x00020095, 0x00020095, 0x00020095, 0x000200a8, 0x000200a8, 0x000200a8, 0x000200a8, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, }, - {0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, }, - {0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x00030066, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, 0x0003007d, }, - {0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x00030094, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, }, - {0x000300aa, 0x000300aa, 0x000300aa, 0x000300aa, 0x000300aa, 0x000300aa, 0x000300aa, 0x000300aa, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, }, - {0x00010067, 0x00010067, 0x00010068, 0x00010068, 0x0001007e, 0x0001007e, 0x000100ac, 0x000100ac, 0x000100c1, 0x000100c1, 0x000100c2, 0x000100c2, 0x0002004f, 0x0002004f, 0x0002004f, 0x0002004f, }, - {0x0014ffff, 0x00000008, 0x00000050, 0x0000007f, 0x00000096, 0x000000ad, 0x000000c0, 0x000000c3, 0x000000d9, 0x000000da, 0x00010020, 0x00010020, 0x00010021, 0x00010021, 0x00010038, 0x00010038, }, - {0x004affff, 0x004bffff, 0x004cffff, 0x004dffff, 0x004effff, 0x004fffff, 0x0050ffff, 0x0051ffff, 0x0052ffff, 0x0053ffff, 0x0054ffff, 0x0055ffff, 0x0056ffff, 0x0016ffff, 0x0015ffff, 0x0013ffff, }, - {0x000200f3, 0x000200f3, 0x000200f3, 0x000200f3, 0x0002023f, 0x0002023f, 0x0002023f, 0x0002023f, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, 0x00030069, }, - {0x000300c4, 0x000300c4, 0x000300c4, 0x000300c4, 0x000300c4, 0x000300c4, 0x000300c4, 0x000300c4, 0x000300db, 0x000300db, 0x000300db, 0x000300db, 0x000300db, 0x000300db, 0x000300db, 0x000300db, }, - {0x00020051, 0x00020051, 0x00020051, 0x00020051, 0x00020080, 0x00020080, 0x00020080, 0x00020080, 0x000200af, 0x000200af, 0x000200af, 0x000200af, 0x000200dd, 0x000200dd, 0x000200dd, 0x000200dd, }, - {0x0001023b, 0x0001023b, 0x0001023c, 0x0001023c, 0x0001023d, 0x0001023d, 0x0001023e, 0x0001023e, 0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x00020039, 0x00020039, 0x00020039, 0x00020039, }, - {0x001bffff, 0x001affff, 0x001dffff, 0x001cffff, 0x0020ffff, 0x0018ffff, 0x0019ffff, 0x001effff, 0x001fffff, 0x0021ffff, 0x0022ffff, 0x0023ffff, 0x0024ffff, 0x0025ffff, 0x0026ffff, 0x0027ffff, }, - {0x00010046, 0x00010046, 0x00010047, 0x00010047, 0x00010052, 0x00010052, 0x00010053, 0x00010053, 0x00010054, 0x00010054, 0x00010055, 0x00010055, 0x00010056, 0x00010056, 0x00010057, 0x00010057, }, - {0x00010058, 0x00010058, 0x00010059, 0x00010059, 0x0001005a, 0x0001005a, 0x0001005b, 0x0001005b, 0x0001005c, 0x0001005c, 0x0001005d, 0x0001005d, 0x0001005e, 0x0001005e, 0x0001005f, 0x0001005f, }, - {0x00010011, 0x00010011, 0x00010012, 0x00010012, 0x00010013, 0x00010013, 0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010023, 0x00010023, }, - {0x00010009, 0x00010009, 0x0001000a, 0x0001000a, 0x0001000b, 0x0001000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, 0x00010010, 0x00010010, }, - {0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, 0x0001002e, 0x0001002e, 0x0001002f, 0x0001002f, 0x0001003a, 0x0001003a, 0x0001003b, 0x0001003b, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, }, - {0x00010024, 0x00010024, 0x00010025, 0x00010025, 0x00010026, 0x00010026, 0x00010027, 0x00010027, 0x00010028, 0x00010028, 0x00010029, 0x00010029, 0x0001002a, 0x0001002a, 0x0001002b, 0x0001002b, }, - {0x0001006a, 0x0001006a, 0x0001006b, 0x0001006b, 0x0001006c, 0x0001006c, 0x0001006d, 0x0001006d, 0x0001006e, 0x0001006e, 0x0001006f, 0x0001006f, 0x00010070, 0x00010070, 0x00010071, 0x00010071, }, - {0x00010072, 0x00010072, 0x00010073, 0x00010073, 0x00010074, 0x00010074, 0x00010075, 0x00010075, 0x00010076, 0x00010076, 0x00010077, 0x00010077, 0x00010081, 0x00010081, 0x00010082, 0x00010082, }, - {0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x00010040, 0x00010040, 0x00010041, 0x00010041, 0x00010042, 0x00010042, 0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, }, - {0x00010083, 0x00010083, 0x00010084, 0x00010084, 0x00010085, 0x00010085, 0x00010086, 0x00010086, 0x00010087, 0x00010087, 0x00010088, 0x00010088, 0x00010089, 0x00010089, 0x0001008a, 0x0001008a, }, - {0x0001008b, 0x0001008b, 0x0001008c, 0x0001008c, 0x0001008d, 0x0001008d, 0x0001008e, 0x0001008e, 0x0001008f, 0x0001008f, 0x00010097, 0x00010097, 0x00010098, 0x00010098, 0x00010099, 0x00010099, }, - {0x0001009a, 0x0001009a, 0x0001009b, 0x0001009b, 0x0001009c, 0x0001009c, 0x0001009d, 0x0001009d, 0x0001009e, 0x0001009e, 0x0001009f, 0x0001009f, 0x000100a0, 0x000100a0, 0x000100a1, 0x000100a1, }, - {0x000100a2, 0x000100a2, 0x000100a3, 0x000100a3, 0x000100a4, 0x000100a4, 0x000100a5, 0x000100a5, 0x000100a6, 0x000100a6, 0x000100a7, 0x000100a7, 0x000100ae, 0x000100ae, 0x000100b0, 0x000100b0, }, - {0x000100b1, 0x000100b1, 0x000100b2, 0x000100b2, 0x000100b3, 0x000100b3, 0x000100b4, 0x000100b4, 0x000100b5, 0x000100b5, 0x000100b6, 0x000100b6, 0x000100b7, 0x000100b7, 0x000100b8, 0x000100b8, }, - {0x000100b9, 0x000100b9, 0x000100ba, 0x000100ba, 0x000100bb, 0x000100bb, 0x000100bc, 0x000100bc, 0x000100bd, 0x000100bd, 0x000100be, 0x000100be, 0x000100bf, 0x000100bf, 0x000100c5, 0x000100c5, }, - {0x000100c6, 0x000100c6, 0x000100c7, 0x000100c7, 0x000100c8, 0x000100c8, 0x000100c9, 0x000100c9, 0x000100ca, 0x000100ca, 0x000100cb, 0x000100cb, 0x000100cc, 0x000100cc, 0x000100cd, 0x000100cd, }, - {0x0029ffff, 0x002affff, 0x002bffff, 0x002cffff, 0x002dffff, 0x002effff, 0x002fffff, 0x0030ffff, 0x0031ffff, 0x0032ffff, 0x0033ffff, 0x0034ffff, 0x0035ffff, 0x0036ffff, 0x0037ffff, 0x0038ffff, }, - {0x000100ce, 0x000100ce, 0x000100cf, 0x000100cf, 0x000100d0, 0x000100d0, 0x000100d1, 0x000100d1, 0x000100d2, 0x000100d2, 0x000100d3, 0x000100d3, 0x000100d4, 0x000100d4, 0x000100d5, 0x000100d5, }, - {0x000100d6, 0x000100d6, 0x000100d7, 0x000100d7, 0x000100d8, 0x000100d8, 0x000100dc, 0x000100dc, 0x000100de, 0x000100de, 0x000100df, 0x000100df, 0x000100e0, 0x000100e0, 0x000100e1, 0x000100e1, }, - {0x000100e2, 0x000100e2, 0x000100e3, 0x000100e3, 0x000100e4, 0x000100e4, 0x000100e5, 0x000100e5, 0x000100e6, 0x000100e6, 0x000100e7, 0x000100e7, 0x000100e8, 0x000100e8, 0x000100e9, 0x000100e9, }, - {0x000100ea, 0x000100ea, 0x000100eb, 0x000100eb, 0x000100ec, 0x000100ec, 0x000100ed, 0x000100ed, 0x000100ee, 0x000100ee, 0x000100ef, 0x000100ef, 0x000100f0, 0x000100f0, 0x000100f1, 0x000100f1, }, - {0x000100f2, 0x000100f2, 0x000100f4, 0x000100f4, 0x000100f5, 0x000100f5, 0x000100f6, 0x000100f6, 0x000100f7, 0x000100f7, 0x000100f8, 0x000100f8, 0x000100f9, 0x000100f9, 0x000100fa, 0x000100fa, }, - {0x000100fb, 0x000100fb, 0x000100fc, 0x000100fc, 0x000100fd, 0x000100fd, 0x000100fe, 0x000100fe, 0x000100ff, 0x000100ff, 0x00010100, 0x00010100, 0x00010101, 0x00010101, 0x00010102, 0x00010102, }, - {0x00010103, 0x00010103, 0x00010104, 0x00010104, 0x00010105, 0x00010105, 0x00010106, 0x00010106, 0x00010107, 0x00010107, 0x00010108, 0x00010108, 0x00010109, 0x00010109, 0x0001010a, 0x0001010a, }, - {0x0001010b, 0x0001010b, 0x0001010c, 0x0001010c, 0x0001010d, 0x0001010d, 0x0001010e, 0x0001010e, 0x0001010f, 0x0001010f, 0x00010110, 0x00010110, 0x00010111, 0x00010111, 0x00010112, 0x00010112, }, - {0x00010113, 0x00010113, 0x00010114, 0x00010114, 0x00010115, 0x00010115, 0x00010116, 0x00010116, 0x00010117, 0x00010117, 0x00010118, 0x00010118, 0x00010119, 0x00010119, 0x0001011a, 0x0001011a, }, - {0x0001011b, 0x0001011b, 0x0001011c, 0x0001011c, 0x0001011d, 0x0001011d, 0x0001011e, 0x0001011e, 0x0001011f, 0x0001011f, 0x00010120, 0x00010120, 0x00010121, 0x00010121, 0x00010122, 0x00010122, }, - {0x00010123, 0x00010123, 0x00010124, 0x00010124, 0x00010125, 0x00010125, 0x00010126, 0x00010126, 0x00010127, 0x00010127, 0x00010128, 0x00010128, 0x00010129, 0x00010129, 0x0001012a, 0x0001012a, }, - {0x0001012b, 0x0001012b, 0x0001012c, 0x0001012c, 0x0001012d, 0x0001012d, 0x0001012e, 0x0001012e, 0x0001012f, 0x0001012f, 0x00010130, 0x00010130, 0x00010131, 0x00010131, 0x00010132, 0x00010132, }, - {0x00010133, 0x00010133, 0x00010134, 0x00010134, 0x00010135, 0x00010135, 0x00010136, 0x00010136, 0x00010137, 0x00010137, 0x00010138, 0x00010138, 0x00010139, 0x00010139, 0x0001013a, 0x0001013a, }, - {0x0001013b, 0x0001013b, 0x0001013c, 0x0001013c, 0x0001013d, 0x0001013d, 0x0001013e, 0x0001013e, 0x0001013f, 0x0001013f, 0x00010140, 0x00010140, 0x00010141, 0x00010141, 0x00010142, 0x00010142, }, - {0x00010143, 0x00010143, 0x00010144, 0x00010144, 0x00010145, 0x00010145, 0x00010146, 0x00010146, 0x00010147, 0x00010147, 0x00010148, 0x00010148, 0x00010149, 0x00010149, 0x0001014a, 0x0001014a, }, - {0x0001014b, 0x0001014b, 0x0001014c, 0x0001014c, 0x0001014d, 0x0001014d, 0x0001014e, 0x0001014e, 0x0001014f, 0x0001014f, 0x00010150, 0x00010150, 0x00010151, 0x00010151, 0x00010152, 0x00010152, }, - {0x003affff, 0x003bffff, 0x003cffff, 0x003dffff, 0x003effff, 0x003fffff, 0x0040ffff, 0x0041ffff, 0x0042ffff, 0x0043ffff, 0x0044ffff, 0x0045ffff, 0x0046ffff, 0x0047ffff, 0x0048ffff, 0x0049ffff, }, - {0x00010153, 0x00010153, 0x00010154, 0x00010154, 0x00010155, 0x00010155, 0x00010156, 0x00010156, 0x00010157, 0x00010157, 0x00010158, 0x00010158, 0x00010159, 0x00010159, 0x0001015a, 0x0001015a, }, - {0x0001015b, 0x0001015b, 0x0001015c, 0x0001015c, 0x0001015d, 0x0001015d, 0x0001015e, 0x0001015e, 0x0001015f, 0x0001015f, 0x00010160, 0x00010160, 0x00010161, 0x00010161, 0x00010162, 0x00010162, }, - {0x00010163, 0x00010163, 0x00010164, 0x00010164, 0x00010165, 0x00010165, 0x00010166, 0x00010166, 0x00010167, 0x00010167, 0x00010168, 0x00010168, 0x00010169, 0x00010169, 0x0001016a, 0x0001016a, }, - {0x0001016b, 0x0001016b, 0x0001016c, 0x0001016c, 0x0001016d, 0x0001016d, 0x0001016e, 0x0001016e, 0x0001016f, 0x0001016f, 0x00010170, 0x00010170, 0x00010171, 0x00010171, 0x00010172, 0x00010172, }, - {0x00010173, 0x00010173, 0x00010174, 0x00010174, 0x00010175, 0x00010175, 0x00010176, 0x00010176, 0x00010177, 0x00010177, 0x00010178, 0x00010178, 0x00010179, 0x00010179, 0x0001017a, 0x0001017a, }, - {0x0001017b, 0x0001017b, 0x0001017c, 0x0001017c, 0x0001017d, 0x0001017d, 0x0001017e, 0x0001017e, 0x0001017f, 0x0001017f, 0x00010180, 0x00010180, 0x00010181, 0x00010181, 0x00010182, 0x00010182, }, - {0x00010183, 0x00010183, 0x00010184, 0x00010184, 0x00010185, 0x00010185, 0x00010186, 0x00010186, 0x00010187, 0x00010187, 0x00010188, 0x00010188, 0x00010189, 0x00010189, 0x0001018a, 0x0001018a, }, - {0x0001018b, 0x0001018b, 0x0001018c, 0x0001018c, 0x0001018d, 0x0001018d, 0x0001018e, 0x0001018e, 0x0001018f, 0x0001018f, 0x00010190, 0x00010190, 0x00010191, 0x00010191, 0x00010192, 0x00010192, }, - {0x00010193, 0x00010193, 0x00010194, 0x00010194, 0x00010195, 0x00010195, 0x00010196, 0x00010196, 0x00010197, 0x00010197, 0x00010198, 0x00010198, 0x00010199, 0x00010199, 0x0001019a, 0x0001019a, }, - {0x0001019b, 0x0001019b, 0x0001019c, 0x0001019c, 0x0001019d, 0x0001019d, 0x0001019e, 0x0001019e, 0x0001019f, 0x0001019f, 0x000101a0, 0x000101a0, 0x000101a1, 0x000101a1, 0x000101a2, 0x000101a2, }, - {0x000101a3, 0x000101a3, 0x000101a4, 0x000101a4, 0x000101a5, 0x000101a5, 0x000101a6, 0x000101a6, 0x000101a7, 0x000101a7, 0x000101a8, 0x000101a8, 0x000101a9, 0x000101a9, 0x000101aa, 0x000101aa, }, - {0x000101ab, 0x000101ab, 0x000101ac, 0x000101ac, 0x000101ad, 0x000101ad, 0x000101ae, 0x000101ae, 0x000101af, 0x000101af, 0x000101b0, 0x000101b0, 0x000101b1, 0x000101b1, 0x000101b2, 0x000101b2, }, - {0x000101b3, 0x000101b3, 0x000101b4, 0x000101b4, 0x000101b5, 0x000101b5, 0x000101b6, 0x000101b6, 0x000101b7, 0x000101b7, 0x000101b8, 0x000101b8, 0x000101b9, 0x000101b9, 0x000101ba, 0x000101ba, }, - {0x000101bb, 0x000101bb, 0x000101bc, 0x000101bc, 0x000101bd, 0x000101bd, 0x000101be, 0x000101be, 0x000101bf, 0x000101bf, 0x000101c0, 0x000101c0, 0x000101c1, 0x000101c1, 0x000101c2, 0x000101c2, }, - {0x000101c3, 0x000101c3, 0x000101c4, 0x000101c4, 0x000101c5, 0x000101c5, 0x000101c6, 0x000101c6, 0x000101c7, 0x000101c7, 0x000101c8, 0x000101c8, 0x000101c9, 0x000101c9, 0x000101ca, 0x000101ca, }, - {0x000101cb, 0x000101cb, 0x000101cc, 0x000101cc, 0x000101cd, 0x000101cd, 0x000101ce, 0x000101ce, 0x000101cf, 0x000101cf, 0x000101d0, 0x000101d0, 0x000101d1, 0x000101d1, 0x000101d2, 0x000101d2, }, - {0x000101d3, 0x000101d3, 0x000101d4, 0x000101d4, 0x000101d5, 0x000101d5, 0x000101d6, 0x000101d6, 0x000101d7, 0x000101d7, 0x000101d8, 0x000101d8, 0x000101d9, 0x000101d9, 0x000101da, 0x000101da, }, - {0x000101db, 0x000101db, 0x000101dc, 0x000101dc, 0x000101dd, 0x000101dd, 0x000101de, 0x000101de, 0x000101df, 0x000101df, 0x000101e0, 0x000101e0, 0x000101e1, 0x000101e1, 0x000101e2, 0x000101e2, }, - {0x000101e3, 0x000101e3, 0x000101e4, 0x000101e4, 0x000101e5, 0x000101e5, 0x000101e6, 0x000101e6, 0x000101e7, 0x000101e7, 0x000101e8, 0x000101e8, 0x000101e9, 0x000101e9, 0x000101ea, 0x000101ea, }, - {0x000101eb, 0x000101eb, 0x000101ec, 0x000101ec, 0x000101ed, 0x000101ed, 0x000101ee, 0x000101ee, 0x000101ef, 0x000101ef, 0x000101f0, 0x000101f0, 0x000101f1, 0x000101f1, 0x000101f2, 0x000101f2, }, - {0x000101f3, 0x000101f3, 0x000101f4, 0x000101f4, 0x000101f5, 0x000101f5, 0x000101f6, 0x000101f6, 0x000101f7, 0x000101f7, 0x000101f8, 0x000101f8, 0x000101f9, 0x000101f9, 0x000101fa, 0x000101fa, }, - {0x000101fb, 0x000101fb, 0x000101fc, 0x000101fc, 0x000101fd, 0x000101fd, 0x000101fe, 0x000101fe, 0x000101ff, 0x000101ff, 0x00010200, 0x00010200, 0x00010201, 0x00010201, 0x00010202, 0x00010202, }, - {0x00010203, 0x00010203, 0x00010204, 0x00010204, 0x00010205, 0x00010205, 0x00010206, 0x00010206, 0x00010207, 0x00010207, 0x00010208, 0x00010208, 0x00010209, 0x00010209, 0x0001020a, 0x0001020a, }, - {0x0001020b, 0x0001020b, 0x0001020c, 0x0001020c, 0x0001020d, 0x0001020d, 0x0001020e, 0x0001020e, 0x0001020f, 0x0001020f, 0x00010210, 0x00010210, 0x00010211, 0x00010211, 0x00010212, 0x00010212, }, - {0x00010213, 0x00010213, 0x00010214, 0x00010214, 0x00010215, 0x00010215, 0x00010216, 0x00010216, 0x00010217, 0x00010217, 0x00010218, 0x00010218, 0x00010219, 0x00010219, 0x0001021a, 0x0001021a, }, - {0x0001021b, 0x0001021b, 0x0001021c, 0x0001021c, 0x0001021d, 0x0001021d, 0x0001021e, 0x0001021e, 0x0001021f, 0x0001021f, 0x00010220, 0x00010220, 0x00010221, 0x00010221, 0x00010222, 0x00010222, }, - {0x00010223, 0x00010223, 0x00010224, 0x00010224, 0x00010225, 0x00010225, 0x00010226, 0x00010226, 0x00010227, 0x00010227, 0x00010228, 0x00010228, 0x00010229, 0x00010229, 0x0001022a, 0x0001022a, }, - {0x0001022b, 0x0001022b, 0x0001022c, 0x0001022c, 0x0001022d, 0x0001022d, 0x0001022e, 0x0001022e, 0x0001022f, 0x0001022f, 0x00010230, 0x00010230, 0x00010231, 0x00010231, 0x00010232, 0x00010232, }, - {0x00010233, 0x00010233, 0x00010234, 0x00010234, 0x00010235, 0x00010235, 0x00010236, 0x00010236, 0x00010237, 0x00010237, 0x00010238, 0x00010238, 0x00010239, 0x00010239, 0x0001023a, 0x0001023a, }, +const uint32_t c_aauiCQMFHuffDec47[87][16] = { + { + 0x0004ffff, + 0x0003ffff, + 0x0001ffff, + 0x0002ffff, + 0x0000001a, + 0x00000031, + 0x00010001, + 0x00010001, + 0x00010018, + 0x00010018, + 0x00010019, + 0x00010019, + 0x00020000, + 0x00020000, + 0x00020000, + 0x00020000, + }, + { + 0x00020049, + 0x00020049, + 0x00020049, + 0x00020049, + 0x0002004a, + 0x0002004a, + 0x0002004a, + 0x0002004a, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + }, + { + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + }, + { + 0x00020003, + 0x00020003, + 0x00020003, + 0x00020003, + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x00020033, + 0x00020033, + 0x00020033, + 0x00020033, + 0x00020048, + 0x00020048, + 0x00020048, + 0x00020048, + }, + { + 0x000affff, + 0x0008ffff, + 0x0009ffff, + 0x0005ffff, + 0x0006ffff, + 0x0007ffff, + 0x00000004, + 0x00000034, + 0x00000060, + 0x00000062, + 0x0001001c, + 0x0001001c, + 0x0001004b, + 0x0001004b, + 0x00010061, + 0x00010061, + }, + { + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + }, + { + 0x0003004c, + 0x0003004c, + 0x0003004c, + 0x0003004c, + 0x0003004c, + 0x0003004c, + 0x0003004c, + 0x0003004c, + 0x00030063, + 0x00030063, + 0x00030063, + 0x00030063, + 0x00030063, + 0x00030063, + 0x00030063, + 0x00030063, + }, + { + 0x00030079, + 0x00030079, + 0x00030079, + 0x00030079, + 0x00030079, + 0x00030079, + 0x00030079, + 0x00030079, + 0x0003007a, + 0x0003007a, + 0x0003007a, + 0x0003007a, + 0x0003007a, + 0x0003007a, + 0x0003007a, + 0x0003007a, + }, + { + 0x00010036, + 0x00010036, + 0x00010065, + 0x00010065, + 0x0001007c, + 0x0001007c, + 0x00010090, + 0x00010090, + 0x00010091, + 0x00010091, + 0x00010092, + 0x00010092, + 0x00020005, + 0x00020005, + 0x00020005, + 0x00020005, + }, + { + 0x0002004d, + 0x0002004d, + 0x0002004d, + 0x0002004d, + 0x00020064, + 0x00020064, + 0x00020064, + 0x00020064, + 0x00020078, + 0x00020078, + 0x00020078, + 0x00020078, + 0x0002007b, + 0x0002007b, + 0x0002007b, + 0x0002007b, + }, + { + 0x0017ffff, + 0x0028ffff, + 0x0039ffff, + 0x0012ffff, + 0x0011ffff, + 0x0010ffff, + 0x000bffff, + 0x000cffff, + 0x000dffff, + 0x000effff, + 0x000fffff, + 0x00000006, + 0x0000004e, + 0x00000093, + 0x0001001e, + 0x0001001e, + }, + { + 0x00020095, + 0x00020095, + 0x00020095, + 0x00020095, + 0x000200a8, + 0x000200a8, + 0x000200a8, + 0x000200a8, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + }, + { + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + }, + { + 0x00030066, + 0x00030066, + 0x00030066, + 0x00030066, + 0x00030066, + 0x00030066, + 0x00030066, + 0x00030066, + 0x0003007d, + 0x0003007d, + 0x0003007d, + 0x0003007d, + 0x0003007d, + 0x0003007d, + 0x0003007d, + 0x0003007d, + }, + { + 0x00030094, + 0x00030094, + 0x00030094, + 0x00030094, + 0x00030094, + 0x00030094, + 0x00030094, + 0x00030094, + 0x000300a9, + 0x000300a9, + 0x000300a9, + 0x000300a9, + 0x000300a9, + 0x000300a9, + 0x000300a9, + 0x000300a9, + }, + { + 0x000300aa, + 0x000300aa, + 0x000300aa, + 0x000300aa, + 0x000300aa, + 0x000300aa, + 0x000300aa, + 0x000300aa, + 0x000300ab, + 0x000300ab, + 0x000300ab, + 0x000300ab, + 0x000300ab, + 0x000300ab, + 0x000300ab, + 0x000300ab, + }, + { + 0x00010067, + 0x00010067, + 0x00010068, + 0x00010068, + 0x0001007e, + 0x0001007e, + 0x000100ac, + 0x000100ac, + 0x000100c1, + 0x000100c1, + 0x000100c2, + 0x000100c2, + 0x0002004f, + 0x0002004f, + 0x0002004f, + 0x0002004f, + }, + { + 0x0014ffff, + 0x00000008, + 0x00000050, + 0x0000007f, + 0x00000096, + 0x000000ad, + 0x000000c0, + 0x000000c3, + 0x000000d9, + 0x000000da, + 0x00010020, + 0x00010020, + 0x00010021, + 0x00010021, + 0x00010038, + 0x00010038, + }, + { + 0x004affff, + 0x004bffff, + 0x004cffff, + 0x004dffff, + 0x004effff, + 0x004fffff, + 0x0050ffff, + 0x0051ffff, + 0x0052ffff, + 0x0053ffff, + 0x0054ffff, + 0x0055ffff, + 0x0056ffff, + 0x0016ffff, + 0x0015ffff, + 0x0013ffff, + }, + { + 0x000200f3, + 0x000200f3, + 0x000200f3, + 0x000200f3, + 0x0002023f, + 0x0002023f, + 0x0002023f, + 0x0002023f, + 0x00030069, + 0x00030069, + 0x00030069, + 0x00030069, + 0x00030069, + 0x00030069, + 0x00030069, + 0x00030069, + }, + { + 0x000300c4, + 0x000300c4, + 0x000300c4, + 0x000300c4, + 0x000300c4, + 0x000300c4, + 0x000300c4, + 0x000300c4, + 0x000300db, + 0x000300db, + 0x000300db, + 0x000300db, + 0x000300db, + 0x000300db, + 0x000300db, + 0x000300db, + }, + { + 0x00020051, + 0x00020051, + 0x00020051, + 0x00020051, + 0x00020080, + 0x00020080, + 0x00020080, + 0x00020080, + 0x000200af, + 0x000200af, + 0x000200af, + 0x000200af, + 0x000200dd, + 0x000200dd, + 0x000200dd, + 0x000200dd, + }, + { + 0x0001023b, + 0x0001023b, + 0x0001023c, + 0x0001023c, + 0x0001023d, + 0x0001023d, + 0x0001023e, + 0x0001023e, + 0x00020022, + 0x00020022, + 0x00020022, + 0x00020022, + 0x00020039, + 0x00020039, + 0x00020039, + 0x00020039, + }, + { + 0x001bffff, + 0x001affff, + 0x001dffff, + 0x001cffff, + 0x0020ffff, + 0x0018ffff, + 0x0019ffff, + 0x001effff, + 0x001fffff, + 0x0021ffff, + 0x0022ffff, + 0x0023ffff, + 0x0024ffff, + 0x0025ffff, + 0x0026ffff, + 0x0027ffff, + }, + { + 0x00010046, + 0x00010046, + 0x00010047, + 0x00010047, + 0x00010052, + 0x00010052, + 0x00010053, + 0x00010053, + 0x00010054, + 0x00010054, + 0x00010055, + 0x00010055, + 0x00010056, + 0x00010056, + 0x00010057, + 0x00010057, + }, + { + 0x00010058, + 0x00010058, + 0x00010059, + 0x00010059, + 0x0001005a, + 0x0001005a, + 0x0001005b, + 0x0001005b, + 0x0001005c, + 0x0001005c, + 0x0001005d, + 0x0001005d, + 0x0001005e, + 0x0001005e, + 0x0001005f, + 0x0001005f, + }, + { + 0x00010011, + 0x00010011, + 0x00010012, + 0x00010012, + 0x00010013, + 0x00010013, + 0x00010014, + 0x00010014, + 0x00010015, + 0x00010015, + 0x00010016, + 0x00010016, + 0x00010017, + 0x00010017, + 0x00010023, + 0x00010023, + }, + { + 0x00010009, + 0x00010009, + 0x0001000a, + 0x0001000a, + 0x0001000b, + 0x0001000b, + 0x0001000c, + 0x0001000c, + 0x0001000d, + 0x0001000d, + 0x0001000e, + 0x0001000e, + 0x0001000f, + 0x0001000f, + 0x00010010, + 0x00010010, + }, + { + 0x0001002c, + 0x0001002c, + 0x0001002d, + 0x0001002d, + 0x0001002e, + 0x0001002e, + 0x0001002f, + 0x0001002f, + 0x0001003a, + 0x0001003a, + 0x0001003b, + 0x0001003b, + 0x0001003c, + 0x0001003c, + 0x0001003d, + 0x0001003d, + }, + { + 0x00010024, + 0x00010024, + 0x00010025, + 0x00010025, + 0x00010026, + 0x00010026, + 0x00010027, + 0x00010027, + 0x00010028, + 0x00010028, + 0x00010029, + 0x00010029, + 0x0001002a, + 0x0001002a, + 0x0001002b, + 0x0001002b, + }, + { + 0x0001006a, + 0x0001006a, + 0x0001006b, + 0x0001006b, + 0x0001006c, + 0x0001006c, + 0x0001006d, + 0x0001006d, + 0x0001006e, + 0x0001006e, + 0x0001006f, + 0x0001006f, + 0x00010070, + 0x00010070, + 0x00010071, + 0x00010071, + }, + { + 0x00010072, + 0x00010072, + 0x00010073, + 0x00010073, + 0x00010074, + 0x00010074, + 0x00010075, + 0x00010075, + 0x00010076, + 0x00010076, + 0x00010077, + 0x00010077, + 0x00010081, + 0x00010081, + 0x00010082, + 0x00010082, + }, + { + 0x0001003e, + 0x0001003e, + 0x0001003f, + 0x0001003f, + 0x00010040, + 0x00010040, + 0x00010041, + 0x00010041, + 0x00010042, + 0x00010042, + 0x00010043, + 0x00010043, + 0x00010044, + 0x00010044, + 0x00010045, + 0x00010045, + }, + { + 0x00010083, + 0x00010083, + 0x00010084, + 0x00010084, + 0x00010085, + 0x00010085, + 0x00010086, + 0x00010086, + 0x00010087, + 0x00010087, + 0x00010088, + 0x00010088, + 0x00010089, + 0x00010089, + 0x0001008a, + 0x0001008a, + }, + { + 0x0001008b, + 0x0001008b, + 0x0001008c, + 0x0001008c, + 0x0001008d, + 0x0001008d, + 0x0001008e, + 0x0001008e, + 0x0001008f, + 0x0001008f, + 0x00010097, + 0x00010097, + 0x00010098, + 0x00010098, + 0x00010099, + 0x00010099, + }, + { + 0x0001009a, + 0x0001009a, + 0x0001009b, + 0x0001009b, + 0x0001009c, + 0x0001009c, + 0x0001009d, + 0x0001009d, + 0x0001009e, + 0x0001009e, + 0x0001009f, + 0x0001009f, + 0x000100a0, + 0x000100a0, + 0x000100a1, + 0x000100a1, + }, + { + 0x000100a2, + 0x000100a2, + 0x000100a3, + 0x000100a3, + 0x000100a4, + 0x000100a4, + 0x000100a5, + 0x000100a5, + 0x000100a6, + 0x000100a6, + 0x000100a7, + 0x000100a7, + 0x000100ae, + 0x000100ae, + 0x000100b0, + 0x000100b0, + }, + { + 0x000100b1, + 0x000100b1, + 0x000100b2, + 0x000100b2, + 0x000100b3, + 0x000100b3, + 0x000100b4, + 0x000100b4, + 0x000100b5, + 0x000100b5, + 0x000100b6, + 0x000100b6, + 0x000100b7, + 0x000100b7, + 0x000100b8, + 0x000100b8, + }, + { + 0x000100b9, + 0x000100b9, + 0x000100ba, + 0x000100ba, + 0x000100bb, + 0x000100bb, + 0x000100bc, + 0x000100bc, + 0x000100bd, + 0x000100bd, + 0x000100be, + 0x000100be, + 0x000100bf, + 0x000100bf, + 0x000100c5, + 0x000100c5, + }, + { + 0x000100c6, + 0x000100c6, + 0x000100c7, + 0x000100c7, + 0x000100c8, + 0x000100c8, + 0x000100c9, + 0x000100c9, + 0x000100ca, + 0x000100ca, + 0x000100cb, + 0x000100cb, + 0x000100cc, + 0x000100cc, + 0x000100cd, + 0x000100cd, + }, + { + 0x0029ffff, + 0x002affff, + 0x002bffff, + 0x002cffff, + 0x002dffff, + 0x002effff, + 0x002fffff, + 0x0030ffff, + 0x0031ffff, + 0x0032ffff, + 0x0033ffff, + 0x0034ffff, + 0x0035ffff, + 0x0036ffff, + 0x0037ffff, + 0x0038ffff, + }, + { + 0x000100ce, + 0x000100ce, + 0x000100cf, + 0x000100cf, + 0x000100d0, + 0x000100d0, + 0x000100d1, + 0x000100d1, + 0x000100d2, + 0x000100d2, + 0x000100d3, + 0x000100d3, + 0x000100d4, + 0x000100d4, + 0x000100d5, + 0x000100d5, + }, + { + 0x000100d6, + 0x000100d6, + 0x000100d7, + 0x000100d7, + 0x000100d8, + 0x000100d8, + 0x000100dc, + 0x000100dc, + 0x000100de, + 0x000100de, + 0x000100df, + 0x000100df, + 0x000100e0, + 0x000100e0, + 0x000100e1, + 0x000100e1, + }, + { + 0x000100e2, + 0x000100e2, + 0x000100e3, + 0x000100e3, + 0x000100e4, + 0x000100e4, + 0x000100e5, + 0x000100e5, + 0x000100e6, + 0x000100e6, + 0x000100e7, + 0x000100e7, + 0x000100e8, + 0x000100e8, + 0x000100e9, + 0x000100e9, + }, + { + 0x000100ea, + 0x000100ea, + 0x000100eb, + 0x000100eb, + 0x000100ec, + 0x000100ec, + 0x000100ed, + 0x000100ed, + 0x000100ee, + 0x000100ee, + 0x000100ef, + 0x000100ef, + 0x000100f0, + 0x000100f0, + 0x000100f1, + 0x000100f1, + }, + { + 0x000100f2, + 0x000100f2, + 0x000100f4, + 0x000100f4, + 0x000100f5, + 0x000100f5, + 0x000100f6, + 0x000100f6, + 0x000100f7, + 0x000100f7, + 0x000100f8, + 0x000100f8, + 0x000100f9, + 0x000100f9, + 0x000100fa, + 0x000100fa, + }, + { + 0x000100fb, + 0x000100fb, + 0x000100fc, + 0x000100fc, + 0x000100fd, + 0x000100fd, + 0x000100fe, + 0x000100fe, + 0x000100ff, + 0x000100ff, + 0x00010100, + 0x00010100, + 0x00010101, + 0x00010101, + 0x00010102, + 0x00010102, + }, + { + 0x00010103, + 0x00010103, + 0x00010104, + 0x00010104, + 0x00010105, + 0x00010105, + 0x00010106, + 0x00010106, + 0x00010107, + 0x00010107, + 0x00010108, + 0x00010108, + 0x00010109, + 0x00010109, + 0x0001010a, + 0x0001010a, + }, + { + 0x0001010b, + 0x0001010b, + 0x0001010c, + 0x0001010c, + 0x0001010d, + 0x0001010d, + 0x0001010e, + 0x0001010e, + 0x0001010f, + 0x0001010f, + 0x00010110, + 0x00010110, + 0x00010111, + 0x00010111, + 0x00010112, + 0x00010112, + }, + { + 0x00010113, + 0x00010113, + 0x00010114, + 0x00010114, + 0x00010115, + 0x00010115, + 0x00010116, + 0x00010116, + 0x00010117, + 0x00010117, + 0x00010118, + 0x00010118, + 0x00010119, + 0x00010119, + 0x0001011a, + 0x0001011a, + }, + { + 0x0001011b, + 0x0001011b, + 0x0001011c, + 0x0001011c, + 0x0001011d, + 0x0001011d, + 0x0001011e, + 0x0001011e, + 0x0001011f, + 0x0001011f, + 0x00010120, + 0x00010120, + 0x00010121, + 0x00010121, + 0x00010122, + 0x00010122, + }, + { + 0x00010123, + 0x00010123, + 0x00010124, + 0x00010124, + 0x00010125, + 0x00010125, + 0x00010126, + 0x00010126, + 0x00010127, + 0x00010127, + 0x00010128, + 0x00010128, + 0x00010129, + 0x00010129, + 0x0001012a, + 0x0001012a, + }, + { + 0x0001012b, + 0x0001012b, + 0x0001012c, + 0x0001012c, + 0x0001012d, + 0x0001012d, + 0x0001012e, + 0x0001012e, + 0x0001012f, + 0x0001012f, + 0x00010130, + 0x00010130, + 0x00010131, + 0x00010131, + 0x00010132, + 0x00010132, + }, + { + 0x00010133, + 0x00010133, + 0x00010134, + 0x00010134, + 0x00010135, + 0x00010135, + 0x00010136, + 0x00010136, + 0x00010137, + 0x00010137, + 0x00010138, + 0x00010138, + 0x00010139, + 0x00010139, + 0x0001013a, + 0x0001013a, + }, + { + 0x0001013b, + 0x0001013b, + 0x0001013c, + 0x0001013c, + 0x0001013d, + 0x0001013d, + 0x0001013e, + 0x0001013e, + 0x0001013f, + 0x0001013f, + 0x00010140, + 0x00010140, + 0x00010141, + 0x00010141, + 0x00010142, + 0x00010142, + }, + { + 0x00010143, + 0x00010143, + 0x00010144, + 0x00010144, + 0x00010145, + 0x00010145, + 0x00010146, + 0x00010146, + 0x00010147, + 0x00010147, + 0x00010148, + 0x00010148, + 0x00010149, + 0x00010149, + 0x0001014a, + 0x0001014a, + }, + { + 0x0001014b, + 0x0001014b, + 0x0001014c, + 0x0001014c, + 0x0001014d, + 0x0001014d, + 0x0001014e, + 0x0001014e, + 0x0001014f, + 0x0001014f, + 0x00010150, + 0x00010150, + 0x00010151, + 0x00010151, + 0x00010152, + 0x00010152, + }, + { + 0x003affff, + 0x003bffff, + 0x003cffff, + 0x003dffff, + 0x003effff, + 0x003fffff, + 0x0040ffff, + 0x0041ffff, + 0x0042ffff, + 0x0043ffff, + 0x0044ffff, + 0x0045ffff, + 0x0046ffff, + 0x0047ffff, + 0x0048ffff, + 0x0049ffff, + }, + { + 0x00010153, + 0x00010153, + 0x00010154, + 0x00010154, + 0x00010155, + 0x00010155, + 0x00010156, + 0x00010156, + 0x00010157, + 0x00010157, + 0x00010158, + 0x00010158, + 0x00010159, + 0x00010159, + 0x0001015a, + 0x0001015a, + }, + { + 0x0001015b, + 0x0001015b, + 0x0001015c, + 0x0001015c, + 0x0001015d, + 0x0001015d, + 0x0001015e, + 0x0001015e, + 0x0001015f, + 0x0001015f, + 0x00010160, + 0x00010160, + 0x00010161, + 0x00010161, + 0x00010162, + 0x00010162, + }, + { + 0x00010163, + 0x00010163, + 0x00010164, + 0x00010164, + 0x00010165, + 0x00010165, + 0x00010166, + 0x00010166, + 0x00010167, + 0x00010167, + 0x00010168, + 0x00010168, + 0x00010169, + 0x00010169, + 0x0001016a, + 0x0001016a, + }, + { + 0x0001016b, + 0x0001016b, + 0x0001016c, + 0x0001016c, + 0x0001016d, + 0x0001016d, + 0x0001016e, + 0x0001016e, + 0x0001016f, + 0x0001016f, + 0x00010170, + 0x00010170, + 0x00010171, + 0x00010171, + 0x00010172, + 0x00010172, + }, + { + 0x00010173, + 0x00010173, + 0x00010174, + 0x00010174, + 0x00010175, + 0x00010175, + 0x00010176, + 0x00010176, + 0x00010177, + 0x00010177, + 0x00010178, + 0x00010178, + 0x00010179, + 0x00010179, + 0x0001017a, + 0x0001017a, + }, + { + 0x0001017b, + 0x0001017b, + 0x0001017c, + 0x0001017c, + 0x0001017d, + 0x0001017d, + 0x0001017e, + 0x0001017e, + 0x0001017f, + 0x0001017f, + 0x00010180, + 0x00010180, + 0x00010181, + 0x00010181, + 0x00010182, + 0x00010182, + }, + { + 0x00010183, + 0x00010183, + 0x00010184, + 0x00010184, + 0x00010185, + 0x00010185, + 0x00010186, + 0x00010186, + 0x00010187, + 0x00010187, + 0x00010188, + 0x00010188, + 0x00010189, + 0x00010189, + 0x0001018a, + 0x0001018a, + }, + { + 0x0001018b, + 0x0001018b, + 0x0001018c, + 0x0001018c, + 0x0001018d, + 0x0001018d, + 0x0001018e, + 0x0001018e, + 0x0001018f, + 0x0001018f, + 0x00010190, + 0x00010190, + 0x00010191, + 0x00010191, + 0x00010192, + 0x00010192, + }, + { + 0x00010193, + 0x00010193, + 0x00010194, + 0x00010194, + 0x00010195, + 0x00010195, + 0x00010196, + 0x00010196, + 0x00010197, + 0x00010197, + 0x00010198, + 0x00010198, + 0x00010199, + 0x00010199, + 0x0001019a, + 0x0001019a, + }, + { + 0x0001019b, + 0x0001019b, + 0x0001019c, + 0x0001019c, + 0x0001019d, + 0x0001019d, + 0x0001019e, + 0x0001019e, + 0x0001019f, + 0x0001019f, + 0x000101a0, + 0x000101a0, + 0x000101a1, + 0x000101a1, + 0x000101a2, + 0x000101a2, + }, + { + 0x000101a3, + 0x000101a3, + 0x000101a4, + 0x000101a4, + 0x000101a5, + 0x000101a5, + 0x000101a6, + 0x000101a6, + 0x000101a7, + 0x000101a7, + 0x000101a8, + 0x000101a8, + 0x000101a9, + 0x000101a9, + 0x000101aa, + 0x000101aa, + }, + { + 0x000101ab, + 0x000101ab, + 0x000101ac, + 0x000101ac, + 0x000101ad, + 0x000101ad, + 0x000101ae, + 0x000101ae, + 0x000101af, + 0x000101af, + 0x000101b0, + 0x000101b0, + 0x000101b1, + 0x000101b1, + 0x000101b2, + 0x000101b2, + }, + { + 0x000101b3, + 0x000101b3, + 0x000101b4, + 0x000101b4, + 0x000101b5, + 0x000101b5, + 0x000101b6, + 0x000101b6, + 0x000101b7, + 0x000101b7, + 0x000101b8, + 0x000101b8, + 0x000101b9, + 0x000101b9, + 0x000101ba, + 0x000101ba, + }, + { + 0x000101bb, + 0x000101bb, + 0x000101bc, + 0x000101bc, + 0x000101bd, + 0x000101bd, + 0x000101be, + 0x000101be, + 0x000101bf, + 0x000101bf, + 0x000101c0, + 0x000101c0, + 0x000101c1, + 0x000101c1, + 0x000101c2, + 0x000101c2, + }, + { + 0x000101c3, + 0x000101c3, + 0x000101c4, + 0x000101c4, + 0x000101c5, + 0x000101c5, + 0x000101c6, + 0x000101c6, + 0x000101c7, + 0x000101c7, + 0x000101c8, + 0x000101c8, + 0x000101c9, + 0x000101c9, + 0x000101ca, + 0x000101ca, + }, + { + 0x000101cb, + 0x000101cb, + 0x000101cc, + 0x000101cc, + 0x000101cd, + 0x000101cd, + 0x000101ce, + 0x000101ce, + 0x000101cf, + 0x000101cf, + 0x000101d0, + 0x000101d0, + 0x000101d1, + 0x000101d1, + 0x000101d2, + 0x000101d2, + }, + { + 0x000101d3, + 0x000101d3, + 0x000101d4, + 0x000101d4, + 0x000101d5, + 0x000101d5, + 0x000101d6, + 0x000101d6, + 0x000101d7, + 0x000101d7, + 0x000101d8, + 0x000101d8, + 0x000101d9, + 0x000101d9, + 0x000101da, + 0x000101da, + }, + { + 0x000101db, + 0x000101db, + 0x000101dc, + 0x000101dc, + 0x000101dd, + 0x000101dd, + 0x000101de, + 0x000101de, + 0x000101df, + 0x000101df, + 0x000101e0, + 0x000101e0, + 0x000101e1, + 0x000101e1, + 0x000101e2, + 0x000101e2, + }, + { + 0x000101e3, + 0x000101e3, + 0x000101e4, + 0x000101e4, + 0x000101e5, + 0x000101e5, + 0x000101e6, + 0x000101e6, + 0x000101e7, + 0x000101e7, + 0x000101e8, + 0x000101e8, + 0x000101e9, + 0x000101e9, + 0x000101ea, + 0x000101ea, + }, + { + 0x000101eb, + 0x000101eb, + 0x000101ec, + 0x000101ec, + 0x000101ed, + 0x000101ed, + 0x000101ee, + 0x000101ee, + 0x000101ef, + 0x000101ef, + 0x000101f0, + 0x000101f0, + 0x000101f1, + 0x000101f1, + 0x000101f2, + 0x000101f2, + }, + { + 0x000101f3, + 0x000101f3, + 0x000101f4, + 0x000101f4, + 0x000101f5, + 0x000101f5, + 0x000101f6, + 0x000101f6, + 0x000101f7, + 0x000101f7, + 0x000101f8, + 0x000101f8, + 0x000101f9, + 0x000101f9, + 0x000101fa, + 0x000101fa, + }, + { + 0x000101fb, + 0x000101fb, + 0x000101fc, + 0x000101fc, + 0x000101fd, + 0x000101fd, + 0x000101fe, + 0x000101fe, + 0x000101ff, + 0x000101ff, + 0x00010200, + 0x00010200, + 0x00010201, + 0x00010201, + 0x00010202, + 0x00010202, + }, + { + 0x00010203, + 0x00010203, + 0x00010204, + 0x00010204, + 0x00010205, + 0x00010205, + 0x00010206, + 0x00010206, + 0x00010207, + 0x00010207, + 0x00010208, + 0x00010208, + 0x00010209, + 0x00010209, + 0x0001020a, + 0x0001020a, + }, + { + 0x0001020b, + 0x0001020b, + 0x0001020c, + 0x0001020c, + 0x0001020d, + 0x0001020d, + 0x0001020e, + 0x0001020e, + 0x0001020f, + 0x0001020f, + 0x00010210, + 0x00010210, + 0x00010211, + 0x00010211, + 0x00010212, + 0x00010212, + }, + { + 0x00010213, + 0x00010213, + 0x00010214, + 0x00010214, + 0x00010215, + 0x00010215, + 0x00010216, + 0x00010216, + 0x00010217, + 0x00010217, + 0x00010218, + 0x00010218, + 0x00010219, + 0x00010219, + 0x0001021a, + 0x0001021a, + }, + { + 0x0001021b, + 0x0001021b, + 0x0001021c, + 0x0001021c, + 0x0001021d, + 0x0001021d, + 0x0001021e, + 0x0001021e, + 0x0001021f, + 0x0001021f, + 0x00010220, + 0x00010220, + 0x00010221, + 0x00010221, + 0x00010222, + 0x00010222, + }, + { + 0x00010223, + 0x00010223, + 0x00010224, + 0x00010224, + 0x00010225, + 0x00010225, + 0x00010226, + 0x00010226, + 0x00010227, + 0x00010227, + 0x00010228, + 0x00010228, + 0x00010229, + 0x00010229, + 0x0001022a, + 0x0001022a, + }, + { + 0x0001022b, + 0x0001022b, + 0x0001022c, + 0x0001022c, + 0x0001022d, + 0x0001022d, + 0x0001022e, + 0x0001022e, + 0x0001022f, + 0x0001022f, + 0x00010230, + 0x00010230, + 0x00010231, + 0x00010231, + 0x00010232, + 0x00010232, + }, + { + 0x00010233, + 0x00010233, + 0x00010234, + 0x00010234, + 0x00010235, + 0x00010235, + 0x00010236, + 0x00010236, + 0x00010237, + 0x00010237, + 0x00010238, + 0x00010238, + 0x00010239, + 0x00010239, + 0x0001023a, + 0x0001023a, + }, }; #endif @@ -3185,215 +32827,2721 @@ const uint32_t c_aauiCQMFHuffEnc48[729][2] = #else const uint16_t c_aauiCQMFHuffEnc48[729][2] = #endif -{ - {0x0002, 0x0003}, {0x0003, 0x0003}, {0x0005, 0x0006}, {0x0006, 0x0006}, {0x0008, 0x0006}, {0x0009, 0x0007}, {0x000b, 0x000b}, {0x000c, 0x000d}, - {0x000f, 0x0030}, {0x0010, 0x0055}, {0x0012, 0x0136}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, - {0x0013, 0x0005}, {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0013, 0x000c}, - {0x0013, 0x000d}, {0x0013, 0x000e}, {0x0013, 0x000f}, {0x0003, 0x0004}, {0x0003, 0x0005}, {0x0005, 0x0007}, {0x0006, 0x0007}, {0x0007, 0x0007}, - {0x0008, 0x0007}, {0x000a, 0x0008}, {0x000c, 0x000e}, {0x000d, 0x0012}, {0x000f, 0x0031}, {0x0011, 0x00a0}, {0x0013, 0x0010}, {0x0013, 0x0011}, - {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0013, 0x0014}, {0x0013, 0x0015}, {0x0013, 0x0016}, {0x0013, 0x0017}, {0x0013, 0x0018}, {0x0013, 0x0019}, - {0x0013, 0x001a}, {0x0013, 0x001b}, {0x0013, 0x001c}, {0x0013, 0x001d}, {0x0013, 0x001e}, {0x0013, 0x001f}, {0x0005, 0x0008}, {0x0004, 0x0005}, - {0x0005, 0x0009}, {0x0006, 0x0008}, {0x0007, 0x0008}, {0x0008, 0x0008}, {0x000a, 0x0009}, {0x000c, 0x000f}, {0x000d, 0x0013}, {0x000f, 0x0032}, - {0x0011, 0x00a1}, {0x0013, 0x0020}, {0x0013, 0x0021}, {0x0013, 0x0022}, {0x0013, 0x0023}, {0x0013, 0x0024}, {0x0013, 0x0025}, {0x0013, 0x0026}, - {0x0013, 0x0027}, {0x0013, 0x0028}, {0x0013, 0x0029}, {0x0013, 0x002a}, {0x0013, 0x002b}, {0x0013, 0x002c}, {0x0013, 0x002d}, {0x0013, 0x002e}, - {0x0013, 0x002f}, {0x0006, 0x0009}, {0x0006, 0x000a}, {0x0006, 0x000b}, {0x0007, 0x0009}, {0x0008, 0x0009}, {0x0009, 0x0008}, {0x000b, 0x000c}, - {0x000d, 0x0014}, {0x000e, 0x001d}, {0x000f, 0x0033}, {0x0012, 0x0137}, {0x0013, 0x0030}, {0x0013, 0x0031}, {0x0013, 0x0032}, {0x0013, 0x0033}, - {0x0013, 0x0034}, {0x0013, 0x0035}, {0x0013, 0x0036}, {0x0013, 0x0037}, {0x0013, 0x0038}, {0x0013, 0x0039}, {0x0013, 0x003a}, {0x0013, 0x003b}, - {0x0013, 0x003c}, {0x0013, 0x003d}, {0x0013, 0x003e}, {0x0013, 0x003f}, {0x0008, 0x000a}, {0x0007, 0x000a}, {0x0007, 0x000b}, {0x0008, 0x000b}, - {0x0009, 0x0009}, {0x000a, 0x000a}, {0x000c, 0x0010}, {0x000d, 0x0015}, {0x000f, 0x0034}, {0x0010, 0x0056}, {0x0012, 0x0138}, {0x0013, 0x0040}, - {0x0013, 0x0041}, {0x0013, 0x0042}, {0x0013, 0x0043}, {0x0013, 0x0044}, {0x0013, 0x0045}, {0x0013, 0x0046}, {0x0013, 0x0047}, {0x0013, 0x0048}, - {0x0013, 0x0049}, {0x0013, 0x004a}, {0x0013, 0x004b}, {0x0013, 0x004c}, {0x0013, 0x004d}, {0x0013, 0x004e}, {0x0013, 0x004f}, {0x0009, 0x000a}, - {0x0008, 0x000c}, {0x0008, 0x000d}, {0x0009, 0x000b}, {0x000a, 0x000b}, {0x000c, 0x0011}, {0x000d, 0x0016}, {0x000e, 0x001e}, {0x0010, 0x0057}, - {0x0011, 0x00a2}, {0x0011, 0x00a3}, {0x0013, 0x0050}, {0x0013, 0x0051}, {0x0013, 0x0052}, {0x0013, 0x0053}, {0x0013, 0x0054}, {0x0013, 0x0055}, - {0x0013, 0x0056}, {0x0013, 0x0057}, {0x0013, 0x0058}, {0x0013, 0x0059}, {0x0013, 0x005a}, {0x0013, 0x005b}, {0x0013, 0x005c}, {0x0013, 0x005d}, - {0x0013, 0x005e}, {0x0013, 0x005f}, {0x000b, 0x000d}, {0x000a, 0x000c}, {0x000a, 0x000d}, {0x000b, 0x000e}, {0x000c, 0x0012}, {0x000d, 0x0017}, - {0x000e, 0x001f}, {0x0010, 0x0058}, {0x0012, 0x0139}, {0x0011, 0x00a4}, {0x0012, 0x013a}, {0x0013, 0x0060}, {0x0013, 0x0061}, {0x0013, 0x0062}, - {0x0013, 0x0063}, {0x0013, 0x0064}, {0x0013, 0x0065}, {0x0013, 0x0066}, {0x0013, 0x0067}, {0x0013, 0x0068}, {0x0013, 0x0069}, {0x0013, 0x006a}, - {0x0013, 0x006b}, {0x0013, 0x006c}, {0x0013, 0x006d}, {0x0013, 0x006e}, {0x0013, 0x006f}, {0x000c, 0x0013}, {0x000b, 0x000f}, {0x000c, 0x0014}, - {0x000c, 0x0015}, {0x000d, 0x0018}, {0x000e, 0x0020}, {0x000f, 0x0035}, {0x0012, 0x013b}, {0x0013, 0x0070}, {0x0013, 0x0071}, {0x0013, 0x0072}, - {0x0013, 0x0073}, {0x0013, 0x0074}, {0x0013, 0x0075}, {0x0013, 0x0076}, {0x0013, 0x0077}, {0x0013, 0x0078}, {0x0013, 0x0079}, {0x0013, 0x007a}, - {0x0013, 0x007b}, {0x0013, 0x007c}, {0x0013, 0x007d}, {0x0013, 0x007e}, {0x0013, 0x007f}, {0x0013, 0x0080}, {0x0013, 0x0081}, {0x0013, 0x0082}, - {0x000e, 0x0021}, {0x000d, 0x0019}, {0x000e, 0x0022}, {0x000e, 0x0023}, {0x000f, 0x0036}, {0x0010, 0x0059}, {0x0011, 0x00a5}, {0x0013, 0x0083}, - {0x0011, 0x00a6}, {0x0012, 0x013c}, {0x0013, 0x0084}, {0x0013, 0x0085}, {0x0013, 0x0086}, {0x0013, 0x0087}, {0x0013, 0x0088}, {0x0013, 0x0089}, - {0x0013, 0x008a}, {0x0013, 0x008b}, {0x0013, 0x008c}, {0x0013, 0x008d}, {0x0013, 0x008e}, {0x0013, 0x008f}, {0x0013, 0x0090}, {0x0013, 0x0091}, - {0x0013, 0x0092}, {0x0013, 0x0093}, {0x0013, 0x0094}, {0x0010, 0x005a}, {0x000f, 0x0037}, {0x000f, 0x0038}, {0x000f, 0x0039}, {0x0010, 0x005b}, - {0x0010, 0x005c}, {0x0013, 0x0095}, {0x0011, 0x00a7}, {0x0013, 0x0096}, {0x0013, 0x0097}, {0x0013, 0x0098}, {0x0013, 0x0099}, {0x0013, 0x009a}, - {0x0013, 0x009b}, {0x0013, 0x009c}, {0x0013, 0x009d}, {0x0013, 0x009e}, {0x0013, 0x009f}, {0x0013, 0x00a0}, {0x0013, 0x00a1}, {0x0013, 0x00a2}, - {0x0013, 0x00a3}, {0x0013, 0x00a4}, {0x0013, 0x00a5}, {0x0013, 0x00a6}, {0x0013, 0x00a7}, {0x0013, 0x00a8}, {0x0010, 0x005d}, {0x0010, 0x005e}, - {0x0013, 0x00a9}, {0x0010, 0x005f}, {0x0013, 0x00aa}, {0x0012, 0x013d}, {0x0013, 0x00ab}, {0x0013, 0x00ac}, {0x0013, 0x00ad}, {0x0013, 0x00ae}, - {0x0013, 0x00af}, {0x0013, 0x00b0}, {0x0013, 0x00b1}, {0x0013, 0x00b2}, {0x0013, 0x00b3}, {0x0013, 0x00b4}, {0x0013, 0x00b5}, {0x0013, 0x00b6}, - {0x0013, 0x00b7}, {0x0013, 0x00b8}, {0x0013, 0x00b9}, {0x0013, 0x00ba}, {0x0013, 0x00bb}, {0x0013, 0x00bc}, {0x0013, 0x00bd}, {0x0013, 0x00be}, - {0x0013, 0x00bf}, {0x0013, 0x00c0}, {0x0011, 0x00a8}, {0x0013, 0x00c1}, {0x0011, 0x00a9}, {0x0013, 0x00c2}, {0x0013, 0x00c3}, {0x0013, 0x00c4}, - {0x0013, 0x00c5}, {0x0013, 0x00c6}, {0x0013, 0x00c7}, {0x0013, 0x00c8}, {0x0013, 0x00c9}, {0x0013, 0x00ca}, {0x0013, 0x00cb}, {0x0013, 0x00cc}, - {0x0013, 0x00cd}, {0x0013, 0x00ce}, {0x0013, 0x00cf}, {0x0013, 0x00d0}, {0x0013, 0x00d1}, {0x0013, 0x00d2}, {0x0013, 0x00d3}, {0x0013, 0x00d4}, - {0x0013, 0x00d5}, {0x0013, 0x00d6}, {0x0013, 0x00d7}, {0x0013, 0x00d8}, {0x0013, 0x00d9}, {0x0013, 0x00da}, {0x0012, 0x013e}, {0x0013, 0x00db}, - {0x0013, 0x00dc}, {0x0013, 0x00dd}, {0x0013, 0x00de}, {0x0013, 0x00df}, {0x0013, 0x00e0}, {0x0013, 0x00e1}, {0x0013, 0x00e2}, {0x0013, 0x00e3}, - {0x0013, 0x00e4}, {0x0013, 0x00e5}, {0x0013, 0x00e6}, {0x0013, 0x00e7}, {0x0013, 0x00e8}, {0x0013, 0x00e9}, {0x0013, 0x00ea}, {0x0013, 0x00eb}, - {0x0013, 0x00ec}, {0x0013, 0x00ed}, {0x0013, 0x00ee}, {0x0013, 0x00ef}, {0x0013, 0x00f0}, {0x0013, 0x00f1}, {0x0013, 0x00f2}, {0x0013, 0x00f3}, - {0x0013, 0x00f4}, {0x0013, 0x00f5}, {0x0013, 0x00f6}, {0x0013, 0x00f7}, {0x0013, 0x00f8}, {0x0013, 0x00f9}, {0x0013, 0x00fa}, {0x0013, 0x00fb}, - {0x0013, 0x00fc}, {0x0013, 0x00fd}, {0x0013, 0x00fe}, {0x0013, 0x00ff}, {0x0013, 0x0100}, {0x0013, 0x0101}, {0x0013, 0x0102}, {0x0013, 0x0103}, - {0x0013, 0x0104}, {0x0013, 0x0105}, {0x0013, 0x0106}, {0x0013, 0x0107}, {0x0013, 0x0108}, {0x0013, 0x0109}, {0x0013, 0x010a}, {0x0013, 0x010b}, - {0x0013, 0x010c}, {0x0013, 0x010d}, {0x0013, 0x010e}, {0x0013, 0x010f}, {0x0013, 0x0110}, {0x0013, 0x0111}, {0x0013, 0x0112}, {0x0013, 0x0113}, - {0x0013, 0x0114}, {0x0013, 0x0115}, {0x0013, 0x0116}, {0x0013, 0x0117}, {0x0013, 0x0118}, {0x0013, 0x0119}, {0x0013, 0x011a}, {0x0013, 0x011b}, - {0x0013, 0x011c}, {0x0013, 0x011d}, {0x0013, 0x011e}, {0x0013, 0x011f}, {0x0013, 0x0120}, {0x0013, 0x0121}, {0x0013, 0x0122}, {0x0013, 0x0123}, - {0x0013, 0x0124}, {0x0013, 0x0125}, {0x0013, 0x0126}, {0x0013, 0x0127}, {0x0013, 0x0128}, {0x0013, 0x0129}, {0x0013, 0x012a}, {0x0013, 0x012b}, - {0x0013, 0x012c}, {0x0013, 0x012d}, {0x0013, 0x012e}, {0x0013, 0x012f}, {0x0013, 0x0130}, {0x0013, 0x0131}, {0x0013, 0x0132}, {0x0013, 0x0133}, - {0x0013, 0x0134}, {0x0013, 0x0135}, {0x0013, 0x0136}, {0x0013, 0x0137}, {0x0013, 0x0138}, {0x0013, 0x0139}, {0x0013, 0x013a}, {0x0013, 0x013b}, - {0x0013, 0x013c}, {0x0013, 0x013d}, {0x0013, 0x013e}, {0x0013, 0x013f}, {0x0013, 0x0140}, {0x0013, 0x0141}, {0x0013, 0x0142}, {0x0013, 0x0143}, - {0x0013, 0x0144}, {0x0013, 0x0145}, {0x0013, 0x0146}, {0x0013, 0x0147}, {0x0013, 0x0148}, {0x0013, 0x0149}, {0x0013, 0x014a}, {0x0013, 0x014b}, - {0x0013, 0x014c}, {0x0013, 0x014d}, {0x0013, 0x014e}, {0x0013, 0x014f}, {0x0013, 0x0150}, {0x0013, 0x0151}, {0x0013, 0x0152}, {0x0013, 0x0153}, - {0x0013, 0x0154}, {0x0013, 0x0155}, {0x0013, 0x0156}, {0x0013, 0x0157}, {0x0013, 0x0158}, {0x0013, 0x0159}, {0x0013, 0x015a}, {0x0013, 0x015b}, - {0x0013, 0x015c}, {0x0013, 0x015d}, {0x0013, 0x015e}, {0x0013, 0x015f}, {0x0013, 0x0160}, {0x0013, 0x0161}, {0x0013, 0x0162}, {0x0013, 0x0163}, - {0x0013, 0x0164}, {0x0013, 0x0165}, {0x0013, 0x0166}, {0x0013, 0x0167}, {0x0013, 0x0168}, {0x0013, 0x0169}, {0x0013, 0x016a}, {0x0013, 0x016b}, - {0x0013, 0x016c}, {0x0013, 0x016d}, {0x0013, 0x016e}, {0x0013, 0x016f}, {0x0013, 0x0170}, {0x0013, 0x0171}, {0x0013, 0x0172}, {0x0013, 0x0173}, - {0x0013, 0x0174}, {0x0013, 0x0175}, {0x0013, 0x0176}, {0x0013, 0x0177}, {0x0013, 0x0178}, {0x0013, 0x0179}, {0x0013, 0x017a}, {0x0013, 0x017b}, - {0x0013, 0x017c}, {0x0013, 0x017d}, {0x0013, 0x017e}, {0x0013, 0x017f}, {0x0013, 0x0180}, {0x0013, 0x0181}, {0x0013, 0x0182}, {0x0013, 0x0183}, - {0x0013, 0x0184}, {0x0013, 0x0185}, {0x0013, 0x0186}, {0x0013, 0x0187}, {0x0013, 0x0188}, {0x0013, 0x0189}, {0x0013, 0x018a}, {0x0013, 0x018b}, - {0x0013, 0x018c}, {0x0013, 0x018d}, {0x0013, 0x018e}, {0x0013, 0x018f}, {0x0013, 0x0190}, {0x0013, 0x0191}, {0x0013, 0x0192}, {0x0013, 0x0193}, - {0x0013, 0x0194}, {0x0013, 0x0195}, {0x0013, 0x0196}, {0x0013, 0x0197}, {0x0013, 0x0198}, {0x0013, 0x0199}, {0x0013, 0x019a}, {0x0013, 0x019b}, - {0x0013, 0x019c}, {0x0013, 0x019d}, {0x0013, 0x019e}, {0x0013, 0x019f}, {0x0013, 0x01a0}, {0x0013, 0x01a1}, {0x0013, 0x01a2}, {0x0013, 0x01a3}, - {0x0013, 0x01a4}, {0x0013, 0x01a5}, {0x0013, 0x01a6}, {0x0013, 0x01a7}, {0x0013, 0x01a8}, {0x0013, 0x01a9}, {0x0013, 0x01aa}, {0x0013, 0x01ab}, - {0x0013, 0x01ac}, {0x0013, 0x01ad}, {0x0013, 0x01ae}, {0x0013, 0x01af}, {0x0013, 0x01b0}, {0x0013, 0x01b1}, {0x0013, 0x01b2}, {0x0013, 0x01b3}, - {0x0013, 0x01b4}, {0x0013, 0x01b5}, {0x0013, 0x01b6}, {0x0013, 0x01b7}, {0x0013, 0x01b8}, {0x0013, 0x01b9}, {0x0013, 0x01ba}, {0x0013, 0x01bb}, - {0x0013, 0x01bc}, {0x0013, 0x01bd}, {0x0013, 0x01be}, {0x0013, 0x01bf}, {0x0013, 0x01c0}, {0x0013, 0x01c1}, {0x0013, 0x01c2}, {0x0013, 0x01c3}, - {0x0013, 0x01c4}, {0x0013, 0x01c5}, {0x0013, 0x01c6}, {0x0013, 0x01c7}, {0x0013, 0x01c8}, {0x0013, 0x01c9}, {0x0013, 0x01ca}, {0x0013, 0x01cb}, - {0x0013, 0x01cc}, {0x0013, 0x01cd}, {0x0013, 0x01ce}, {0x0013, 0x01cf}, {0x0013, 0x01d0}, {0x0013, 0x01d1}, {0x0013, 0x01d2}, {0x0013, 0x01d3}, - {0x0013, 0x01d4}, {0x0013, 0x01d5}, {0x0013, 0x01d6}, {0x0013, 0x01d7}, {0x0013, 0x01d8}, {0x0013, 0x01d9}, {0x0013, 0x01da}, {0x0013, 0x01db}, - {0x0013, 0x01dc}, {0x0013, 0x01dd}, {0x0013, 0x01de}, {0x0013, 0x01df}, {0x0013, 0x01e0}, {0x0013, 0x01e1}, {0x0013, 0x01e2}, {0x0013, 0x01e3}, - {0x0013, 0x01e4}, {0x0013, 0x01e5}, {0x0013, 0x01e6}, {0x0013, 0x01e7}, {0x0013, 0x01e8}, {0x0013, 0x01e9}, {0x0013, 0x01ea}, {0x0013, 0x01eb}, - {0x0013, 0x01ec}, {0x0013, 0x01ed}, {0x0013, 0x01ee}, {0x0013, 0x01ef}, {0x0013, 0x01f0}, {0x0013, 0x01f1}, {0x0013, 0x01f2}, {0x0013, 0x01f3}, - {0x0013, 0x01f4}, {0x0013, 0x01f5}, {0x0013, 0x01f6}, {0x0013, 0x01f7}, {0x0013, 0x01f8}, {0x0013, 0x01f9}, {0x0013, 0x01fa}, {0x0013, 0x01fb}, - {0x0013, 0x01fc}, {0x0013, 0x01fd}, {0x0013, 0x01fe}, {0x0013, 0x01ff}, {0x0013, 0x0200}, {0x0013, 0x0201}, {0x0013, 0x0202}, {0x0013, 0x0203}, - {0x0013, 0x0204}, {0x0013, 0x0205}, {0x0013, 0x0206}, {0x0013, 0x0207}, {0x0013, 0x0208}, {0x0013, 0x0209}, {0x0013, 0x020a}, {0x0013, 0x020b}, - {0x0013, 0x020c}, {0x0013, 0x020d}, {0x0013, 0x020e}, {0x0013, 0x020f}, {0x0013, 0x0210}, {0x0013, 0x0211}, {0x0013, 0x0212}, {0x0013, 0x0213}, - {0x0013, 0x0214}, {0x0013, 0x0215}, {0x0013, 0x0216}, {0x0013, 0x0217}, {0x0013, 0x0218}, {0x0013, 0x0219}, {0x0013, 0x021a}, {0x0013, 0x021b}, - {0x0013, 0x021c}, {0x0013, 0x021d}, {0x0013, 0x021e}, {0x0013, 0x021f}, {0x0013, 0x0220}, {0x0013, 0x0221}, {0x0013, 0x0222}, {0x0013, 0x0223}, - {0x0013, 0x0224}, {0x0013, 0x0225}, {0x0013, 0x0226}, {0x0013, 0x0227}, {0x0013, 0x0228}, {0x0013, 0x0229}, {0x0013, 0x022a}, {0x0013, 0x022b}, - {0x0013, 0x022c}, {0x0013, 0x022d}, {0x0013, 0x022e}, {0x0013, 0x022f}, {0x0013, 0x0230}, {0x0013, 0x0231}, {0x0013, 0x0232}, {0x0013, 0x0233}, - {0x0013, 0x0234}, {0x0013, 0x0235}, {0x0013, 0x0236}, {0x0013, 0x0237}, {0x0013, 0x0238}, {0x0013, 0x0239}, {0x0013, 0x023a}, {0x0013, 0x023b}, - {0x0013, 0x023c}, {0x0013, 0x023d}, {0x0013, 0x023e}, {0x0013, 0x023f}, {0x0013, 0x0240}, {0x0013, 0x0241}, {0x0013, 0x0242}, {0x0013, 0x0243}, - {0x0013, 0x0244}, {0x0013, 0x0245}, {0x0013, 0x0246}, {0x0013, 0x0247}, {0x0013, 0x0248}, {0x0013, 0x0249}, {0x0013, 0x024a}, {0x0013, 0x024b}, - {0x0013, 0x024c}, {0x0013, 0x024d}, {0x0013, 0x024e}, {0x0013, 0x024f}, {0x0013, 0x0250}, {0x0013, 0x0251}, {0x0013, 0x0252}, {0x0013, 0x0253}, - {0x0013, 0x0254}, {0x0013, 0x0255}, {0x0013, 0x0256}, {0x0013, 0x0257}, {0x0013, 0x0258}, {0x0013, 0x0259}, {0x0013, 0x025a}, {0x0013, 0x025b}, - {0x0013, 0x025c}, {0x0013, 0x025d}, {0x0013, 0x025e}, {0x0013, 0x025f}, {0x0013, 0x0260}, {0x0013, 0x0261}, {0x0013, 0x0262}, {0x0013, 0x0263}, - {0x0013, 0x0264}, {0x0013, 0x0265}, {0x0013, 0x0266}, {0x0013, 0x0267}, {0x0013, 0x0268}, {0x0013, 0x0269}, {0x0013, 0x026a}, {0x0013, 0x026b}, - {0x0012, 0x013f}, + { + { 0x0002, 0x0003 }, + { 0x0003, 0x0003 }, + { 0x0005, 0x0006 }, + { 0x0006, 0x0006 }, + { 0x0008, 0x0006 }, + { 0x0009, 0x0007 }, + { 0x000b, 0x000b }, + { 0x000c, 0x000d }, + { 0x000f, 0x0030 }, + { 0x0010, 0x0055 }, + { 0x0012, 0x0136 }, + { 0x0013, 0x0000 }, + { 0x0013, 0x0001 }, + { 0x0013, 0x0002 }, + { 0x0013, 0x0003 }, + { 0x0013, 0x0004 }, + { 0x0013, 0x0005 }, + { 0x0013, 0x0006 }, + { 0x0013, 0x0007 }, + { 0x0013, 0x0008 }, + { 0x0013, 0x0009 }, + { 0x0013, 0x000a }, + { 0x0013, 0x000b }, + { 0x0013, 0x000c }, + { 0x0013, 0x000d }, + { 0x0013, 0x000e }, + { 0x0013, 0x000f }, + { 0x0003, 0x0004 }, + { 0x0003, 0x0005 }, + { 0x0005, 0x0007 }, + { 0x0006, 0x0007 }, + { 0x0007, 0x0007 }, + { 0x0008, 0x0007 }, + { 0x000a, 0x0008 }, + { 0x000c, 0x000e }, + { 0x000d, 0x0012 }, + { 0x000f, 0x0031 }, + { 0x0011, 0x00a0 }, + { 0x0013, 0x0010 }, + { 0x0013, 0x0011 }, + { 0x0013, 0x0012 }, + { 0x0013, 0x0013 }, + { 0x0013, 0x0014 }, + { 0x0013, 0x0015 }, + { 0x0013, 0x0016 }, + { 0x0013, 0x0017 }, + { 0x0013, 0x0018 }, + { 0x0013, 0x0019 }, + { 0x0013, 0x001a }, + { 0x0013, 0x001b }, + { 0x0013, 0x001c }, + { 0x0013, 0x001d }, + { 0x0013, 0x001e }, + { 0x0013, 0x001f }, + { 0x0005, 0x0008 }, + { 0x0004, 0x0005 }, + { 0x0005, 0x0009 }, + { 0x0006, 0x0008 }, + { 0x0007, 0x0008 }, + { 0x0008, 0x0008 }, + { 0x000a, 0x0009 }, + { 0x000c, 0x000f }, + { 0x000d, 0x0013 }, + { 0x000f, 0x0032 }, + { 0x0011, 0x00a1 }, + { 0x0013, 0x0020 }, + { 0x0013, 0x0021 }, + { 0x0013, 0x0022 }, + { 0x0013, 0x0023 }, + { 0x0013, 0x0024 }, + { 0x0013, 0x0025 }, + { 0x0013, 0x0026 }, + { 0x0013, 0x0027 }, + { 0x0013, 0x0028 }, + { 0x0013, 0x0029 }, + { 0x0013, 0x002a }, + { 0x0013, 0x002b }, + { 0x0013, 0x002c }, + { 0x0013, 0x002d }, + { 0x0013, 0x002e }, + { 0x0013, 0x002f }, + { 0x0006, 0x0009 }, + { 0x0006, 0x000a }, + { 0x0006, 0x000b }, + { 0x0007, 0x0009 }, + { 0x0008, 0x0009 }, + { 0x0009, 0x0008 }, + { 0x000b, 0x000c }, + { 0x000d, 0x0014 }, + { 0x000e, 0x001d }, + { 0x000f, 0x0033 }, + { 0x0012, 0x0137 }, + { 0x0013, 0x0030 }, + { 0x0013, 0x0031 }, + { 0x0013, 0x0032 }, + { 0x0013, 0x0033 }, + { 0x0013, 0x0034 }, + { 0x0013, 0x0035 }, + { 0x0013, 0x0036 }, + { 0x0013, 0x0037 }, + { 0x0013, 0x0038 }, + { 0x0013, 0x0039 }, + { 0x0013, 0x003a }, + { 0x0013, 0x003b }, + { 0x0013, 0x003c }, + { 0x0013, 0x003d }, + { 0x0013, 0x003e }, + { 0x0013, 0x003f }, + { 0x0008, 0x000a }, + { 0x0007, 0x000a }, + { 0x0007, 0x000b }, + { 0x0008, 0x000b }, + { 0x0009, 0x0009 }, + { 0x000a, 0x000a }, + { 0x000c, 0x0010 }, + { 0x000d, 0x0015 }, + { 0x000f, 0x0034 }, + { 0x0010, 0x0056 }, + { 0x0012, 0x0138 }, + { 0x0013, 0x0040 }, + { 0x0013, 0x0041 }, + { 0x0013, 0x0042 }, + { 0x0013, 0x0043 }, + { 0x0013, 0x0044 }, + { 0x0013, 0x0045 }, + { 0x0013, 0x0046 }, + { 0x0013, 0x0047 }, + { 0x0013, 0x0048 }, + { 0x0013, 0x0049 }, + { 0x0013, 0x004a }, + { 0x0013, 0x004b }, + { 0x0013, 0x004c }, + { 0x0013, 0x004d }, + { 0x0013, 0x004e }, + { 0x0013, 0x004f }, + { 0x0009, 0x000a }, + { 0x0008, 0x000c }, + { 0x0008, 0x000d }, + { 0x0009, 0x000b }, + { 0x000a, 0x000b }, + { 0x000c, 0x0011 }, + { 0x000d, 0x0016 }, + { 0x000e, 0x001e }, + { 0x0010, 0x0057 }, + { 0x0011, 0x00a2 }, + { 0x0011, 0x00a3 }, + { 0x0013, 0x0050 }, + { 0x0013, 0x0051 }, + { 0x0013, 0x0052 }, + { 0x0013, 0x0053 }, + { 0x0013, 0x0054 }, + { 0x0013, 0x0055 }, + { 0x0013, 0x0056 }, + { 0x0013, 0x0057 }, + { 0x0013, 0x0058 }, + { 0x0013, 0x0059 }, + { 0x0013, 0x005a }, + { 0x0013, 0x005b }, + { 0x0013, 0x005c }, + { 0x0013, 0x005d }, + { 0x0013, 0x005e }, + { 0x0013, 0x005f }, + { 0x000b, 0x000d }, + { 0x000a, 0x000c }, + { 0x000a, 0x000d }, + { 0x000b, 0x000e }, + { 0x000c, 0x0012 }, + { 0x000d, 0x0017 }, + { 0x000e, 0x001f }, + { 0x0010, 0x0058 }, + { 0x0012, 0x0139 }, + { 0x0011, 0x00a4 }, + { 0x0012, 0x013a }, + { 0x0013, 0x0060 }, + { 0x0013, 0x0061 }, + { 0x0013, 0x0062 }, + { 0x0013, 0x0063 }, + { 0x0013, 0x0064 }, + { 0x0013, 0x0065 }, + { 0x0013, 0x0066 }, + { 0x0013, 0x0067 }, + { 0x0013, 0x0068 }, + { 0x0013, 0x0069 }, + { 0x0013, 0x006a }, + { 0x0013, 0x006b }, + { 0x0013, 0x006c }, + { 0x0013, 0x006d }, + { 0x0013, 0x006e }, + { 0x0013, 0x006f }, + { 0x000c, 0x0013 }, + { 0x000b, 0x000f }, + { 0x000c, 0x0014 }, + { 0x000c, 0x0015 }, + { 0x000d, 0x0018 }, + { 0x000e, 0x0020 }, + { 0x000f, 0x0035 }, + { 0x0012, 0x013b }, + { 0x0013, 0x0070 }, + { 0x0013, 0x0071 }, + { 0x0013, 0x0072 }, + { 0x0013, 0x0073 }, + { 0x0013, 0x0074 }, + { 0x0013, 0x0075 }, + { 0x0013, 0x0076 }, + { 0x0013, 0x0077 }, + { 0x0013, 0x0078 }, + { 0x0013, 0x0079 }, + { 0x0013, 0x007a }, + { 0x0013, 0x007b }, + { 0x0013, 0x007c }, + { 0x0013, 0x007d }, + { 0x0013, 0x007e }, + { 0x0013, 0x007f }, + { 0x0013, 0x0080 }, + { 0x0013, 0x0081 }, + { 0x0013, 0x0082 }, + { 0x000e, 0x0021 }, + { 0x000d, 0x0019 }, + { 0x000e, 0x0022 }, + { 0x000e, 0x0023 }, + { 0x000f, 0x0036 }, + { 0x0010, 0x0059 }, + { 0x0011, 0x00a5 }, + { 0x0013, 0x0083 }, + { 0x0011, 0x00a6 }, + { 0x0012, 0x013c }, + { 0x0013, 0x0084 }, + { 0x0013, 0x0085 }, + { 0x0013, 0x0086 }, + { 0x0013, 0x0087 }, + { 0x0013, 0x0088 }, + { 0x0013, 0x0089 }, + { 0x0013, 0x008a }, + { 0x0013, 0x008b }, + { 0x0013, 0x008c }, + { 0x0013, 0x008d }, + { 0x0013, 0x008e }, + { 0x0013, 0x008f }, + { 0x0013, 0x0090 }, + { 0x0013, 0x0091 }, + { 0x0013, 0x0092 }, + { 0x0013, 0x0093 }, + { 0x0013, 0x0094 }, + { 0x0010, 0x005a }, + { 0x000f, 0x0037 }, + { 0x000f, 0x0038 }, + { 0x000f, 0x0039 }, + { 0x0010, 0x005b }, + { 0x0010, 0x005c }, + { 0x0013, 0x0095 }, + { 0x0011, 0x00a7 }, + { 0x0013, 0x0096 }, + { 0x0013, 0x0097 }, + { 0x0013, 0x0098 }, + { 0x0013, 0x0099 }, + { 0x0013, 0x009a }, + { 0x0013, 0x009b }, + { 0x0013, 0x009c }, + { 0x0013, 0x009d }, + { 0x0013, 0x009e }, + { 0x0013, 0x009f }, + { 0x0013, 0x00a0 }, + { 0x0013, 0x00a1 }, + { 0x0013, 0x00a2 }, + { 0x0013, 0x00a3 }, + { 0x0013, 0x00a4 }, + { 0x0013, 0x00a5 }, + { 0x0013, 0x00a6 }, + { 0x0013, 0x00a7 }, + { 0x0013, 0x00a8 }, + { 0x0010, 0x005d }, + { 0x0010, 0x005e }, + { 0x0013, 0x00a9 }, + { 0x0010, 0x005f }, + { 0x0013, 0x00aa }, + { 0x0012, 0x013d }, + { 0x0013, 0x00ab }, + { 0x0013, 0x00ac }, + { 0x0013, 0x00ad }, + { 0x0013, 0x00ae }, + { 0x0013, 0x00af }, + { 0x0013, 0x00b0 }, + { 0x0013, 0x00b1 }, + { 0x0013, 0x00b2 }, + { 0x0013, 0x00b3 }, + { 0x0013, 0x00b4 }, + { 0x0013, 0x00b5 }, + { 0x0013, 0x00b6 }, + { 0x0013, 0x00b7 }, + { 0x0013, 0x00b8 }, + { 0x0013, 0x00b9 }, + { 0x0013, 0x00ba }, + { 0x0013, 0x00bb }, + { 0x0013, 0x00bc }, + { 0x0013, 0x00bd }, + { 0x0013, 0x00be }, + { 0x0013, 0x00bf }, + { 0x0013, 0x00c0 }, + { 0x0011, 0x00a8 }, + { 0x0013, 0x00c1 }, + { 0x0011, 0x00a9 }, + { 0x0013, 0x00c2 }, + { 0x0013, 0x00c3 }, + { 0x0013, 0x00c4 }, + { 0x0013, 0x00c5 }, + { 0x0013, 0x00c6 }, + { 0x0013, 0x00c7 }, + { 0x0013, 0x00c8 }, + { 0x0013, 0x00c9 }, + { 0x0013, 0x00ca }, + { 0x0013, 0x00cb }, + { 0x0013, 0x00cc }, + { 0x0013, 0x00cd }, + { 0x0013, 0x00ce }, + { 0x0013, 0x00cf }, + { 0x0013, 0x00d0 }, + { 0x0013, 0x00d1 }, + { 0x0013, 0x00d2 }, + { 0x0013, 0x00d3 }, + { 0x0013, 0x00d4 }, + { 0x0013, 0x00d5 }, + { 0x0013, 0x00d6 }, + { 0x0013, 0x00d7 }, + { 0x0013, 0x00d8 }, + { 0x0013, 0x00d9 }, + { 0x0013, 0x00da }, + { 0x0012, 0x013e }, + { 0x0013, 0x00db }, + { 0x0013, 0x00dc }, + { 0x0013, 0x00dd }, + { 0x0013, 0x00de }, + { 0x0013, 0x00df }, + { 0x0013, 0x00e0 }, + { 0x0013, 0x00e1 }, + { 0x0013, 0x00e2 }, + { 0x0013, 0x00e3 }, + { 0x0013, 0x00e4 }, + { 0x0013, 0x00e5 }, + { 0x0013, 0x00e6 }, + { 0x0013, 0x00e7 }, + { 0x0013, 0x00e8 }, + { 0x0013, 0x00e9 }, + { 0x0013, 0x00ea }, + { 0x0013, 0x00eb }, + { 0x0013, 0x00ec }, + { 0x0013, 0x00ed }, + { 0x0013, 0x00ee }, + { 0x0013, 0x00ef }, + { 0x0013, 0x00f0 }, + { 0x0013, 0x00f1 }, + { 0x0013, 0x00f2 }, + { 0x0013, 0x00f3 }, + { 0x0013, 0x00f4 }, + { 0x0013, 0x00f5 }, + { 0x0013, 0x00f6 }, + { 0x0013, 0x00f7 }, + { 0x0013, 0x00f8 }, + { 0x0013, 0x00f9 }, + { 0x0013, 0x00fa }, + { 0x0013, 0x00fb }, + { 0x0013, 0x00fc }, + { 0x0013, 0x00fd }, + { 0x0013, 0x00fe }, + { 0x0013, 0x00ff }, + { 0x0013, 0x0100 }, + { 0x0013, 0x0101 }, + { 0x0013, 0x0102 }, + { 0x0013, 0x0103 }, + { 0x0013, 0x0104 }, + { 0x0013, 0x0105 }, + { 0x0013, 0x0106 }, + { 0x0013, 0x0107 }, + { 0x0013, 0x0108 }, + { 0x0013, 0x0109 }, + { 0x0013, 0x010a }, + { 0x0013, 0x010b }, + { 0x0013, 0x010c }, + { 0x0013, 0x010d }, + { 0x0013, 0x010e }, + { 0x0013, 0x010f }, + { 0x0013, 0x0110 }, + { 0x0013, 0x0111 }, + { 0x0013, 0x0112 }, + { 0x0013, 0x0113 }, + { 0x0013, 0x0114 }, + { 0x0013, 0x0115 }, + { 0x0013, 0x0116 }, + { 0x0013, 0x0117 }, + { 0x0013, 0x0118 }, + { 0x0013, 0x0119 }, + { 0x0013, 0x011a }, + { 0x0013, 0x011b }, + { 0x0013, 0x011c }, + { 0x0013, 0x011d }, + { 0x0013, 0x011e }, + { 0x0013, 0x011f }, + { 0x0013, 0x0120 }, + { 0x0013, 0x0121 }, + { 0x0013, 0x0122 }, + { 0x0013, 0x0123 }, + { 0x0013, 0x0124 }, + { 0x0013, 0x0125 }, + { 0x0013, 0x0126 }, + { 0x0013, 0x0127 }, + { 0x0013, 0x0128 }, + { 0x0013, 0x0129 }, + { 0x0013, 0x012a }, + { 0x0013, 0x012b }, + { 0x0013, 0x012c }, + { 0x0013, 0x012d }, + { 0x0013, 0x012e }, + { 0x0013, 0x012f }, + { 0x0013, 0x0130 }, + { 0x0013, 0x0131 }, + { 0x0013, 0x0132 }, + { 0x0013, 0x0133 }, + { 0x0013, 0x0134 }, + { 0x0013, 0x0135 }, + { 0x0013, 0x0136 }, + { 0x0013, 0x0137 }, + { 0x0013, 0x0138 }, + { 0x0013, 0x0139 }, + { 0x0013, 0x013a }, + { 0x0013, 0x013b }, + { 0x0013, 0x013c }, + { 0x0013, 0x013d }, + { 0x0013, 0x013e }, + { 0x0013, 0x013f }, + { 0x0013, 0x0140 }, + { 0x0013, 0x0141 }, + { 0x0013, 0x0142 }, + { 0x0013, 0x0143 }, + { 0x0013, 0x0144 }, + { 0x0013, 0x0145 }, + { 0x0013, 0x0146 }, + { 0x0013, 0x0147 }, + { 0x0013, 0x0148 }, + { 0x0013, 0x0149 }, + { 0x0013, 0x014a }, + { 0x0013, 0x014b }, + { 0x0013, 0x014c }, + { 0x0013, 0x014d }, + { 0x0013, 0x014e }, + { 0x0013, 0x014f }, + { 0x0013, 0x0150 }, + { 0x0013, 0x0151 }, + { 0x0013, 0x0152 }, + { 0x0013, 0x0153 }, + { 0x0013, 0x0154 }, + { 0x0013, 0x0155 }, + { 0x0013, 0x0156 }, + { 0x0013, 0x0157 }, + { 0x0013, 0x0158 }, + { 0x0013, 0x0159 }, + { 0x0013, 0x015a }, + { 0x0013, 0x015b }, + { 0x0013, 0x015c }, + { 0x0013, 0x015d }, + { 0x0013, 0x015e }, + { 0x0013, 0x015f }, + { 0x0013, 0x0160 }, + { 0x0013, 0x0161 }, + { 0x0013, 0x0162 }, + { 0x0013, 0x0163 }, + { 0x0013, 0x0164 }, + { 0x0013, 0x0165 }, + { 0x0013, 0x0166 }, + { 0x0013, 0x0167 }, + { 0x0013, 0x0168 }, + { 0x0013, 0x0169 }, + { 0x0013, 0x016a }, + { 0x0013, 0x016b }, + { 0x0013, 0x016c }, + { 0x0013, 0x016d }, + { 0x0013, 0x016e }, + { 0x0013, 0x016f }, + { 0x0013, 0x0170 }, + { 0x0013, 0x0171 }, + { 0x0013, 0x0172 }, + { 0x0013, 0x0173 }, + { 0x0013, 0x0174 }, + { 0x0013, 0x0175 }, + { 0x0013, 0x0176 }, + { 0x0013, 0x0177 }, + { 0x0013, 0x0178 }, + { 0x0013, 0x0179 }, + { 0x0013, 0x017a }, + { 0x0013, 0x017b }, + { 0x0013, 0x017c }, + { 0x0013, 0x017d }, + { 0x0013, 0x017e }, + { 0x0013, 0x017f }, + { 0x0013, 0x0180 }, + { 0x0013, 0x0181 }, + { 0x0013, 0x0182 }, + { 0x0013, 0x0183 }, + { 0x0013, 0x0184 }, + { 0x0013, 0x0185 }, + { 0x0013, 0x0186 }, + { 0x0013, 0x0187 }, + { 0x0013, 0x0188 }, + { 0x0013, 0x0189 }, + { 0x0013, 0x018a }, + { 0x0013, 0x018b }, + { 0x0013, 0x018c }, + { 0x0013, 0x018d }, + { 0x0013, 0x018e }, + { 0x0013, 0x018f }, + { 0x0013, 0x0190 }, + { 0x0013, 0x0191 }, + { 0x0013, 0x0192 }, + { 0x0013, 0x0193 }, + { 0x0013, 0x0194 }, + { 0x0013, 0x0195 }, + { 0x0013, 0x0196 }, + { 0x0013, 0x0197 }, + { 0x0013, 0x0198 }, + { 0x0013, 0x0199 }, + { 0x0013, 0x019a }, + { 0x0013, 0x019b }, + { 0x0013, 0x019c }, + { 0x0013, 0x019d }, + { 0x0013, 0x019e }, + { 0x0013, 0x019f }, + { 0x0013, 0x01a0 }, + { 0x0013, 0x01a1 }, + { 0x0013, 0x01a2 }, + { 0x0013, 0x01a3 }, + { 0x0013, 0x01a4 }, + { 0x0013, 0x01a5 }, + { 0x0013, 0x01a6 }, + { 0x0013, 0x01a7 }, + { 0x0013, 0x01a8 }, + { 0x0013, 0x01a9 }, + { 0x0013, 0x01aa }, + { 0x0013, 0x01ab }, + { 0x0013, 0x01ac }, + { 0x0013, 0x01ad }, + { 0x0013, 0x01ae }, + { 0x0013, 0x01af }, + { 0x0013, 0x01b0 }, + { 0x0013, 0x01b1 }, + { 0x0013, 0x01b2 }, + { 0x0013, 0x01b3 }, + { 0x0013, 0x01b4 }, + { 0x0013, 0x01b5 }, + { 0x0013, 0x01b6 }, + { 0x0013, 0x01b7 }, + { 0x0013, 0x01b8 }, + { 0x0013, 0x01b9 }, + { 0x0013, 0x01ba }, + { 0x0013, 0x01bb }, + { 0x0013, 0x01bc }, + { 0x0013, 0x01bd }, + { 0x0013, 0x01be }, + { 0x0013, 0x01bf }, + { 0x0013, 0x01c0 }, + { 0x0013, 0x01c1 }, + { 0x0013, 0x01c2 }, + { 0x0013, 0x01c3 }, + { 0x0013, 0x01c4 }, + { 0x0013, 0x01c5 }, + { 0x0013, 0x01c6 }, + { 0x0013, 0x01c7 }, + { 0x0013, 0x01c8 }, + { 0x0013, 0x01c9 }, + { 0x0013, 0x01ca }, + { 0x0013, 0x01cb }, + { 0x0013, 0x01cc }, + { 0x0013, 0x01cd }, + { 0x0013, 0x01ce }, + { 0x0013, 0x01cf }, + { 0x0013, 0x01d0 }, + { 0x0013, 0x01d1 }, + { 0x0013, 0x01d2 }, + { 0x0013, 0x01d3 }, + { 0x0013, 0x01d4 }, + { 0x0013, 0x01d5 }, + { 0x0013, 0x01d6 }, + { 0x0013, 0x01d7 }, + { 0x0013, 0x01d8 }, + { 0x0013, 0x01d9 }, + { 0x0013, 0x01da }, + { 0x0013, 0x01db }, + { 0x0013, 0x01dc }, + { 0x0013, 0x01dd }, + { 0x0013, 0x01de }, + { 0x0013, 0x01df }, + { 0x0013, 0x01e0 }, + { 0x0013, 0x01e1 }, + { 0x0013, 0x01e2 }, + { 0x0013, 0x01e3 }, + { 0x0013, 0x01e4 }, + { 0x0013, 0x01e5 }, + { 0x0013, 0x01e6 }, + { 0x0013, 0x01e7 }, + { 0x0013, 0x01e8 }, + { 0x0013, 0x01e9 }, + { 0x0013, 0x01ea }, + { 0x0013, 0x01eb }, + { 0x0013, 0x01ec }, + { 0x0013, 0x01ed }, + { 0x0013, 0x01ee }, + { 0x0013, 0x01ef }, + { 0x0013, 0x01f0 }, + { 0x0013, 0x01f1 }, + { 0x0013, 0x01f2 }, + { 0x0013, 0x01f3 }, + { 0x0013, 0x01f4 }, + { 0x0013, 0x01f5 }, + { 0x0013, 0x01f6 }, + { 0x0013, 0x01f7 }, + { 0x0013, 0x01f8 }, + { 0x0013, 0x01f9 }, + { 0x0013, 0x01fa }, + { 0x0013, 0x01fb }, + { 0x0013, 0x01fc }, + { 0x0013, 0x01fd }, + { 0x0013, 0x01fe }, + { 0x0013, 0x01ff }, + { 0x0013, 0x0200 }, + { 0x0013, 0x0201 }, + { 0x0013, 0x0202 }, + { 0x0013, 0x0203 }, + { 0x0013, 0x0204 }, + { 0x0013, 0x0205 }, + { 0x0013, 0x0206 }, + { 0x0013, 0x0207 }, + { 0x0013, 0x0208 }, + { 0x0013, 0x0209 }, + { 0x0013, 0x020a }, + { 0x0013, 0x020b }, + { 0x0013, 0x020c }, + { 0x0013, 0x020d }, + { 0x0013, 0x020e }, + { 0x0013, 0x020f }, + { 0x0013, 0x0210 }, + { 0x0013, 0x0211 }, + { 0x0013, 0x0212 }, + { 0x0013, 0x0213 }, + { 0x0013, 0x0214 }, + { 0x0013, 0x0215 }, + { 0x0013, 0x0216 }, + { 0x0013, 0x0217 }, + { 0x0013, 0x0218 }, + { 0x0013, 0x0219 }, + { 0x0013, 0x021a }, + { 0x0013, 0x021b }, + { 0x0013, 0x021c }, + { 0x0013, 0x021d }, + { 0x0013, 0x021e }, + { 0x0013, 0x021f }, + { 0x0013, 0x0220 }, + { 0x0013, 0x0221 }, + { 0x0013, 0x0222 }, + { 0x0013, 0x0223 }, + { 0x0013, 0x0224 }, + { 0x0013, 0x0225 }, + { 0x0013, 0x0226 }, + { 0x0013, 0x0227 }, + { 0x0013, 0x0228 }, + { 0x0013, 0x0229 }, + { 0x0013, 0x022a }, + { 0x0013, 0x022b }, + { 0x0013, 0x022c }, + { 0x0013, 0x022d }, + { 0x0013, 0x022e }, + { 0x0013, 0x022f }, + { 0x0013, 0x0230 }, + { 0x0013, 0x0231 }, + { 0x0013, 0x0232 }, + { 0x0013, 0x0233 }, + { 0x0013, 0x0234 }, + { 0x0013, 0x0235 }, + { 0x0013, 0x0236 }, + { 0x0013, 0x0237 }, + { 0x0013, 0x0238 }, + { 0x0013, 0x0239 }, + { 0x0013, 0x023a }, + { 0x0013, 0x023b }, + { 0x0013, 0x023c }, + { 0x0013, 0x023d }, + { 0x0013, 0x023e }, + { 0x0013, 0x023f }, + { 0x0013, 0x0240 }, + { 0x0013, 0x0241 }, + { 0x0013, 0x0242 }, + { 0x0013, 0x0243 }, + { 0x0013, 0x0244 }, + { 0x0013, 0x0245 }, + { 0x0013, 0x0246 }, + { 0x0013, 0x0247 }, + { 0x0013, 0x0248 }, + { 0x0013, 0x0249 }, + { 0x0013, 0x024a }, + { 0x0013, 0x024b }, + { 0x0013, 0x024c }, + { 0x0013, 0x024d }, + { 0x0013, 0x024e }, + { 0x0013, 0x024f }, + { 0x0013, 0x0250 }, + { 0x0013, 0x0251 }, + { 0x0013, 0x0252 }, + { 0x0013, 0x0253 }, + { 0x0013, 0x0254 }, + { 0x0013, 0x0255 }, + { 0x0013, 0x0256 }, + { 0x0013, 0x0257 }, + { 0x0013, 0x0258 }, + { 0x0013, 0x0259 }, + { 0x0013, 0x025a }, + { 0x0013, 0x025b }, + { 0x0013, 0x025c }, + { 0x0013, 0x025d }, + { 0x0013, 0x025e }, + { 0x0013, 0x025f }, + { 0x0013, 0x0260 }, + { 0x0013, 0x0261 }, + { 0x0013, 0x0262 }, + { 0x0013, 0x0263 }, + { 0x0013, 0x0264 }, + { 0x0013, 0x0265 }, + { 0x0013, 0x0266 }, + { 0x0013, 0x0267 }, + { 0x0013, 0x0268 }, + { 0x0013, 0x0269 }, + { 0x0013, 0x026a }, + { 0x0013, 0x026b }, + { 0x0012, 0x013f }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec48[110][16] = -{ - {0x0005ffff, 0x0003ffff, 0x0004ffff, 0x0001ffff, 0x0002ffff, 0x00000037, 0x00010001, 0x00010001, 0x0001001b, 0x0001001b, 0x0001001c, 0x0001001c, 0x00020000, 0x00020000, 0x00020000, 0x00020000, }, - {0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, }, - {0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, }, - {0x0001003a, 0x0001003a, 0x00010054, 0x00010054, 0x0001006d, 0x0001006d, 0x0001006e, 0x0001006e, 0x00020003, 0x00020003, 0x00020003, 0x00020003, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, }, - {0x00020039, 0x00020039, 0x00020039, 0x00020039, 0x00020051, 0x00020051, 0x00020051, 0x00020051, 0x00020052, 0x00020052, 0x00020052, 0x00020052, 0x00020053, 0x00020053, 0x00020053, 0x00020053, }, - {0x000bffff, 0x000affff, 0x0009ffff, 0x0008ffff, 0x0006ffff, 0x0007ffff, 0x00000004, 0x00000020, 0x0000003b, 0x00000055, 0x0000006c, 0x0000006f, 0x00000088, 0x00000089, 0x0001001f, 0x0001001f, }, - {0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, }, - {0x00030087, 0x00030087, 0x00030087, 0x00030087, 0x00030087, 0x00030087, 0x00030087, 0x00030087, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, 0x0003008a, }, - {0x000200a3, 0x000200a3, 0x000200a3, 0x000200a3, 0x000200a4, 0x000200a4, 0x000200a4, 0x000200a4, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, }, - {0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003c, 0x00020071, 0x00020071, 0x00020071, 0x00020071, 0x0002008b, 0x0002008b, 0x0002008b, 0x0002008b, }, - {0x00000072, 0x0000008c, 0x000000a6, 0x000000bd, 0x000000bf, 0x000000c0, 0x00010006, 0x00010006, 0x00010057, 0x00010057, 0x000100a2, 0x000100a2, 0x000100a5, 0x000100a5, 0x000100be, 0x000100be, }, - {0x001dffff, 0x002effff, 0x003fffff, 0x0050ffff, 0x0019ffff, 0x0013ffff, 0x0012ffff, 0x0010ffff, 0x0011ffff, 0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x00000007, 0x00000022, 0x0000003d, }, - {0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, }, - {0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, }, - {0x0003008d, 0x0003008d, 0x0003008d, 0x0003008d, 0x0003008d, 0x0003008d, 0x0003008d, 0x0003008d, 0x000300a7, 0x000300a7, 0x000300a7, 0x000300a7, 0x000300a7, 0x000300a7, 0x000300a7, 0x000300a7, }, - {0x000300c1, 0x000300c1, 0x000300c1, 0x000300c1, 0x000300c1, 0x000300c1, 0x000300c1, 0x000300c1, 0x000300d9, 0x000300d9, 0x000300d9, 0x000300d9, 0x000300d9, 0x000300d9, 0x000300d9, 0x000300d9, }, - {0x000100f5, 0x000100f5, 0x000100f6, 0x000100f6, 0x00020059, 0x00020059, 0x00020059, 0x00020059, 0x0002008e, 0x0002008e, 0x0002008e, 0x0002008e, 0x000200a8, 0x000200a8, 0x000200a8, 0x000200a8, }, - {0x000200c2, 0x000200c2, 0x000200c2, 0x000200c2, 0x000200d8, 0x000200d8, 0x000200d8, 0x000200d8, 0x000200da, 0x000200da, 0x000200da, 0x000200da, 0x000200db, 0x000200db, 0x000200db, 0x000200db, }, - {0x00010008, 0x00010008, 0x00010024, 0x00010024, 0x0001003f, 0x0001003f, 0x0001005a, 0x0001005a, 0x00010074, 0x00010074, 0x000100c3, 0x000100c3, 0x000100dc, 0x000100dc, 0x000100f4, 0x000100f4, }, - {0x0015ffff, 0x0014ffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x00000009, 0x00000075, 0x0000008f, 0x000000a9, 0x000000dd, 0x000000f3, 0x000000f7, 0x000000f8, 0x0000010e, 0x0000010f, 0x00000111, }, - {0x00030090, 0x00030090, 0x00030090, 0x00030090, 0x00030090, 0x00030090, 0x00030090, 0x00030090, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, 0x00030091, }, - {0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, }, - {0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300ab, 0x000300de, 0x000300de, 0x000300de, 0x000300de, 0x000300de, 0x000300de, 0x000300de, 0x000300de, }, - {0x000300e0, 0x000300e0, 0x000300e0, 0x000300e0, 0x000300e0, 0x000300e0, 0x000300e0, 0x000300e0, 0x000300fa, 0x000300fa, 0x000300fa, 0x000300fa, 0x000300fa, 0x000300fa, 0x000300fa, 0x000300fa, }, - {0x0003012a, 0x0003012a, 0x0003012a, 0x0003012a, 0x0003012a, 0x0003012a, 0x0003012a, 0x0003012a, 0x0003012c, 0x0003012c, 0x0003012c, 0x0003012c, 0x0003012c, 0x0003012c, 0x0003012c, 0x0003012c, }, - {0x0061ffff, 0x0062ffff, 0x0063ffff, 0x0064ffff, 0x0065ffff, 0x0066ffff, 0x0067ffff, 0x0068ffff, 0x0069ffff, 0x006affff, 0x006bffff, 0x006cffff, 0x006dffff, 0x001bffff, 0x001affff, 0x001cffff, }, - {0x00020076, 0x00020076, 0x00020076, 0x00020076, 0x000200aa, 0x000200aa, 0x000200aa, 0x000200aa, 0x000200ac, 0x000200ac, 0x000200ac, 0x000200ac, 0x000200c4, 0x000200c4, 0x000200c4, 0x000200c4, }, - {0x000102d4, 0x000102d4, 0x000102d5, 0x000102d5, 0x000102d6, 0x000102d6, 0x000102d7, 0x000102d7, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002005b, 0x0002005b, 0x0002005b, 0x0002005b, }, - {0x000200e1, 0x000200e1, 0x000200e1, 0x000200e1, 0x00020113, 0x00020113, 0x00020113, 0x00020113, 0x00020146, 0x00020146, 0x00020146, 0x00020146, 0x000202d8, 0x000202d8, 0x000202d8, 0x000202d8, }, - {0x001effff, 0x001fffff, 0x0020ffff, 0x0021ffff, 0x0022ffff, 0x0023ffff, 0x0024ffff, 0x0027ffff, 0x0025ffff, 0x0026ffff, 0x0028ffff, 0x0029ffff, 0x002affff, 0x002bffff, 0x002cffff, 0x002dffff, }, - {0x0001000b, 0x0001000b, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, 0x00010010, 0x00010010, 0x00010011, 0x00010011, 0x00010012, 0x00010012, }, - {0x00010013, 0x00010013, 0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x0001001a, 0x0001001a, }, - {0x00010026, 0x00010026, 0x00010027, 0x00010027, 0x00010028, 0x00010028, 0x00010029, 0x00010029, 0x0001002a, 0x0001002a, 0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, }, - {0x0001002e, 0x0001002e, 0x0001002f, 0x0001002f, 0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, }, - {0x00010041, 0x00010041, 0x00010042, 0x00010042, 0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, 0x00010046, 0x00010046, 0x00010047, 0x00010047, 0x00010048, 0x00010048, }, - {0x00010049, 0x00010049, 0x0001004a, 0x0001004a, 0x0001004b, 0x0001004b, 0x0001004c, 0x0001004c, 0x0001004d, 0x0001004d, 0x0001004e, 0x0001004e, 0x0001004f, 0x0001004f, 0x00010050, 0x00010050, }, - {0x0001005c, 0x0001005c, 0x0001005d, 0x0001005d, 0x0001005e, 0x0001005e, 0x0001005f, 0x0001005f, 0x00010060, 0x00010060, 0x00010061, 0x00010061, 0x00010062, 0x00010062, 0x00010063, 0x00010063, }, - {0x00010077, 0x00010077, 0x00010078, 0x00010078, 0x00010079, 0x00010079, 0x0001007a, 0x0001007a, 0x0001007b, 0x0001007b, 0x0001007c, 0x0001007c, 0x0001007d, 0x0001007d, 0x0001007e, 0x0001007e, }, - {0x0001007f, 0x0001007f, 0x00010080, 0x00010080, 0x00010081, 0x00010081, 0x00010082, 0x00010082, 0x00010083, 0x00010083, 0x00010084, 0x00010084, 0x00010085, 0x00010085, 0x00010086, 0x00010086, }, - {0x00010064, 0x00010064, 0x00010065, 0x00010065, 0x00010066, 0x00010066, 0x00010067, 0x00010067, 0x00010068, 0x00010068, 0x00010069, 0x00010069, 0x0001006a, 0x0001006a, 0x0001006b, 0x0001006b, }, - {0x00010092, 0x00010092, 0x00010093, 0x00010093, 0x00010094, 0x00010094, 0x00010095, 0x00010095, 0x00010096, 0x00010096, 0x00010097, 0x00010097, 0x00010098, 0x00010098, 0x00010099, 0x00010099, }, - {0x0001009a, 0x0001009a, 0x0001009b, 0x0001009b, 0x0001009c, 0x0001009c, 0x0001009d, 0x0001009d, 0x0001009e, 0x0001009e, 0x0001009f, 0x0001009f, 0x000100a0, 0x000100a0, 0x000100a1, 0x000100a1, }, - {0x000100ad, 0x000100ad, 0x000100ae, 0x000100ae, 0x000100af, 0x000100af, 0x000100b0, 0x000100b0, 0x000100b1, 0x000100b1, 0x000100b2, 0x000100b2, 0x000100b3, 0x000100b3, 0x000100b4, 0x000100b4, }, - {0x000100b5, 0x000100b5, 0x000100b6, 0x000100b6, 0x000100b7, 0x000100b7, 0x000100b8, 0x000100b8, 0x000100b9, 0x000100b9, 0x000100ba, 0x000100ba, 0x000100bb, 0x000100bb, 0x000100bc, 0x000100bc, }, - {0x000100c5, 0x000100c5, 0x000100c6, 0x000100c6, 0x000100c7, 0x000100c7, 0x000100c8, 0x000100c8, 0x000100c9, 0x000100c9, 0x000100ca, 0x000100ca, 0x000100cb, 0x000100cb, 0x000100cc, 0x000100cc, }, - {0x000100cd, 0x000100cd, 0x000100ce, 0x000100ce, 0x000100cf, 0x000100cf, 0x000100d0, 0x000100d0, 0x000100d1, 0x000100d1, 0x000100d2, 0x000100d2, 0x000100d3, 0x000100d3, 0x000100d4, 0x000100d4, }, - {0x002fffff, 0x0030ffff, 0x0031ffff, 0x0032ffff, 0x0033ffff, 0x0034ffff, 0x0035ffff, 0x0036ffff, 0x0037ffff, 0x0038ffff, 0x0039ffff, 0x003affff, 0x003bffff, 0x003cffff, 0x003dffff, 0x003effff, }, - {0x000100d5, 0x000100d5, 0x000100d6, 0x000100d6, 0x000100d7, 0x000100d7, 0x000100df, 0x000100df, 0x000100e2, 0x000100e2, 0x000100e3, 0x000100e3, 0x000100e4, 0x000100e4, 0x000100e5, 0x000100e5, }, - {0x000100e6, 0x000100e6, 0x000100e7, 0x000100e7, 0x000100e8, 0x000100e8, 0x000100e9, 0x000100e9, 0x000100ea, 0x000100ea, 0x000100eb, 0x000100eb, 0x000100ec, 0x000100ec, 0x000100ed, 0x000100ed, }, - {0x000100ee, 0x000100ee, 0x000100ef, 0x000100ef, 0x000100f0, 0x000100f0, 0x000100f1, 0x000100f1, 0x000100f2, 0x000100f2, 0x000100f9, 0x000100f9, 0x000100fb, 0x000100fb, 0x000100fc, 0x000100fc, }, - {0x000100fd, 0x000100fd, 0x000100fe, 0x000100fe, 0x000100ff, 0x000100ff, 0x00010100, 0x00010100, 0x00010101, 0x00010101, 0x00010102, 0x00010102, 0x00010103, 0x00010103, 0x00010104, 0x00010104, }, - {0x00010105, 0x00010105, 0x00010106, 0x00010106, 0x00010107, 0x00010107, 0x00010108, 0x00010108, 0x00010109, 0x00010109, 0x0001010a, 0x0001010a, 0x0001010b, 0x0001010b, 0x0001010c, 0x0001010c, }, - {0x0001010d, 0x0001010d, 0x00010110, 0x00010110, 0x00010112, 0x00010112, 0x00010114, 0x00010114, 0x00010115, 0x00010115, 0x00010116, 0x00010116, 0x00010117, 0x00010117, 0x00010118, 0x00010118, }, - {0x00010119, 0x00010119, 0x0001011a, 0x0001011a, 0x0001011b, 0x0001011b, 0x0001011c, 0x0001011c, 0x0001011d, 0x0001011d, 0x0001011e, 0x0001011e, 0x0001011f, 0x0001011f, 0x00010120, 0x00010120, }, - {0x00010121, 0x00010121, 0x00010122, 0x00010122, 0x00010123, 0x00010123, 0x00010124, 0x00010124, 0x00010125, 0x00010125, 0x00010126, 0x00010126, 0x00010127, 0x00010127, 0x00010128, 0x00010128, }, - {0x00010129, 0x00010129, 0x0001012b, 0x0001012b, 0x0001012d, 0x0001012d, 0x0001012e, 0x0001012e, 0x0001012f, 0x0001012f, 0x00010130, 0x00010130, 0x00010131, 0x00010131, 0x00010132, 0x00010132, }, - {0x00010133, 0x00010133, 0x00010134, 0x00010134, 0x00010135, 0x00010135, 0x00010136, 0x00010136, 0x00010137, 0x00010137, 0x00010138, 0x00010138, 0x00010139, 0x00010139, 0x0001013a, 0x0001013a, }, - {0x0001013b, 0x0001013b, 0x0001013c, 0x0001013c, 0x0001013d, 0x0001013d, 0x0001013e, 0x0001013e, 0x0001013f, 0x0001013f, 0x00010140, 0x00010140, 0x00010141, 0x00010141, 0x00010142, 0x00010142, }, - {0x00010143, 0x00010143, 0x00010144, 0x00010144, 0x00010145, 0x00010145, 0x00010147, 0x00010147, 0x00010148, 0x00010148, 0x00010149, 0x00010149, 0x0001014a, 0x0001014a, 0x0001014b, 0x0001014b, }, - {0x0001014c, 0x0001014c, 0x0001014d, 0x0001014d, 0x0001014e, 0x0001014e, 0x0001014f, 0x0001014f, 0x00010150, 0x00010150, 0x00010151, 0x00010151, 0x00010152, 0x00010152, 0x00010153, 0x00010153, }, - {0x00010154, 0x00010154, 0x00010155, 0x00010155, 0x00010156, 0x00010156, 0x00010157, 0x00010157, 0x00010158, 0x00010158, 0x00010159, 0x00010159, 0x0001015a, 0x0001015a, 0x0001015b, 0x0001015b, }, - {0x0001015c, 0x0001015c, 0x0001015d, 0x0001015d, 0x0001015e, 0x0001015e, 0x0001015f, 0x0001015f, 0x00010160, 0x00010160, 0x00010161, 0x00010161, 0x00010162, 0x00010162, 0x00010163, 0x00010163, }, - {0x00010164, 0x00010164, 0x00010165, 0x00010165, 0x00010166, 0x00010166, 0x00010167, 0x00010167, 0x00010168, 0x00010168, 0x00010169, 0x00010169, 0x0001016a, 0x0001016a, 0x0001016b, 0x0001016b, }, - {0x0040ffff, 0x0041ffff, 0x0042ffff, 0x0043ffff, 0x0044ffff, 0x0045ffff, 0x0046ffff, 0x0047ffff, 0x0048ffff, 0x0049ffff, 0x004affff, 0x004bffff, 0x004cffff, 0x004dffff, 0x004effff, 0x004fffff, }, - {0x0001016c, 0x0001016c, 0x0001016d, 0x0001016d, 0x0001016e, 0x0001016e, 0x0001016f, 0x0001016f, 0x00010170, 0x00010170, 0x00010171, 0x00010171, 0x00010172, 0x00010172, 0x00010173, 0x00010173, }, - {0x00010174, 0x00010174, 0x00010175, 0x00010175, 0x00010176, 0x00010176, 0x00010177, 0x00010177, 0x00010178, 0x00010178, 0x00010179, 0x00010179, 0x0001017a, 0x0001017a, 0x0001017b, 0x0001017b, }, - {0x0001017c, 0x0001017c, 0x0001017d, 0x0001017d, 0x0001017e, 0x0001017e, 0x0001017f, 0x0001017f, 0x00010180, 0x00010180, 0x00010181, 0x00010181, 0x00010182, 0x00010182, 0x00010183, 0x00010183, }, - {0x00010184, 0x00010184, 0x00010185, 0x00010185, 0x00010186, 0x00010186, 0x00010187, 0x00010187, 0x00010188, 0x00010188, 0x00010189, 0x00010189, 0x0001018a, 0x0001018a, 0x0001018b, 0x0001018b, }, - {0x0001018c, 0x0001018c, 0x0001018d, 0x0001018d, 0x0001018e, 0x0001018e, 0x0001018f, 0x0001018f, 0x00010190, 0x00010190, 0x00010191, 0x00010191, 0x00010192, 0x00010192, 0x00010193, 0x00010193, }, - {0x00010194, 0x00010194, 0x00010195, 0x00010195, 0x00010196, 0x00010196, 0x00010197, 0x00010197, 0x00010198, 0x00010198, 0x00010199, 0x00010199, 0x0001019a, 0x0001019a, 0x0001019b, 0x0001019b, }, - {0x0001019c, 0x0001019c, 0x0001019d, 0x0001019d, 0x0001019e, 0x0001019e, 0x0001019f, 0x0001019f, 0x000101a0, 0x000101a0, 0x000101a1, 0x000101a1, 0x000101a2, 0x000101a2, 0x000101a3, 0x000101a3, }, - {0x000101a4, 0x000101a4, 0x000101a5, 0x000101a5, 0x000101a6, 0x000101a6, 0x000101a7, 0x000101a7, 0x000101a8, 0x000101a8, 0x000101a9, 0x000101a9, 0x000101aa, 0x000101aa, 0x000101ab, 0x000101ab, }, - {0x000101ac, 0x000101ac, 0x000101ad, 0x000101ad, 0x000101ae, 0x000101ae, 0x000101af, 0x000101af, 0x000101b0, 0x000101b0, 0x000101b1, 0x000101b1, 0x000101b2, 0x000101b2, 0x000101b3, 0x000101b3, }, - {0x000101b4, 0x000101b4, 0x000101b5, 0x000101b5, 0x000101b6, 0x000101b6, 0x000101b7, 0x000101b7, 0x000101b8, 0x000101b8, 0x000101b9, 0x000101b9, 0x000101ba, 0x000101ba, 0x000101bb, 0x000101bb, }, - {0x000101bc, 0x000101bc, 0x000101bd, 0x000101bd, 0x000101be, 0x000101be, 0x000101bf, 0x000101bf, 0x000101c0, 0x000101c0, 0x000101c1, 0x000101c1, 0x000101c2, 0x000101c2, 0x000101c3, 0x000101c3, }, - {0x000101c4, 0x000101c4, 0x000101c5, 0x000101c5, 0x000101c6, 0x000101c6, 0x000101c7, 0x000101c7, 0x000101c8, 0x000101c8, 0x000101c9, 0x000101c9, 0x000101ca, 0x000101ca, 0x000101cb, 0x000101cb, }, - {0x000101cc, 0x000101cc, 0x000101cd, 0x000101cd, 0x000101ce, 0x000101ce, 0x000101cf, 0x000101cf, 0x000101d0, 0x000101d0, 0x000101d1, 0x000101d1, 0x000101d2, 0x000101d2, 0x000101d3, 0x000101d3, }, - {0x000101d4, 0x000101d4, 0x000101d5, 0x000101d5, 0x000101d6, 0x000101d6, 0x000101d7, 0x000101d7, 0x000101d8, 0x000101d8, 0x000101d9, 0x000101d9, 0x000101da, 0x000101da, 0x000101db, 0x000101db, }, - {0x000101dc, 0x000101dc, 0x000101dd, 0x000101dd, 0x000101de, 0x000101de, 0x000101df, 0x000101df, 0x000101e0, 0x000101e0, 0x000101e1, 0x000101e1, 0x000101e2, 0x000101e2, 0x000101e3, 0x000101e3, }, - {0x000101e4, 0x000101e4, 0x000101e5, 0x000101e5, 0x000101e6, 0x000101e6, 0x000101e7, 0x000101e7, 0x000101e8, 0x000101e8, 0x000101e9, 0x000101e9, 0x000101ea, 0x000101ea, 0x000101eb, 0x000101eb, }, - {0x0051ffff, 0x0052ffff, 0x0053ffff, 0x0054ffff, 0x0055ffff, 0x0056ffff, 0x0057ffff, 0x0058ffff, 0x0059ffff, 0x005affff, 0x005bffff, 0x005cffff, 0x005dffff, 0x005effff, 0x005fffff, 0x0060ffff, }, - {0x000101ec, 0x000101ec, 0x000101ed, 0x000101ed, 0x000101ee, 0x000101ee, 0x000101ef, 0x000101ef, 0x000101f0, 0x000101f0, 0x000101f1, 0x000101f1, 0x000101f2, 0x000101f2, 0x000101f3, 0x000101f3, }, - {0x000101f4, 0x000101f4, 0x000101f5, 0x000101f5, 0x000101f6, 0x000101f6, 0x000101f7, 0x000101f7, 0x000101f8, 0x000101f8, 0x000101f9, 0x000101f9, 0x000101fa, 0x000101fa, 0x000101fb, 0x000101fb, }, - {0x000101fc, 0x000101fc, 0x000101fd, 0x000101fd, 0x000101fe, 0x000101fe, 0x000101ff, 0x000101ff, 0x00010200, 0x00010200, 0x00010201, 0x00010201, 0x00010202, 0x00010202, 0x00010203, 0x00010203, }, - {0x00010204, 0x00010204, 0x00010205, 0x00010205, 0x00010206, 0x00010206, 0x00010207, 0x00010207, 0x00010208, 0x00010208, 0x00010209, 0x00010209, 0x0001020a, 0x0001020a, 0x0001020b, 0x0001020b, }, - {0x0001020c, 0x0001020c, 0x0001020d, 0x0001020d, 0x0001020e, 0x0001020e, 0x0001020f, 0x0001020f, 0x00010210, 0x00010210, 0x00010211, 0x00010211, 0x00010212, 0x00010212, 0x00010213, 0x00010213, }, - {0x00010214, 0x00010214, 0x00010215, 0x00010215, 0x00010216, 0x00010216, 0x00010217, 0x00010217, 0x00010218, 0x00010218, 0x00010219, 0x00010219, 0x0001021a, 0x0001021a, 0x0001021b, 0x0001021b, }, - {0x0001021c, 0x0001021c, 0x0001021d, 0x0001021d, 0x0001021e, 0x0001021e, 0x0001021f, 0x0001021f, 0x00010220, 0x00010220, 0x00010221, 0x00010221, 0x00010222, 0x00010222, 0x00010223, 0x00010223, }, - {0x00010224, 0x00010224, 0x00010225, 0x00010225, 0x00010226, 0x00010226, 0x00010227, 0x00010227, 0x00010228, 0x00010228, 0x00010229, 0x00010229, 0x0001022a, 0x0001022a, 0x0001022b, 0x0001022b, }, - {0x0001022c, 0x0001022c, 0x0001022d, 0x0001022d, 0x0001022e, 0x0001022e, 0x0001022f, 0x0001022f, 0x00010230, 0x00010230, 0x00010231, 0x00010231, 0x00010232, 0x00010232, 0x00010233, 0x00010233, }, - {0x00010234, 0x00010234, 0x00010235, 0x00010235, 0x00010236, 0x00010236, 0x00010237, 0x00010237, 0x00010238, 0x00010238, 0x00010239, 0x00010239, 0x0001023a, 0x0001023a, 0x0001023b, 0x0001023b, }, - {0x0001023c, 0x0001023c, 0x0001023d, 0x0001023d, 0x0001023e, 0x0001023e, 0x0001023f, 0x0001023f, 0x00010240, 0x00010240, 0x00010241, 0x00010241, 0x00010242, 0x00010242, 0x00010243, 0x00010243, }, - {0x00010244, 0x00010244, 0x00010245, 0x00010245, 0x00010246, 0x00010246, 0x00010247, 0x00010247, 0x00010248, 0x00010248, 0x00010249, 0x00010249, 0x0001024a, 0x0001024a, 0x0001024b, 0x0001024b, }, - {0x0001024c, 0x0001024c, 0x0001024d, 0x0001024d, 0x0001024e, 0x0001024e, 0x0001024f, 0x0001024f, 0x00010250, 0x00010250, 0x00010251, 0x00010251, 0x00010252, 0x00010252, 0x00010253, 0x00010253, }, - {0x00010254, 0x00010254, 0x00010255, 0x00010255, 0x00010256, 0x00010256, 0x00010257, 0x00010257, 0x00010258, 0x00010258, 0x00010259, 0x00010259, 0x0001025a, 0x0001025a, 0x0001025b, 0x0001025b, }, - {0x0001025c, 0x0001025c, 0x0001025d, 0x0001025d, 0x0001025e, 0x0001025e, 0x0001025f, 0x0001025f, 0x00010260, 0x00010260, 0x00010261, 0x00010261, 0x00010262, 0x00010262, 0x00010263, 0x00010263, }, - {0x00010264, 0x00010264, 0x00010265, 0x00010265, 0x00010266, 0x00010266, 0x00010267, 0x00010267, 0x00010268, 0x00010268, 0x00010269, 0x00010269, 0x0001026a, 0x0001026a, 0x0001026b, 0x0001026b, }, - {0x0001026c, 0x0001026c, 0x0001026d, 0x0001026d, 0x0001026e, 0x0001026e, 0x0001026f, 0x0001026f, 0x00010270, 0x00010270, 0x00010271, 0x00010271, 0x00010272, 0x00010272, 0x00010273, 0x00010273, }, - {0x00010274, 0x00010274, 0x00010275, 0x00010275, 0x00010276, 0x00010276, 0x00010277, 0x00010277, 0x00010278, 0x00010278, 0x00010279, 0x00010279, 0x0001027a, 0x0001027a, 0x0001027b, 0x0001027b, }, - {0x0001027c, 0x0001027c, 0x0001027d, 0x0001027d, 0x0001027e, 0x0001027e, 0x0001027f, 0x0001027f, 0x00010280, 0x00010280, 0x00010281, 0x00010281, 0x00010282, 0x00010282, 0x00010283, 0x00010283, }, - {0x00010284, 0x00010284, 0x00010285, 0x00010285, 0x00010286, 0x00010286, 0x00010287, 0x00010287, 0x00010288, 0x00010288, 0x00010289, 0x00010289, 0x0001028a, 0x0001028a, 0x0001028b, 0x0001028b, }, - {0x0001028c, 0x0001028c, 0x0001028d, 0x0001028d, 0x0001028e, 0x0001028e, 0x0001028f, 0x0001028f, 0x00010290, 0x00010290, 0x00010291, 0x00010291, 0x00010292, 0x00010292, 0x00010293, 0x00010293, }, - {0x00010294, 0x00010294, 0x00010295, 0x00010295, 0x00010296, 0x00010296, 0x00010297, 0x00010297, 0x00010298, 0x00010298, 0x00010299, 0x00010299, 0x0001029a, 0x0001029a, 0x0001029b, 0x0001029b, }, - {0x0001029c, 0x0001029c, 0x0001029d, 0x0001029d, 0x0001029e, 0x0001029e, 0x0001029f, 0x0001029f, 0x000102a0, 0x000102a0, 0x000102a1, 0x000102a1, 0x000102a2, 0x000102a2, 0x000102a3, 0x000102a3, }, - {0x000102a4, 0x000102a4, 0x000102a5, 0x000102a5, 0x000102a6, 0x000102a6, 0x000102a7, 0x000102a7, 0x000102a8, 0x000102a8, 0x000102a9, 0x000102a9, 0x000102aa, 0x000102aa, 0x000102ab, 0x000102ab, }, - {0x000102ac, 0x000102ac, 0x000102ad, 0x000102ad, 0x000102ae, 0x000102ae, 0x000102af, 0x000102af, 0x000102b0, 0x000102b0, 0x000102b1, 0x000102b1, 0x000102b2, 0x000102b2, 0x000102b3, 0x000102b3, }, - {0x000102b4, 0x000102b4, 0x000102b5, 0x000102b5, 0x000102b6, 0x000102b6, 0x000102b7, 0x000102b7, 0x000102b8, 0x000102b8, 0x000102b9, 0x000102b9, 0x000102ba, 0x000102ba, 0x000102bb, 0x000102bb, }, - {0x000102bc, 0x000102bc, 0x000102bd, 0x000102bd, 0x000102be, 0x000102be, 0x000102bf, 0x000102bf, 0x000102c0, 0x000102c0, 0x000102c1, 0x000102c1, 0x000102c2, 0x000102c2, 0x000102c3, 0x000102c3, }, - {0x000102c4, 0x000102c4, 0x000102c5, 0x000102c5, 0x000102c6, 0x000102c6, 0x000102c7, 0x000102c7, 0x000102c8, 0x000102c8, 0x000102c9, 0x000102c9, 0x000102ca, 0x000102ca, 0x000102cb, 0x000102cb, }, - {0x000102cc, 0x000102cc, 0x000102cd, 0x000102cd, 0x000102ce, 0x000102ce, 0x000102cf, 0x000102cf, 0x000102d0, 0x000102d0, 0x000102d1, 0x000102d1, 0x000102d2, 0x000102d2, 0x000102d3, 0x000102d3, }, +const uint32_t c_aauiCQMFHuffDec48[110][16] = { + { + 0x0005ffff, + 0x0003ffff, + 0x0004ffff, + 0x0001ffff, + 0x0002ffff, + 0x00000037, + 0x00010001, + 0x00010001, + 0x0001001b, + 0x0001001b, + 0x0001001c, + 0x0001001c, + 0x00020000, + 0x00020000, + 0x00020000, + 0x00020000, + }, + { + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + }, + { + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + }, + { + 0x0001003a, + 0x0001003a, + 0x00010054, + 0x00010054, + 0x0001006d, + 0x0001006d, + 0x0001006e, + 0x0001006e, + 0x00020003, + 0x00020003, + 0x00020003, + 0x00020003, + 0x0002001e, + 0x0002001e, + 0x0002001e, + 0x0002001e, + }, + { + 0x00020039, + 0x00020039, + 0x00020039, + 0x00020039, + 0x00020051, + 0x00020051, + 0x00020051, + 0x00020051, + 0x00020052, + 0x00020052, + 0x00020052, + 0x00020052, + 0x00020053, + 0x00020053, + 0x00020053, + 0x00020053, + }, + { + 0x000bffff, + 0x000affff, + 0x0009ffff, + 0x0008ffff, + 0x0006ffff, + 0x0007ffff, + 0x00000004, + 0x00000020, + 0x0000003b, + 0x00000055, + 0x0000006c, + 0x0000006f, + 0x00000088, + 0x00000089, + 0x0001001f, + 0x0001001f, + }, + { + 0x00030056, + 0x00030056, + 0x00030056, + 0x00030056, + 0x00030056, + 0x00030056, + 0x00030056, + 0x00030056, + 0x00030070, + 0x00030070, + 0x00030070, + 0x00030070, + 0x00030070, + 0x00030070, + 0x00030070, + 0x00030070, + }, + { + 0x00030087, + 0x00030087, + 0x00030087, + 0x00030087, + 0x00030087, + 0x00030087, + 0x00030087, + 0x00030087, + 0x0003008a, + 0x0003008a, + 0x0003008a, + 0x0003008a, + 0x0003008a, + 0x0003008a, + 0x0003008a, + 0x0003008a, + }, + { + 0x000200a3, + 0x000200a3, + 0x000200a3, + 0x000200a3, + 0x000200a4, + 0x000200a4, + 0x000200a4, + 0x000200a4, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + }, + { + 0x00020021, + 0x00020021, + 0x00020021, + 0x00020021, + 0x0002003c, + 0x0002003c, + 0x0002003c, + 0x0002003c, + 0x00020071, + 0x00020071, + 0x00020071, + 0x00020071, + 0x0002008b, + 0x0002008b, + 0x0002008b, + 0x0002008b, + }, + { + 0x00000072, + 0x0000008c, + 0x000000a6, + 0x000000bd, + 0x000000bf, + 0x000000c0, + 0x00010006, + 0x00010006, + 0x00010057, + 0x00010057, + 0x000100a2, + 0x000100a2, + 0x000100a5, + 0x000100a5, + 0x000100be, + 0x000100be, + }, + { + 0x001dffff, + 0x002effff, + 0x003fffff, + 0x0050ffff, + 0x0019ffff, + 0x0013ffff, + 0x0012ffff, + 0x0010ffff, + 0x0011ffff, + 0x000cffff, + 0x000dffff, + 0x000effff, + 0x000fffff, + 0x00000007, + 0x00000022, + 0x0000003d, + }, + { + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + }, + { + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030073, + 0x00030073, + 0x00030073, + 0x00030073, + 0x00030073, + 0x00030073, + 0x00030073, + 0x00030073, + }, + { + 0x0003008d, + 0x0003008d, + 0x0003008d, + 0x0003008d, + 0x0003008d, + 0x0003008d, + 0x0003008d, + 0x0003008d, + 0x000300a7, + 0x000300a7, + 0x000300a7, + 0x000300a7, + 0x000300a7, + 0x000300a7, + 0x000300a7, + 0x000300a7, + }, + { + 0x000300c1, + 0x000300c1, + 0x000300c1, + 0x000300c1, + 0x000300c1, + 0x000300c1, + 0x000300c1, + 0x000300c1, + 0x000300d9, + 0x000300d9, + 0x000300d9, + 0x000300d9, + 0x000300d9, + 0x000300d9, + 0x000300d9, + 0x000300d9, + }, + { + 0x000100f5, + 0x000100f5, + 0x000100f6, + 0x000100f6, + 0x00020059, + 0x00020059, + 0x00020059, + 0x00020059, + 0x0002008e, + 0x0002008e, + 0x0002008e, + 0x0002008e, + 0x000200a8, + 0x000200a8, + 0x000200a8, + 0x000200a8, + }, + { + 0x000200c2, + 0x000200c2, + 0x000200c2, + 0x000200c2, + 0x000200d8, + 0x000200d8, + 0x000200d8, + 0x000200d8, + 0x000200da, + 0x000200da, + 0x000200da, + 0x000200da, + 0x000200db, + 0x000200db, + 0x000200db, + 0x000200db, + }, + { + 0x00010008, + 0x00010008, + 0x00010024, + 0x00010024, + 0x0001003f, + 0x0001003f, + 0x0001005a, + 0x0001005a, + 0x00010074, + 0x00010074, + 0x000100c3, + 0x000100c3, + 0x000100dc, + 0x000100dc, + 0x000100f4, + 0x000100f4, + }, + { + 0x0015ffff, + 0x0014ffff, + 0x0016ffff, + 0x0017ffff, + 0x0018ffff, + 0x00000009, + 0x00000075, + 0x0000008f, + 0x000000a9, + 0x000000dd, + 0x000000f3, + 0x000000f7, + 0x000000f8, + 0x0000010e, + 0x0000010f, + 0x00000111, + }, + { + 0x00030090, + 0x00030090, + 0x00030090, + 0x00030090, + 0x00030090, + 0x00030090, + 0x00030090, + 0x00030090, + 0x00030091, + 0x00030091, + 0x00030091, + 0x00030091, + 0x00030091, + 0x00030091, + 0x00030091, + 0x00030091, + }, + { + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030040, + 0x00030040, + 0x00030040, + 0x00030040, + 0x00030040, + 0x00030040, + 0x00030040, + 0x00030040, + }, + { + 0x000300ab, + 0x000300ab, + 0x000300ab, + 0x000300ab, + 0x000300ab, + 0x000300ab, + 0x000300ab, + 0x000300ab, + 0x000300de, + 0x000300de, + 0x000300de, + 0x000300de, + 0x000300de, + 0x000300de, + 0x000300de, + 0x000300de, + }, + { + 0x000300e0, + 0x000300e0, + 0x000300e0, + 0x000300e0, + 0x000300e0, + 0x000300e0, + 0x000300e0, + 0x000300e0, + 0x000300fa, + 0x000300fa, + 0x000300fa, + 0x000300fa, + 0x000300fa, + 0x000300fa, + 0x000300fa, + 0x000300fa, + }, + { + 0x0003012a, + 0x0003012a, + 0x0003012a, + 0x0003012a, + 0x0003012a, + 0x0003012a, + 0x0003012a, + 0x0003012a, + 0x0003012c, + 0x0003012c, + 0x0003012c, + 0x0003012c, + 0x0003012c, + 0x0003012c, + 0x0003012c, + 0x0003012c, + }, + { + 0x0061ffff, + 0x0062ffff, + 0x0063ffff, + 0x0064ffff, + 0x0065ffff, + 0x0066ffff, + 0x0067ffff, + 0x0068ffff, + 0x0069ffff, + 0x006affff, + 0x006bffff, + 0x006cffff, + 0x006dffff, + 0x001bffff, + 0x001affff, + 0x001cffff, + }, + { + 0x00020076, + 0x00020076, + 0x00020076, + 0x00020076, + 0x000200aa, + 0x000200aa, + 0x000200aa, + 0x000200aa, + 0x000200ac, + 0x000200ac, + 0x000200ac, + 0x000200ac, + 0x000200c4, + 0x000200c4, + 0x000200c4, + 0x000200c4, + }, + { + 0x000102d4, + 0x000102d4, + 0x000102d5, + 0x000102d5, + 0x000102d6, + 0x000102d6, + 0x000102d7, + 0x000102d7, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x0002005b, + 0x0002005b, + 0x0002005b, + 0x0002005b, + }, + { + 0x000200e1, + 0x000200e1, + 0x000200e1, + 0x000200e1, + 0x00020113, + 0x00020113, + 0x00020113, + 0x00020113, + 0x00020146, + 0x00020146, + 0x00020146, + 0x00020146, + 0x000202d8, + 0x000202d8, + 0x000202d8, + 0x000202d8, + }, + { + 0x001effff, + 0x001fffff, + 0x0020ffff, + 0x0021ffff, + 0x0022ffff, + 0x0023ffff, + 0x0024ffff, + 0x0027ffff, + 0x0025ffff, + 0x0026ffff, + 0x0028ffff, + 0x0029ffff, + 0x002affff, + 0x002bffff, + 0x002cffff, + 0x002dffff, + }, + { + 0x0001000b, + 0x0001000b, + 0x0001000c, + 0x0001000c, + 0x0001000d, + 0x0001000d, + 0x0001000e, + 0x0001000e, + 0x0001000f, + 0x0001000f, + 0x00010010, + 0x00010010, + 0x00010011, + 0x00010011, + 0x00010012, + 0x00010012, + }, + { + 0x00010013, + 0x00010013, + 0x00010014, + 0x00010014, + 0x00010015, + 0x00010015, + 0x00010016, + 0x00010016, + 0x00010017, + 0x00010017, + 0x00010018, + 0x00010018, + 0x00010019, + 0x00010019, + 0x0001001a, + 0x0001001a, + }, + { + 0x00010026, + 0x00010026, + 0x00010027, + 0x00010027, + 0x00010028, + 0x00010028, + 0x00010029, + 0x00010029, + 0x0001002a, + 0x0001002a, + 0x0001002b, + 0x0001002b, + 0x0001002c, + 0x0001002c, + 0x0001002d, + 0x0001002d, + }, + { + 0x0001002e, + 0x0001002e, + 0x0001002f, + 0x0001002f, + 0x00010030, + 0x00010030, + 0x00010031, + 0x00010031, + 0x00010032, + 0x00010032, + 0x00010033, + 0x00010033, + 0x00010034, + 0x00010034, + 0x00010035, + 0x00010035, + }, + { + 0x00010041, + 0x00010041, + 0x00010042, + 0x00010042, + 0x00010043, + 0x00010043, + 0x00010044, + 0x00010044, + 0x00010045, + 0x00010045, + 0x00010046, + 0x00010046, + 0x00010047, + 0x00010047, + 0x00010048, + 0x00010048, + }, + { + 0x00010049, + 0x00010049, + 0x0001004a, + 0x0001004a, + 0x0001004b, + 0x0001004b, + 0x0001004c, + 0x0001004c, + 0x0001004d, + 0x0001004d, + 0x0001004e, + 0x0001004e, + 0x0001004f, + 0x0001004f, + 0x00010050, + 0x00010050, + }, + { + 0x0001005c, + 0x0001005c, + 0x0001005d, + 0x0001005d, + 0x0001005e, + 0x0001005e, + 0x0001005f, + 0x0001005f, + 0x00010060, + 0x00010060, + 0x00010061, + 0x00010061, + 0x00010062, + 0x00010062, + 0x00010063, + 0x00010063, + }, + { + 0x00010077, + 0x00010077, + 0x00010078, + 0x00010078, + 0x00010079, + 0x00010079, + 0x0001007a, + 0x0001007a, + 0x0001007b, + 0x0001007b, + 0x0001007c, + 0x0001007c, + 0x0001007d, + 0x0001007d, + 0x0001007e, + 0x0001007e, + }, + { + 0x0001007f, + 0x0001007f, + 0x00010080, + 0x00010080, + 0x00010081, + 0x00010081, + 0x00010082, + 0x00010082, + 0x00010083, + 0x00010083, + 0x00010084, + 0x00010084, + 0x00010085, + 0x00010085, + 0x00010086, + 0x00010086, + }, + { + 0x00010064, + 0x00010064, + 0x00010065, + 0x00010065, + 0x00010066, + 0x00010066, + 0x00010067, + 0x00010067, + 0x00010068, + 0x00010068, + 0x00010069, + 0x00010069, + 0x0001006a, + 0x0001006a, + 0x0001006b, + 0x0001006b, + }, + { + 0x00010092, + 0x00010092, + 0x00010093, + 0x00010093, + 0x00010094, + 0x00010094, + 0x00010095, + 0x00010095, + 0x00010096, + 0x00010096, + 0x00010097, + 0x00010097, + 0x00010098, + 0x00010098, + 0x00010099, + 0x00010099, + }, + { + 0x0001009a, + 0x0001009a, + 0x0001009b, + 0x0001009b, + 0x0001009c, + 0x0001009c, + 0x0001009d, + 0x0001009d, + 0x0001009e, + 0x0001009e, + 0x0001009f, + 0x0001009f, + 0x000100a0, + 0x000100a0, + 0x000100a1, + 0x000100a1, + }, + { + 0x000100ad, + 0x000100ad, + 0x000100ae, + 0x000100ae, + 0x000100af, + 0x000100af, + 0x000100b0, + 0x000100b0, + 0x000100b1, + 0x000100b1, + 0x000100b2, + 0x000100b2, + 0x000100b3, + 0x000100b3, + 0x000100b4, + 0x000100b4, + }, + { + 0x000100b5, + 0x000100b5, + 0x000100b6, + 0x000100b6, + 0x000100b7, + 0x000100b7, + 0x000100b8, + 0x000100b8, + 0x000100b9, + 0x000100b9, + 0x000100ba, + 0x000100ba, + 0x000100bb, + 0x000100bb, + 0x000100bc, + 0x000100bc, + }, + { + 0x000100c5, + 0x000100c5, + 0x000100c6, + 0x000100c6, + 0x000100c7, + 0x000100c7, + 0x000100c8, + 0x000100c8, + 0x000100c9, + 0x000100c9, + 0x000100ca, + 0x000100ca, + 0x000100cb, + 0x000100cb, + 0x000100cc, + 0x000100cc, + }, + { + 0x000100cd, + 0x000100cd, + 0x000100ce, + 0x000100ce, + 0x000100cf, + 0x000100cf, + 0x000100d0, + 0x000100d0, + 0x000100d1, + 0x000100d1, + 0x000100d2, + 0x000100d2, + 0x000100d3, + 0x000100d3, + 0x000100d4, + 0x000100d4, + }, + { + 0x002fffff, + 0x0030ffff, + 0x0031ffff, + 0x0032ffff, + 0x0033ffff, + 0x0034ffff, + 0x0035ffff, + 0x0036ffff, + 0x0037ffff, + 0x0038ffff, + 0x0039ffff, + 0x003affff, + 0x003bffff, + 0x003cffff, + 0x003dffff, + 0x003effff, + }, + { + 0x000100d5, + 0x000100d5, + 0x000100d6, + 0x000100d6, + 0x000100d7, + 0x000100d7, + 0x000100df, + 0x000100df, + 0x000100e2, + 0x000100e2, + 0x000100e3, + 0x000100e3, + 0x000100e4, + 0x000100e4, + 0x000100e5, + 0x000100e5, + }, + { + 0x000100e6, + 0x000100e6, + 0x000100e7, + 0x000100e7, + 0x000100e8, + 0x000100e8, + 0x000100e9, + 0x000100e9, + 0x000100ea, + 0x000100ea, + 0x000100eb, + 0x000100eb, + 0x000100ec, + 0x000100ec, + 0x000100ed, + 0x000100ed, + }, + { + 0x000100ee, + 0x000100ee, + 0x000100ef, + 0x000100ef, + 0x000100f0, + 0x000100f0, + 0x000100f1, + 0x000100f1, + 0x000100f2, + 0x000100f2, + 0x000100f9, + 0x000100f9, + 0x000100fb, + 0x000100fb, + 0x000100fc, + 0x000100fc, + }, + { + 0x000100fd, + 0x000100fd, + 0x000100fe, + 0x000100fe, + 0x000100ff, + 0x000100ff, + 0x00010100, + 0x00010100, + 0x00010101, + 0x00010101, + 0x00010102, + 0x00010102, + 0x00010103, + 0x00010103, + 0x00010104, + 0x00010104, + }, + { + 0x00010105, + 0x00010105, + 0x00010106, + 0x00010106, + 0x00010107, + 0x00010107, + 0x00010108, + 0x00010108, + 0x00010109, + 0x00010109, + 0x0001010a, + 0x0001010a, + 0x0001010b, + 0x0001010b, + 0x0001010c, + 0x0001010c, + }, + { + 0x0001010d, + 0x0001010d, + 0x00010110, + 0x00010110, + 0x00010112, + 0x00010112, + 0x00010114, + 0x00010114, + 0x00010115, + 0x00010115, + 0x00010116, + 0x00010116, + 0x00010117, + 0x00010117, + 0x00010118, + 0x00010118, + }, + { + 0x00010119, + 0x00010119, + 0x0001011a, + 0x0001011a, + 0x0001011b, + 0x0001011b, + 0x0001011c, + 0x0001011c, + 0x0001011d, + 0x0001011d, + 0x0001011e, + 0x0001011e, + 0x0001011f, + 0x0001011f, + 0x00010120, + 0x00010120, + }, + { + 0x00010121, + 0x00010121, + 0x00010122, + 0x00010122, + 0x00010123, + 0x00010123, + 0x00010124, + 0x00010124, + 0x00010125, + 0x00010125, + 0x00010126, + 0x00010126, + 0x00010127, + 0x00010127, + 0x00010128, + 0x00010128, + }, + { + 0x00010129, + 0x00010129, + 0x0001012b, + 0x0001012b, + 0x0001012d, + 0x0001012d, + 0x0001012e, + 0x0001012e, + 0x0001012f, + 0x0001012f, + 0x00010130, + 0x00010130, + 0x00010131, + 0x00010131, + 0x00010132, + 0x00010132, + }, + { + 0x00010133, + 0x00010133, + 0x00010134, + 0x00010134, + 0x00010135, + 0x00010135, + 0x00010136, + 0x00010136, + 0x00010137, + 0x00010137, + 0x00010138, + 0x00010138, + 0x00010139, + 0x00010139, + 0x0001013a, + 0x0001013a, + }, + { + 0x0001013b, + 0x0001013b, + 0x0001013c, + 0x0001013c, + 0x0001013d, + 0x0001013d, + 0x0001013e, + 0x0001013e, + 0x0001013f, + 0x0001013f, + 0x00010140, + 0x00010140, + 0x00010141, + 0x00010141, + 0x00010142, + 0x00010142, + }, + { + 0x00010143, + 0x00010143, + 0x00010144, + 0x00010144, + 0x00010145, + 0x00010145, + 0x00010147, + 0x00010147, + 0x00010148, + 0x00010148, + 0x00010149, + 0x00010149, + 0x0001014a, + 0x0001014a, + 0x0001014b, + 0x0001014b, + }, + { + 0x0001014c, + 0x0001014c, + 0x0001014d, + 0x0001014d, + 0x0001014e, + 0x0001014e, + 0x0001014f, + 0x0001014f, + 0x00010150, + 0x00010150, + 0x00010151, + 0x00010151, + 0x00010152, + 0x00010152, + 0x00010153, + 0x00010153, + }, + { + 0x00010154, + 0x00010154, + 0x00010155, + 0x00010155, + 0x00010156, + 0x00010156, + 0x00010157, + 0x00010157, + 0x00010158, + 0x00010158, + 0x00010159, + 0x00010159, + 0x0001015a, + 0x0001015a, + 0x0001015b, + 0x0001015b, + }, + { + 0x0001015c, + 0x0001015c, + 0x0001015d, + 0x0001015d, + 0x0001015e, + 0x0001015e, + 0x0001015f, + 0x0001015f, + 0x00010160, + 0x00010160, + 0x00010161, + 0x00010161, + 0x00010162, + 0x00010162, + 0x00010163, + 0x00010163, + }, + { + 0x00010164, + 0x00010164, + 0x00010165, + 0x00010165, + 0x00010166, + 0x00010166, + 0x00010167, + 0x00010167, + 0x00010168, + 0x00010168, + 0x00010169, + 0x00010169, + 0x0001016a, + 0x0001016a, + 0x0001016b, + 0x0001016b, + }, + { + 0x0040ffff, + 0x0041ffff, + 0x0042ffff, + 0x0043ffff, + 0x0044ffff, + 0x0045ffff, + 0x0046ffff, + 0x0047ffff, + 0x0048ffff, + 0x0049ffff, + 0x004affff, + 0x004bffff, + 0x004cffff, + 0x004dffff, + 0x004effff, + 0x004fffff, + }, + { + 0x0001016c, + 0x0001016c, + 0x0001016d, + 0x0001016d, + 0x0001016e, + 0x0001016e, + 0x0001016f, + 0x0001016f, + 0x00010170, + 0x00010170, + 0x00010171, + 0x00010171, + 0x00010172, + 0x00010172, + 0x00010173, + 0x00010173, + }, + { + 0x00010174, + 0x00010174, + 0x00010175, + 0x00010175, + 0x00010176, + 0x00010176, + 0x00010177, + 0x00010177, + 0x00010178, + 0x00010178, + 0x00010179, + 0x00010179, + 0x0001017a, + 0x0001017a, + 0x0001017b, + 0x0001017b, + }, + { + 0x0001017c, + 0x0001017c, + 0x0001017d, + 0x0001017d, + 0x0001017e, + 0x0001017e, + 0x0001017f, + 0x0001017f, + 0x00010180, + 0x00010180, + 0x00010181, + 0x00010181, + 0x00010182, + 0x00010182, + 0x00010183, + 0x00010183, + }, + { + 0x00010184, + 0x00010184, + 0x00010185, + 0x00010185, + 0x00010186, + 0x00010186, + 0x00010187, + 0x00010187, + 0x00010188, + 0x00010188, + 0x00010189, + 0x00010189, + 0x0001018a, + 0x0001018a, + 0x0001018b, + 0x0001018b, + }, + { + 0x0001018c, + 0x0001018c, + 0x0001018d, + 0x0001018d, + 0x0001018e, + 0x0001018e, + 0x0001018f, + 0x0001018f, + 0x00010190, + 0x00010190, + 0x00010191, + 0x00010191, + 0x00010192, + 0x00010192, + 0x00010193, + 0x00010193, + }, + { + 0x00010194, + 0x00010194, + 0x00010195, + 0x00010195, + 0x00010196, + 0x00010196, + 0x00010197, + 0x00010197, + 0x00010198, + 0x00010198, + 0x00010199, + 0x00010199, + 0x0001019a, + 0x0001019a, + 0x0001019b, + 0x0001019b, + }, + { + 0x0001019c, + 0x0001019c, + 0x0001019d, + 0x0001019d, + 0x0001019e, + 0x0001019e, + 0x0001019f, + 0x0001019f, + 0x000101a0, + 0x000101a0, + 0x000101a1, + 0x000101a1, + 0x000101a2, + 0x000101a2, + 0x000101a3, + 0x000101a3, + }, + { + 0x000101a4, + 0x000101a4, + 0x000101a5, + 0x000101a5, + 0x000101a6, + 0x000101a6, + 0x000101a7, + 0x000101a7, + 0x000101a8, + 0x000101a8, + 0x000101a9, + 0x000101a9, + 0x000101aa, + 0x000101aa, + 0x000101ab, + 0x000101ab, + }, + { + 0x000101ac, + 0x000101ac, + 0x000101ad, + 0x000101ad, + 0x000101ae, + 0x000101ae, + 0x000101af, + 0x000101af, + 0x000101b0, + 0x000101b0, + 0x000101b1, + 0x000101b1, + 0x000101b2, + 0x000101b2, + 0x000101b3, + 0x000101b3, + }, + { + 0x000101b4, + 0x000101b4, + 0x000101b5, + 0x000101b5, + 0x000101b6, + 0x000101b6, + 0x000101b7, + 0x000101b7, + 0x000101b8, + 0x000101b8, + 0x000101b9, + 0x000101b9, + 0x000101ba, + 0x000101ba, + 0x000101bb, + 0x000101bb, + }, + { + 0x000101bc, + 0x000101bc, + 0x000101bd, + 0x000101bd, + 0x000101be, + 0x000101be, + 0x000101bf, + 0x000101bf, + 0x000101c0, + 0x000101c0, + 0x000101c1, + 0x000101c1, + 0x000101c2, + 0x000101c2, + 0x000101c3, + 0x000101c3, + }, + { + 0x000101c4, + 0x000101c4, + 0x000101c5, + 0x000101c5, + 0x000101c6, + 0x000101c6, + 0x000101c7, + 0x000101c7, + 0x000101c8, + 0x000101c8, + 0x000101c9, + 0x000101c9, + 0x000101ca, + 0x000101ca, + 0x000101cb, + 0x000101cb, + }, + { + 0x000101cc, + 0x000101cc, + 0x000101cd, + 0x000101cd, + 0x000101ce, + 0x000101ce, + 0x000101cf, + 0x000101cf, + 0x000101d0, + 0x000101d0, + 0x000101d1, + 0x000101d1, + 0x000101d2, + 0x000101d2, + 0x000101d3, + 0x000101d3, + }, + { + 0x000101d4, + 0x000101d4, + 0x000101d5, + 0x000101d5, + 0x000101d6, + 0x000101d6, + 0x000101d7, + 0x000101d7, + 0x000101d8, + 0x000101d8, + 0x000101d9, + 0x000101d9, + 0x000101da, + 0x000101da, + 0x000101db, + 0x000101db, + }, + { + 0x000101dc, + 0x000101dc, + 0x000101dd, + 0x000101dd, + 0x000101de, + 0x000101de, + 0x000101df, + 0x000101df, + 0x000101e0, + 0x000101e0, + 0x000101e1, + 0x000101e1, + 0x000101e2, + 0x000101e2, + 0x000101e3, + 0x000101e3, + }, + { + 0x000101e4, + 0x000101e4, + 0x000101e5, + 0x000101e5, + 0x000101e6, + 0x000101e6, + 0x000101e7, + 0x000101e7, + 0x000101e8, + 0x000101e8, + 0x000101e9, + 0x000101e9, + 0x000101ea, + 0x000101ea, + 0x000101eb, + 0x000101eb, + }, + { + 0x0051ffff, + 0x0052ffff, + 0x0053ffff, + 0x0054ffff, + 0x0055ffff, + 0x0056ffff, + 0x0057ffff, + 0x0058ffff, + 0x0059ffff, + 0x005affff, + 0x005bffff, + 0x005cffff, + 0x005dffff, + 0x005effff, + 0x005fffff, + 0x0060ffff, + }, + { + 0x000101ec, + 0x000101ec, + 0x000101ed, + 0x000101ed, + 0x000101ee, + 0x000101ee, + 0x000101ef, + 0x000101ef, + 0x000101f0, + 0x000101f0, + 0x000101f1, + 0x000101f1, + 0x000101f2, + 0x000101f2, + 0x000101f3, + 0x000101f3, + }, + { + 0x000101f4, + 0x000101f4, + 0x000101f5, + 0x000101f5, + 0x000101f6, + 0x000101f6, + 0x000101f7, + 0x000101f7, + 0x000101f8, + 0x000101f8, + 0x000101f9, + 0x000101f9, + 0x000101fa, + 0x000101fa, + 0x000101fb, + 0x000101fb, + }, + { + 0x000101fc, + 0x000101fc, + 0x000101fd, + 0x000101fd, + 0x000101fe, + 0x000101fe, + 0x000101ff, + 0x000101ff, + 0x00010200, + 0x00010200, + 0x00010201, + 0x00010201, + 0x00010202, + 0x00010202, + 0x00010203, + 0x00010203, + }, + { + 0x00010204, + 0x00010204, + 0x00010205, + 0x00010205, + 0x00010206, + 0x00010206, + 0x00010207, + 0x00010207, + 0x00010208, + 0x00010208, + 0x00010209, + 0x00010209, + 0x0001020a, + 0x0001020a, + 0x0001020b, + 0x0001020b, + }, + { + 0x0001020c, + 0x0001020c, + 0x0001020d, + 0x0001020d, + 0x0001020e, + 0x0001020e, + 0x0001020f, + 0x0001020f, + 0x00010210, + 0x00010210, + 0x00010211, + 0x00010211, + 0x00010212, + 0x00010212, + 0x00010213, + 0x00010213, + }, + { + 0x00010214, + 0x00010214, + 0x00010215, + 0x00010215, + 0x00010216, + 0x00010216, + 0x00010217, + 0x00010217, + 0x00010218, + 0x00010218, + 0x00010219, + 0x00010219, + 0x0001021a, + 0x0001021a, + 0x0001021b, + 0x0001021b, + }, + { + 0x0001021c, + 0x0001021c, + 0x0001021d, + 0x0001021d, + 0x0001021e, + 0x0001021e, + 0x0001021f, + 0x0001021f, + 0x00010220, + 0x00010220, + 0x00010221, + 0x00010221, + 0x00010222, + 0x00010222, + 0x00010223, + 0x00010223, + }, + { + 0x00010224, + 0x00010224, + 0x00010225, + 0x00010225, + 0x00010226, + 0x00010226, + 0x00010227, + 0x00010227, + 0x00010228, + 0x00010228, + 0x00010229, + 0x00010229, + 0x0001022a, + 0x0001022a, + 0x0001022b, + 0x0001022b, + }, + { + 0x0001022c, + 0x0001022c, + 0x0001022d, + 0x0001022d, + 0x0001022e, + 0x0001022e, + 0x0001022f, + 0x0001022f, + 0x00010230, + 0x00010230, + 0x00010231, + 0x00010231, + 0x00010232, + 0x00010232, + 0x00010233, + 0x00010233, + }, + { + 0x00010234, + 0x00010234, + 0x00010235, + 0x00010235, + 0x00010236, + 0x00010236, + 0x00010237, + 0x00010237, + 0x00010238, + 0x00010238, + 0x00010239, + 0x00010239, + 0x0001023a, + 0x0001023a, + 0x0001023b, + 0x0001023b, + }, + { + 0x0001023c, + 0x0001023c, + 0x0001023d, + 0x0001023d, + 0x0001023e, + 0x0001023e, + 0x0001023f, + 0x0001023f, + 0x00010240, + 0x00010240, + 0x00010241, + 0x00010241, + 0x00010242, + 0x00010242, + 0x00010243, + 0x00010243, + }, + { + 0x00010244, + 0x00010244, + 0x00010245, + 0x00010245, + 0x00010246, + 0x00010246, + 0x00010247, + 0x00010247, + 0x00010248, + 0x00010248, + 0x00010249, + 0x00010249, + 0x0001024a, + 0x0001024a, + 0x0001024b, + 0x0001024b, + }, + { + 0x0001024c, + 0x0001024c, + 0x0001024d, + 0x0001024d, + 0x0001024e, + 0x0001024e, + 0x0001024f, + 0x0001024f, + 0x00010250, + 0x00010250, + 0x00010251, + 0x00010251, + 0x00010252, + 0x00010252, + 0x00010253, + 0x00010253, + }, + { + 0x00010254, + 0x00010254, + 0x00010255, + 0x00010255, + 0x00010256, + 0x00010256, + 0x00010257, + 0x00010257, + 0x00010258, + 0x00010258, + 0x00010259, + 0x00010259, + 0x0001025a, + 0x0001025a, + 0x0001025b, + 0x0001025b, + }, + { + 0x0001025c, + 0x0001025c, + 0x0001025d, + 0x0001025d, + 0x0001025e, + 0x0001025e, + 0x0001025f, + 0x0001025f, + 0x00010260, + 0x00010260, + 0x00010261, + 0x00010261, + 0x00010262, + 0x00010262, + 0x00010263, + 0x00010263, + }, + { + 0x00010264, + 0x00010264, + 0x00010265, + 0x00010265, + 0x00010266, + 0x00010266, + 0x00010267, + 0x00010267, + 0x00010268, + 0x00010268, + 0x00010269, + 0x00010269, + 0x0001026a, + 0x0001026a, + 0x0001026b, + 0x0001026b, + }, + { + 0x0001026c, + 0x0001026c, + 0x0001026d, + 0x0001026d, + 0x0001026e, + 0x0001026e, + 0x0001026f, + 0x0001026f, + 0x00010270, + 0x00010270, + 0x00010271, + 0x00010271, + 0x00010272, + 0x00010272, + 0x00010273, + 0x00010273, + }, + { + 0x00010274, + 0x00010274, + 0x00010275, + 0x00010275, + 0x00010276, + 0x00010276, + 0x00010277, + 0x00010277, + 0x00010278, + 0x00010278, + 0x00010279, + 0x00010279, + 0x0001027a, + 0x0001027a, + 0x0001027b, + 0x0001027b, + }, + { + 0x0001027c, + 0x0001027c, + 0x0001027d, + 0x0001027d, + 0x0001027e, + 0x0001027e, + 0x0001027f, + 0x0001027f, + 0x00010280, + 0x00010280, + 0x00010281, + 0x00010281, + 0x00010282, + 0x00010282, + 0x00010283, + 0x00010283, + }, + { + 0x00010284, + 0x00010284, + 0x00010285, + 0x00010285, + 0x00010286, + 0x00010286, + 0x00010287, + 0x00010287, + 0x00010288, + 0x00010288, + 0x00010289, + 0x00010289, + 0x0001028a, + 0x0001028a, + 0x0001028b, + 0x0001028b, + }, + { + 0x0001028c, + 0x0001028c, + 0x0001028d, + 0x0001028d, + 0x0001028e, + 0x0001028e, + 0x0001028f, + 0x0001028f, + 0x00010290, + 0x00010290, + 0x00010291, + 0x00010291, + 0x00010292, + 0x00010292, + 0x00010293, + 0x00010293, + }, + { + 0x00010294, + 0x00010294, + 0x00010295, + 0x00010295, + 0x00010296, + 0x00010296, + 0x00010297, + 0x00010297, + 0x00010298, + 0x00010298, + 0x00010299, + 0x00010299, + 0x0001029a, + 0x0001029a, + 0x0001029b, + 0x0001029b, + }, + { + 0x0001029c, + 0x0001029c, + 0x0001029d, + 0x0001029d, + 0x0001029e, + 0x0001029e, + 0x0001029f, + 0x0001029f, + 0x000102a0, + 0x000102a0, + 0x000102a1, + 0x000102a1, + 0x000102a2, + 0x000102a2, + 0x000102a3, + 0x000102a3, + }, + { + 0x000102a4, + 0x000102a4, + 0x000102a5, + 0x000102a5, + 0x000102a6, + 0x000102a6, + 0x000102a7, + 0x000102a7, + 0x000102a8, + 0x000102a8, + 0x000102a9, + 0x000102a9, + 0x000102aa, + 0x000102aa, + 0x000102ab, + 0x000102ab, + }, + { + 0x000102ac, + 0x000102ac, + 0x000102ad, + 0x000102ad, + 0x000102ae, + 0x000102ae, + 0x000102af, + 0x000102af, + 0x000102b0, + 0x000102b0, + 0x000102b1, + 0x000102b1, + 0x000102b2, + 0x000102b2, + 0x000102b3, + 0x000102b3, + }, + { + 0x000102b4, + 0x000102b4, + 0x000102b5, + 0x000102b5, + 0x000102b6, + 0x000102b6, + 0x000102b7, + 0x000102b7, + 0x000102b8, + 0x000102b8, + 0x000102b9, + 0x000102b9, + 0x000102ba, + 0x000102ba, + 0x000102bb, + 0x000102bb, + }, + { + 0x000102bc, + 0x000102bc, + 0x000102bd, + 0x000102bd, + 0x000102be, + 0x000102be, + 0x000102bf, + 0x000102bf, + 0x000102c0, + 0x000102c0, + 0x000102c1, + 0x000102c1, + 0x000102c2, + 0x000102c2, + 0x000102c3, + 0x000102c3, + }, + { + 0x000102c4, + 0x000102c4, + 0x000102c5, + 0x000102c5, + 0x000102c6, + 0x000102c6, + 0x000102c7, + 0x000102c7, + 0x000102c8, + 0x000102c8, + 0x000102c9, + 0x000102c9, + 0x000102ca, + 0x000102ca, + 0x000102cb, + 0x000102cb, + }, + { + 0x000102cc, + 0x000102cc, + 0x000102cd, + 0x000102cd, + 0x000102ce, + 0x000102ce, + 0x000102cf, + 0x000102cf, + 0x000102d0, + 0x000102d0, + 0x000102d1, + 0x000102d1, + 0x000102d2, + 0x000102d2, + 0x000102d3, + 0x000102d3, + }, }; #endif @@ -3402,217 +35550,2774 @@ const uint32_t c_aauiCQMFHuffEnc49[729][2] = #else const uint16_t c_aauiCQMFHuffEnc49[729][2] = #endif -{ - {0x0002, 0x0003}, {0x0003, 0x0003}, {0x0005, 0x0007}, {0x0007, 0x000a}, {0x0008, 0x0009}, {0x0008, 0x000a}, {0x0009, 0x0009}, {0x000b, 0x000d}, - {0x000d, 0x0014}, {0x000d, 0x0015}, {0x0010, 0x0052}, {0x0011, 0x0098}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, - {0x0013, 0x0004}, {0x0013, 0x0005}, {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0013, 0x000b}, - {0x0013, 0x000c}, {0x0013, 0x000d}, {0x0013, 0x000e}, {0x0003, 0x0004}, {0x0003, 0x0005}, {0x0005, 0x0008}, {0x0006, 0x000a}, {0x0007, 0x000b}, - {0x0008, 0x000b}, {0x0008, 0x000c}, {0x000a, 0x000a}, {0x000b, 0x000e}, {0x000d, 0x0016}, {0x000f, 0x0031}, {0x0010, 0x0053}, {0x0012, 0x012a}, - {0x0013, 0x000f}, {0x0013, 0x0010}, {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0013, 0x0014}, {0x0013, 0x0015}, {0x0013, 0x0016}, - {0x0013, 0x0017}, {0x0013, 0x0018}, {0x0013, 0x0019}, {0x0013, 0x001a}, {0x0013, 0x001b}, {0x0013, 0x001c}, {0x0005, 0x0009}, {0x0005, 0x000a}, - {0x0005, 0x000b}, {0x0006, 0x000b}, {0x0007, 0x000c}, {0x0008, 0x000d}, {0x0009, 0x000a}, {0x000a, 0x000b}, {0x000c, 0x000f}, {0x000d, 0x0017}, - {0x000f, 0x0032}, {0x0010, 0x0054}, {0x0013, 0x001d}, {0x0013, 0x001e}, {0x0013, 0x001f}, {0x0013, 0x0020}, {0x0013, 0x0021}, {0x0013, 0x0022}, - {0x0013, 0x0023}, {0x0013, 0x0024}, {0x0013, 0x0025}, {0x0013, 0x0026}, {0x0013, 0x0027}, {0x0013, 0x0028}, {0x0013, 0x0029}, {0x0013, 0x002a}, - {0x0013, 0x002b}, {0x0007, 0x000d}, {0x0006, 0x000c}, {0x0006, 0x000d}, {0x0007, 0x000e}, {0x0007, 0x000f}, {0x0008, 0x000e}, {0x0009, 0x000b}, - {0x000b, 0x000f}, {0x000c, 0x0010}, {0x000e, 0x001d}, {0x000f, 0x0033}, {0x0011, 0x0099}, {0x0013, 0x002c}, {0x0013, 0x002d}, {0x0013, 0x002e}, - {0x0013, 0x002f}, {0x0013, 0x0030}, {0x0013, 0x0031}, {0x0013, 0x0032}, {0x0013, 0x0033}, {0x0013, 0x0034}, {0x0013, 0x0035}, {0x0013, 0x0036}, - {0x0013, 0x0037}, {0x0013, 0x0038}, {0x0013, 0x0039}, {0x0013, 0x003a}, {0x0008, 0x000f}, {0x0007, 0x0010}, {0x0007, 0x0011}, {0x0007, 0x0012}, - {0x0008, 0x0010}, {0x0009, 0x000c}, {0x000a, 0x000c}, {0x000c, 0x0011}, {0x000d, 0x0018}, {0x000e, 0x001e}, {0x0011, 0x009a}, {0x0011, 0x009b}, - {0x0013, 0x003b}, {0x0013, 0x003c}, {0x0013, 0x003d}, {0x0013, 0x003e}, {0x0013, 0x003f}, {0x0013, 0x0040}, {0x0013, 0x0041}, {0x0013, 0x0042}, - {0x0013, 0x0043}, {0x0013, 0x0044}, {0x0013, 0x0045}, {0x0013, 0x0046}, {0x0013, 0x0047}, {0x0013, 0x0048}, {0x0013, 0x0049}, {0x0008, 0x0011}, - {0x0007, 0x0013}, {0x0008, 0x0012}, {0x0008, 0x0013}, {0x0009, 0x000d}, {0x000a, 0x000d}, {0x000b, 0x0010}, {0x000c, 0x0012}, {0x000e, 0x001f}, - {0x000e, 0x0020}, {0x0010, 0x0055}, {0x0011, 0x009c}, {0x0013, 0x004a}, {0x0013, 0x004b}, {0x0013, 0x004c}, {0x0013, 0x004d}, {0x0013, 0x004e}, - {0x0013, 0x004f}, {0x0013, 0x0050}, {0x0013, 0x0051}, {0x0013, 0x0052}, {0x0013, 0x0053}, {0x0013, 0x0054}, {0x0013, 0x0055}, {0x0013, 0x0056}, - {0x0013, 0x0057}, {0x0013, 0x0058}, {0x0009, 0x000e}, {0x0009, 0x000f}, {0x0009, 0x0010}, {0x0009, 0x0011}, {0x000a, 0x000e}, {0x000b, 0x0011}, - {0x000c, 0x0013}, {0x000d, 0x0019}, {0x000e, 0x0021}, {0x0010, 0x0056}, {0x0010, 0x0057}, {0x0013, 0x0059}, {0x0013, 0x005a}, {0x0013, 0x005b}, - {0x0013, 0x005c}, {0x0013, 0x005d}, {0x0013, 0x005e}, {0x0013, 0x005f}, {0x0013, 0x0060}, {0x0013, 0x0061}, {0x0013, 0x0062}, {0x0013, 0x0063}, - {0x0013, 0x0064}, {0x0013, 0x0065}, {0x0013, 0x0066}, {0x0013, 0x0067}, {0x0013, 0x0068}, {0x000b, 0x0012}, {0x000a, 0x000f}, {0x000a, 0x0010}, - {0x000a, 0x0011}, {0x000c, 0x0014}, {0x000c, 0x0015}, {0x000d, 0x001a}, {0x000e, 0x0022}, {0x0010, 0x0058}, {0x0010, 0x0059}, {0x0013, 0x0069}, - {0x0013, 0x006a}, {0x0013, 0x006b}, {0x0013, 0x006c}, {0x0013, 0x006d}, {0x0013, 0x006e}, {0x0013, 0x006f}, {0x0013, 0x0070}, {0x0013, 0x0071}, - {0x0013, 0x0072}, {0x0013, 0x0073}, {0x0013, 0x0074}, {0x0013, 0x0075}, {0x0013, 0x0076}, {0x0013, 0x0077}, {0x0013, 0x0078}, {0x0013, 0x0079}, - {0x000c, 0x0016}, {0x000b, 0x0013}, {0x000c, 0x0017}, {0x000c, 0x0018}, {0x000c, 0x0019}, {0x000e, 0x0023}, {0x000e, 0x0024}, {0x000f, 0x0034}, - {0x0010, 0x005a}, {0x0011, 0x009d}, {0x0013, 0x007a}, {0x0013, 0x007b}, {0x0013, 0x007c}, {0x0013, 0x007d}, {0x0013, 0x007e}, {0x0013, 0x007f}, - {0x0013, 0x0080}, {0x0013, 0x0081}, {0x0013, 0x0082}, {0x0013, 0x0083}, {0x0013, 0x0084}, {0x0013, 0x0085}, {0x0013, 0x0086}, {0x0013, 0x0087}, - {0x0013, 0x0088}, {0x0013, 0x0089}, {0x0013, 0x008a}, {0x000e, 0x0025}, {0x000d, 0x001b}, {0x000d, 0x001c}, {0x000d, 0x001d}, {0x000e, 0x0026}, - {0x000f, 0x0035}, {0x0010, 0x005b}, {0x0011, 0x009e}, {0x0011, 0x009f}, {0x0012, 0x012b}, {0x0013, 0x008b}, {0x0013, 0x008c}, {0x0013, 0x008d}, - {0x0013, 0x008e}, {0x0013, 0x008f}, {0x0013, 0x0090}, {0x0013, 0x0091}, {0x0013, 0x0092}, {0x0013, 0x0093}, {0x0013, 0x0094}, {0x0013, 0x0095}, - {0x0013, 0x0096}, {0x0013, 0x0097}, {0x0013, 0x0098}, {0x0013, 0x0099}, {0x0013, 0x009a}, {0x0013, 0x009b}, {0x0010, 0x005c}, {0x000f, 0x0036}, - {0x000e, 0x0027}, {0x000f, 0x0037}, {0x000f, 0x0038}, {0x0010, 0x005d}, {0x0011, 0x00a0}, {0x0013, 0x009c}, {0x0012, 0x012c}, {0x0013, 0x009d}, - {0x0013, 0x009e}, {0x0013, 0x009f}, {0x0013, 0x00a0}, {0x0013, 0x00a1}, {0x0013, 0x00a2}, {0x0013, 0x00a3}, {0x0013, 0x00a4}, {0x0013, 0x00a5}, - {0x0013, 0x00a6}, {0x0013, 0x00a7}, {0x0013, 0x00a8}, {0x0013, 0x00a9}, {0x0013, 0x00aa}, {0x0013, 0x00ab}, {0x0013, 0x00ac}, {0x0013, 0x00ad}, - {0x0013, 0x00ae}, {0x0010, 0x005e}, {0x000f, 0x0039}, {0x0010, 0x005f}, {0x0010, 0x0060}, {0x0011, 0x00a1}, {0x0010, 0x0061}, {0x0013, 0x00af}, - {0x0013, 0x00b0}, {0x0012, 0x012d}, {0x0013, 0x00b1}, {0x0013, 0x00b2}, {0x0013, 0x00b3}, {0x0013, 0x00b4}, {0x0013, 0x00b5}, {0x0013, 0x00b6}, - {0x0013, 0x00b7}, {0x0013, 0x00b8}, {0x0013, 0x00b9}, {0x0013, 0x00ba}, {0x0013, 0x00bb}, {0x0013, 0x00bc}, {0x0013, 0x00bd}, {0x0013, 0x00be}, - {0x0013, 0x00bf}, {0x0013, 0x00c0}, {0x0013, 0x00c1}, {0x0013, 0x00c2}, {0x0012, 0x012e}, {0x0011, 0x00a2}, {0x0011, 0x00a3}, {0x0013, 0x00c3}, - {0x0013, 0x00c4}, {0x0013, 0x00c5}, {0x0013, 0x00c6}, {0x0013, 0x00c7}, {0x0013, 0x00c8}, {0x0013, 0x00c9}, {0x0013, 0x00ca}, {0x0013, 0x00cb}, - {0x0013, 0x00cc}, {0x0013, 0x00cd}, {0x0013, 0x00ce}, {0x0013, 0x00cf}, {0x0013, 0x00d0}, {0x0013, 0x00d1}, {0x0013, 0x00d2}, {0x0013, 0x00d3}, - {0x0013, 0x00d4}, {0x0013, 0x00d5}, {0x0013, 0x00d6}, {0x0013, 0x00d7}, {0x0013, 0x00d8}, {0x0013, 0x00d9}, {0x0013, 0x00da}, {0x0013, 0x00db}, - {0x0013, 0x00dc}, {0x0013, 0x00dd}, {0x0013, 0x00de}, {0x0013, 0x00df}, {0x0012, 0x012f}, {0x0013, 0x00e0}, {0x0013, 0x00e1}, {0x0013, 0x00e2}, - {0x0013, 0x00e3}, {0x0013, 0x00e4}, {0x0013, 0x00e5}, {0x0013, 0x00e6}, {0x0013, 0x00e7}, {0x0013, 0x00e8}, {0x0013, 0x00e9}, {0x0013, 0x00ea}, - {0x0013, 0x00eb}, {0x0013, 0x00ec}, {0x0013, 0x00ed}, {0x0013, 0x00ee}, {0x0013, 0x00ef}, {0x0013, 0x00f0}, {0x0013, 0x00f1}, {0x0013, 0x00f2}, - {0x0013, 0x00f3}, {0x0013, 0x00f4}, {0x0013, 0x00f5}, {0x0013, 0x00f6}, {0x0013, 0x00f7}, {0x0013, 0x00f8}, {0x0013, 0x00f9}, {0x0013, 0x00fa}, - {0x0013, 0x00fb}, {0x0013, 0x00fc}, {0x0013, 0x00fd}, {0x0013, 0x00fe}, {0x0013, 0x00ff}, {0x0013, 0x0100}, {0x0013, 0x0101}, {0x0013, 0x0102}, - {0x0013, 0x0103}, {0x0013, 0x0104}, {0x0013, 0x0105}, {0x0013, 0x0106}, {0x0013, 0x0107}, {0x0013, 0x0108}, {0x0013, 0x0109}, {0x0013, 0x010a}, - {0x0013, 0x010b}, {0x0013, 0x010c}, {0x0013, 0x010d}, {0x0013, 0x010e}, {0x0013, 0x010f}, {0x0013, 0x0110}, {0x0013, 0x0111}, {0x0013, 0x0112}, - {0x0013, 0x0113}, {0x0013, 0x0114}, {0x0013, 0x0115}, {0x0013, 0x0116}, {0x0013, 0x0117}, {0x0013, 0x0118}, {0x0013, 0x0119}, {0x0013, 0x011a}, - {0x0013, 0x011b}, {0x0013, 0x011c}, {0x0013, 0x011d}, {0x0013, 0x011e}, {0x0013, 0x011f}, {0x0013, 0x0120}, {0x0013, 0x0121}, {0x0013, 0x0122}, - {0x0013, 0x0123}, {0x0013, 0x0124}, {0x0013, 0x0125}, {0x0013, 0x0126}, {0x0013, 0x0127}, {0x0013, 0x0128}, {0x0013, 0x0129}, {0x0013, 0x012a}, - {0x0013, 0x012b}, {0x0013, 0x012c}, {0x0013, 0x012d}, {0x0013, 0x012e}, {0x0013, 0x012f}, {0x0013, 0x0130}, {0x0013, 0x0131}, {0x0013, 0x0132}, - {0x0013, 0x0133}, {0x0013, 0x0134}, {0x0013, 0x0135}, {0x0013, 0x0136}, {0x0013, 0x0137}, {0x0013, 0x0138}, {0x0013, 0x0139}, {0x0013, 0x013a}, - {0x0013, 0x013b}, {0x0013, 0x013c}, {0x0013, 0x013d}, {0x0013, 0x013e}, {0x0013, 0x013f}, {0x0013, 0x0140}, {0x0013, 0x0141}, {0x0013, 0x0142}, - {0x0013, 0x0143}, {0x0013, 0x0144}, {0x0013, 0x0145}, {0x0013, 0x0146}, {0x0013, 0x0147}, {0x0013, 0x0148}, {0x0013, 0x0149}, {0x0013, 0x014a}, - {0x0013, 0x014b}, {0x0013, 0x014c}, {0x0013, 0x014d}, {0x0013, 0x014e}, {0x0013, 0x014f}, {0x0013, 0x0150}, {0x0013, 0x0151}, {0x0013, 0x0152}, - {0x0013, 0x0153}, {0x0013, 0x0154}, {0x0013, 0x0155}, {0x0013, 0x0156}, {0x0013, 0x0157}, {0x0013, 0x0158}, {0x0013, 0x0159}, {0x0013, 0x015a}, - {0x0013, 0x015b}, {0x0013, 0x015c}, {0x0013, 0x015d}, {0x0013, 0x015e}, {0x0013, 0x015f}, {0x0013, 0x0160}, {0x0013, 0x0161}, {0x0013, 0x0162}, - {0x0013, 0x0163}, {0x0013, 0x0164}, {0x0013, 0x0165}, {0x0013, 0x0166}, {0x0013, 0x0167}, {0x0013, 0x0168}, {0x0013, 0x0169}, {0x0013, 0x016a}, - {0x0013, 0x016b}, {0x0013, 0x016c}, {0x0013, 0x016d}, {0x0013, 0x016e}, {0x0013, 0x016f}, {0x0013, 0x0170}, {0x0013, 0x0171}, {0x0013, 0x0172}, - {0x0013, 0x0173}, {0x0013, 0x0174}, {0x0013, 0x0175}, {0x0013, 0x0176}, {0x0013, 0x0177}, {0x0013, 0x0178}, {0x0013, 0x0179}, {0x0013, 0x017a}, - {0x0013, 0x017b}, {0x0013, 0x017c}, {0x0013, 0x017d}, {0x0013, 0x017e}, {0x0013, 0x017f}, {0x0013, 0x0180}, {0x0013, 0x0181}, {0x0013, 0x0182}, - {0x0013, 0x0183}, {0x0013, 0x0184}, {0x0013, 0x0185}, {0x0013, 0x0186}, {0x0013, 0x0187}, {0x0013, 0x0188}, {0x0013, 0x0189}, {0x0013, 0x018a}, - {0x0013, 0x018b}, {0x0013, 0x018c}, {0x0013, 0x018d}, {0x0013, 0x018e}, {0x0013, 0x018f}, {0x0013, 0x0190}, {0x0013, 0x0191}, {0x0013, 0x0192}, - {0x0013, 0x0193}, {0x0013, 0x0194}, {0x0013, 0x0195}, {0x0013, 0x0196}, {0x0013, 0x0197}, {0x0013, 0x0198}, {0x0013, 0x0199}, {0x0013, 0x019a}, - {0x0013, 0x019b}, {0x0013, 0x019c}, {0x0013, 0x019d}, {0x0013, 0x019e}, {0x0013, 0x019f}, {0x0013, 0x01a0}, {0x0013, 0x01a1}, {0x0013, 0x01a2}, - {0x0013, 0x01a3}, {0x0013, 0x01a4}, {0x0013, 0x01a5}, {0x0013, 0x01a6}, {0x0013, 0x01a7}, {0x0013, 0x01a8}, {0x0013, 0x01a9}, {0x0013, 0x01aa}, - {0x0013, 0x01ab}, {0x0013, 0x01ac}, {0x0013, 0x01ad}, {0x0013, 0x01ae}, {0x0013, 0x01af}, {0x0013, 0x01b0}, {0x0013, 0x01b1}, {0x0013, 0x01b2}, - {0x0013, 0x01b3}, {0x0013, 0x01b4}, {0x0013, 0x01b5}, {0x0013, 0x01b6}, {0x0013, 0x01b7}, {0x0013, 0x01b8}, {0x0013, 0x01b9}, {0x0013, 0x01ba}, - {0x0013, 0x01bb}, {0x0013, 0x01bc}, {0x0013, 0x01bd}, {0x0013, 0x01be}, {0x0013, 0x01bf}, {0x0013, 0x01c0}, {0x0013, 0x01c1}, {0x0013, 0x01c2}, - {0x0013, 0x01c3}, {0x0013, 0x01c4}, {0x0013, 0x01c5}, {0x0013, 0x01c6}, {0x0013, 0x01c7}, {0x0013, 0x01c8}, {0x0013, 0x01c9}, {0x0013, 0x01ca}, - {0x0013, 0x01cb}, {0x0013, 0x01cc}, {0x0013, 0x01cd}, {0x0013, 0x01ce}, {0x0013, 0x01cf}, {0x0013, 0x01d0}, {0x0013, 0x01d1}, {0x0013, 0x01d2}, - {0x0013, 0x01d3}, {0x0013, 0x01d4}, {0x0013, 0x01d5}, {0x0013, 0x01d6}, {0x0013, 0x01d7}, {0x0013, 0x01d8}, {0x0013, 0x01d9}, {0x0013, 0x01da}, - {0x0013, 0x01db}, {0x0013, 0x01dc}, {0x0013, 0x01dd}, {0x0013, 0x01de}, {0x0013, 0x01df}, {0x0013, 0x01e0}, {0x0013, 0x01e1}, {0x0013, 0x01e2}, - {0x0013, 0x01e3}, {0x0013, 0x01e4}, {0x0013, 0x01e5}, {0x0013, 0x01e6}, {0x0013, 0x01e7}, {0x0013, 0x01e8}, {0x0013, 0x01e9}, {0x0013, 0x01ea}, - {0x0013, 0x01eb}, {0x0013, 0x01ec}, {0x0013, 0x01ed}, {0x0013, 0x01ee}, {0x0013, 0x01ef}, {0x0013, 0x01f0}, {0x0013, 0x01f1}, {0x0013, 0x01f2}, - {0x0013, 0x01f3}, {0x0013, 0x01f4}, {0x0013, 0x01f5}, {0x0013, 0x01f6}, {0x0013, 0x01f7}, {0x0013, 0x01f8}, {0x0013, 0x01f9}, {0x0013, 0x01fa}, - {0x0013, 0x01fb}, {0x0013, 0x01fc}, {0x0013, 0x01fd}, {0x0013, 0x01fe}, {0x0013, 0x01ff}, {0x0013, 0x0200}, {0x0013, 0x0201}, {0x0013, 0x0202}, - {0x0013, 0x0203}, {0x0013, 0x0204}, {0x0013, 0x0205}, {0x0013, 0x0206}, {0x0013, 0x0207}, {0x0013, 0x0208}, {0x0013, 0x0209}, {0x0013, 0x020a}, - {0x0013, 0x020b}, {0x0013, 0x020c}, {0x0013, 0x020d}, {0x0013, 0x020e}, {0x0013, 0x020f}, {0x0013, 0x0210}, {0x0013, 0x0211}, {0x0013, 0x0212}, - {0x0013, 0x0213}, {0x0013, 0x0214}, {0x0013, 0x0215}, {0x0013, 0x0216}, {0x0013, 0x0217}, {0x0013, 0x0218}, {0x0013, 0x0219}, {0x0013, 0x021a}, - {0x0013, 0x021b}, {0x0013, 0x021c}, {0x0013, 0x021d}, {0x0013, 0x021e}, {0x0013, 0x021f}, {0x0013, 0x0220}, {0x0013, 0x0221}, {0x0013, 0x0222}, - {0x0013, 0x0223}, {0x0013, 0x0224}, {0x0013, 0x0225}, {0x0013, 0x0226}, {0x0013, 0x0227}, {0x0013, 0x0228}, {0x0013, 0x0229}, {0x0013, 0x022a}, - {0x0013, 0x022b}, {0x0013, 0x022c}, {0x0013, 0x022d}, {0x0013, 0x022e}, {0x0013, 0x022f}, {0x0013, 0x0230}, {0x0013, 0x0231}, {0x0013, 0x0232}, - {0x0013, 0x0233}, {0x0013, 0x0234}, {0x0013, 0x0235}, {0x0013, 0x0236}, {0x0013, 0x0237}, {0x0013, 0x0238}, {0x0013, 0x0239}, {0x0013, 0x023a}, - {0x0013, 0x023b}, {0x0013, 0x023c}, {0x0013, 0x023d}, {0x0013, 0x023e}, {0x0013, 0x023f}, {0x0013, 0x0240}, {0x0013, 0x0241}, {0x0013, 0x0242}, - {0x0013, 0x0243}, {0x0013, 0x0244}, {0x0013, 0x0245}, {0x0013, 0x0246}, {0x0013, 0x0247}, {0x0013, 0x0248}, {0x0013, 0x0249}, {0x0013, 0x024a}, - {0x0013, 0x024b}, {0x0013, 0x024c}, {0x0013, 0x024d}, {0x0013, 0x024e}, {0x0013, 0x024f}, {0x0013, 0x0250}, {0x0013, 0x0251}, {0x0013, 0x0252}, - {0x0013, 0x0253}, + { + { 0x0002, 0x0003 }, + { 0x0003, 0x0003 }, + { 0x0005, 0x0007 }, + { 0x0007, 0x000a }, + { 0x0008, 0x0009 }, + { 0x0008, 0x000a }, + { 0x0009, 0x0009 }, + { 0x000b, 0x000d }, + { 0x000d, 0x0014 }, + { 0x000d, 0x0015 }, + { 0x0010, 0x0052 }, + { 0x0011, 0x0098 }, + { 0x0013, 0x0000 }, + { 0x0013, 0x0001 }, + { 0x0013, 0x0002 }, + { 0x0013, 0x0003 }, + { 0x0013, 0x0004 }, + { 0x0013, 0x0005 }, + { 0x0013, 0x0006 }, + { 0x0013, 0x0007 }, + { 0x0013, 0x0008 }, + { 0x0013, 0x0009 }, + { 0x0013, 0x000a }, + { 0x0013, 0x000b }, + { 0x0013, 0x000c }, + { 0x0013, 0x000d }, + { 0x0013, 0x000e }, + { 0x0003, 0x0004 }, + { 0x0003, 0x0005 }, + { 0x0005, 0x0008 }, + { 0x0006, 0x000a }, + { 0x0007, 0x000b }, + { 0x0008, 0x000b }, + { 0x0008, 0x000c }, + { 0x000a, 0x000a }, + { 0x000b, 0x000e }, + { 0x000d, 0x0016 }, + { 0x000f, 0x0031 }, + { 0x0010, 0x0053 }, + { 0x0012, 0x012a }, + { 0x0013, 0x000f }, + { 0x0013, 0x0010 }, + { 0x0013, 0x0011 }, + { 0x0013, 0x0012 }, + { 0x0013, 0x0013 }, + { 0x0013, 0x0014 }, + { 0x0013, 0x0015 }, + { 0x0013, 0x0016 }, + { 0x0013, 0x0017 }, + { 0x0013, 0x0018 }, + { 0x0013, 0x0019 }, + { 0x0013, 0x001a }, + { 0x0013, 0x001b }, + { 0x0013, 0x001c }, + { 0x0005, 0x0009 }, + { 0x0005, 0x000a }, + { 0x0005, 0x000b }, + { 0x0006, 0x000b }, + { 0x0007, 0x000c }, + { 0x0008, 0x000d }, + { 0x0009, 0x000a }, + { 0x000a, 0x000b }, + { 0x000c, 0x000f }, + { 0x000d, 0x0017 }, + { 0x000f, 0x0032 }, + { 0x0010, 0x0054 }, + { 0x0013, 0x001d }, + { 0x0013, 0x001e }, + { 0x0013, 0x001f }, + { 0x0013, 0x0020 }, + { 0x0013, 0x0021 }, + { 0x0013, 0x0022 }, + { 0x0013, 0x0023 }, + { 0x0013, 0x0024 }, + { 0x0013, 0x0025 }, + { 0x0013, 0x0026 }, + { 0x0013, 0x0027 }, + { 0x0013, 0x0028 }, + { 0x0013, 0x0029 }, + { 0x0013, 0x002a }, + { 0x0013, 0x002b }, + { 0x0007, 0x000d }, + { 0x0006, 0x000c }, + { 0x0006, 0x000d }, + { 0x0007, 0x000e }, + { 0x0007, 0x000f }, + { 0x0008, 0x000e }, + { 0x0009, 0x000b }, + { 0x000b, 0x000f }, + { 0x000c, 0x0010 }, + { 0x000e, 0x001d }, + { 0x000f, 0x0033 }, + { 0x0011, 0x0099 }, + { 0x0013, 0x002c }, + { 0x0013, 0x002d }, + { 0x0013, 0x002e }, + { 0x0013, 0x002f }, + { 0x0013, 0x0030 }, + { 0x0013, 0x0031 }, + { 0x0013, 0x0032 }, + { 0x0013, 0x0033 }, + { 0x0013, 0x0034 }, + { 0x0013, 0x0035 }, + { 0x0013, 0x0036 }, + { 0x0013, 0x0037 }, + { 0x0013, 0x0038 }, + { 0x0013, 0x0039 }, + { 0x0013, 0x003a }, + { 0x0008, 0x000f }, + { 0x0007, 0x0010 }, + { 0x0007, 0x0011 }, + { 0x0007, 0x0012 }, + { 0x0008, 0x0010 }, + { 0x0009, 0x000c }, + { 0x000a, 0x000c }, + { 0x000c, 0x0011 }, + { 0x000d, 0x0018 }, + { 0x000e, 0x001e }, + { 0x0011, 0x009a }, + { 0x0011, 0x009b }, + { 0x0013, 0x003b }, + { 0x0013, 0x003c }, + { 0x0013, 0x003d }, + { 0x0013, 0x003e }, + { 0x0013, 0x003f }, + { 0x0013, 0x0040 }, + { 0x0013, 0x0041 }, + { 0x0013, 0x0042 }, + { 0x0013, 0x0043 }, + { 0x0013, 0x0044 }, + { 0x0013, 0x0045 }, + { 0x0013, 0x0046 }, + { 0x0013, 0x0047 }, + { 0x0013, 0x0048 }, + { 0x0013, 0x0049 }, + { 0x0008, 0x0011 }, + { 0x0007, 0x0013 }, + { 0x0008, 0x0012 }, + { 0x0008, 0x0013 }, + { 0x0009, 0x000d }, + { 0x000a, 0x000d }, + { 0x000b, 0x0010 }, + { 0x000c, 0x0012 }, + { 0x000e, 0x001f }, + { 0x000e, 0x0020 }, + { 0x0010, 0x0055 }, + { 0x0011, 0x009c }, + { 0x0013, 0x004a }, + { 0x0013, 0x004b }, + { 0x0013, 0x004c }, + { 0x0013, 0x004d }, + { 0x0013, 0x004e }, + { 0x0013, 0x004f }, + { 0x0013, 0x0050 }, + { 0x0013, 0x0051 }, + { 0x0013, 0x0052 }, + { 0x0013, 0x0053 }, + { 0x0013, 0x0054 }, + { 0x0013, 0x0055 }, + { 0x0013, 0x0056 }, + { 0x0013, 0x0057 }, + { 0x0013, 0x0058 }, + { 0x0009, 0x000e }, + { 0x0009, 0x000f }, + { 0x0009, 0x0010 }, + { 0x0009, 0x0011 }, + { 0x000a, 0x000e }, + { 0x000b, 0x0011 }, + { 0x000c, 0x0013 }, + { 0x000d, 0x0019 }, + { 0x000e, 0x0021 }, + { 0x0010, 0x0056 }, + { 0x0010, 0x0057 }, + { 0x0013, 0x0059 }, + { 0x0013, 0x005a }, + { 0x0013, 0x005b }, + { 0x0013, 0x005c }, + { 0x0013, 0x005d }, + { 0x0013, 0x005e }, + { 0x0013, 0x005f }, + { 0x0013, 0x0060 }, + { 0x0013, 0x0061 }, + { 0x0013, 0x0062 }, + { 0x0013, 0x0063 }, + { 0x0013, 0x0064 }, + { 0x0013, 0x0065 }, + { 0x0013, 0x0066 }, + { 0x0013, 0x0067 }, + { 0x0013, 0x0068 }, + { 0x000b, 0x0012 }, + { 0x000a, 0x000f }, + { 0x000a, 0x0010 }, + { 0x000a, 0x0011 }, + { 0x000c, 0x0014 }, + { 0x000c, 0x0015 }, + { 0x000d, 0x001a }, + { 0x000e, 0x0022 }, + { 0x0010, 0x0058 }, + { 0x0010, 0x0059 }, + { 0x0013, 0x0069 }, + { 0x0013, 0x006a }, + { 0x0013, 0x006b }, + { 0x0013, 0x006c }, + { 0x0013, 0x006d }, + { 0x0013, 0x006e }, + { 0x0013, 0x006f }, + { 0x0013, 0x0070 }, + { 0x0013, 0x0071 }, + { 0x0013, 0x0072 }, + { 0x0013, 0x0073 }, + { 0x0013, 0x0074 }, + { 0x0013, 0x0075 }, + { 0x0013, 0x0076 }, + { 0x0013, 0x0077 }, + { 0x0013, 0x0078 }, + { 0x0013, 0x0079 }, + { 0x000c, 0x0016 }, + { 0x000b, 0x0013 }, + { 0x000c, 0x0017 }, + { 0x000c, 0x0018 }, + { 0x000c, 0x0019 }, + { 0x000e, 0x0023 }, + { 0x000e, 0x0024 }, + { 0x000f, 0x0034 }, + { 0x0010, 0x005a }, + { 0x0011, 0x009d }, + { 0x0013, 0x007a }, + { 0x0013, 0x007b }, + { 0x0013, 0x007c }, + { 0x0013, 0x007d }, + { 0x0013, 0x007e }, + { 0x0013, 0x007f }, + { 0x0013, 0x0080 }, + { 0x0013, 0x0081 }, + { 0x0013, 0x0082 }, + { 0x0013, 0x0083 }, + { 0x0013, 0x0084 }, + { 0x0013, 0x0085 }, + { 0x0013, 0x0086 }, + { 0x0013, 0x0087 }, + { 0x0013, 0x0088 }, + { 0x0013, 0x0089 }, + { 0x0013, 0x008a }, + { 0x000e, 0x0025 }, + { 0x000d, 0x001b }, + { 0x000d, 0x001c }, + { 0x000d, 0x001d }, + { 0x000e, 0x0026 }, + { 0x000f, 0x0035 }, + { 0x0010, 0x005b }, + { 0x0011, 0x009e }, + { 0x0011, 0x009f }, + { 0x0012, 0x012b }, + { 0x0013, 0x008b }, + { 0x0013, 0x008c }, + { 0x0013, 0x008d }, + { 0x0013, 0x008e }, + { 0x0013, 0x008f }, + { 0x0013, 0x0090 }, + { 0x0013, 0x0091 }, + { 0x0013, 0x0092 }, + { 0x0013, 0x0093 }, + { 0x0013, 0x0094 }, + { 0x0013, 0x0095 }, + { 0x0013, 0x0096 }, + { 0x0013, 0x0097 }, + { 0x0013, 0x0098 }, + { 0x0013, 0x0099 }, + { 0x0013, 0x009a }, + { 0x0013, 0x009b }, + { 0x0010, 0x005c }, + { 0x000f, 0x0036 }, + { 0x000e, 0x0027 }, + { 0x000f, 0x0037 }, + { 0x000f, 0x0038 }, + { 0x0010, 0x005d }, + { 0x0011, 0x00a0 }, + { 0x0013, 0x009c }, + { 0x0012, 0x012c }, + { 0x0013, 0x009d }, + { 0x0013, 0x009e }, + { 0x0013, 0x009f }, + { 0x0013, 0x00a0 }, + { 0x0013, 0x00a1 }, + { 0x0013, 0x00a2 }, + { 0x0013, 0x00a3 }, + { 0x0013, 0x00a4 }, + { 0x0013, 0x00a5 }, + { 0x0013, 0x00a6 }, + { 0x0013, 0x00a7 }, + { 0x0013, 0x00a8 }, + { 0x0013, 0x00a9 }, + { 0x0013, 0x00aa }, + { 0x0013, 0x00ab }, + { 0x0013, 0x00ac }, + { 0x0013, 0x00ad }, + { 0x0013, 0x00ae }, + { 0x0010, 0x005e }, + { 0x000f, 0x0039 }, + { 0x0010, 0x005f }, + { 0x0010, 0x0060 }, + { 0x0011, 0x00a1 }, + { 0x0010, 0x0061 }, + { 0x0013, 0x00af }, + { 0x0013, 0x00b0 }, + { 0x0012, 0x012d }, + { 0x0013, 0x00b1 }, + { 0x0013, 0x00b2 }, + { 0x0013, 0x00b3 }, + { 0x0013, 0x00b4 }, + { 0x0013, 0x00b5 }, + { 0x0013, 0x00b6 }, + { 0x0013, 0x00b7 }, + { 0x0013, 0x00b8 }, + { 0x0013, 0x00b9 }, + { 0x0013, 0x00ba }, + { 0x0013, 0x00bb }, + { 0x0013, 0x00bc }, + { 0x0013, 0x00bd }, + { 0x0013, 0x00be }, + { 0x0013, 0x00bf }, + { 0x0013, 0x00c0 }, + { 0x0013, 0x00c1 }, + { 0x0013, 0x00c2 }, + { 0x0012, 0x012e }, + { 0x0011, 0x00a2 }, + { 0x0011, 0x00a3 }, + { 0x0013, 0x00c3 }, + { 0x0013, 0x00c4 }, + { 0x0013, 0x00c5 }, + { 0x0013, 0x00c6 }, + { 0x0013, 0x00c7 }, + { 0x0013, 0x00c8 }, + { 0x0013, 0x00c9 }, + { 0x0013, 0x00ca }, + { 0x0013, 0x00cb }, + { 0x0013, 0x00cc }, + { 0x0013, 0x00cd }, + { 0x0013, 0x00ce }, + { 0x0013, 0x00cf }, + { 0x0013, 0x00d0 }, + { 0x0013, 0x00d1 }, + { 0x0013, 0x00d2 }, + { 0x0013, 0x00d3 }, + { 0x0013, 0x00d4 }, + { 0x0013, 0x00d5 }, + { 0x0013, 0x00d6 }, + { 0x0013, 0x00d7 }, + { 0x0013, 0x00d8 }, + { 0x0013, 0x00d9 }, + { 0x0013, 0x00da }, + { 0x0013, 0x00db }, + { 0x0013, 0x00dc }, + { 0x0013, 0x00dd }, + { 0x0013, 0x00de }, + { 0x0013, 0x00df }, + { 0x0012, 0x012f }, + { 0x0013, 0x00e0 }, + { 0x0013, 0x00e1 }, + { 0x0013, 0x00e2 }, + { 0x0013, 0x00e3 }, + { 0x0013, 0x00e4 }, + { 0x0013, 0x00e5 }, + { 0x0013, 0x00e6 }, + { 0x0013, 0x00e7 }, + { 0x0013, 0x00e8 }, + { 0x0013, 0x00e9 }, + { 0x0013, 0x00ea }, + { 0x0013, 0x00eb }, + { 0x0013, 0x00ec }, + { 0x0013, 0x00ed }, + { 0x0013, 0x00ee }, + { 0x0013, 0x00ef }, + { 0x0013, 0x00f0 }, + { 0x0013, 0x00f1 }, + { 0x0013, 0x00f2 }, + { 0x0013, 0x00f3 }, + { 0x0013, 0x00f4 }, + { 0x0013, 0x00f5 }, + { 0x0013, 0x00f6 }, + { 0x0013, 0x00f7 }, + { 0x0013, 0x00f8 }, + { 0x0013, 0x00f9 }, + { 0x0013, 0x00fa }, + { 0x0013, 0x00fb }, + { 0x0013, 0x00fc }, + { 0x0013, 0x00fd }, + { 0x0013, 0x00fe }, + { 0x0013, 0x00ff }, + { 0x0013, 0x0100 }, + { 0x0013, 0x0101 }, + { 0x0013, 0x0102 }, + { 0x0013, 0x0103 }, + { 0x0013, 0x0104 }, + { 0x0013, 0x0105 }, + { 0x0013, 0x0106 }, + { 0x0013, 0x0107 }, + { 0x0013, 0x0108 }, + { 0x0013, 0x0109 }, + { 0x0013, 0x010a }, + { 0x0013, 0x010b }, + { 0x0013, 0x010c }, + { 0x0013, 0x010d }, + { 0x0013, 0x010e }, + { 0x0013, 0x010f }, + { 0x0013, 0x0110 }, + { 0x0013, 0x0111 }, + { 0x0013, 0x0112 }, + { 0x0013, 0x0113 }, + { 0x0013, 0x0114 }, + { 0x0013, 0x0115 }, + { 0x0013, 0x0116 }, + { 0x0013, 0x0117 }, + { 0x0013, 0x0118 }, + { 0x0013, 0x0119 }, + { 0x0013, 0x011a }, + { 0x0013, 0x011b }, + { 0x0013, 0x011c }, + { 0x0013, 0x011d }, + { 0x0013, 0x011e }, + { 0x0013, 0x011f }, + { 0x0013, 0x0120 }, + { 0x0013, 0x0121 }, + { 0x0013, 0x0122 }, + { 0x0013, 0x0123 }, + { 0x0013, 0x0124 }, + { 0x0013, 0x0125 }, + { 0x0013, 0x0126 }, + { 0x0013, 0x0127 }, + { 0x0013, 0x0128 }, + { 0x0013, 0x0129 }, + { 0x0013, 0x012a }, + { 0x0013, 0x012b }, + { 0x0013, 0x012c }, + { 0x0013, 0x012d }, + { 0x0013, 0x012e }, + { 0x0013, 0x012f }, + { 0x0013, 0x0130 }, + { 0x0013, 0x0131 }, + { 0x0013, 0x0132 }, + { 0x0013, 0x0133 }, + { 0x0013, 0x0134 }, + { 0x0013, 0x0135 }, + { 0x0013, 0x0136 }, + { 0x0013, 0x0137 }, + { 0x0013, 0x0138 }, + { 0x0013, 0x0139 }, + { 0x0013, 0x013a }, + { 0x0013, 0x013b }, + { 0x0013, 0x013c }, + { 0x0013, 0x013d }, + { 0x0013, 0x013e }, + { 0x0013, 0x013f }, + { 0x0013, 0x0140 }, + { 0x0013, 0x0141 }, + { 0x0013, 0x0142 }, + { 0x0013, 0x0143 }, + { 0x0013, 0x0144 }, + { 0x0013, 0x0145 }, + { 0x0013, 0x0146 }, + { 0x0013, 0x0147 }, + { 0x0013, 0x0148 }, + { 0x0013, 0x0149 }, + { 0x0013, 0x014a }, + { 0x0013, 0x014b }, + { 0x0013, 0x014c }, + { 0x0013, 0x014d }, + { 0x0013, 0x014e }, + { 0x0013, 0x014f }, + { 0x0013, 0x0150 }, + { 0x0013, 0x0151 }, + { 0x0013, 0x0152 }, + { 0x0013, 0x0153 }, + { 0x0013, 0x0154 }, + { 0x0013, 0x0155 }, + { 0x0013, 0x0156 }, + { 0x0013, 0x0157 }, + { 0x0013, 0x0158 }, + { 0x0013, 0x0159 }, + { 0x0013, 0x015a }, + { 0x0013, 0x015b }, + { 0x0013, 0x015c }, + { 0x0013, 0x015d }, + { 0x0013, 0x015e }, + { 0x0013, 0x015f }, + { 0x0013, 0x0160 }, + { 0x0013, 0x0161 }, + { 0x0013, 0x0162 }, + { 0x0013, 0x0163 }, + { 0x0013, 0x0164 }, + { 0x0013, 0x0165 }, + { 0x0013, 0x0166 }, + { 0x0013, 0x0167 }, + { 0x0013, 0x0168 }, + { 0x0013, 0x0169 }, + { 0x0013, 0x016a }, + { 0x0013, 0x016b }, + { 0x0013, 0x016c }, + { 0x0013, 0x016d }, + { 0x0013, 0x016e }, + { 0x0013, 0x016f }, + { 0x0013, 0x0170 }, + { 0x0013, 0x0171 }, + { 0x0013, 0x0172 }, + { 0x0013, 0x0173 }, + { 0x0013, 0x0174 }, + { 0x0013, 0x0175 }, + { 0x0013, 0x0176 }, + { 0x0013, 0x0177 }, + { 0x0013, 0x0178 }, + { 0x0013, 0x0179 }, + { 0x0013, 0x017a }, + { 0x0013, 0x017b }, + { 0x0013, 0x017c }, + { 0x0013, 0x017d }, + { 0x0013, 0x017e }, + { 0x0013, 0x017f }, + { 0x0013, 0x0180 }, + { 0x0013, 0x0181 }, + { 0x0013, 0x0182 }, + { 0x0013, 0x0183 }, + { 0x0013, 0x0184 }, + { 0x0013, 0x0185 }, + { 0x0013, 0x0186 }, + { 0x0013, 0x0187 }, + { 0x0013, 0x0188 }, + { 0x0013, 0x0189 }, + { 0x0013, 0x018a }, + { 0x0013, 0x018b }, + { 0x0013, 0x018c }, + { 0x0013, 0x018d }, + { 0x0013, 0x018e }, + { 0x0013, 0x018f }, + { 0x0013, 0x0190 }, + { 0x0013, 0x0191 }, + { 0x0013, 0x0192 }, + { 0x0013, 0x0193 }, + { 0x0013, 0x0194 }, + { 0x0013, 0x0195 }, + { 0x0013, 0x0196 }, + { 0x0013, 0x0197 }, + { 0x0013, 0x0198 }, + { 0x0013, 0x0199 }, + { 0x0013, 0x019a }, + { 0x0013, 0x019b }, + { 0x0013, 0x019c }, + { 0x0013, 0x019d }, + { 0x0013, 0x019e }, + { 0x0013, 0x019f }, + { 0x0013, 0x01a0 }, + { 0x0013, 0x01a1 }, + { 0x0013, 0x01a2 }, + { 0x0013, 0x01a3 }, + { 0x0013, 0x01a4 }, + { 0x0013, 0x01a5 }, + { 0x0013, 0x01a6 }, + { 0x0013, 0x01a7 }, + { 0x0013, 0x01a8 }, + { 0x0013, 0x01a9 }, + { 0x0013, 0x01aa }, + { 0x0013, 0x01ab }, + { 0x0013, 0x01ac }, + { 0x0013, 0x01ad }, + { 0x0013, 0x01ae }, + { 0x0013, 0x01af }, + { 0x0013, 0x01b0 }, + { 0x0013, 0x01b1 }, + { 0x0013, 0x01b2 }, + { 0x0013, 0x01b3 }, + { 0x0013, 0x01b4 }, + { 0x0013, 0x01b5 }, + { 0x0013, 0x01b6 }, + { 0x0013, 0x01b7 }, + { 0x0013, 0x01b8 }, + { 0x0013, 0x01b9 }, + { 0x0013, 0x01ba }, + { 0x0013, 0x01bb }, + { 0x0013, 0x01bc }, + { 0x0013, 0x01bd }, + { 0x0013, 0x01be }, + { 0x0013, 0x01bf }, + { 0x0013, 0x01c0 }, + { 0x0013, 0x01c1 }, + { 0x0013, 0x01c2 }, + { 0x0013, 0x01c3 }, + { 0x0013, 0x01c4 }, + { 0x0013, 0x01c5 }, + { 0x0013, 0x01c6 }, + { 0x0013, 0x01c7 }, + { 0x0013, 0x01c8 }, + { 0x0013, 0x01c9 }, + { 0x0013, 0x01ca }, + { 0x0013, 0x01cb }, + { 0x0013, 0x01cc }, + { 0x0013, 0x01cd }, + { 0x0013, 0x01ce }, + { 0x0013, 0x01cf }, + { 0x0013, 0x01d0 }, + { 0x0013, 0x01d1 }, + { 0x0013, 0x01d2 }, + { 0x0013, 0x01d3 }, + { 0x0013, 0x01d4 }, + { 0x0013, 0x01d5 }, + { 0x0013, 0x01d6 }, + { 0x0013, 0x01d7 }, + { 0x0013, 0x01d8 }, + { 0x0013, 0x01d9 }, + { 0x0013, 0x01da }, + { 0x0013, 0x01db }, + { 0x0013, 0x01dc }, + { 0x0013, 0x01dd }, + { 0x0013, 0x01de }, + { 0x0013, 0x01df }, + { 0x0013, 0x01e0 }, + { 0x0013, 0x01e1 }, + { 0x0013, 0x01e2 }, + { 0x0013, 0x01e3 }, + { 0x0013, 0x01e4 }, + { 0x0013, 0x01e5 }, + { 0x0013, 0x01e6 }, + { 0x0013, 0x01e7 }, + { 0x0013, 0x01e8 }, + { 0x0013, 0x01e9 }, + { 0x0013, 0x01ea }, + { 0x0013, 0x01eb }, + { 0x0013, 0x01ec }, + { 0x0013, 0x01ed }, + { 0x0013, 0x01ee }, + { 0x0013, 0x01ef }, + { 0x0013, 0x01f0 }, + { 0x0013, 0x01f1 }, + { 0x0013, 0x01f2 }, + { 0x0013, 0x01f3 }, + { 0x0013, 0x01f4 }, + { 0x0013, 0x01f5 }, + { 0x0013, 0x01f6 }, + { 0x0013, 0x01f7 }, + { 0x0013, 0x01f8 }, + { 0x0013, 0x01f9 }, + { 0x0013, 0x01fa }, + { 0x0013, 0x01fb }, + { 0x0013, 0x01fc }, + { 0x0013, 0x01fd }, + { 0x0013, 0x01fe }, + { 0x0013, 0x01ff }, + { 0x0013, 0x0200 }, + { 0x0013, 0x0201 }, + { 0x0013, 0x0202 }, + { 0x0013, 0x0203 }, + { 0x0013, 0x0204 }, + { 0x0013, 0x0205 }, + { 0x0013, 0x0206 }, + { 0x0013, 0x0207 }, + { 0x0013, 0x0208 }, + { 0x0013, 0x0209 }, + { 0x0013, 0x020a }, + { 0x0013, 0x020b }, + { 0x0013, 0x020c }, + { 0x0013, 0x020d }, + { 0x0013, 0x020e }, + { 0x0013, 0x020f }, + { 0x0013, 0x0210 }, + { 0x0013, 0x0211 }, + { 0x0013, 0x0212 }, + { 0x0013, 0x0213 }, + { 0x0013, 0x0214 }, + { 0x0013, 0x0215 }, + { 0x0013, 0x0216 }, + { 0x0013, 0x0217 }, + { 0x0013, 0x0218 }, + { 0x0013, 0x0219 }, + { 0x0013, 0x021a }, + { 0x0013, 0x021b }, + { 0x0013, 0x021c }, + { 0x0013, 0x021d }, + { 0x0013, 0x021e }, + { 0x0013, 0x021f }, + { 0x0013, 0x0220 }, + { 0x0013, 0x0221 }, + { 0x0013, 0x0222 }, + { 0x0013, 0x0223 }, + { 0x0013, 0x0224 }, + { 0x0013, 0x0225 }, + { 0x0013, 0x0226 }, + { 0x0013, 0x0227 }, + { 0x0013, 0x0228 }, + { 0x0013, 0x0229 }, + { 0x0013, 0x022a }, + { 0x0013, 0x022b }, + { 0x0013, 0x022c }, + { 0x0013, 0x022d }, + { 0x0013, 0x022e }, + { 0x0013, 0x022f }, + { 0x0013, 0x0230 }, + { 0x0013, 0x0231 }, + { 0x0013, 0x0232 }, + { 0x0013, 0x0233 }, + { 0x0013, 0x0234 }, + { 0x0013, 0x0235 }, + { 0x0013, 0x0236 }, + { 0x0013, 0x0237 }, + { 0x0013, 0x0238 }, + { 0x0013, 0x0239 }, + { 0x0013, 0x023a }, + { 0x0013, 0x023b }, + { 0x0013, 0x023c }, + { 0x0013, 0x023d }, + { 0x0013, 0x023e }, + { 0x0013, 0x023f }, + { 0x0013, 0x0240 }, + { 0x0013, 0x0241 }, + { 0x0013, 0x0242 }, + { 0x0013, 0x0243 }, + { 0x0013, 0x0244 }, + { 0x0013, 0x0245 }, + { 0x0013, 0x0246 }, + { 0x0013, 0x0247 }, + { 0x0013, 0x0248 }, + { 0x0013, 0x0249 }, + { 0x0013, 0x024a }, + { 0x0013, 0x024b }, + { 0x0013, 0x024c }, + { 0x0013, 0x024d }, + { 0x0013, 0x024e }, + { 0x0013, 0x024f }, + { 0x0013, 0x0250 }, + { 0x0013, 0x0251 }, + { 0x0013, 0x0252 }, + { 0x0013, 0x0253 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec49[113][16] = -{ - {0x0006ffff, 0x0005ffff, 0x0004ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x00010001, 0x00010001, 0x0001001b, 0x0001001b, 0x0001001c, 0x0001001c, 0x00020000, 0x00020000, 0x00020000, 0x00020000, }, - {0x00020052, 0x00020052, 0x00020052, 0x00020052, 0x00020053, 0x00020053, 0x00020053, 0x00020053, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, 0x00030002, }, - {0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, }, - {0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, }, - {0x0001006d, 0x0001006d, 0x0001006e, 0x0001006e, 0x0001006f, 0x0001006f, 0x00010088, 0x00010088, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, 0x00020039, 0x00020039, 0x00020039, 0x00020039, }, - {0x00000070, 0x00000087, 0x00000089, 0x0000008a, 0x00010003, 0x00010003, 0x0001001f, 0x0001001f, 0x0001003a, 0x0001003a, 0x00010051, 0x00010051, 0x00010054, 0x00010054, 0x00010055, 0x00010055, }, - {0x000fffff, 0x000effff, 0x000cffff, 0x000dffff, 0x0007ffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x00000004, 0x00000005, 0x00000020, 0x00000021, 0x0000003b, 0x00000056, 0x0000006c, }, - {0x000200bf, 0x000200bf, 0x000200bf, 0x000200bf, 0x000200c0, 0x000200c0, 0x000200c0, 0x000200c0, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, - {0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x0003003c, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, }, - {0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x00030071, 0x0003008b, 0x0003008b, 0x0003008b, 0x0003008b, 0x0003008b, 0x0003008b, 0x0003008b, 0x0003008b, }, - {0x000300a2, 0x000300a2, 0x000300a2, 0x000300a2, 0x000300a2, 0x000300a2, 0x000300a2, 0x000300a2, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, 0x000300a3, }, - {0x000300a4, 0x000300a4, 0x000300a4, 0x000300a4, 0x000300a4, 0x000300a4, 0x000300a4, 0x000300a4, 0x000300a5, 0x000300a5, 0x000300a5, 0x000300a5, 0x000300a5, 0x000300a5, 0x000300a5, 0x000300a5, }, - {0x0001008d, 0x0001008d, 0x000100a7, 0x000100a7, 0x000100bd, 0x000100bd, 0x000100d9, 0x000100d9, 0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003d, }, - {0x00020072, 0x00020072, 0x00020072, 0x00020072, 0x0002008c, 0x0002008c, 0x0002008c, 0x0002008c, 0x000200a6, 0x000200a6, 0x000200a6, 0x000200a6, 0x000200be, 0x000200be, 0x000200be, 0x000200be, }, - {0x00000059, 0x00000073, 0x0000008e, 0x000000a8, 0x000000c1, 0x000000c2, 0x000000d8, 0x000000da, 0x000000db, 0x000000dc, 0x00010007, 0x00010007, 0x00010023, 0x00010023, 0x00010058, 0x00010058, }, - {0x0023ffff, 0x0034ffff, 0x0045ffff, 0x0056ffff, 0x001affff, 0x0019ffff, 0x0018ffff, 0x0015ffff, 0x0016ffff, 0x0017ffff, 0x0011ffff, 0x0010ffff, 0x0012ffff, 0x0013ffff, 0x0014ffff, 0x0000003e, }, - {0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, }, - {0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, - {0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x00030074, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, 0x000300a9, }, - {0x000300c3, 0x000300c3, 0x000300c3, 0x000300c3, 0x000300c3, 0x000300c3, 0x000300c3, 0x000300c3, 0x000300f4, 0x000300f4, 0x000300f4, 0x000300f4, 0x000300f4, 0x000300f4, 0x000300f4, 0x000300f4, }, - {0x000300f5, 0x000300f5, 0x000300f5, 0x000300f5, 0x000300f5, 0x000300f5, 0x000300f5, 0x000300f5, 0x000300f6, 0x000300f6, 0x000300f6, 0x000300f6, 0x000300f6, 0x000300f6, 0x000300f6, 0x000300f6, }, - {0x00010112, 0x00010112, 0x0001012a, 0x0001012a, 0x0002005a, 0x0002005a, 0x0002005a, 0x0002005a, 0x00020075, 0x00020075, 0x00020075, 0x00020075, 0x0002008f, 0x0002008f, 0x0002008f, 0x0002008f, }, - {0x00020090, 0x00020090, 0x00020090, 0x00020090, 0x000200aa, 0x000200aa, 0x000200aa, 0x000200aa, 0x000200c4, 0x000200c4, 0x000200c4, 0x000200c4, 0x000200dd, 0x000200dd, 0x000200dd, 0x000200dd, }, - {0x000200de, 0x000200de, 0x000200de, 0x000200de, 0x000200f3, 0x000200f3, 0x000200f3, 0x000200f3, 0x000200f7, 0x000200f7, 0x000200f7, 0x000200f7, 0x00020110, 0x00020110, 0x00020110, 0x00020110, }, - {0x0000012c, 0x0000012e, 0x00010025, 0x00010025, 0x00010040, 0x00010040, 0x0001005b, 0x0001005b, 0x000100df, 0x000100df, 0x000100f8, 0x000100f8, 0x0001010f, 0x0001010f, 0x00010111, 0x00010111, }, - {0x001fffff, 0x0020ffff, 0x0000000a, 0x00000026, 0x00000041, 0x00000091, 0x000000ab, 0x000000ac, 0x000000c5, 0x000000c6, 0x000000e0, 0x000000f9, 0x0000010e, 0x00000113, 0x00000129, 0x0000012b, }, - {0x0067ffff, 0x0068ffff, 0x0069ffff, 0x006affff, 0x006bffff, 0x006cffff, 0x006dffff, 0x006effff, 0x006fffff, 0x0070ffff, 0x0021ffff, 0x0022ffff, 0x001cffff, 0x001bffff, 0x001dffff, 0x001effff, }, - {0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030076, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, 0x00030077, }, - {0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, 0x0003005c, }, - {0x00030092, 0x00030092, 0x00030092, 0x00030092, 0x00030092, 0x00030092, 0x00030092, 0x00030092, 0x000300e1, 0x000300e1, 0x000300e1, 0x000300e1, 0x000300e1, 0x000300e1, 0x000300e1, 0x000300e1, }, - {0x000300fa, 0x000300fa, 0x000300fa, 0x000300fa, 0x000300fa, 0x000300fa, 0x000300fa, 0x000300fa, 0x000300fb, 0x000300fb, 0x000300fb, 0x000300fb, 0x000300fb, 0x000300fb, 0x000300fb, 0x000300fb, }, - {0x00030114, 0x00030114, 0x00030114, 0x00030114, 0x00030114, 0x00030114, 0x00030114, 0x00030114, 0x0003012d, 0x0003012d, 0x0003012d, 0x0003012d, 0x0003012d, 0x0003012d, 0x0003012d, 0x0003012d, }, - {0x00030145, 0x00030145, 0x00030145, 0x00030145, 0x00030145, 0x00030145, 0x00030145, 0x00030145, 0x00030146, 0x00030146, 0x00030146, 0x00030146, 0x00030146, 0x00030146, 0x00030146, 0x00030146, }, - {0x000102d5, 0x000102d5, 0x000102d6, 0x000102d6, 0x000102d7, 0x000102d7, 0x000102d8, 0x000102d8, 0x00020027, 0x00020027, 0x00020027, 0x00020027, 0x000200fc, 0x000200fc, 0x000200fc, 0x000200fc, }, - {0x00020116, 0x00020116, 0x00020116, 0x00020116, 0x00020131, 0x00020131, 0x00020131, 0x00020131, 0x00020144, 0x00020144, 0x00020144, 0x00020144, 0x00020164, 0x00020164, 0x00020164, 0x00020164, }, - {0x0025ffff, 0x0026ffff, 0x0028ffff, 0x002affff, 0x002effff, 0x0029ffff, 0x0027ffff, 0x0033ffff, 0x002dffff, 0x0024ffff, 0x002bffff, 0x002cffff, 0x002fffff, 0x0030ffff, 0x0031ffff, 0x0032ffff, }, - {0x00010085, 0x00010085, 0x00010086, 0x00010086, 0x00010093, 0x00010093, 0x00010094, 0x00010094, 0x00010095, 0x00010095, 0x00010096, 0x00010096, 0x00010097, 0x00010097, 0x00010098, 0x00010098, }, - {0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, 0x00010010, 0x00010010, 0x00010011, 0x00010011, 0x00010012, 0x00010012, 0x00010013, 0x00010013, }, - {0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x0001001a, 0x0001001a, 0x00010028, 0x00010028, }, - {0x00010061, 0x00010061, 0x00010062, 0x00010062, 0x00010063, 0x00010063, 0x00010064, 0x00010064, 0x00010065, 0x00010065, 0x00010066, 0x00010066, 0x00010067, 0x00010067, 0x00010068, 0x00010068, }, - {0x00010029, 0x00010029, 0x0001002a, 0x0001002a, 0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, 0x0001002e, 0x0001002e, 0x0001002f, 0x0001002f, 0x00010030, 0x00010030, }, - {0x0001004d, 0x0001004d, 0x0001004e, 0x0001004e, 0x0001004f, 0x0001004f, 0x00010050, 0x00010050, 0x0001005d, 0x0001005d, 0x0001005e, 0x0001005e, 0x0001005f, 0x0001005f, 0x00010060, 0x00010060, }, - {0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x00010042, 0x00010042, 0x00010043, 0x00010043, 0x00010044, 0x00010044, }, - {0x00010099, 0x00010099, 0x0001009a, 0x0001009a, 0x0001009b, 0x0001009b, 0x0001009c, 0x0001009c, 0x0001009d, 0x0001009d, 0x0001009e, 0x0001009e, 0x0001009f, 0x0001009f, 0x000100a0, 0x000100a0, }, - {0x000100a1, 0x000100a1, 0x000100ad, 0x000100ad, 0x000100ae, 0x000100ae, 0x000100af, 0x000100af, 0x000100b0, 0x000100b0, 0x000100b1, 0x000100b1, 0x000100b2, 0x000100b2, 0x000100b3, 0x000100b3, }, - {0x0001007d, 0x0001007d, 0x0001007e, 0x0001007e, 0x0001007f, 0x0001007f, 0x00010080, 0x00010080, 0x00010081, 0x00010081, 0x00010082, 0x00010082, 0x00010083, 0x00010083, 0x00010084, 0x00010084, }, - {0x00010045, 0x00010045, 0x00010046, 0x00010046, 0x00010047, 0x00010047, 0x00010048, 0x00010048, 0x00010049, 0x00010049, 0x0001004a, 0x0001004a, 0x0001004b, 0x0001004b, 0x0001004c, 0x0001004c, }, - {0x000100b4, 0x000100b4, 0x000100b5, 0x000100b5, 0x000100b6, 0x000100b6, 0x000100b7, 0x000100b7, 0x000100b8, 0x000100b8, 0x000100b9, 0x000100b9, 0x000100ba, 0x000100ba, 0x000100bb, 0x000100bb, }, - {0x000100bc, 0x000100bc, 0x000100c7, 0x000100c7, 0x000100c8, 0x000100c8, 0x000100c9, 0x000100c9, 0x000100ca, 0x000100ca, 0x000100cb, 0x000100cb, 0x000100cc, 0x000100cc, 0x000100cd, 0x000100cd, }, - {0x000100ce, 0x000100ce, 0x000100cf, 0x000100cf, 0x000100d0, 0x000100d0, 0x000100d1, 0x000100d1, 0x000100d2, 0x000100d2, 0x000100d3, 0x000100d3, 0x000100d4, 0x000100d4, 0x000100d5, 0x000100d5, }, - {0x000100d6, 0x000100d6, 0x000100d7, 0x000100d7, 0x000100e2, 0x000100e2, 0x000100e3, 0x000100e3, 0x000100e4, 0x000100e4, 0x000100e5, 0x000100e5, 0x000100e6, 0x000100e6, 0x000100e7, 0x000100e7, }, - {0x00010069, 0x00010069, 0x0001006a, 0x0001006a, 0x0001006b, 0x0001006b, 0x00010078, 0x00010078, 0x00010079, 0x00010079, 0x0001007a, 0x0001007a, 0x0001007b, 0x0001007b, 0x0001007c, 0x0001007c, }, - {0x0035ffff, 0x0036ffff, 0x0037ffff, 0x0038ffff, 0x0039ffff, 0x003affff, 0x003bffff, 0x003cffff, 0x003dffff, 0x003effff, 0x003fffff, 0x0040ffff, 0x0041ffff, 0x0042ffff, 0x0043ffff, 0x0044ffff, }, - {0x000100e8, 0x000100e8, 0x000100e9, 0x000100e9, 0x000100ea, 0x000100ea, 0x000100eb, 0x000100eb, 0x000100ec, 0x000100ec, 0x000100ed, 0x000100ed, 0x000100ee, 0x000100ee, 0x000100ef, 0x000100ef, }, - {0x000100f0, 0x000100f0, 0x000100f1, 0x000100f1, 0x000100f2, 0x000100f2, 0x000100fd, 0x000100fd, 0x000100fe, 0x000100fe, 0x000100ff, 0x000100ff, 0x00010100, 0x00010100, 0x00010101, 0x00010101, }, - {0x00010102, 0x00010102, 0x00010103, 0x00010103, 0x00010104, 0x00010104, 0x00010105, 0x00010105, 0x00010106, 0x00010106, 0x00010107, 0x00010107, 0x00010108, 0x00010108, 0x00010109, 0x00010109, }, - {0x0001010a, 0x0001010a, 0x0001010b, 0x0001010b, 0x0001010c, 0x0001010c, 0x0001010d, 0x0001010d, 0x00010115, 0x00010115, 0x00010117, 0x00010117, 0x00010118, 0x00010118, 0x00010119, 0x00010119, }, - {0x0001011a, 0x0001011a, 0x0001011b, 0x0001011b, 0x0001011c, 0x0001011c, 0x0001011d, 0x0001011d, 0x0001011e, 0x0001011e, 0x0001011f, 0x0001011f, 0x00010120, 0x00010120, 0x00010121, 0x00010121, }, - {0x00010122, 0x00010122, 0x00010123, 0x00010123, 0x00010124, 0x00010124, 0x00010125, 0x00010125, 0x00010126, 0x00010126, 0x00010127, 0x00010127, 0x00010128, 0x00010128, 0x0001012f, 0x0001012f, }, - {0x00010130, 0x00010130, 0x00010132, 0x00010132, 0x00010133, 0x00010133, 0x00010134, 0x00010134, 0x00010135, 0x00010135, 0x00010136, 0x00010136, 0x00010137, 0x00010137, 0x00010138, 0x00010138, }, - {0x00010139, 0x00010139, 0x0001013a, 0x0001013a, 0x0001013b, 0x0001013b, 0x0001013c, 0x0001013c, 0x0001013d, 0x0001013d, 0x0001013e, 0x0001013e, 0x0001013f, 0x0001013f, 0x00010140, 0x00010140, }, - {0x00010141, 0x00010141, 0x00010142, 0x00010142, 0x00010143, 0x00010143, 0x00010147, 0x00010147, 0x00010148, 0x00010148, 0x00010149, 0x00010149, 0x0001014a, 0x0001014a, 0x0001014b, 0x0001014b, }, - {0x0001014c, 0x0001014c, 0x0001014d, 0x0001014d, 0x0001014e, 0x0001014e, 0x0001014f, 0x0001014f, 0x00010150, 0x00010150, 0x00010151, 0x00010151, 0x00010152, 0x00010152, 0x00010153, 0x00010153, }, - {0x00010154, 0x00010154, 0x00010155, 0x00010155, 0x00010156, 0x00010156, 0x00010157, 0x00010157, 0x00010158, 0x00010158, 0x00010159, 0x00010159, 0x0001015a, 0x0001015a, 0x0001015b, 0x0001015b, }, - {0x0001015c, 0x0001015c, 0x0001015d, 0x0001015d, 0x0001015e, 0x0001015e, 0x0001015f, 0x0001015f, 0x00010160, 0x00010160, 0x00010161, 0x00010161, 0x00010162, 0x00010162, 0x00010163, 0x00010163, }, - {0x00010165, 0x00010165, 0x00010166, 0x00010166, 0x00010167, 0x00010167, 0x00010168, 0x00010168, 0x00010169, 0x00010169, 0x0001016a, 0x0001016a, 0x0001016b, 0x0001016b, 0x0001016c, 0x0001016c, }, - {0x0001016d, 0x0001016d, 0x0001016e, 0x0001016e, 0x0001016f, 0x0001016f, 0x00010170, 0x00010170, 0x00010171, 0x00010171, 0x00010172, 0x00010172, 0x00010173, 0x00010173, 0x00010174, 0x00010174, }, - {0x00010175, 0x00010175, 0x00010176, 0x00010176, 0x00010177, 0x00010177, 0x00010178, 0x00010178, 0x00010179, 0x00010179, 0x0001017a, 0x0001017a, 0x0001017b, 0x0001017b, 0x0001017c, 0x0001017c, }, - {0x0001017d, 0x0001017d, 0x0001017e, 0x0001017e, 0x0001017f, 0x0001017f, 0x00010180, 0x00010180, 0x00010181, 0x00010181, 0x00010182, 0x00010182, 0x00010183, 0x00010183, 0x00010184, 0x00010184, }, - {0x0046ffff, 0x0047ffff, 0x0048ffff, 0x0049ffff, 0x004affff, 0x004bffff, 0x004cffff, 0x004dffff, 0x004effff, 0x004fffff, 0x0050ffff, 0x0051ffff, 0x0052ffff, 0x0053ffff, 0x0054ffff, 0x0055ffff, }, - {0x00010185, 0x00010185, 0x00010186, 0x00010186, 0x00010187, 0x00010187, 0x00010188, 0x00010188, 0x00010189, 0x00010189, 0x0001018a, 0x0001018a, 0x0001018b, 0x0001018b, 0x0001018c, 0x0001018c, }, - {0x0001018d, 0x0001018d, 0x0001018e, 0x0001018e, 0x0001018f, 0x0001018f, 0x00010190, 0x00010190, 0x00010191, 0x00010191, 0x00010192, 0x00010192, 0x00010193, 0x00010193, 0x00010194, 0x00010194, }, - {0x00010195, 0x00010195, 0x00010196, 0x00010196, 0x00010197, 0x00010197, 0x00010198, 0x00010198, 0x00010199, 0x00010199, 0x0001019a, 0x0001019a, 0x0001019b, 0x0001019b, 0x0001019c, 0x0001019c, }, - {0x0001019d, 0x0001019d, 0x0001019e, 0x0001019e, 0x0001019f, 0x0001019f, 0x000101a0, 0x000101a0, 0x000101a1, 0x000101a1, 0x000101a2, 0x000101a2, 0x000101a3, 0x000101a3, 0x000101a4, 0x000101a4, }, - {0x000101a5, 0x000101a5, 0x000101a6, 0x000101a6, 0x000101a7, 0x000101a7, 0x000101a8, 0x000101a8, 0x000101a9, 0x000101a9, 0x000101aa, 0x000101aa, 0x000101ab, 0x000101ab, 0x000101ac, 0x000101ac, }, - {0x000101ad, 0x000101ad, 0x000101ae, 0x000101ae, 0x000101af, 0x000101af, 0x000101b0, 0x000101b0, 0x000101b1, 0x000101b1, 0x000101b2, 0x000101b2, 0x000101b3, 0x000101b3, 0x000101b4, 0x000101b4, }, - {0x000101b5, 0x000101b5, 0x000101b6, 0x000101b6, 0x000101b7, 0x000101b7, 0x000101b8, 0x000101b8, 0x000101b9, 0x000101b9, 0x000101ba, 0x000101ba, 0x000101bb, 0x000101bb, 0x000101bc, 0x000101bc, }, - {0x000101bd, 0x000101bd, 0x000101be, 0x000101be, 0x000101bf, 0x000101bf, 0x000101c0, 0x000101c0, 0x000101c1, 0x000101c1, 0x000101c2, 0x000101c2, 0x000101c3, 0x000101c3, 0x000101c4, 0x000101c4, }, - {0x000101c5, 0x000101c5, 0x000101c6, 0x000101c6, 0x000101c7, 0x000101c7, 0x000101c8, 0x000101c8, 0x000101c9, 0x000101c9, 0x000101ca, 0x000101ca, 0x000101cb, 0x000101cb, 0x000101cc, 0x000101cc, }, - {0x000101cd, 0x000101cd, 0x000101ce, 0x000101ce, 0x000101cf, 0x000101cf, 0x000101d0, 0x000101d0, 0x000101d1, 0x000101d1, 0x000101d2, 0x000101d2, 0x000101d3, 0x000101d3, 0x000101d4, 0x000101d4, }, - {0x000101d5, 0x000101d5, 0x000101d6, 0x000101d6, 0x000101d7, 0x000101d7, 0x000101d8, 0x000101d8, 0x000101d9, 0x000101d9, 0x000101da, 0x000101da, 0x000101db, 0x000101db, 0x000101dc, 0x000101dc, }, - {0x000101dd, 0x000101dd, 0x000101de, 0x000101de, 0x000101df, 0x000101df, 0x000101e0, 0x000101e0, 0x000101e1, 0x000101e1, 0x000101e2, 0x000101e2, 0x000101e3, 0x000101e3, 0x000101e4, 0x000101e4, }, - {0x000101e5, 0x000101e5, 0x000101e6, 0x000101e6, 0x000101e7, 0x000101e7, 0x000101e8, 0x000101e8, 0x000101e9, 0x000101e9, 0x000101ea, 0x000101ea, 0x000101eb, 0x000101eb, 0x000101ec, 0x000101ec, }, - {0x000101ed, 0x000101ed, 0x000101ee, 0x000101ee, 0x000101ef, 0x000101ef, 0x000101f0, 0x000101f0, 0x000101f1, 0x000101f1, 0x000101f2, 0x000101f2, 0x000101f3, 0x000101f3, 0x000101f4, 0x000101f4, }, - {0x000101f5, 0x000101f5, 0x000101f6, 0x000101f6, 0x000101f7, 0x000101f7, 0x000101f8, 0x000101f8, 0x000101f9, 0x000101f9, 0x000101fa, 0x000101fa, 0x000101fb, 0x000101fb, 0x000101fc, 0x000101fc, }, - {0x000101fd, 0x000101fd, 0x000101fe, 0x000101fe, 0x000101ff, 0x000101ff, 0x00010200, 0x00010200, 0x00010201, 0x00010201, 0x00010202, 0x00010202, 0x00010203, 0x00010203, 0x00010204, 0x00010204, }, - {0x0057ffff, 0x0058ffff, 0x0059ffff, 0x005affff, 0x005bffff, 0x005cffff, 0x005dffff, 0x005effff, 0x005fffff, 0x0060ffff, 0x0061ffff, 0x0062ffff, 0x0063ffff, 0x0064ffff, 0x0065ffff, 0x0066ffff, }, - {0x00010205, 0x00010205, 0x00010206, 0x00010206, 0x00010207, 0x00010207, 0x00010208, 0x00010208, 0x00010209, 0x00010209, 0x0001020a, 0x0001020a, 0x0001020b, 0x0001020b, 0x0001020c, 0x0001020c, }, - {0x0001020d, 0x0001020d, 0x0001020e, 0x0001020e, 0x0001020f, 0x0001020f, 0x00010210, 0x00010210, 0x00010211, 0x00010211, 0x00010212, 0x00010212, 0x00010213, 0x00010213, 0x00010214, 0x00010214, }, - {0x00010215, 0x00010215, 0x00010216, 0x00010216, 0x00010217, 0x00010217, 0x00010218, 0x00010218, 0x00010219, 0x00010219, 0x0001021a, 0x0001021a, 0x0001021b, 0x0001021b, 0x0001021c, 0x0001021c, }, - {0x0001021d, 0x0001021d, 0x0001021e, 0x0001021e, 0x0001021f, 0x0001021f, 0x00010220, 0x00010220, 0x00010221, 0x00010221, 0x00010222, 0x00010222, 0x00010223, 0x00010223, 0x00010224, 0x00010224, }, - {0x00010225, 0x00010225, 0x00010226, 0x00010226, 0x00010227, 0x00010227, 0x00010228, 0x00010228, 0x00010229, 0x00010229, 0x0001022a, 0x0001022a, 0x0001022b, 0x0001022b, 0x0001022c, 0x0001022c, }, - {0x0001022d, 0x0001022d, 0x0001022e, 0x0001022e, 0x0001022f, 0x0001022f, 0x00010230, 0x00010230, 0x00010231, 0x00010231, 0x00010232, 0x00010232, 0x00010233, 0x00010233, 0x00010234, 0x00010234, }, - {0x00010235, 0x00010235, 0x00010236, 0x00010236, 0x00010237, 0x00010237, 0x00010238, 0x00010238, 0x00010239, 0x00010239, 0x0001023a, 0x0001023a, 0x0001023b, 0x0001023b, 0x0001023c, 0x0001023c, }, - {0x0001023d, 0x0001023d, 0x0001023e, 0x0001023e, 0x0001023f, 0x0001023f, 0x00010240, 0x00010240, 0x00010241, 0x00010241, 0x00010242, 0x00010242, 0x00010243, 0x00010243, 0x00010244, 0x00010244, }, - {0x00010245, 0x00010245, 0x00010246, 0x00010246, 0x00010247, 0x00010247, 0x00010248, 0x00010248, 0x00010249, 0x00010249, 0x0001024a, 0x0001024a, 0x0001024b, 0x0001024b, 0x0001024c, 0x0001024c, }, - {0x0001024d, 0x0001024d, 0x0001024e, 0x0001024e, 0x0001024f, 0x0001024f, 0x00010250, 0x00010250, 0x00010251, 0x00010251, 0x00010252, 0x00010252, 0x00010253, 0x00010253, 0x00010254, 0x00010254, }, - {0x00010255, 0x00010255, 0x00010256, 0x00010256, 0x00010257, 0x00010257, 0x00010258, 0x00010258, 0x00010259, 0x00010259, 0x0001025a, 0x0001025a, 0x0001025b, 0x0001025b, 0x0001025c, 0x0001025c, }, - {0x0001025d, 0x0001025d, 0x0001025e, 0x0001025e, 0x0001025f, 0x0001025f, 0x00010260, 0x00010260, 0x00010261, 0x00010261, 0x00010262, 0x00010262, 0x00010263, 0x00010263, 0x00010264, 0x00010264, }, - {0x00010265, 0x00010265, 0x00010266, 0x00010266, 0x00010267, 0x00010267, 0x00010268, 0x00010268, 0x00010269, 0x00010269, 0x0001026a, 0x0001026a, 0x0001026b, 0x0001026b, 0x0001026c, 0x0001026c, }, - {0x0001026d, 0x0001026d, 0x0001026e, 0x0001026e, 0x0001026f, 0x0001026f, 0x00010270, 0x00010270, 0x00010271, 0x00010271, 0x00010272, 0x00010272, 0x00010273, 0x00010273, 0x00010274, 0x00010274, }, - {0x00010275, 0x00010275, 0x00010276, 0x00010276, 0x00010277, 0x00010277, 0x00010278, 0x00010278, 0x00010279, 0x00010279, 0x0001027a, 0x0001027a, 0x0001027b, 0x0001027b, 0x0001027c, 0x0001027c, }, - {0x0001027d, 0x0001027d, 0x0001027e, 0x0001027e, 0x0001027f, 0x0001027f, 0x00010280, 0x00010280, 0x00010281, 0x00010281, 0x00010282, 0x00010282, 0x00010283, 0x00010283, 0x00010284, 0x00010284, }, - {0x00010285, 0x00010285, 0x00010286, 0x00010286, 0x00010287, 0x00010287, 0x00010288, 0x00010288, 0x00010289, 0x00010289, 0x0001028a, 0x0001028a, 0x0001028b, 0x0001028b, 0x0001028c, 0x0001028c, }, - {0x0001028d, 0x0001028d, 0x0001028e, 0x0001028e, 0x0001028f, 0x0001028f, 0x00010290, 0x00010290, 0x00010291, 0x00010291, 0x00010292, 0x00010292, 0x00010293, 0x00010293, 0x00010294, 0x00010294, }, - {0x00010295, 0x00010295, 0x00010296, 0x00010296, 0x00010297, 0x00010297, 0x00010298, 0x00010298, 0x00010299, 0x00010299, 0x0001029a, 0x0001029a, 0x0001029b, 0x0001029b, 0x0001029c, 0x0001029c, }, - {0x0001029d, 0x0001029d, 0x0001029e, 0x0001029e, 0x0001029f, 0x0001029f, 0x000102a0, 0x000102a0, 0x000102a1, 0x000102a1, 0x000102a2, 0x000102a2, 0x000102a3, 0x000102a3, 0x000102a4, 0x000102a4, }, - {0x000102a5, 0x000102a5, 0x000102a6, 0x000102a6, 0x000102a7, 0x000102a7, 0x000102a8, 0x000102a8, 0x000102a9, 0x000102a9, 0x000102aa, 0x000102aa, 0x000102ab, 0x000102ab, 0x000102ac, 0x000102ac, }, - {0x000102ad, 0x000102ad, 0x000102ae, 0x000102ae, 0x000102af, 0x000102af, 0x000102b0, 0x000102b0, 0x000102b1, 0x000102b1, 0x000102b2, 0x000102b2, 0x000102b3, 0x000102b3, 0x000102b4, 0x000102b4, }, - {0x000102b5, 0x000102b5, 0x000102b6, 0x000102b6, 0x000102b7, 0x000102b7, 0x000102b8, 0x000102b8, 0x000102b9, 0x000102b9, 0x000102ba, 0x000102ba, 0x000102bb, 0x000102bb, 0x000102bc, 0x000102bc, }, - {0x000102bd, 0x000102bd, 0x000102be, 0x000102be, 0x000102bf, 0x000102bf, 0x000102c0, 0x000102c0, 0x000102c1, 0x000102c1, 0x000102c2, 0x000102c2, 0x000102c3, 0x000102c3, 0x000102c4, 0x000102c4, }, - {0x000102c5, 0x000102c5, 0x000102c6, 0x000102c6, 0x000102c7, 0x000102c7, 0x000102c8, 0x000102c8, 0x000102c9, 0x000102c9, 0x000102ca, 0x000102ca, 0x000102cb, 0x000102cb, 0x000102cc, 0x000102cc, }, - {0x000102cd, 0x000102cd, 0x000102ce, 0x000102ce, 0x000102cf, 0x000102cf, 0x000102d0, 0x000102d0, 0x000102d1, 0x000102d1, 0x000102d2, 0x000102d2, 0x000102d3, 0x000102d3, 0x000102d4, 0x000102d4, }, +const uint32_t c_aauiCQMFHuffDec49[113][16] = { + { + 0x0006ffff, + 0x0005ffff, + 0x0004ffff, + 0x0001ffff, + 0x0002ffff, + 0x0003ffff, + 0x00010001, + 0x00010001, + 0x0001001b, + 0x0001001b, + 0x0001001c, + 0x0001001c, + 0x00020000, + 0x00020000, + 0x00020000, + 0x00020000, + }, + { + 0x00020052, + 0x00020052, + 0x00020052, + 0x00020052, + 0x00020053, + 0x00020053, + 0x00020053, + 0x00020053, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + 0x00030002, + }, + { + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + }, + { + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + }, + { + 0x0001006d, + 0x0001006d, + 0x0001006e, + 0x0001006e, + 0x0001006f, + 0x0001006f, + 0x00010088, + 0x00010088, + 0x0002001e, + 0x0002001e, + 0x0002001e, + 0x0002001e, + 0x00020039, + 0x00020039, + 0x00020039, + 0x00020039, + }, + { + 0x00000070, + 0x00000087, + 0x00000089, + 0x0000008a, + 0x00010003, + 0x00010003, + 0x0001001f, + 0x0001001f, + 0x0001003a, + 0x0001003a, + 0x00010051, + 0x00010051, + 0x00010054, + 0x00010054, + 0x00010055, + 0x00010055, + }, + { + 0x000fffff, + 0x000effff, + 0x000cffff, + 0x000dffff, + 0x0007ffff, + 0x0008ffff, + 0x0009ffff, + 0x000affff, + 0x000bffff, + 0x00000004, + 0x00000005, + 0x00000020, + 0x00000021, + 0x0000003b, + 0x00000056, + 0x0000006c, + }, + { + 0x000200bf, + 0x000200bf, + 0x000200bf, + 0x000200bf, + 0x000200c0, + 0x000200c0, + 0x000200c0, + 0x000200c0, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + }, + { + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x0003003c, + 0x00030057, + 0x00030057, + 0x00030057, + 0x00030057, + 0x00030057, + 0x00030057, + 0x00030057, + 0x00030057, + }, + { + 0x00030071, + 0x00030071, + 0x00030071, + 0x00030071, + 0x00030071, + 0x00030071, + 0x00030071, + 0x00030071, + 0x0003008b, + 0x0003008b, + 0x0003008b, + 0x0003008b, + 0x0003008b, + 0x0003008b, + 0x0003008b, + 0x0003008b, + }, + { + 0x000300a2, + 0x000300a2, + 0x000300a2, + 0x000300a2, + 0x000300a2, + 0x000300a2, + 0x000300a2, + 0x000300a2, + 0x000300a3, + 0x000300a3, + 0x000300a3, + 0x000300a3, + 0x000300a3, + 0x000300a3, + 0x000300a3, + 0x000300a3, + }, + { + 0x000300a4, + 0x000300a4, + 0x000300a4, + 0x000300a4, + 0x000300a4, + 0x000300a4, + 0x000300a4, + 0x000300a4, + 0x000300a5, + 0x000300a5, + 0x000300a5, + 0x000300a5, + 0x000300a5, + 0x000300a5, + 0x000300a5, + 0x000300a5, + }, + { + 0x0001008d, + 0x0001008d, + 0x000100a7, + 0x000100a7, + 0x000100bd, + 0x000100bd, + 0x000100d9, + 0x000100d9, + 0x00020022, + 0x00020022, + 0x00020022, + 0x00020022, + 0x0002003d, + 0x0002003d, + 0x0002003d, + 0x0002003d, + }, + { + 0x00020072, + 0x00020072, + 0x00020072, + 0x00020072, + 0x0002008c, + 0x0002008c, + 0x0002008c, + 0x0002008c, + 0x000200a6, + 0x000200a6, + 0x000200a6, + 0x000200a6, + 0x000200be, + 0x000200be, + 0x000200be, + 0x000200be, + }, + { + 0x00000059, + 0x00000073, + 0x0000008e, + 0x000000a8, + 0x000000c1, + 0x000000c2, + 0x000000d8, + 0x000000da, + 0x000000db, + 0x000000dc, + 0x00010007, + 0x00010007, + 0x00010023, + 0x00010023, + 0x00010058, + 0x00010058, + }, + { + 0x0023ffff, + 0x0034ffff, + 0x0045ffff, + 0x0056ffff, + 0x001affff, + 0x0019ffff, + 0x0018ffff, + 0x0015ffff, + 0x0016ffff, + 0x0017ffff, + 0x0011ffff, + 0x0010ffff, + 0x0012ffff, + 0x0013ffff, + 0x0014ffff, + 0x0000003e, + }, + { + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + }, + { + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + }, + { + 0x00030074, + 0x00030074, + 0x00030074, + 0x00030074, + 0x00030074, + 0x00030074, + 0x00030074, + 0x00030074, + 0x000300a9, + 0x000300a9, + 0x000300a9, + 0x000300a9, + 0x000300a9, + 0x000300a9, + 0x000300a9, + 0x000300a9, + }, + { + 0x000300c3, + 0x000300c3, + 0x000300c3, + 0x000300c3, + 0x000300c3, + 0x000300c3, + 0x000300c3, + 0x000300c3, + 0x000300f4, + 0x000300f4, + 0x000300f4, + 0x000300f4, + 0x000300f4, + 0x000300f4, + 0x000300f4, + 0x000300f4, + }, + { + 0x000300f5, + 0x000300f5, + 0x000300f5, + 0x000300f5, + 0x000300f5, + 0x000300f5, + 0x000300f5, + 0x000300f5, + 0x000300f6, + 0x000300f6, + 0x000300f6, + 0x000300f6, + 0x000300f6, + 0x000300f6, + 0x000300f6, + 0x000300f6, + }, + { + 0x00010112, + 0x00010112, + 0x0001012a, + 0x0001012a, + 0x0002005a, + 0x0002005a, + 0x0002005a, + 0x0002005a, + 0x00020075, + 0x00020075, + 0x00020075, + 0x00020075, + 0x0002008f, + 0x0002008f, + 0x0002008f, + 0x0002008f, + }, + { + 0x00020090, + 0x00020090, + 0x00020090, + 0x00020090, + 0x000200aa, + 0x000200aa, + 0x000200aa, + 0x000200aa, + 0x000200c4, + 0x000200c4, + 0x000200c4, + 0x000200c4, + 0x000200dd, + 0x000200dd, + 0x000200dd, + 0x000200dd, + }, + { + 0x000200de, + 0x000200de, + 0x000200de, + 0x000200de, + 0x000200f3, + 0x000200f3, + 0x000200f3, + 0x000200f3, + 0x000200f7, + 0x000200f7, + 0x000200f7, + 0x000200f7, + 0x00020110, + 0x00020110, + 0x00020110, + 0x00020110, + }, + { + 0x0000012c, + 0x0000012e, + 0x00010025, + 0x00010025, + 0x00010040, + 0x00010040, + 0x0001005b, + 0x0001005b, + 0x000100df, + 0x000100df, + 0x000100f8, + 0x000100f8, + 0x0001010f, + 0x0001010f, + 0x00010111, + 0x00010111, + }, + { + 0x001fffff, + 0x0020ffff, + 0x0000000a, + 0x00000026, + 0x00000041, + 0x00000091, + 0x000000ab, + 0x000000ac, + 0x000000c5, + 0x000000c6, + 0x000000e0, + 0x000000f9, + 0x0000010e, + 0x00000113, + 0x00000129, + 0x0000012b, + }, + { + 0x0067ffff, + 0x0068ffff, + 0x0069ffff, + 0x006affff, + 0x006bffff, + 0x006cffff, + 0x006dffff, + 0x006effff, + 0x006fffff, + 0x0070ffff, + 0x0021ffff, + 0x0022ffff, + 0x001cffff, + 0x001bffff, + 0x001dffff, + 0x001effff, + }, + { + 0x00030076, + 0x00030076, + 0x00030076, + 0x00030076, + 0x00030076, + 0x00030076, + 0x00030076, + 0x00030076, + 0x00030077, + 0x00030077, + 0x00030077, + 0x00030077, + 0x00030077, + 0x00030077, + 0x00030077, + 0x00030077, + }, + { + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003005c, + 0x0003005c, + 0x0003005c, + 0x0003005c, + 0x0003005c, + 0x0003005c, + 0x0003005c, + 0x0003005c, + }, + { + 0x00030092, + 0x00030092, + 0x00030092, + 0x00030092, + 0x00030092, + 0x00030092, + 0x00030092, + 0x00030092, + 0x000300e1, + 0x000300e1, + 0x000300e1, + 0x000300e1, + 0x000300e1, + 0x000300e1, + 0x000300e1, + 0x000300e1, + }, + { + 0x000300fa, + 0x000300fa, + 0x000300fa, + 0x000300fa, + 0x000300fa, + 0x000300fa, + 0x000300fa, + 0x000300fa, + 0x000300fb, + 0x000300fb, + 0x000300fb, + 0x000300fb, + 0x000300fb, + 0x000300fb, + 0x000300fb, + 0x000300fb, + }, + { + 0x00030114, + 0x00030114, + 0x00030114, + 0x00030114, + 0x00030114, + 0x00030114, + 0x00030114, + 0x00030114, + 0x0003012d, + 0x0003012d, + 0x0003012d, + 0x0003012d, + 0x0003012d, + 0x0003012d, + 0x0003012d, + 0x0003012d, + }, + { + 0x00030145, + 0x00030145, + 0x00030145, + 0x00030145, + 0x00030145, + 0x00030145, + 0x00030145, + 0x00030145, + 0x00030146, + 0x00030146, + 0x00030146, + 0x00030146, + 0x00030146, + 0x00030146, + 0x00030146, + 0x00030146, + }, + { + 0x000102d5, + 0x000102d5, + 0x000102d6, + 0x000102d6, + 0x000102d7, + 0x000102d7, + 0x000102d8, + 0x000102d8, + 0x00020027, + 0x00020027, + 0x00020027, + 0x00020027, + 0x000200fc, + 0x000200fc, + 0x000200fc, + 0x000200fc, + }, + { + 0x00020116, + 0x00020116, + 0x00020116, + 0x00020116, + 0x00020131, + 0x00020131, + 0x00020131, + 0x00020131, + 0x00020144, + 0x00020144, + 0x00020144, + 0x00020144, + 0x00020164, + 0x00020164, + 0x00020164, + 0x00020164, + }, + { + 0x0025ffff, + 0x0026ffff, + 0x0028ffff, + 0x002affff, + 0x002effff, + 0x0029ffff, + 0x0027ffff, + 0x0033ffff, + 0x002dffff, + 0x0024ffff, + 0x002bffff, + 0x002cffff, + 0x002fffff, + 0x0030ffff, + 0x0031ffff, + 0x0032ffff, + }, + { + 0x00010085, + 0x00010085, + 0x00010086, + 0x00010086, + 0x00010093, + 0x00010093, + 0x00010094, + 0x00010094, + 0x00010095, + 0x00010095, + 0x00010096, + 0x00010096, + 0x00010097, + 0x00010097, + 0x00010098, + 0x00010098, + }, + { + 0x0001000c, + 0x0001000c, + 0x0001000d, + 0x0001000d, + 0x0001000e, + 0x0001000e, + 0x0001000f, + 0x0001000f, + 0x00010010, + 0x00010010, + 0x00010011, + 0x00010011, + 0x00010012, + 0x00010012, + 0x00010013, + 0x00010013, + }, + { + 0x00010014, + 0x00010014, + 0x00010015, + 0x00010015, + 0x00010016, + 0x00010016, + 0x00010017, + 0x00010017, + 0x00010018, + 0x00010018, + 0x00010019, + 0x00010019, + 0x0001001a, + 0x0001001a, + 0x00010028, + 0x00010028, + }, + { + 0x00010061, + 0x00010061, + 0x00010062, + 0x00010062, + 0x00010063, + 0x00010063, + 0x00010064, + 0x00010064, + 0x00010065, + 0x00010065, + 0x00010066, + 0x00010066, + 0x00010067, + 0x00010067, + 0x00010068, + 0x00010068, + }, + { + 0x00010029, + 0x00010029, + 0x0001002a, + 0x0001002a, + 0x0001002b, + 0x0001002b, + 0x0001002c, + 0x0001002c, + 0x0001002d, + 0x0001002d, + 0x0001002e, + 0x0001002e, + 0x0001002f, + 0x0001002f, + 0x00010030, + 0x00010030, + }, + { + 0x0001004d, + 0x0001004d, + 0x0001004e, + 0x0001004e, + 0x0001004f, + 0x0001004f, + 0x00010050, + 0x00010050, + 0x0001005d, + 0x0001005d, + 0x0001005e, + 0x0001005e, + 0x0001005f, + 0x0001005f, + 0x00010060, + 0x00010060, + }, + { + 0x00010031, + 0x00010031, + 0x00010032, + 0x00010032, + 0x00010033, + 0x00010033, + 0x00010034, + 0x00010034, + 0x00010035, + 0x00010035, + 0x00010042, + 0x00010042, + 0x00010043, + 0x00010043, + 0x00010044, + 0x00010044, + }, + { + 0x00010099, + 0x00010099, + 0x0001009a, + 0x0001009a, + 0x0001009b, + 0x0001009b, + 0x0001009c, + 0x0001009c, + 0x0001009d, + 0x0001009d, + 0x0001009e, + 0x0001009e, + 0x0001009f, + 0x0001009f, + 0x000100a0, + 0x000100a0, + }, + { + 0x000100a1, + 0x000100a1, + 0x000100ad, + 0x000100ad, + 0x000100ae, + 0x000100ae, + 0x000100af, + 0x000100af, + 0x000100b0, + 0x000100b0, + 0x000100b1, + 0x000100b1, + 0x000100b2, + 0x000100b2, + 0x000100b3, + 0x000100b3, + }, + { + 0x0001007d, + 0x0001007d, + 0x0001007e, + 0x0001007e, + 0x0001007f, + 0x0001007f, + 0x00010080, + 0x00010080, + 0x00010081, + 0x00010081, + 0x00010082, + 0x00010082, + 0x00010083, + 0x00010083, + 0x00010084, + 0x00010084, + }, + { + 0x00010045, + 0x00010045, + 0x00010046, + 0x00010046, + 0x00010047, + 0x00010047, + 0x00010048, + 0x00010048, + 0x00010049, + 0x00010049, + 0x0001004a, + 0x0001004a, + 0x0001004b, + 0x0001004b, + 0x0001004c, + 0x0001004c, + }, + { + 0x000100b4, + 0x000100b4, + 0x000100b5, + 0x000100b5, + 0x000100b6, + 0x000100b6, + 0x000100b7, + 0x000100b7, + 0x000100b8, + 0x000100b8, + 0x000100b9, + 0x000100b9, + 0x000100ba, + 0x000100ba, + 0x000100bb, + 0x000100bb, + }, + { + 0x000100bc, + 0x000100bc, + 0x000100c7, + 0x000100c7, + 0x000100c8, + 0x000100c8, + 0x000100c9, + 0x000100c9, + 0x000100ca, + 0x000100ca, + 0x000100cb, + 0x000100cb, + 0x000100cc, + 0x000100cc, + 0x000100cd, + 0x000100cd, + }, + { + 0x000100ce, + 0x000100ce, + 0x000100cf, + 0x000100cf, + 0x000100d0, + 0x000100d0, + 0x000100d1, + 0x000100d1, + 0x000100d2, + 0x000100d2, + 0x000100d3, + 0x000100d3, + 0x000100d4, + 0x000100d4, + 0x000100d5, + 0x000100d5, + }, + { + 0x000100d6, + 0x000100d6, + 0x000100d7, + 0x000100d7, + 0x000100e2, + 0x000100e2, + 0x000100e3, + 0x000100e3, + 0x000100e4, + 0x000100e4, + 0x000100e5, + 0x000100e5, + 0x000100e6, + 0x000100e6, + 0x000100e7, + 0x000100e7, + }, + { + 0x00010069, + 0x00010069, + 0x0001006a, + 0x0001006a, + 0x0001006b, + 0x0001006b, + 0x00010078, + 0x00010078, + 0x00010079, + 0x00010079, + 0x0001007a, + 0x0001007a, + 0x0001007b, + 0x0001007b, + 0x0001007c, + 0x0001007c, + }, + { + 0x0035ffff, + 0x0036ffff, + 0x0037ffff, + 0x0038ffff, + 0x0039ffff, + 0x003affff, + 0x003bffff, + 0x003cffff, + 0x003dffff, + 0x003effff, + 0x003fffff, + 0x0040ffff, + 0x0041ffff, + 0x0042ffff, + 0x0043ffff, + 0x0044ffff, + }, + { + 0x000100e8, + 0x000100e8, + 0x000100e9, + 0x000100e9, + 0x000100ea, + 0x000100ea, + 0x000100eb, + 0x000100eb, + 0x000100ec, + 0x000100ec, + 0x000100ed, + 0x000100ed, + 0x000100ee, + 0x000100ee, + 0x000100ef, + 0x000100ef, + }, + { + 0x000100f0, + 0x000100f0, + 0x000100f1, + 0x000100f1, + 0x000100f2, + 0x000100f2, + 0x000100fd, + 0x000100fd, + 0x000100fe, + 0x000100fe, + 0x000100ff, + 0x000100ff, + 0x00010100, + 0x00010100, + 0x00010101, + 0x00010101, + }, + { + 0x00010102, + 0x00010102, + 0x00010103, + 0x00010103, + 0x00010104, + 0x00010104, + 0x00010105, + 0x00010105, + 0x00010106, + 0x00010106, + 0x00010107, + 0x00010107, + 0x00010108, + 0x00010108, + 0x00010109, + 0x00010109, + }, + { + 0x0001010a, + 0x0001010a, + 0x0001010b, + 0x0001010b, + 0x0001010c, + 0x0001010c, + 0x0001010d, + 0x0001010d, + 0x00010115, + 0x00010115, + 0x00010117, + 0x00010117, + 0x00010118, + 0x00010118, + 0x00010119, + 0x00010119, + }, + { + 0x0001011a, + 0x0001011a, + 0x0001011b, + 0x0001011b, + 0x0001011c, + 0x0001011c, + 0x0001011d, + 0x0001011d, + 0x0001011e, + 0x0001011e, + 0x0001011f, + 0x0001011f, + 0x00010120, + 0x00010120, + 0x00010121, + 0x00010121, + }, + { + 0x00010122, + 0x00010122, + 0x00010123, + 0x00010123, + 0x00010124, + 0x00010124, + 0x00010125, + 0x00010125, + 0x00010126, + 0x00010126, + 0x00010127, + 0x00010127, + 0x00010128, + 0x00010128, + 0x0001012f, + 0x0001012f, + }, + { + 0x00010130, + 0x00010130, + 0x00010132, + 0x00010132, + 0x00010133, + 0x00010133, + 0x00010134, + 0x00010134, + 0x00010135, + 0x00010135, + 0x00010136, + 0x00010136, + 0x00010137, + 0x00010137, + 0x00010138, + 0x00010138, + }, + { + 0x00010139, + 0x00010139, + 0x0001013a, + 0x0001013a, + 0x0001013b, + 0x0001013b, + 0x0001013c, + 0x0001013c, + 0x0001013d, + 0x0001013d, + 0x0001013e, + 0x0001013e, + 0x0001013f, + 0x0001013f, + 0x00010140, + 0x00010140, + }, + { + 0x00010141, + 0x00010141, + 0x00010142, + 0x00010142, + 0x00010143, + 0x00010143, + 0x00010147, + 0x00010147, + 0x00010148, + 0x00010148, + 0x00010149, + 0x00010149, + 0x0001014a, + 0x0001014a, + 0x0001014b, + 0x0001014b, + }, + { + 0x0001014c, + 0x0001014c, + 0x0001014d, + 0x0001014d, + 0x0001014e, + 0x0001014e, + 0x0001014f, + 0x0001014f, + 0x00010150, + 0x00010150, + 0x00010151, + 0x00010151, + 0x00010152, + 0x00010152, + 0x00010153, + 0x00010153, + }, + { + 0x00010154, + 0x00010154, + 0x00010155, + 0x00010155, + 0x00010156, + 0x00010156, + 0x00010157, + 0x00010157, + 0x00010158, + 0x00010158, + 0x00010159, + 0x00010159, + 0x0001015a, + 0x0001015a, + 0x0001015b, + 0x0001015b, + }, + { + 0x0001015c, + 0x0001015c, + 0x0001015d, + 0x0001015d, + 0x0001015e, + 0x0001015e, + 0x0001015f, + 0x0001015f, + 0x00010160, + 0x00010160, + 0x00010161, + 0x00010161, + 0x00010162, + 0x00010162, + 0x00010163, + 0x00010163, + }, + { + 0x00010165, + 0x00010165, + 0x00010166, + 0x00010166, + 0x00010167, + 0x00010167, + 0x00010168, + 0x00010168, + 0x00010169, + 0x00010169, + 0x0001016a, + 0x0001016a, + 0x0001016b, + 0x0001016b, + 0x0001016c, + 0x0001016c, + }, + { + 0x0001016d, + 0x0001016d, + 0x0001016e, + 0x0001016e, + 0x0001016f, + 0x0001016f, + 0x00010170, + 0x00010170, + 0x00010171, + 0x00010171, + 0x00010172, + 0x00010172, + 0x00010173, + 0x00010173, + 0x00010174, + 0x00010174, + }, + { + 0x00010175, + 0x00010175, + 0x00010176, + 0x00010176, + 0x00010177, + 0x00010177, + 0x00010178, + 0x00010178, + 0x00010179, + 0x00010179, + 0x0001017a, + 0x0001017a, + 0x0001017b, + 0x0001017b, + 0x0001017c, + 0x0001017c, + }, + { + 0x0001017d, + 0x0001017d, + 0x0001017e, + 0x0001017e, + 0x0001017f, + 0x0001017f, + 0x00010180, + 0x00010180, + 0x00010181, + 0x00010181, + 0x00010182, + 0x00010182, + 0x00010183, + 0x00010183, + 0x00010184, + 0x00010184, + }, + { + 0x0046ffff, + 0x0047ffff, + 0x0048ffff, + 0x0049ffff, + 0x004affff, + 0x004bffff, + 0x004cffff, + 0x004dffff, + 0x004effff, + 0x004fffff, + 0x0050ffff, + 0x0051ffff, + 0x0052ffff, + 0x0053ffff, + 0x0054ffff, + 0x0055ffff, + }, + { + 0x00010185, + 0x00010185, + 0x00010186, + 0x00010186, + 0x00010187, + 0x00010187, + 0x00010188, + 0x00010188, + 0x00010189, + 0x00010189, + 0x0001018a, + 0x0001018a, + 0x0001018b, + 0x0001018b, + 0x0001018c, + 0x0001018c, + }, + { + 0x0001018d, + 0x0001018d, + 0x0001018e, + 0x0001018e, + 0x0001018f, + 0x0001018f, + 0x00010190, + 0x00010190, + 0x00010191, + 0x00010191, + 0x00010192, + 0x00010192, + 0x00010193, + 0x00010193, + 0x00010194, + 0x00010194, + }, + { + 0x00010195, + 0x00010195, + 0x00010196, + 0x00010196, + 0x00010197, + 0x00010197, + 0x00010198, + 0x00010198, + 0x00010199, + 0x00010199, + 0x0001019a, + 0x0001019a, + 0x0001019b, + 0x0001019b, + 0x0001019c, + 0x0001019c, + }, + { + 0x0001019d, + 0x0001019d, + 0x0001019e, + 0x0001019e, + 0x0001019f, + 0x0001019f, + 0x000101a0, + 0x000101a0, + 0x000101a1, + 0x000101a1, + 0x000101a2, + 0x000101a2, + 0x000101a3, + 0x000101a3, + 0x000101a4, + 0x000101a4, + }, + { + 0x000101a5, + 0x000101a5, + 0x000101a6, + 0x000101a6, + 0x000101a7, + 0x000101a7, + 0x000101a8, + 0x000101a8, + 0x000101a9, + 0x000101a9, + 0x000101aa, + 0x000101aa, + 0x000101ab, + 0x000101ab, + 0x000101ac, + 0x000101ac, + }, + { + 0x000101ad, + 0x000101ad, + 0x000101ae, + 0x000101ae, + 0x000101af, + 0x000101af, + 0x000101b0, + 0x000101b0, + 0x000101b1, + 0x000101b1, + 0x000101b2, + 0x000101b2, + 0x000101b3, + 0x000101b3, + 0x000101b4, + 0x000101b4, + }, + { + 0x000101b5, + 0x000101b5, + 0x000101b6, + 0x000101b6, + 0x000101b7, + 0x000101b7, + 0x000101b8, + 0x000101b8, + 0x000101b9, + 0x000101b9, + 0x000101ba, + 0x000101ba, + 0x000101bb, + 0x000101bb, + 0x000101bc, + 0x000101bc, + }, + { + 0x000101bd, + 0x000101bd, + 0x000101be, + 0x000101be, + 0x000101bf, + 0x000101bf, + 0x000101c0, + 0x000101c0, + 0x000101c1, + 0x000101c1, + 0x000101c2, + 0x000101c2, + 0x000101c3, + 0x000101c3, + 0x000101c4, + 0x000101c4, + }, + { + 0x000101c5, + 0x000101c5, + 0x000101c6, + 0x000101c6, + 0x000101c7, + 0x000101c7, + 0x000101c8, + 0x000101c8, + 0x000101c9, + 0x000101c9, + 0x000101ca, + 0x000101ca, + 0x000101cb, + 0x000101cb, + 0x000101cc, + 0x000101cc, + }, + { + 0x000101cd, + 0x000101cd, + 0x000101ce, + 0x000101ce, + 0x000101cf, + 0x000101cf, + 0x000101d0, + 0x000101d0, + 0x000101d1, + 0x000101d1, + 0x000101d2, + 0x000101d2, + 0x000101d3, + 0x000101d3, + 0x000101d4, + 0x000101d4, + }, + { + 0x000101d5, + 0x000101d5, + 0x000101d6, + 0x000101d6, + 0x000101d7, + 0x000101d7, + 0x000101d8, + 0x000101d8, + 0x000101d9, + 0x000101d9, + 0x000101da, + 0x000101da, + 0x000101db, + 0x000101db, + 0x000101dc, + 0x000101dc, + }, + { + 0x000101dd, + 0x000101dd, + 0x000101de, + 0x000101de, + 0x000101df, + 0x000101df, + 0x000101e0, + 0x000101e0, + 0x000101e1, + 0x000101e1, + 0x000101e2, + 0x000101e2, + 0x000101e3, + 0x000101e3, + 0x000101e4, + 0x000101e4, + }, + { + 0x000101e5, + 0x000101e5, + 0x000101e6, + 0x000101e6, + 0x000101e7, + 0x000101e7, + 0x000101e8, + 0x000101e8, + 0x000101e9, + 0x000101e9, + 0x000101ea, + 0x000101ea, + 0x000101eb, + 0x000101eb, + 0x000101ec, + 0x000101ec, + }, + { + 0x000101ed, + 0x000101ed, + 0x000101ee, + 0x000101ee, + 0x000101ef, + 0x000101ef, + 0x000101f0, + 0x000101f0, + 0x000101f1, + 0x000101f1, + 0x000101f2, + 0x000101f2, + 0x000101f3, + 0x000101f3, + 0x000101f4, + 0x000101f4, + }, + { + 0x000101f5, + 0x000101f5, + 0x000101f6, + 0x000101f6, + 0x000101f7, + 0x000101f7, + 0x000101f8, + 0x000101f8, + 0x000101f9, + 0x000101f9, + 0x000101fa, + 0x000101fa, + 0x000101fb, + 0x000101fb, + 0x000101fc, + 0x000101fc, + }, + { + 0x000101fd, + 0x000101fd, + 0x000101fe, + 0x000101fe, + 0x000101ff, + 0x000101ff, + 0x00010200, + 0x00010200, + 0x00010201, + 0x00010201, + 0x00010202, + 0x00010202, + 0x00010203, + 0x00010203, + 0x00010204, + 0x00010204, + }, + { + 0x0057ffff, + 0x0058ffff, + 0x0059ffff, + 0x005affff, + 0x005bffff, + 0x005cffff, + 0x005dffff, + 0x005effff, + 0x005fffff, + 0x0060ffff, + 0x0061ffff, + 0x0062ffff, + 0x0063ffff, + 0x0064ffff, + 0x0065ffff, + 0x0066ffff, + }, + { + 0x00010205, + 0x00010205, + 0x00010206, + 0x00010206, + 0x00010207, + 0x00010207, + 0x00010208, + 0x00010208, + 0x00010209, + 0x00010209, + 0x0001020a, + 0x0001020a, + 0x0001020b, + 0x0001020b, + 0x0001020c, + 0x0001020c, + }, + { + 0x0001020d, + 0x0001020d, + 0x0001020e, + 0x0001020e, + 0x0001020f, + 0x0001020f, + 0x00010210, + 0x00010210, + 0x00010211, + 0x00010211, + 0x00010212, + 0x00010212, + 0x00010213, + 0x00010213, + 0x00010214, + 0x00010214, + }, + { + 0x00010215, + 0x00010215, + 0x00010216, + 0x00010216, + 0x00010217, + 0x00010217, + 0x00010218, + 0x00010218, + 0x00010219, + 0x00010219, + 0x0001021a, + 0x0001021a, + 0x0001021b, + 0x0001021b, + 0x0001021c, + 0x0001021c, + }, + { + 0x0001021d, + 0x0001021d, + 0x0001021e, + 0x0001021e, + 0x0001021f, + 0x0001021f, + 0x00010220, + 0x00010220, + 0x00010221, + 0x00010221, + 0x00010222, + 0x00010222, + 0x00010223, + 0x00010223, + 0x00010224, + 0x00010224, + }, + { + 0x00010225, + 0x00010225, + 0x00010226, + 0x00010226, + 0x00010227, + 0x00010227, + 0x00010228, + 0x00010228, + 0x00010229, + 0x00010229, + 0x0001022a, + 0x0001022a, + 0x0001022b, + 0x0001022b, + 0x0001022c, + 0x0001022c, + }, + { + 0x0001022d, + 0x0001022d, + 0x0001022e, + 0x0001022e, + 0x0001022f, + 0x0001022f, + 0x00010230, + 0x00010230, + 0x00010231, + 0x00010231, + 0x00010232, + 0x00010232, + 0x00010233, + 0x00010233, + 0x00010234, + 0x00010234, + }, + { + 0x00010235, + 0x00010235, + 0x00010236, + 0x00010236, + 0x00010237, + 0x00010237, + 0x00010238, + 0x00010238, + 0x00010239, + 0x00010239, + 0x0001023a, + 0x0001023a, + 0x0001023b, + 0x0001023b, + 0x0001023c, + 0x0001023c, + }, + { + 0x0001023d, + 0x0001023d, + 0x0001023e, + 0x0001023e, + 0x0001023f, + 0x0001023f, + 0x00010240, + 0x00010240, + 0x00010241, + 0x00010241, + 0x00010242, + 0x00010242, + 0x00010243, + 0x00010243, + 0x00010244, + 0x00010244, + }, + { + 0x00010245, + 0x00010245, + 0x00010246, + 0x00010246, + 0x00010247, + 0x00010247, + 0x00010248, + 0x00010248, + 0x00010249, + 0x00010249, + 0x0001024a, + 0x0001024a, + 0x0001024b, + 0x0001024b, + 0x0001024c, + 0x0001024c, + }, + { + 0x0001024d, + 0x0001024d, + 0x0001024e, + 0x0001024e, + 0x0001024f, + 0x0001024f, + 0x00010250, + 0x00010250, + 0x00010251, + 0x00010251, + 0x00010252, + 0x00010252, + 0x00010253, + 0x00010253, + 0x00010254, + 0x00010254, + }, + { + 0x00010255, + 0x00010255, + 0x00010256, + 0x00010256, + 0x00010257, + 0x00010257, + 0x00010258, + 0x00010258, + 0x00010259, + 0x00010259, + 0x0001025a, + 0x0001025a, + 0x0001025b, + 0x0001025b, + 0x0001025c, + 0x0001025c, + }, + { + 0x0001025d, + 0x0001025d, + 0x0001025e, + 0x0001025e, + 0x0001025f, + 0x0001025f, + 0x00010260, + 0x00010260, + 0x00010261, + 0x00010261, + 0x00010262, + 0x00010262, + 0x00010263, + 0x00010263, + 0x00010264, + 0x00010264, + }, + { + 0x00010265, + 0x00010265, + 0x00010266, + 0x00010266, + 0x00010267, + 0x00010267, + 0x00010268, + 0x00010268, + 0x00010269, + 0x00010269, + 0x0001026a, + 0x0001026a, + 0x0001026b, + 0x0001026b, + 0x0001026c, + 0x0001026c, + }, + { + 0x0001026d, + 0x0001026d, + 0x0001026e, + 0x0001026e, + 0x0001026f, + 0x0001026f, + 0x00010270, + 0x00010270, + 0x00010271, + 0x00010271, + 0x00010272, + 0x00010272, + 0x00010273, + 0x00010273, + 0x00010274, + 0x00010274, + }, + { + 0x00010275, + 0x00010275, + 0x00010276, + 0x00010276, + 0x00010277, + 0x00010277, + 0x00010278, + 0x00010278, + 0x00010279, + 0x00010279, + 0x0001027a, + 0x0001027a, + 0x0001027b, + 0x0001027b, + 0x0001027c, + 0x0001027c, + }, + { + 0x0001027d, + 0x0001027d, + 0x0001027e, + 0x0001027e, + 0x0001027f, + 0x0001027f, + 0x00010280, + 0x00010280, + 0x00010281, + 0x00010281, + 0x00010282, + 0x00010282, + 0x00010283, + 0x00010283, + 0x00010284, + 0x00010284, + }, + { + 0x00010285, + 0x00010285, + 0x00010286, + 0x00010286, + 0x00010287, + 0x00010287, + 0x00010288, + 0x00010288, + 0x00010289, + 0x00010289, + 0x0001028a, + 0x0001028a, + 0x0001028b, + 0x0001028b, + 0x0001028c, + 0x0001028c, + }, + { + 0x0001028d, + 0x0001028d, + 0x0001028e, + 0x0001028e, + 0x0001028f, + 0x0001028f, + 0x00010290, + 0x00010290, + 0x00010291, + 0x00010291, + 0x00010292, + 0x00010292, + 0x00010293, + 0x00010293, + 0x00010294, + 0x00010294, + }, + { + 0x00010295, + 0x00010295, + 0x00010296, + 0x00010296, + 0x00010297, + 0x00010297, + 0x00010298, + 0x00010298, + 0x00010299, + 0x00010299, + 0x0001029a, + 0x0001029a, + 0x0001029b, + 0x0001029b, + 0x0001029c, + 0x0001029c, + }, + { + 0x0001029d, + 0x0001029d, + 0x0001029e, + 0x0001029e, + 0x0001029f, + 0x0001029f, + 0x000102a0, + 0x000102a0, + 0x000102a1, + 0x000102a1, + 0x000102a2, + 0x000102a2, + 0x000102a3, + 0x000102a3, + 0x000102a4, + 0x000102a4, + }, + { + 0x000102a5, + 0x000102a5, + 0x000102a6, + 0x000102a6, + 0x000102a7, + 0x000102a7, + 0x000102a8, + 0x000102a8, + 0x000102a9, + 0x000102a9, + 0x000102aa, + 0x000102aa, + 0x000102ab, + 0x000102ab, + 0x000102ac, + 0x000102ac, + }, + { + 0x000102ad, + 0x000102ad, + 0x000102ae, + 0x000102ae, + 0x000102af, + 0x000102af, + 0x000102b0, + 0x000102b0, + 0x000102b1, + 0x000102b1, + 0x000102b2, + 0x000102b2, + 0x000102b3, + 0x000102b3, + 0x000102b4, + 0x000102b4, + }, + { + 0x000102b5, + 0x000102b5, + 0x000102b6, + 0x000102b6, + 0x000102b7, + 0x000102b7, + 0x000102b8, + 0x000102b8, + 0x000102b9, + 0x000102b9, + 0x000102ba, + 0x000102ba, + 0x000102bb, + 0x000102bb, + 0x000102bc, + 0x000102bc, + }, + { + 0x000102bd, + 0x000102bd, + 0x000102be, + 0x000102be, + 0x000102bf, + 0x000102bf, + 0x000102c0, + 0x000102c0, + 0x000102c1, + 0x000102c1, + 0x000102c2, + 0x000102c2, + 0x000102c3, + 0x000102c3, + 0x000102c4, + 0x000102c4, + }, + { + 0x000102c5, + 0x000102c5, + 0x000102c6, + 0x000102c6, + 0x000102c7, + 0x000102c7, + 0x000102c8, + 0x000102c8, + 0x000102c9, + 0x000102c9, + 0x000102ca, + 0x000102ca, + 0x000102cb, + 0x000102cb, + 0x000102cc, + 0x000102cc, + }, + { + 0x000102cd, + 0x000102cd, + 0x000102ce, + 0x000102ce, + 0x000102cf, + 0x000102cf, + 0x000102d0, + 0x000102d0, + 0x000102d1, + 0x000102d1, + 0x000102d2, + 0x000102d2, + 0x000102d3, + 0x000102d3, + 0x000102d4, + 0x000102d4, + }, }; #endif #ifndef ROM_TO_RAM @@ -3620,22 +38325,147 @@ const uint32_t c_aauiCQMFHuffEnc50[28][2] = #else const uint16_t c_aauiCQMFHuffEnc50[28][2] = #endif -{ - {0x0002, 0x0001}, {0x0002, 0x0002}, {0x0002, 0x0003}, {0x0003, 0x0001}, {0x0004, 0x0001}, {0x0005, 0x0001}, {0x0006, 0x0001}, {0x0007, 0x0001}, - {0x0008, 0x0001}, {0x0009, 0x0001}, {0x000a, 0x0001}, {0x000b, 0x0001}, {0x000c, 0x0001}, {0x000d, 0x0001}, {0x000e, 0x0001}, {0x000f, 0x0001}, - {0x0011, 0x0003}, {0x0012, 0x0005}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, - {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, + { + { 0x0002, 0x0001 }, + { 0x0002, 0x0002 }, + { 0x0002, 0x0003 }, + { 0x0003, 0x0001 }, + { 0x0004, 0x0001 }, + { 0x0005, 0x0001 }, + { 0x0006, 0x0001 }, + { 0x0007, 0x0001 }, + { 0x0008, 0x0001 }, + { 0x0009, 0x0001 }, + { 0x000a, 0x0001 }, + { 0x000b, 0x0001 }, + { 0x000c, 0x0001 }, + { 0x000d, 0x0001 }, + { 0x000e, 0x0001 }, + { 0x000f, 0x0001 }, + { 0x0011, 0x0003 }, + { 0x0012, 0x0005 }, + { 0x0013, 0x0000 }, + { 0x0013, 0x0001 }, + { 0x0013, 0x0002 }, + { 0x0013, 0x0003 }, + { 0x0013, 0x0004 }, + { 0x0013, 0x0005 }, + { 0x0013, 0x0006 }, + { 0x0013, 0x0007 }, + { 0x0013, 0x0008 }, + { 0x0013, 0x0009 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec50[6][16] = -{ - {0x0001ffff, 0x00000004, 0x00010003, 0x00010003, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020001, 0x00020001, 0x00020001, 0x00020001, 0x00020002, 0x00020002, 0x00020002, 0x00020002, }, - {0x0002ffff, 0x00000008, 0x00010007, 0x00010007, 0x00020006, 0x00020006, 0x00020006, 0x00020006, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, }, - {0x0003ffff, 0x0000000c, 0x0001000b, 0x0001000b, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, - {0x0005ffff, 0x0004ffff, 0x0001000f, 0x0001000f, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, }, - {0x0001001a, 0x0001001a, 0x0001001b, 0x0001001b, 0x00020011, 0x00020011, 0x00020011, 0x00020011, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, 0x00030010, }, - {0x00010012, 0x00010012, 0x00010013, 0x00010013, 0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010019, 0x00010019, }, +const uint32_t c_aauiCQMFHuffDec50[6][16] = { + { + 0x0001ffff, + 0x00000004, + 0x00010003, + 0x00010003, + 0x00020000, + 0x00020000, + 0x00020000, + 0x00020000, + 0x00020001, + 0x00020001, + 0x00020001, + 0x00020001, + 0x00020002, + 0x00020002, + 0x00020002, + 0x00020002, + }, + { + 0x0002ffff, + 0x00000008, + 0x00010007, + 0x00010007, + 0x00020006, + 0x00020006, + 0x00020006, + 0x00020006, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + }, + { + 0x0003ffff, + 0x0000000c, + 0x0001000b, + 0x0001000b, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + }, + { + 0x0005ffff, + 0x0004ffff, + 0x0001000f, + 0x0001000f, + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + }, + { + 0x0001001a, + 0x0001001a, + 0x0001001b, + 0x0001001b, + 0x00020011, + 0x00020011, + 0x00020011, + 0x00020011, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + 0x00030010, + }, + { + 0x00010012, + 0x00010012, + 0x00010013, + 0x00010013, + 0x00010014, + 0x00010014, + 0x00010015, + 0x00010015, + 0x00010016, + 0x00010016, + 0x00010017, + 0x00010017, + 0x00010018, + 0x00010018, + 0x00010019, + 0x00010019, + }, }; #endif #ifndef ROM_TO_RAM @@ -3643,22 +38473,148 @@ const uint32_t c_aauiCQMFHuffEnc51[29][2] = #else const uint16_t c_aauiCQMFHuffEnc51[29][2] = #endif -{ - {0x0002, 0x0002}, {0x0002, 0x0003}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0004, 0x0001}, {0x0004, 0x0002}, {0x0004, 0x0003}, {0x0005, 0x0001}, - {0x0006, 0x0001}, {0x0007, 0x0001}, {0x0008, 0x0001}, {0x0009, 0x0001}, {0x000a, 0x0001}, {0x000b, 0x0001}, {0x000c, 0x0001}, {0x000d, 0x0001}, - {0x000e, 0x0001}, {0x0010, 0x0002}, {0x0010, 0x0003}, {0x0012, 0x0002}, {0x0012, 0x0003}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, - {0x0013, 0x0003}, {0x0012, 0x0004}, {0x0012, 0x0005}, {0x0012, 0x0006}, {0x0012, 0x0007}, + { + { 0x0002, 0x0002 }, + { 0x0002, 0x0003 }, + { 0x0003, 0x0002 }, + { 0x0003, 0x0003 }, + { 0x0004, 0x0001 }, + { 0x0004, 0x0002 }, + { 0x0004, 0x0003 }, + { 0x0005, 0x0001 }, + { 0x0006, 0x0001 }, + { 0x0007, 0x0001 }, + { 0x0008, 0x0001 }, + { 0x0009, 0x0001 }, + { 0x000a, 0x0001 }, + { 0x000b, 0x0001 }, + { 0x000c, 0x0001 }, + { 0x000d, 0x0001 }, + { 0x000e, 0x0001 }, + { 0x0010, 0x0002 }, + { 0x0010, 0x0003 }, + { 0x0012, 0x0002 }, + { 0x0012, 0x0003 }, + { 0x0013, 0x0000 }, + { 0x0013, 0x0001 }, + { 0x0013, 0x0002 }, + { 0x0013, 0x0003 }, + { 0x0012, 0x0004 }, + { 0x0012, 0x0005 }, + { 0x0012, 0x0006 }, + { 0x0012, 0x0007 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec51[6][16] = -{ - {0x0001ffff, 0x00000004, 0x00000005, 0x00000006, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020001, 0x00020001, 0x00020001, 0x00020001, }, - {0x0002ffff, 0x0000000a, 0x00010009, 0x00010009, 0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, }, - {0x0003ffff, 0x0000000e, 0x0001000d, 0x0001000d, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, - {0x0004ffff, 0x0005ffff, 0x00000011, 0x00000012, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, 0x0003000f, }, - {0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00020013, 0x00020013, 0x00020013, 0x00020013, 0x00020014, 0x00020014, 0x00020014, 0x00020014, }, - {0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, }, +const uint32_t c_aauiCQMFHuffDec51[6][16] = { + { + 0x0001ffff, + 0x00000004, + 0x00000005, + 0x00000006, + 0x00010002, + 0x00010002, + 0x00010003, + 0x00010003, + 0x00020000, + 0x00020000, + 0x00020000, + 0x00020000, + 0x00020001, + 0x00020001, + 0x00020001, + 0x00020001, + }, + { + 0x0002ffff, + 0x0000000a, + 0x00010009, + 0x00010009, + 0x00020008, + 0x00020008, + 0x00020008, + 0x00020008, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + }, + { + 0x0003ffff, + 0x0000000e, + 0x0001000d, + 0x0001000d, + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + }, + { + 0x0004ffff, + 0x0005ffff, + 0x00000011, + 0x00000012, + 0x00020010, + 0x00020010, + 0x00020010, + 0x00020010, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + 0x0003000f, + }, + { + 0x00010015, + 0x00010015, + 0x00010016, + 0x00010016, + 0x00010017, + 0x00010017, + 0x00010018, + 0x00010018, + 0x00020013, + 0x00020013, + 0x00020013, + 0x00020013, + 0x00020014, + 0x00020014, + 0x00020014, + 0x00020014, + }, + { + 0x00020019, + 0x00020019, + 0x00020019, + 0x00020019, + 0x0002001a, + 0x0002001a, + 0x0002001a, + 0x0002001a, + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002001c, + 0x0002001c, + 0x0002001c, + 0x0002001c, + }, }; #endif #ifndef ROM_TO_RAM @@ -3666,22 +38622,168 @@ const uint32_t c_aauiCQMFHuffEnc52[32][2] = #else const uint16_t c_aauiCQMFHuffEnc52[32][2] = #endif -{ - {0x0002, 0x0002}, {0x0002, 0x0003}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0004, 0x0002}, {0x0004, 0x0003}, {0x0005, 0x0001}, {0x0005, 0x0002}, - {0x0005, 0x0003}, {0x0006, 0x0001}, {0x0007, 0x0001}, {0x0008, 0x0001}, {0x0009, 0x0001}, {0x000a, 0x0001}, {0x000b, 0x0001}, {0x000c, 0x0001}, - {0x000e, 0x0001}, {0x000e, 0x0002}, {0x000e, 0x0003}, {0x000f, 0x0001}, {0x0011, 0x0002}, {0x0011, 0x0003}, {0x0012, 0x0003}, {0x0014, 0x0000}, - {0x0013, 0x0003}, {0x0014, 0x0001}, {0x0014, 0x0002}, {0x0014, 0x0003}, {0x0014, 0x0004}, {0x0014, 0x0005}, {0x0013, 0x0004}, {0x0013, 0x0005}, -}; + { + { 0x0002, 0x0002 }, + { 0x0002, 0x0003 }, + { 0x0003, 0x0002 }, + { 0x0003, 0x0003 }, + { 0x0004, 0x0002 }, + { 0x0004, 0x0003 }, + { 0x0005, 0x0001 }, + { 0x0005, 0x0002 }, + { 0x0005, 0x0003 }, + { 0x0006, 0x0001 }, + { 0x0007, 0x0001 }, + { 0x0008, 0x0001 }, + { 0x0009, 0x0001 }, + { 0x000a, 0x0001 }, + { 0x000b, 0x0001 }, + { 0x000c, 0x0001 }, + { 0x000e, 0x0001 }, + { 0x000e, 0x0002 }, + { 0x000e, 0x0003 }, + { 0x000f, 0x0001 }, + { 0x0011, 0x0002 }, + { 0x0011, 0x0003 }, + { 0x0012, 0x0003 }, + { 0x0014, 0x0000 }, + { 0x0013, 0x0003 }, + { 0x0014, 0x0001 }, + { 0x0014, 0x0002 }, + { 0x0014, 0x0003 }, + { 0x0014, 0x0004 }, + { 0x0014, 0x0005 }, + { 0x0013, 0x0004 }, + { 0x0013, 0x0005 }, + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec52[7][16] = -{ - {0x0001ffff, 0x0002ffff, 0x00000004, 0x00000005, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020001, 0x00020001, 0x00020001, 0x00020001, }, - {0x0003ffff, 0x0000000b, 0x0001000a, 0x0001000a, 0x00020009, 0x00020009, 0x00020009, 0x00020009, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, - {0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, }, - {0x0004ffff, 0x0000000f, 0x0001000e, 0x0001000e, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, - {0x0006ffff, 0x0005ffff, 0x00010013, 0x00010013, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x00020011, 0x00020011, 0x00020011, 0x00020011, 0x00020012, 0x00020012, 0x00020012, 0x00020012, }, - {0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, }, - {0x00000017, 0x00000019, 0x0000001a, 0x0000001b, 0x0000001c, 0x0000001d, 0x00010018, 0x00010018, 0x0001001e, 0x0001001e, 0x0001001f, 0x0001001f, 0x00020016, 0x00020016, 0x00020016, 0x00020016, }, +const uint32_t c_aauiCQMFHuffDec52[7][16] = { + { + 0x0001ffff, + 0x0002ffff, + 0x00000004, + 0x00000005, + 0x00010002, + 0x00010002, + 0x00010003, + 0x00010003, + 0x00020000, + 0x00020000, + 0x00020000, + 0x00020000, + 0x00020001, + 0x00020001, + 0x00020001, + 0x00020001, + }, + { + 0x0003ffff, + 0x0000000b, + 0x0001000a, + 0x0001000a, + 0x00020009, + 0x00020009, + 0x00020009, + 0x00020009, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + }, + { + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + }, + { + 0x0004ffff, + 0x0000000f, + 0x0001000e, + 0x0001000e, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + }, + { + 0x0006ffff, + 0x0005ffff, + 0x00010013, + 0x00010013, + 0x00020010, + 0x00020010, + 0x00020010, + 0x00020010, + 0x00020011, + 0x00020011, + 0x00020011, + 0x00020011, + 0x00020012, + 0x00020012, + 0x00020012, + 0x00020012, + }, + { + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + }, + { + 0x00000017, + 0x00000019, + 0x0000001a, + 0x0000001b, + 0x0000001c, + 0x0000001d, + 0x00010018, + 0x00010018, + 0x0001001e, + 0x0001001e, + 0x0001001f, + 0x0001001f, + 0x00020016, + 0x00020016, + 0x00020016, + 0x00020016, + }, }; #endif #ifndef ROM_TO_RAM @@ -3689,26 +38791,210 @@ const uint32_t c_aauiCQMFHuffEnc53[37][2] = #else const uint16_t c_aauiCQMFHuffEnc53[37][2] = #endif -{ - {0x0002, 0x0002}, {0x0002, 0x0003}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0004, 0x0002}, {0x0004, 0x0003}, {0x0005, 0x0002}, {0x0005, 0x0003}, - {0x0006, 0x0002}, {0x0006, 0x0003}, {0x0007, 0x0001}, {0x0007, 0x0002}, {0x0007, 0x0003}, {0x0008, 0x0001}, {0x0009, 0x0001}, {0x000b, 0x0002}, - {0x000b, 0x0003}, {0x000c, 0x0002}, {0x000c, 0x0003}, {0x000d, 0x0002}, {0x000d, 0x0003}, {0x000e, 0x0002}, {0x000e, 0x0003}, {0x000f, 0x0002}, - {0x000f, 0x0003}, {0x0011, 0x0004}, {0x0010, 0x0003}, {0x0011, 0x0005}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0012, 0x0001}, {0x0012, 0x0002}, - {0x0012, 0x0003}, {0x0012, 0x0004}, {0x0012, 0x0005}, {0x0012, 0x0006}, {0x0012, 0x0007}, + { + { 0x0002, 0x0002 }, + { 0x0002, 0x0003 }, + { 0x0003, 0x0002 }, + { 0x0003, 0x0003 }, + { 0x0004, 0x0002 }, + { 0x0004, 0x0003 }, + { 0x0005, 0x0002 }, + { 0x0005, 0x0003 }, + { 0x0006, 0x0002 }, + { 0x0006, 0x0003 }, + { 0x0007, 0x0001 }, + { 0x0007, 0x0002 }, + { 0x0007, 0x0003 }, + { 0x0008, 0x0001 }, + { 0x0009, 0x0001 }, + { 0x000b, 0x0002 }, + { 0x000b, 0x0003 }, + { 0x000c, 0x0002 }, + { 0x000c, 0x0003 }, + { 0x000d, 0x0002 }, + { 0x000d, 0x0003 }, + { 0x000e, 0x0002 }, + { 0x000e, 0x0003 }, + { 0x000f, 0x0002 }, + { 0x000f, 0x0003 }, + { 0x0011, 0x0004 }, + { 0x0010, 0x0003 }, + { 0x0011, 0x0005 }, + { 0x0013, 0x0000 }, + { 0x0013, 0x0001 }, + { 0x0012, 0x0001 }, + { 0x0012, 0x0002 }, + { 0x0012, 0x0003 }, + { 0x0012, 0x0004 }, + { 0x0012, 0x0005 }, + { 0x0012, 0x0006 }, + { 0x0012, 0x0007 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec53[9][16] = -{ - {0x0002ffff, 0x0001ffff, 0x00000004, 0x00000005, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020001, 0x00020001, 0x00020001, 0x00020001, }, - {0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, }, - {0x0003ffff, 0x0000000d, 0x0001000a, 0x0001000a, 0x0001000b, 0x0001000b, 0x0001000c, 0x0001000c, 0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x00020009, 0x00020009, 0x00020009, 0x00020009, }, - {0x0005ffff, 0x0004ffff, 0x00000011, 0x00000012, 0x0001000f, 0x0001000f, 0x00010010, 0x00010010, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, 0x0003000e, }, - {0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, }, - {0x0007ffff, 0x0008ffff, 0x0006ffff, 0x0000001a, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00020015, 0x00020015, 0x00020015, 0x00020015, 0x00020016, 0x00020016, 0x00020016, 0x00020016, }, - {0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, }, - {0x0001001c, 0x0001001c, 0x0001001d, 0x0001001d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, 0x00020020, 0x00020020, 0x00020020, 0x00020020, }, - {0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x00020023, 0x00020023, 0x00020023, 0x00020023, 0x00020024, 0x00020024, 0x00020024, 0x00020024, }, +const uint32_t c_aauiCQMFHuffDec53[9][16] = { + { + 0x0002ffff, + 0x0001ffff, + 0x00000004, + 0x00000005, + 0x00010002, + 0x00010002, + 0x00010003, + 0x00010003, + 0x00020000, + 0x00020000, + 0x00020000, + 0x00020000, + 0x00020001, + 0x00020001, + 0x00020001, + 0x00020001, + }, + { + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + }, + { + 0x0003ffff, + 0x0000000d, + 0x0001000a, + 0x0001000a, + 0x0001000b, + 0x0001000b, + 0x0001000c, + 0x0001000c, + 0x00020008, + 0x00020008, + 0x00020008, + 0x00020008, + 0x00020009, + 0x00020009, + 0x00020009, + 0x00020009, + }, + { + 0x0005ffff, + 0x0004ffff, + 0x00000011, + 0x00000012, + 0x0001000f, + 0x0001000f, + 0x00010010, + 0x00010010, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + 0x0003000e, + }, + { + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + }, + { + 0x0007ffff, + 0x0008ffff, + 0x0006ffff, + 0x0000001a, + 0x00010017, + 0x00010017, + 0x00010018, + 0x00010018, + 0x00020015, + 0x00020015, + 0x00020015, + 0x00020015, + 0x00020016, + 0x00020016, + 0x00020016, + 0x00020016, + }, + { + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + }, + { + 0x0001001c, + 0x0001001c, + 0x0001001d, + 0x0001001d, + 0x0002001e, + 0x0002001e, + 0x0002001e, + 0x0002001e, + 0x0002001f, + 0x0002001f, + 0x0002001f, + 0x0002001f, + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020020, + }, + { + 0x00020021, + 0x00020021, + 0x00020021, + 0x00020021, + 0x00020022, + 0x00020022, + 0x00020022, + 0x00020022, + 0x00020023, + 0x00020023, + 0x00020023, + 0x00020023, + 0x00020024, + 0x00020024, + 0x00020024, + 0x00020024, + }, }; #endif #ifndef ROM_TO_RAM @@ -3716,26 +39002,212 @@ const uint32_t c_aauiCQMFHuffEnc54[39][2] = #else const uint16_t c_aauiCQMFHuffEnc54[39][2] = #endif -{ - {0x0002, 0x0002}, {0x0002, 0x0003}, {0x0003, 0x0002}, {0x0003, 0x0003}, {0x0004, 0x0003}, {0x0005, 0x0003}, {0x0005, 0x0004}, {0x0005, 0x0005}, - {0x0006, 0x0002}, {0x0006, 0x0003}, {0x0006, 0x0004}, {0x0006, 0x0005}, {0x0007, 0x0002}, {0x0007, 0x0003}, {0x0008, 0x0001}, {0x0008, 0x0002}, - {0x0008, 0x0003}, {0x000a, 0x0002}, {0x000a, 0x0003}, {0x000b, 0x0002}, {0x000b, 0x0003}, {0x000c, 0x0002}, {0x000c, 0x0003}, {0x000d, 0x0002}, - {0x000d, 0x0003}, {0x000e, 0x0002}, {0x000e, 0x0003}, {0x000f, 0x0002}, {0x000f, 0x0003}, {0x0011, 0x0002}, {0x0010, 0x0002}, {0x0010, 0x0003}, - {0x0011, 0x0003}, {0x0012, 0x0002}, {0x0012, 0x0003}, {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, + { + { 0x0002, 0x0002 }, + { 0x0002, 0x0003 }, + { 0x0003, 0x0002 }, + { 0x0003, 0x0003 }, + { 0x0004, 0x0003 }, + { 0x0005, 0x0003 }, + { 0x0005, 0x0004 }, + { 0x0005, 0x0005 }, + { 0x0006, 0x0002 }, + { 0x0006, 0x0003 }, + { 0x0006, 0x0004 }, + { 0x0006, 0x0005 }, + { 0x0007, 0x0002 }, + { 0x0007, 0x0003 }, + { 0x0008, 0x0001 }, + { 0x0008, 0x0002 }, + { 0x0008, 0x0003 }, + { 0x000a, 0x0002 }, + { 0x000a, 0x0003 }, + { 0x000b, 0x0002 }, + { 0x000b, 0x0003 }, + { 0x000c, 0x0002 }, + { 0x000c, 0x0003 }, + { 0x000d, 0x0002 }, + { 0x000d, 0x0003 }, + { 0x000e, 0x0002 }, + { 0x000e, 0x0003 }, + { 0x000f, 0x0002 }, + { 0x000f, 0x0003 }, + { 0x0011, 0x0002 }, + { 0x0010, 0x0002 }, + { 0x0010, 0x0003 }, + { 0x0011, 0x0003 }, + { 0x0012, 0x0002 }, + { 0x0012, 0x0003 }, + { 0x0013, 0x0000 }, + { 0x0013, 0x0001 }, + { 0x0013, 0x0002 }, + { 0x0013, 0x0003 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec54[9][16] = -{ - {0x0003ffff, 0x0001ffff, 0x0002ffff, 0x00000004, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020001, 0x00020001, 0x00020001, 0x00020001, }, - {0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, }, - {0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, }, - {0x0004ffff, 0x0000000e, 0x0000000f, 0x00000010, 0x0001000c, 0x0001000c, 0x0001000d, 0x0001000d, 0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x00020009, 0x00020009, 0x00020009, 0x00020009, }, - {0x0006ffff, 0x0005ffff, 0x00000015, 0x00000016, 0x00010013, 0x00010013, 0x00010014, 0x00010014, 0x00020011, 0x00020011, 0x00020011, 0x00020011, 0x00020012, 0x00020012, 0x00020012, 0x00020012, }, - {0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, }, - {0x0008ffff, 0x0007ffff, 0x0000001e, 0x0000001f, 0x0001001b, 0x0001001b, 0x0001001c, 0x0001001c, 0x00020019, 0x00020019, 0x00020019, 0x00020019, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, }, - {0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, 0x00030020, }, - {0x00010023, 0x00010023, 0x00010024, 0x00010024, 0x00010025, 0x00010025, 0x00010026, 0x00010026, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, }, +const uint32_t c_aauiCQMFHuffDec54[9][16] = { + { + 0x0003ffff, + 0x0001ffff, + 0x0002ffff, + 0x00000004, + 0x00010002, + 0x00010002, + 0x00010003, + 0x00010003, + 0x00020000, + 0x00020000, + 0x00020000, + 0x00020000, + 0x00020001, + 0x00020001, + 0x00020001, + 0x00020001, + }, + { + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x0002000b, + 0x0002000b, + 0x0002000b, + 0x0002000b, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + }, + { + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + }, + { + 0x0004ffff, + 0x0000000e, + 0x0000000f, + 0x00000010, + 0x0001000c, + 0x0001000c, + 0x0001000d, + 0x0001000d, + 0x00020008, + 0x00020008, + 0x00020008, + 0x00020008, + 0x00020009, + 0x00020009, + 0x00020009, + 0x00020009, + }, + { + 0x0006ffff, + 0x0005ffff, + 0x00000015, + 0x00000016, + 0x00010013, + 0x00010013, + 0x00010014, + 0x00010014, + 0x00020011, + 0x00020011, + 0x00020011, + 0x00020011, + 0x00020012, + 0x00020012, + 0x00020012, + 0x00020012, + }, + { + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + }, + { + 0x0008ffff, + 0x0007ffff, + 0x0000001e, + 0x0000001f, + 0x0001001b, + 0x0001001b, + 0x0001001c, + 0x0001001c, + 0x00020019, + 0x00020019, + 0x00020019, + 0x00020019, + 0x0002001a, + 0x0002001a, + 0x0002001a, + 0x0002001a, + }, + { + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + 0x00030020, + }, + { + 0x00010023, + 0x00010023, + 0x00010024, + 0x00010024, + 0x00010025, + 0x00010025, + 0x00010026, + 0x00010026, + 0x00020021, + 0x00020021, + 0x00020021, + 0x00020021, + 0x00020022, + 0x00020022, + 0x00020022, + 0x00020022, + }, }; #endif #ifndef ROM_TO_RAM @@ -3743,28 +39215,237 @@ const uint32_t c_aauiCQMFHuffEnc55[46][2] = #else const uint16_t c_aauiCQMFHuffEnc55[46][2] = #endif -{ - {0x0003, 0x0003}, {0x0002, 0x0003}, {0x0003, 0x0004}, {0x0003, 0x0005}, {0x0004, 0x0003}, {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0005, 0x0003}, - {0x0005, 0x0004}, {0x0005, 0x0005}, {0x0006, 0x0003}, {0x0006, 0x0004}, {0x0006, 0x0005}, {0x0007, 0x0002}, {0x0007, 0x0003}, {0x0007, 0x0004}, - {0x0007, 0x0005}, {0x0008, 0x0002}, {0x0008, 0x0003}, {0x0009, 0x0002}, {0x0009, 0x0003}, {0x000a, 0x0002}, {0x000a, 0x0003}, {0x000b, 0x0002}, - {0x000b, 0x0003}, {0x000c, 0x0002}, {0x000c, 0x0003}, {0x000d, 0x0002}, {0x000d, 0x0003}, {0x000e, 0x0002}, {0x000e, 0x0003}, {0x000f, 0x0003}, - {0x0010, 0x0002}, {0x0010, 0x0003}, {0x0010, 0x0004}, {0x0010, 0x0005}, {0x0011, 0x0003}, {0x0012, 0x0003}, {0x0012, 0x0004}, {0x0012, 0x0005}, - {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, + { + { 0x0003, 0x0003 }, + { 0x0002, 0x0003 }, + { 0x0003, 0x0004 }, + { 0x0003, 0x0005 }, + { 0x0004, 0x0003 }, + { 0x0004, 0x0004 }, + { 0x0004, 0x0005 }, + { 0x0005, 0x0003 }, + { 0x0005, 0x0004 }, + { 0x0005, 0x0005 }, + { 0x0006, 0x0003 }, + { 0x0006, 0x0004 }, + { 0x0006, 0x0005 }, + { 0x0007, 0x0002 }, + { 0x0007, 0x0003 }, + { 0x0007, 0x0004 }, + { 0x0007, 0x0005 }, + { 0x0008, 0x0002 }, + { 0x0008, 0x0003 }, + { 0x0009, 0x0002 }, + { 0x0009, 0x0003 }, + { 0x000a, 0x0002 }, + { 0x000a, 0x0003 }, + { 0x000b, 0x0002 }, + { 0x000b, 0x0003 }, + { 0x000c, 0x0002 }, + { 0x000c, 0x0003 }, + { 0x000d, 0x0002 }, + { 0x000d, 0x0003 }, + { 0x000e, 0x0002 }, + { 0x000e, 0x0003 }, + { 0x000f, 0x0003 }, + { 0x0010, 0x0002 }, + { 0x0010, 0x0003 }, + { 0x0010, 0x0004 }, + { 0x0010, 0x0005 }, + { 0x0011, 0x0003 }, + { 0x0012, 0x0003 }, + { 0x0012, 0x0004 }, + { 0x0012, 0x0005 }, + { 0x0013, 0x0000 }, + { 0x0013, 0x0001 }, + { 0x0013, 0x0002 }, + { 0x0013, 0x0003 }, + { 0x0013, 0x0004 }, + { 0x0013, 0x0005 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec55[10][16] = -{ - {0x0003ffff, 0x0001ffff, 0x0002ffff, 0x00000004, 0x00000005, 0x00000006, 0x00010000, 0x00010000, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00020001, 0x00020001, 0x00020001, 0x00020001, }, - {0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, }, - {0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, - {0x0005ffff, 0x0004ffff, 0x00000011, 0x00000012, 0x0001000d, 0x0001000d, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, 0x00010010, 0x00010010, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, }, - {0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030013, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, 0x00030014, }, - {0x0007ffff, 0x0006ffff, 0x00000019, 0x0000001a, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00020015, 0x00020015, 0x00020015, 0x00020015, 0x00020016, 0x00020016, 0x00020016, 0x00020016, }, - {0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001b, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, }, - {0x0009ffff, 0x0008ffff, 0x00000020, 0x00000021, 0x00000022, 0x00000023, 0x0001001f, 0x0001001f, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001d, 0x0002001e, 0x0002001e, 0x0002001e, 0x0002001e, }, - {0x00020026, 0x00020026, 0x00020026, 0x00020026, 0x00020027, 0x00020027, 0x00020027, 0x00020027, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, }, - {0x00010028, 0x00010028, 0x00010029, 0x00010029, 0x0001002a, 0x0001002a, 0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x0001002d, 0x0001002d, 0x00020025, 0x00020025, 0x00020025, 0x00020025, }, +const uint32_t c_aauiCQMFHuffDec55[10][16] = { + { + 0x0003ffff, + 0x0001ffff, + 0x0002ffff, + 0x00000004, + 0x00000005, + 0x00000006, + 0x00010000, + 0x00010000, + 0x00010002, + 0x00010002, + 0x00010003, + 0x00010003, + 0x00020001, + 0x00020001, + 0x00020001, + 0x00020001, + }, + { + 0x0002000b, + 0x0002000b, + 0x0002000b, + 0x0002000b, + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + }, + { + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + }, + { + 0x0005ffff, + 0x0004ffff, + 0x00000011, + 0x00000012, + 0x0001000d, + 0x0001000d, + 0x0001000e, + 0x0001000e, + 0x0001000f, + 0x0001000f, + 0x00010010, + 0x00010010, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x0002000a, + }, + { + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030013, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + 0x00030014, + }, + { + 0x0007ffff, + 0x0006ffff, + 0x00000019, + 0x0000001a, + 0x00010017, + 0x00010017, + 0x00010018, + 0x00010018, + 0x00020015, + 0x00020015, + 0x00020015, + 0x00020015, + 0x00020016, + 0x00020016, + 0x00020016, + 0x00020016, + }, + { + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001b, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + }, + { + 0x0009ffff, + 0x0008ffff, + 0x00000020, + 0x00000021, + 0x00000022, + 0x00000023, + 0x0001001f, + 0x0001001f, + 0x0002001d, + 0x0002001d, + 0x0002001d, + 0x0002001d, + 0x0002001e, + 0x0002001e, + 0x0002001e, + 0x0002001e, + }, + { + 0x00020026, + 0x00020026, + 0x00020026, + 0x00020026, + 0x00020027, + 0x00020027, + 0x00020027, + 0x00020027, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + }, + { + 0x00010028, + 0x00010028, + 0x00010029, + 0x00010029, + 0x0001002a, + 0x0001002a, + 0x0001002b, + 0x0001002b, + 0x0001002c, + 0x0001002c, + 0x0001002d, + 0x0001002d, + 0x00020025, + 0x00020025, + 0x00020025, + 0x00020025, + }, }; #endif #ifndef ROM_TO_RAM @@ -3772,31 +39453,282 @@ const uint32_t c_aauiCQMFHuffEnc56[55][2] = #else const uint16_t c_aauiCQMFHuffEnc56[55][2] = #endif -{ - {0x0003, 0x0003}, {0x0002, 0x0003}, {0x0003, 0x0004}, {0x0003, 0x0005}, {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0005, 0x0003}, {0x0005, 0x0004}, - {0x0005, 0x0005}, {0x0005, 0x0006}, {0x0005, 0x0007}, {0x0006, 0x0003}, {0x0006, 0x0004}, {0x0006, 0x0005}, {0x0007, 0x0003}, {0x0007, 0x0004}, - {0x0007, 0x0005}, {0x0008, 0x0002}, {0x0008, 0x0003}, {0x0008, 0x0004}, {0x0008, 0x0005}, {0x0009, 0x0002}, {0x0009, 0x0003}, {0x000a, 0x0002}, - {0x000a, 0x0003}, {0x000b, 0x0003}, {0x000c, 0x0003}, {0x000c, 0x0004}, {0x000c, 0x0005}, {0x000d, 0x0003}, {0x000d, 0x0004}, {0x000d, 0x0005}, - {0x000e, 0x0003}, {0x000e, 0x0004}, {0x000e, 0x0005}, {0x000f, 0x0004}, {0x000f, 0x0005}, {0x0010, 0x0002}, {0x0010, 0x0003}, {0x0010, 0x0004}, - {0x0010, 0x0005}, {0x0010, 0x0006}, {0x0010, 0x0007}, {0x0013, 0x0000}, {0x0011, 0x0003}, {0x0012, 0x0005}, {0x0013, 0x0001}, {0x0013, 0x0002}, - {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, + { + { 0x0003, 0x0003 }, + { 0x0002, 0x0003 }, + { 0x0003, 0x0004 }, + { 0x0003, 0x0005 }, + { 0x0004, 0x0004 }, + { 0x0004, 0x0005 }, + { 0x0005, 0x0003 }, + { 0x0005, 0x0004 }, + { 0x0005, 0x0005 }, + { 0x0005, 0x0006 }, + { 0x0005, 0x0007 }, + { 0x0006, 0x0003 }, + { 0x0006, 0x0004 }, + { 0x0006, 0x0005 }, + { 0x0007, 0x0003 }, + { 0x0007, 0x0004 }, + { 0x0007, 0x0005 }, + { 0x0008, 0x0002 }, + { 0x0008, 0x0003 }, + { 0x0008, 0x0004 }, + { 0x0008, 0x0005 }, + { 0x0009, 0x0002 }, + { 0x0009, 0x0003 }, + { 0x000a, 0x0002 }, + { 0x000a, 0x0003 }, + { 0x000b, 0x0003 }, + { 0x000c, 0x0003 }, + { 0x000c, 0x0004 }, + { 0x000c, 0x0005 }, + { 0x000d, 0x0003 }, + { 0x000d, 0x0004 }, + { 0x000d, 0x0005 }, + { 0x000e, 0x0003 }, + { 0x000e, 0x0004 }, + { 0x000e, 0x0005 }, + { 0x000f, 0x0004 }, + { 0x000f, 0x0005 }, + { 0x0010, 0x0002 }, + { 0x0010, 0x0003 }, + { 0x0010, 0x0004 }, + { 0x0010, 0x0005 }, + { 0x0010, 0x0006 }, + { 0x0010, 0x0007 }, + { 0x0013, 0x0000 }, + { 0x0011, 0x0003 }, + { 0x0012, 0x0005 }, + { 0x0013, 0x0001 }, + { 0x0013, 0x0002 }, + { 0x0013, 0x0003 }, + { 0x0013, 0x0004 }, + { 0x0013, 0x0005 }, + { 0x0013, 0x0006 }, + { 0x0013, 0x0007 }, + { 0x0013, 0x0008 }, + { 0x0013, 0x0009 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec56[12][16] = -{ - {0x0004ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x00000004, 0x00000005, 0x00010000, 0x00010000, 0x00010002, 0x00010002, 0x00010003, 0x00010003, 0x00020001, 0x00020001, 0x00020001, 0x00020001, }, - {0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, - {0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, }, - {0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, }, - {0x0006ffff, 0x0005ffff, 0x00000011, 0x00000012, 0x00000013, 0x00000014, 0x0001000e, 0x0001000e, 0x0001000f, 0x0001000f, 0x00010010, 0x00010010, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, }, - {0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030015, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, 0x00030016, }, - {0x0009ffff, 0x0007ffff, 0x0008ffff, 0x0000001a, 0x0000001b, 0x0000001c, 0x00010019, 0x00010019, 0x00020017, 0x00020017, 0x00020017, 0x00020017, 0x00020018, 0x00020018, 0x00020018, 0x00020018, }, - {0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x00020022, 0x00020022, 0x00020022, 0x00020022, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, }, - {0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, 0x0003001f, }, - {0x000bffff, 0x000affff, 0x00000025, 0x00000026, 0x00000027, 0x00000028, 0x00000029, 0x0000002a, 0x00010023, 0x00010023, 0x00010024, 0x00010024, 0x00020020, 0x00020020, 0x00020020, 0x00020020, }, - {0x00010035, 0x00010035, 0x00010036, 0x00010036, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002d, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, }, - {0x0001002b, 0x0001002b, 0x0001002e, 0x0001002e, 0x0001002f, 0x0001002f, 0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010033, 0x00010033, 0x00010034, 0x00010034, }, +const uint32_t c_aauiCQMFHuffDec56[12][16] = { + { + 0x0004ffff, + 0x0001ffff, + 0x0002ffff, + 0x0003ffff, + 0x00000004, + 0x00000005, + 0x00010000, + 0x00010000, + 0x00010002, + 0x00010002, + 0x00010003, + 0x00010003, + 0x00020001, + 0x00020001, + 0x00020001, + 0x00020001, + }, + { + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + }, + { + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + }, + { + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + }, + { + 0x0006ffff, + 0x0005ffff, + 0x00000011, + 0x00000012, + 0x00000013, + 0x00000014, + 0x0001000e, + 0x0001000e, + 0x0001000f, + 0x0001000f, + 0x00010010, + 0x00010010, + 0x0002000b, + 0x0002000b, + 0x0002000b, + 0x0002000b, + }, + { + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030015, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + 0x00030016, + }, + { + 0x0009ffff, + 0x0007ffff, + 0x0008ffff, + 0x0000001a, + 0x0000001b, + 0x0000001c, + 0x00010019, + 0x00010019, + 0x00020017, + 0x00020017, + 0x00020017, + 0x00020017, + 0x00020018, + 0x00020018, + 0x00020018, + 0x00020018, + }, + { + 0x00020021, + 0x00020021, + 0x00020021, + 0x00020021, + 0x00020022, + 0x00020022, + 0x00020022, + 0x00020022, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + }, + { + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + 0x0003001f, + }, + { + 0x000bffff, + 0x000affff, + 0x00000025, + 0x00000026, + 0x00000027, + 0x00000028, + 0x00000029, + 0x0000002a, + 0x00010023, + 0x00010023, + 0x00010024, + 0x00010024, + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020020, + }, + { + 0x00010035, + 0x00010035, + 0x00010036, + 0x00010036, + 0x0002002d, + 0x0002002d, + 0x0002002d, + 0x0002002d, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + }, + { + 0x0001002b, + 0x0001002b, + 0x0001002e, + 0x0001002e, + 0x0001002f, + 0x0001002f, + 0x00010030, + 0x00010030, + 0x00010031, + 0x00010031, + 0x00010032, + 0x00010032, + 0x00010033, + 0x00010033, + 0x00010034, + 0x00010034, + }, }; #endif #ifndef ROM_TO_RAM @@ -3804,35 +39736,328 @@ const uint32_t c_aauiCQMFHuffEnc57[65][2] = #else const uint16_t c_aauiCQMFHuffEnc57[65][2] = #endif -{ - {0x0003, 0x0004}, {0x0002, 0x0003}, {0x0003, 0x0005}, {0x0004, 0x0004}, {0x0004, 0x0005}, {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0005, 0x0004}, - {0x0005, 0x0005}, {0x0005, 0x0006}, {0x0005, 0x0007}, {0x0006, 0x0004}, {0x0006, 0x0005}, {0x0006, 0x0006}, {0x0006, 0x0007}, {0x0007, 0x0003}, - {0x0007, 0x0004}, {0x0007, 0x0005}, {0x0007, 0x0006}, {0x0007, 0x0007}, {0x0008, 0x0003}, {0x0008, 0x0004}, {0x0008, 0x0005}, {0x0009, 0x0003}, - {0x0009, 0x0004}, {0x0009, 0x0005}, {0x000a, 0x0003}, {0x000a, 0x0004}, {0x000a, 0x0005}, {0x000b, 0x0003}, {0x000b, 0x0004}, {0x000b, 0x0005}, - {0x000c, 0x0003}, {0x000c, 0x0004}, {0x000d, 0x0003}, {0x000c, 0x0005}, {0x000d, 0x0004}, {0x000d, 0x0005}, {0x000e, 0x0003}, {0x000e, 0x0004}, - {0x000e, 0x0005}, {0x000f, 0x0003}, {0x0010, 0x0003}, {0x000f, 0x0004}, {0x000f, 0x0005}, {0x0010, 0x0004}, {0x0010, 0x0005}, {0x0013, 0x0000}, - {0x0011, 0x0005}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0012, 0x0007}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0012, 0x0008}, {0x0012, 0x0009}, - {0x0013, 0x0005}, {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0013, 0x000c}, - {0x0013, 0x000d}, + { + { 0x0003, 0x0004 }, + { 0x0002, 0x0003 }, + { 0x0003, 0x0005 }, + { 0x0004, 0x0004 }, + { 0x0004, 0x0005 }, + { 0x0004, 0x0006 }, + { 0x0004, 0x0007 }, + { 0x0005, 0x0004 }, + { 0x0005, 0x0005 }, + { 0x0005, 0x0006 }, + { 0x0005, 0x0007 }, + { 0x0006, 0x0004 }, + { 0x0006, 0x0005 }, + { 0x0006, 0x0006 }, + { 0x0006, 0x0007 }, + { 0x0007, 0x0003 }, + { 0x0007, 0x0004 }, + { 0x0007, 0x0005 }, + { 0x0007, 0x0006 }, + { 0x0007, 0x0007 }, + { 0x0008, 0x0003 }, + { 0x0008, 0x0004 }, + { 0x0008, 0x0005 }, + { 0x0009, 0x0003 }, + { 0x0009, 0x0004 }, + { 0x0009, 0x0005 }, + { 0x000a, 0x0003 }, + { 0x000a, 0x0004 }, + { 0x000a, 0x0005 }, + { 0x000b, 0x0003 }, + { 0x000b, 0x0004 }, + { 0x000b, 0x0005 }, + { 0x000c, 0x0003 }, + { 0x000c, 0x0004 }, + { 0x000d, 0x0003 }, + { 0x000c, 0x0005 }, + { 0x000d, 0x0004 }, + { 0x000d, 0x0005 }, + { 0x000e, 0x0003 }, + { 0x000e, 0x0004 }, + { 0x000e, 0x0005 }, + { 0x000f, 0x0003 }, + { 0x0010, 0x0003 }, + { 0x000f, 0x0004 }, + { 0x000f, 0x0005 }, + { 0x0010, 0x0004 }, + { 0x0010, 0x0005 }, + { 0x0013, 0x0000 }, + { 0x0011, 0x0005 }, + { 0x0013, 0x0001 }, + { 0x0013, 0x0002 }, + { 0x0012, 0x0007 }, + { 0x0013, 0x0003 }, + { 0x0013, 0x0004 }, + { 0x0012, 0x0008 }, + { 0x0012, 0x0009 }, + { 0x0013, 0x0005 }, + { 0x0013, 0x0006 }, + { 0x0013, 0x0007 }, + { 0x0013, 0x0008 }, + { 0x0013, 0x0009 }, + { 0x0013, 0x000a }, + { 0x0013, 0x000b }, + { 0x0013, 0x000c }, + { 0x0013, 0x000d }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec57[14][16] = -{ - {0x0004ffff, 0x0003ffff, 0x0001ffff, 0x0002ffff, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00010000, 0x00010000, 0x00010002, 0x00010002, 0x00020001, 0x00020001, 0x00020001, 0x00020001, }, - {0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, }, - {0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, }, - {0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, }, - {0x0007ffff, 0x0005ffff, 0x0006ffff, 0x00000014, 0x00000015, 0x00000016, 0x0001000f, 0x0001000f, 0x00010010, 0x00010010, 0x00010011, 0x00010011, 0x00010012, 0x00010012, 0x00010013, 0x00010013, }, - {0x0002001b, 0x0002001b, 0x0002001b, 0x0002001b, 0x0002001c, 0x0002001c, 0x0002001c, 0x0002001c, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, 0x00030017, }, - {0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030018, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, 0x00030019, }, - {0x000affff, 0x0008ffff, 0x0009ffff, 0x00000020, 0x00000021, 0x00000023, 0x0001001d, 0x0001001d, 0x0001001e, 0x0001001e, 0x0001001f, 0x0001001f, 0x0002001a, 0x0002001a, 0x0002001a, 0x0002001a, }, - {0x00020027, 0x00020027, 0x00020027, 0x00020027, 0x00020028, 0x00020028, 0x00020028, 0x00020028, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, }, - {0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, }, - {0x000dffff, 0x000cffff, 0x000bffff, 0x0000002a, 0x0000002d, 0x0000002e, 0x00010029, 0x00010029, 0x0001002b, 0x0001002b, 0x0001002c, 0x0001002c, 0x00020026, 0x00020026, 0x00020026, 0x00020026, }, - {0x00020036, 0x00020036, 0x00020036, 0x00020036, 0x00020037, 0x00020037, 0x00020037, 0x00020037, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, }, - {0x0001003b, 0x0001003b, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, 0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x00010040, 0x00010040, 0x00020033, 0x00020033, 0x00020033, 0x00020033, }, - {0x0001002f, 0x0001002f, 0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010034, 0x00010034, 0x00010035, 0x00010035, 0x00010038, 0x00010038, 0x00010039, 0x00010039, 0x0001003a, 0x0001003a, }, +const uint32_t c_aauiCQMFHuffDec57[14][16] = { + { + 0x0004ffff, + 0x0003ffff, + 0x0001ffff, + 0x0002ffff, + 0x00000003, + 0x00000004, + 0x00000005, + 0x00000006, + 0x00010000, + 0x00010000, + 0x00010002, + 0x00010002, + 0x00020001, + 0x00020001, + 0x00020001, + 0x00020001, + }, + { + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + }, + { + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + }, + { + 0x0002000b, + 0x0002000b, + 0x0002000b, + 0x0002000b, + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0002000e, + }, + { + 0x0007ffff, + 0x0005ffff, + 0x0006ffff, + 0x00000014, + 0x00000015, + 0x00000016, + 0x0001000f, + 0x0001000f, + 0x00010010, + 0x00010010, + 0x00010011, + 0x00010011, + 0x00010012, + 0x00010012, + 0x00010013, + 0x00010013, + }, + { + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002001b, + 0x0002001c, + 0x0002001c, + 0x0002001c, + 0x0002001c, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + 0x00030017, + }, + { + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030018, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + 0x00030019, + }, + { + 0x000affff, + 0x0008ffff, + 0x0009ffff, + 0x00000020, + 0x00000021, + 0x00000023, + 0x0001001d, + 0x0001001d, + 0x0001001e, + 0x0001001e, + 0x0001001f, + 0x0001001f, + 0x0002001a, + 0x0002001a, + 0x0002001a, + 0x0002001a, + }, + { + 0x00020027, + 0x00020027, + 0x00020027, + 0x00020027, + 0x00020028, + 0x00020028, + 0x00020028, + 0x00020028, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + }, + { + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + }, + { + 0x000dffff, + 0x000cffff, + 0x000bffff, + 0x0000002a, + 0x0000002d, + 0x0000002e, + 0x00010029, + 0x00010029, + 0x0001002b, + 0x0001002b, + 0x0001002c, + 0x0001002c, + 0x00020026, + 0x00020026, + 0x00020026, + 0x00020026, + }, + { + 0x00020036, + 0x00020036, + 0x00020036, + 0x00020036, + 0x00020037, + 0x00020037, + 0x00020037, + 0x00020037, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + }, + { + 0x0001003b, + 0x0001003b, + 0x0001003c, + 0x0001003c, + 0x0001003d, + 0x0001003d, + 0x0001003e, + 0x0001003e, + 0x0001003f, + 0x0001003f, + 0x00010040, + 0x00010040, + 0x00020033, + 0x00020033, + 0x00020033, + 0x00020033, + }, + { + 0x0001002f, + 0x0001002f, + 0x00010031, + 0x00010031, + 0x00010032, + 0x00010032, + 0x00010034, + 0x00010034, + 0x00010035, + 0x00010035, + 0x00010038, + 0x00010038, + 0x00010039, + 0x00010039, + 0x0001003a, + 0x0001003a, + }, }; #endif #ifndef ROM_TO_RAM @@ -3840,39 +40065,394 @@ const uint32_t c_aauiCQMFHuffEnc58[77][2] = #else const uint16_t c_aauiCQMFHuffEnc58[77][2] = #endif -{ - {0x0004, 0x0005}, {0x0003, 0x0005}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0004, 0x0008}, {0x0004, 0x0009}, - {0x0005, 0x0005}, {0x0005, 0x0006}, {0x0005, 0x0007}, {0x0005, 0x0008}, {0x0005, 0x0009}, {0x0006, 0x0004}, {0x0006, 0x0005}, {0x0006, 0x0006}, - {0x0006, 0x0007}, {0x0006, 0x0008}, {0x0006, 0x0009}, {0x0007, 0x0004}, {0x0007, 0x0005}, {0x0007, 0x0006}, {0x0007, 0x0007}, {0x0008, 0x0003}, - {0x0008, 0x0004}, {0x0008, 0x0005}, {0x0008, 0x0006}, {0x0008, 0x0007}, {0x0009, 0x0003}, {0x0009, 0x0004}, {0x0009, 0x0005}, {0x000a, 0x0003}, - {0x000a, 0x0004}, {0x000a, 0x0005}, {0x000b, 0x0004}, {0x000b, 0x0005}, {0x000c, 0x0004}, {0x000c, 0x0005}, {0x000c, 0x0006}, {0x000c, 0x0007}, - {0x000d, 0x0004}, {0x000d, 0x0005}, {0x000d, 0x0006}, {0x000d, 0x0007}, {0x000e, 0x0004}, {0x000e, 0x0005}, {0x000e, 0x0006}, {0x000e, 0x0007}, - {0x000f, 0x0004}, {0x000f, 0x0005}, {0x000f, 0x0006}, {0x0010, 0x0004}, {0x000f, 0x0007}, {0x0010, 0x0005}, {0x0010, 0x0006}, {0x0010, 0x0007}, - {0x0013, 0x0000}, {0x0013, 0x0001}, {0x0012, 0x0006}, {0x0011, 0x0007}, {0x0013, 0x0002}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, - {0x0012, 0x0007}, {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0012, 0x0008}, - {0x0012, 0x0009}, {0x0012, 0x000a}, {0x0012, 0x000b}, {0x0012, 0x000c}, {0x0012, 0x000d}, + { + { 0x0004, 0x0005 }, + { 0x0003, 0x0005 }, + { 0x0003, 0x0006 }, + { 0x0003, 0x0007 }, + { 0x0004, 0x0006 }, + { 0x0004, 0x0007 }, + { 0x0004, 0x0008 }, + { 0x0004, 0x0009 }, + { 0x0005, 0x0005 }, + { 0x0005, 0x0006 }, + { 0x0005, 0x0007 }, + { 0x0005, 0x0008 }, + { 0x0005, 0x0009 }, + { 0x0006, 0x0004 }, + { 0x0006, 0x0005 }, + { 0x0006, 0x0006 }, + { 0x0006, 0x0007 }, + { 0x0006, 0x0008 }, + { 0x0006, 0x0009 }, + { 0x0007, 0x0004 }, + { 0x0007, 0x0005 }, + { 0x0007, 0x0006 }, + { 0x0007, 0x0007 }, + { 0x0008, 0x0003 }, + { 0x0008, 0x0004 }, + { 0x0008, 0x0005 }, + { 0x0008, 0x0006 }, + { 0x0008, 0x0007 }, + { 0x0009, 0x0003 }, + { 0x0009, 0x0004 }, + { 0x0009, 0x0005 }, + { 0x000a, 0x0003 }, + { 0x000a, 0x0004 }, + { 0x000a, 0x0005 }, + { 0x000b, 0x0004 }, + { 0x000b, 0x0005 }, + { 0x000c, 0x0004 }, + { 0x000c, 0x0005 }, + { 0x000c, 0x0006 }, + { 0x000c, 0x0007 }, + { 0x000d, 0x0004 }, + { 0x000d, 0x0005 }, + { 0x000d, 0x0006 }, + { 0x000d, 0x0007 }, + { 0x000e, 0x0004 }, + { 0x000e, 0x0005 }, + { 0x000e, 0x0006 }, + { 0x000e, 0x0007 }, + { 0x000f, 0x0004 }, + { 0x000f, 0x0005 }, + { 0x000f, 0x0006 }, + { 0x0010, 0x0004 }, + { 0x000f, 0x0007 }, + { 0x0010, 0x0005 }, + { 0x0010, 0x0006 }, + { 0x0010, 0x0007 }, + { 0x0013, 0x0000 }, + { 0x0013, 0x0001 }, + { 0x0012, 0x0006 }, + { 0x0011, 0x0007 }, + { 0x0013, 0x0002 }, + { 0x0013, 0x0003 }, + { 0x0013, 0x0004 }, + { 0x0013, 0x0005 }, + { 0x0012, 0x0007 }, + { 0x0013, 0x0006 }, + { 0x0013, 0x0007 }, + { 0x0013, 0x0008 }, + { 0x0013, 0x0009 }, + { 0x0013, 0x000a }, + { 0x0013, 0x000b }, + { 0x0012, 0x0008 }, + { 0x0012, 0x0009 }, + { 0x0012, 0x000a }, + { 0x0012, 0x000b }, + { 0x0012, 0x000c }, + { 0x0012, 0x000d }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec58[17][16] = -{ - {0x0005ffff, 0x0004ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x00000000, 0x00000004, 0x00000005, 0x00000006, 0x00000007, 0x00010001, 0x00010001, 0x00010002, 0x00010002, 0x00010003, 0x00010003, }, - {0x00020011, 0x00020011, 0x00020011, 0x00020011, 0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, }, - {0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, }, - {0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, - {0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, 0x00020010, 0x00020010, 0x00020010, 0x00020010, }, - {0x0008ffff, 0x0006ffff, 0x0007ffff, 0x00000017, 0x00000018, 0x00000019, 0x0000001a, 0x0000001b, 0x00010013, 0x00010013, 0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00010016, 0x00010016, }, - {0x00020020, 0x00020020, 0x00020020, 0x00020020, 0x00020021, 0x00020021, 0x00020021, 0x00020021, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, 0x0003001c, }, - {0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001d, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, 0x0003001e, }, - {0x000cffff, 0x000bffff, 0x0009ffff, 0x000affff, 0x00000024, 0x00000025, 0x00000026, 0x00000027, 0x00010022, 0x00010022, 0x00010023, 0x00010023, 0x0002001f, 0x0002001f, 0x0002001f, 0x0002001f, }, - {0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, }, - {0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, }, - {0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002d, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002f, 0x0002002f, 0x0002002f, 0x0002002f, }, - {0x0010ffff, 0x000effff, 0x000fffff, 0x000dffff, 0x00000033, 0x00000035, 0x00000036, 0x00000037, 0x00010030, 0x00010030, 0x00010031, 0x00010031, 0x00010032, 0x00010032, 0x00010034, 0x00010034, }, - {0x0002004b, 0x0002004b, 0x0002004b, 0x0002004b, 0x0002004c, 0x0002004c, 0x0002004c, 0x0002004c, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, }, - {0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, 0x00010046, 0x00010046, 0x0002003a, 0x0002003a, 0x0002003a, 0x0002003a, 0x00020040, 0x00020040, 0x00020040, 0x00020040, }, - {0x00020047, 0x00020047, 0x00020047, 0x00020047, 0x00020048, 0x00020048, 0x00020048, 0x00020048, 0x00020049, 0x00020049, 0x00020049, 0x00020049, 0x0002004a, 0x0002004a, 0x0002004a, 0x0002004a, }, - {0x00010038, 0x00010038, 0x00010039, 0x00010039, 0x0001003c, 0x0001003c, 0x0001003d, 0x0001003d, 0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x00010041, 0x00010041, 0x00010042, 0x00010042, }, +const uint32_t c_aauiCQMFHuffDec58[17][16] = { + { + 0x0005ffff, + 0x0004ffff, + 0x0001ffff, + 0x0002ffff, + 0x0003ffff, + 0x00000000, + 0x00000004, + 0x00000005, + 0x00000006, + 0x00000007, + 0x00010001, + 0x00010001, + 0x00010002, + 0x00010002, + 0x00010003, + 0x00010003, + }, + { + 0x00020011, + 0x00020011, + 0x00020011, + 0x00020011, + 0x00020012, + 0x00020012, + 0x00020012, + 0x00020012, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + }, + { + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + }, + { + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + }, + { + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0002000f, + 0x0002000f, + 0x0002000f, + 0x0002000f, + 0x00020010, + 0x00020010, + 0x00020010, + 0x00020010, + }, + { + 0x0008ffff, + 0x0006ffff, + 0x0007ffff, + 0x00000017, + 0x00000018, + 0x00000019, + 0x0000001a, + 0x0000001b, + 0x00010013, + 0x00010013, + 0x00010014, + 0x00010014, + 0x00010015, + 0x00010015, + 0x00010016, + 0x00010016, + }, + { + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020020, + 0x00020021, + 0x00020021, + 0x00020021, + 0x00020021, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + 0x0003001c, + }, + { + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001d, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + 0x0003001e, + }, + { + 0x000cffff, + 0x000bffff, + 0x0009ffff, + 0x000affff, + 0x00000024, + 0x00000025, + 0x00000026, + 0x00000027, + 0x00010022, + 0x00010022, + 0x00010023, + 0x00010023, + 0x0002001f, + 0x0002001f, + 0x0002001f, + 0x0002001f, + }, + { + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + }, + { + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + }, + { + 0x0002002c, + 0x0002002c, + 0x0002002c, + 0x0002002c, + 0x0002002d, + 0x0002002d, + 0x0002002d, + 0x0002002d, + 0x0002002e, + 0x0002002e, + 0x0002002e, + 0x0002002e, + 0x0002002f, + 0x0002002f, + 0x0002002f, + 0x0002002f, + }, + { + 0x0010ffff, + 0x000effff, + 0x000fffff, + 0x000dffff, + 0x00000033, + 0x00000035, + 0x00000036, + 0x00000037, + 0x00010030, + 0x00010030, + 0x00010031, + 0x00010031, + 0x00010032, + 0x00010032, + 0x00010034, + 0x00010034, + }, + { + 0x0002004b, + 0x0002004b, + 0x0002004b, + 0x0002004b, + 0x0002004c, + 0x0002004c, + 0x0002004c, + 0x0002004c, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + }, + { + 0x00010043, + 0x00010043, + 0x00010044, + 0x00010044, + 0x00010045, + 0x00010045, + 0x00010046, + 0x00010046, + 0x0002003a, + 0x0002003a, + 0x0002003a, + 0x0002003a, + 0x00020040, + 0x00020040, + 0x00020040, + 0x00020040, + }, + { + 0x00020047, + 0x00020047, + 0x00020047, + 0x00020047, + 0x00020048, + 0x00020048, + 0x00020048, + 0x00020048, + 0x00020049, + 0x00020049, + 0x00020049, + 0x00020049, + 0x0002004a, + 0x0002004a, + 0x0002004a, + 0x0002004a, + }, + { + 0x00010038, + 0x00010038, + 0x00010039, + 0x00010039, + 0x0001003c, + 0x0001003c, + 0x0001003d, + 0x0001003d, + 0x0001003e, + 0x0001003e, + 0x0001003f, + 0x0001003f, + 0x00010041, + 0x00010041, + 0x00010042, + 0x00010042, + }, }; #endif #ifndef ROM_TO_RAM @@ -3880,44 +40460,462 @@ const uint32_t c_aauiCQMFHuffEnc59[91][2] = #else const uint16_t c_aauiCQMFHuffEnc59[91][2] = #endif -{ - {0x0003, 0x0005}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0006}, {0x0004, 0x0007}, {0x0004, 0x0008}, {0x0004, 0x0009}, {0x0005, 0x0006}, - {0x0005, 0x0007}, {0x0005, 0x0008}, {0x0005, 0x0009}, {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0006, 0x0006}, {0x0006, 0x0007}, {0x0006, 0x0008}, - {0x0006, 0x0009}, {0x0006, 0x000a}, {0x0006, 0x000b}, {0x0007, 0x0005}, {0x0007, 0x0006}, {0x0007, 0x0007}, {0x0007, 0x0008}, {0x0007, 0x0009}, - {0x0007, 0x000a}, {0x0007, 0x000b}, {0x0008, 0x0003}, {0x0008, 0x0004}, {0x0008, 0x0005}, {0x0008, 0x0006}, {0x0008, 0x0007}, {0x0008, 0x0008}, - {0x0008, 0x0009}, {0x0009, 0x0004}, {0x0009, 0x0005}, {0x000a, 0x0004}, {0x000a, 0x0005}, {0x000a, 0x0006}, {0x000a, 0x0007}, {0x000b, 0x0004}, - {0x000b, 0x0005}, {0x000b, 0x0006}, {0x000b, 0x0007}, {0x000c, 0x0004}, {0x000c, 0x0005}, {0x000c, 0x0006}, {0x000c, 0x0007}, {0x000d, 0x0003}, - {0x000d, 0x0004}, {0x000d, 0x0005}, {0x000d, 0x0006}, {0x000d, 0x0007}, {0x000e, 0x0003}, {0x000e, 0x0004}, {0x000e, 0x0005}, {0x000f, 0x0003}, - {0x000f, 0x0004}, {0x000f, 0x0005}, {0x0011, 0x0008}, {0x0011, 0x0009}, {0x0013, 0x0000}, {0x0011, 0x000a}, {0x0013, 0x0001}, {0x0013, 0x0002}, - {0x0012, 0x000d}, {0x0012, 0x000e}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, {0x0011, 0x000b}, {0x0013, 0x0006}, {0x0013, 0x0007}, - {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0013, 0x000c}, {0x0013, 0x000d}, {0x0013, 0x000e}, {0x0013, 0x000f}, - {0x0013, 0x0010}, {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0013, 0x0014}, {0x0013, 0x0015}, {0x0013, 0x0016}, {0x0013, 0x0017}, - {0x0013, 0x0018}, {0x0013, 0x0019}, {0x0012, 0x000f}, + { + { 0x0003, 0x0005 }, + { 0x0003, 0x0006 }, + { 0x0003, 0x0007 }, + { 0x0004, 0x0006 }, + { 0x0004, 0x0007 }, + { 0x0004, 0x0008 }, + { 0x0004, 0x0009 }, + { 0x0005, 0x0006 }, + { 0x0005, 0x0007 }, + { 0x0005, 0x0008 }, + { 0x0005, 0x0009 }, + { 0x0005, 0x000a }, + { 0x0005, 0x000b }, + { 0x0006, 0x0006 }, + { 0x0006, 0x0007 }, + { 0x0006, 0x0008 }, + { 0x0006, 0x0009 }, + { 0x0006, 0x000a }, + { 0x0006, 0x000b }, + { 0x0007, 0x0005 }, + { 0x0007, 0x0006 }, + { 0x0007, 0x0007 }, + { 0x0007, 0x0008 }, + { 0x0007, 0x0009 }, + { 0x0007, 0x000a }, + { 0x0007, 0x000b }, + { 0x0008, 0x0003 }, + { 0x0008, 0x0004 }, + { 0x0008, 0x0005 }, + { 0x0008, 0x0006 }, + { 0x0008, 0x0007 }, + { 0x0008, 0x0008 }, + { 0x0008, 0x0009 }, + { 0x0009, 0x0004 }, + { 0x0009, 0x0005 }, + { 0x000a, 0x0004 }, + { 0x000a, 0x0005 }, + { 0x000a, 0x0006 }, + { 0x000a, 0x0007 }, + { 0x000b, 0x0004 }, + { 0x000b, 0x0005 }, + { 0x000b, 0x0006 }, + { 0x000b, 0x0007 }, + { 0x000c, 0x0004 }, + { 0x000c, 0x0005 }, + { 0x000c, 0x0006 }, + { 0x000c, 0x0007 }, + { 0x000d, 0x0003 }, + { 0x000d, 0x0004 }, + { 0x000d, 0x0005 }, + { 0x000d, 0x0006 }, + { 0x000d, 0x0007 }, + { 0x000e, 0x0003 }, + { 0x000e, 0x0004 }, + { 0x000e, 0x0005 }, + { 0x000f, 0x0003 }, + { 0x000f, 0x0004 }, + { 0x000f, 0x0005 }, + { 0x0011, 0x0008 }, + { 0x0011, 0x0009 }, + { 0x0013, 0x0000 }, + { 0x0011, 0x000a }, + { 0x0013, 0x0001 }, + { 0x0013, 0x0002 }, + { 0x0012, 0x000d }, + { 0x0012, 0x000e }, + { 0x0013, 0x0003 }, + { 0x0013, 0x0004 }, + { 0x0013, 0x0005 }, + { 0x0011, 0x000b }, + { 0x0013, 0x0006 }, + { 0x0013, 0x0007 }, + { 0x0013, 0x0008 }, + { 0x0013, 0x0009 }, + { 0x0013, 0x000a }, + { 0x0013, 0x000b }, + { 0x0013, 0x000c }, + { 0x0013, 0x000d }, + { 0x0013, 0x000e }, + { 0x0013, 0x000f }, + { 0x0013, 0x0010 }, + { 0x0013, 0x0011 }, + { 0x0013, 0x0012 }, + { 0x0013, 0x0013 }, + { 0x0013, 0x0014 }, + { 0x0013, 0x0015 }, + { 0x0013, 0x0016 }, + { 0x0013, 0x0017 }, + { 0x0013, 0x0018 }, + { 0x0013, 0x0019 }, + { 0x0012, 0x000f }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec59[20][16] = -{ - {0x0006ffff, 0x0004ffff, 0x0005ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00010000, 0x00010000, 0x00010001, 0x00010001, 0x00010002, 0x00010002, }, - {0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, }, - {0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, }, - {0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, - {0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, }, - {0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x00020011, 0x00020011, 0x00020011, 0x00020011, 0x00020012, 0x00020012, 0x00020012, 0x00020012, }, - {0x0009ffff, 0x0008ffff, 0x0007ffff, 0x0000001a, 0x0000001b, 0x0000001c, 0x0000001d, 0x0000001e, 0x0000001f, 0x00000020, 0x00010013, 0x00010013, 0x00010014, 0x00010014, 0x00010015, 0x00010015, }, - {0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, }, - {0x00020023, 0x00020023, 0x00020023, 0x00020023, 0x00020024, 0x00020024, 0x00020024, 0x00020024, 0x00020025, 0x00020025, 0x00020025, 0x00020025, 0x00020026, 0x00020026, 0x00020026, 0x00020026, }, - {0x000dffff, 0x000affff, 0x000bffff, 0x000cffff, 0x0000002b, 0x0000002c, 0x0000002d, 0x0000002e, 0x00010027, 0x00010027, 0x00010028, 0x00010028, 0x00010029, 0x00010029, 0x0001002a, 0x0001002a, }, - {0x00020035, 0x00020035, 0x00020035, 0x00020035, 0x00020036, 0x00020036, 0x00020036, 0x00020036, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, }, - {0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, }, - {0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, }, - {0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0010ffff, 0x000effff, 0x000fffff, 0x00010037, 0x00010037, 0x00010038, 0x00010038, 0x00010039, 0x00010039, 0x00020034, 0x00020034, 0x00020034, 0x00020034, }, - {0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, }, - {0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x0003003d, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, }, - {0x00010058, 0x00010058, 0x00010059, 0x00010059, 0x00020040, 0x00020040, 0x00020040, 0x00020040, 0x00020041, 0x00020041, 0x00020041, 0x00020041, 0x0002005a, 0x0002005a, 0x0002005a, 0x0002005a, }, - {0x0001003c, 0x0001003c, 0x0001003e, 0x0001003e, 0x0001003f, 0x0001003f, 0x00010042, 0x00010042, 0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010046, 0x00010046, 0x00010047, 0x00010047, }, - {0x00010048, 0x00010048, 0x00010049, 0x00010049, 0x0001004a, 0x0001004a, 0x0001004b, 0x0001004b, 0x0001004c, 0x0001004c, 0x0001004d, 0x0001004d, 0x0001004e, 0x0001004e, 0x0001004f, 0x0001004f, }, - {0x00010050, 0x00010050, 0x00010051, 0x00010051, 0x00010052, 0x00010052, 0x00010053, 0x00010053, 0x00010054, 0x00010054, 0x00010055, 0x00010055, 0x00010056, 0x00010056, 0x00010057, 0x00010057, }, +const uint32_t c_aauiCQMFHuffDec59[20][16] = { + { + 0x0006ffff, + 0x0004ffff, + 0x0005ffff, + 0x0001ffff, + 0x0002ffff, + 0x0003ffff, + 0x00000003, + 0x00000004, + 0x00000005, + 0x00000006, + 0x00010000, + 0x00010000, + 0x00010001, + 0x00010001, + 0x00010002, + 0x00010002, + }, + { + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + }, + { + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + }, + { + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + }, + { + 0x00010016, + 0x00010016, + 0x00010017, + 0x00010017, + 0x00010018, + 0x00010018, + 0x00010019, + 0x00010019, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0002000e, + }, + { + 0x0002000f, + 0x0002000f, + 0x0002000f, + 0x0002000f, + 0x00020010, + 0x00020010, + 0x00020010, + 0x00020010, + 0x00020011, + 0x00020011, + 0x00020011, + 0x00020011, + 0x00020012, + 0x00020012, + 0x00020012, + 0x00020012, + }, + { + 0x0009ffff, + 0x0008ffff, + 0x0007ffff, + 0x0000001a, + 0x0000001b, + 0x0000001c, + 0x0000001d, + 0x0000001e, + 0x0000001f, + 0x00000020, + 0x00010013, + 0x00010013, + 0x00010014, + 0x00010014, + 0x00010015, + 0x00010015, + }, + { + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + }, + { + 0x00020023, + 0x00020023, + 0x00020023, + 0x00020023, + 0x00020024, + 0x00020024, + 0x00020024, + 0x00020024, + 0x00020025, + 0x00020025, + 0x00020025, + 0x00020025, + 0x00020026, + 0x00020026, + 0x00020026, + 0x00020026, + }, + { + 0x000dffff, + 0x000affff, + 0x000bffff, + 0x000cffff, + 0x0000002b, + 0x0000002c, + 0x0000002d, + 0x0000002e, + 0x00010027, + 0x00010027, + 0x00010028, + 0x00010028, + 0x00010029, + 0x00010029, + 0x0001002a, + 0x0001002a, + }, + { + 0x00020035, + 0x00020035, + 0x00020035, + 0x00020035, + 0x00020036, + 0x00020036, + 0x00020036, + 0x00020036, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + }, + { + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030031, + }, + { + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + }, + { + 0x0011ffff, + 0x0012ffff, + 0x0013ffff, + 0x0010ffff, + 0x000effff, + 0x000fffff, + 0x00010037, + 0x00010037, + 0x00010038, + 0x00010038, + 0x00010039, + 0x00010039, + 0x00020034, + 0x00020034, + 0x00020034, + 0x00020034, + }, + { + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + }, + { + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x0003003d, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + }, + { + 0x00010058, + 0x00010058, + 0x00010059, + 0x00010059, + 0x00020040, + 0x00020040, + 0x00020040, + 0x00020040, + 0x00020041, + 0x00020041, + 0x00020041, + 0x00020041, + 0x0002005a, + 0x0002005a, + 0x0002005a, + 0x0002005a, + }, + { + 0x0001003c, + 0x0001003c, + 0x0001003e, + 0x0001003e, + 0x0001003f, + 0x0001003f, + 0x00010042, + 0x00010042, + 0x00010043, + 0x00010043, + 0x00010044, + 0x00010044, + 0x00010046, + 0x00010046, + 0x00010047, + 0x00010047, + }, + { + 0x00010048, + 0x00010048, + 0x00010049, + 0x00010049, + 0x0001004a, + 0x0001004a, + 0x0001004b, + 0x0001004b, + 0x0001004c, + 0x0001004c, + 0x0001004d, + 0x0001004d, + 0x0001004e, + 0x0001004e, + 0x0001004f, + 0x0001004f, + }, + { + 0x00010050, + 0x00010050, + 0x00010051, + 0x00010051, + 0x00010052, + 0x00010052, + 0x00010053, + 0x00010053, + 0x00010054, + 0x00010054, + 0x00010055, + 0x00010055, + 0x00010056, + 0x00010056, + 0x00010057, + 0x00010057, + }, }; #endif #ifndef ROM_TO_RAM @@ -3925,50 +40923,552 @@ const uint32_t c_aauiCQMFHuffEnc60[109][2] = #else const uint16_t c_aauiCQMFHuffEnc60[109][2] = #endif -{ - {0x0004, 0x0007}, {0x0002, 0x0003}, {0x0003, 0x0005}, {0x0004, 0x0008}, {0x0004, 0x0009}, {0x0005, 0x0007}, {0x0005, 0x0008}, {0x0005, 0x0009}, - {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0005, 0x000c}, {0x0005, 0x000d}, {0x0006, 0x0007}, {0x0006, 0x0008}, {0x0006, 0x0009}, {0x0006, 0x000a}, - {0x0006, 0x000b}, {0x0006, 0x000c}, {0x0006, 0x000d}, {0x0007, 0x0006}, {0x0007, 0x0007}, {0x0007, 0x0008}, {0x0007, 0x0009}, {0x0007, 0x000a}, - {0x0007, 0x000b}, {0x0007, 0x000c}, {0x0007, 0x000d}, {0x0008, 0x0006}, {0x0008, 0x0007}, {0x0008, 0x0008}, {0x0008, 0x0009}, {0x0008, 0x000a}, - {0x0008, 0x000b}, {0x0009, 0x0004}, {0x0009, 0x0005}, {0x0009, 0x0006}, {0x0009, 0x0007}, {0x0009, 0x0008}, {0x0009, 0x0009}, {0x0009, 0x000a}, - {0x0009, 0x000b}, {0x000a, 0x0004}, {0x000a, 0x0005}, {0x000a, 0x0006}, {0x000a, 0x0007}, {0x000b, 0x0004}, {0x000b, 0x0005}, {0x000b, 0x0006}, - {0x000b, 0x0007}, {0x000c, 0x0004}, {0x000c, 0x0005}, {0x000c, 0x0006}, {0x000d, 0x0005}, {0x000d, 0x0006}, {0x000d, 0x0007}, {0x000c, 0x0007}, - {0x000e, 0x0005}, {0x000e, 0x0006}, {0x000e, 0x0007}, {0x000e, 0x0008}, {0x000f, 0x0005}, {0x000e, 0x0009}, {0x000f, 0x0006}, {0x0010, 0x0006}, - {0x000f, 0x0007}, {0x000f, 0x0008}, {0x000f, 0x0009}, {0x0010, 0x0007}, {0x0010, 0x0008}, {0x0010, 0x0009}, {0x0011, 0x000a}, {0x0013, 0x0000}, - {0x0011, 0x000b}, {0x0013, 0x0001}, {0x0013, 0x0002}, {0x0012, 0x0011}, {0x0012, 0x0012}, {0x0013, 0x0003}, {0x0013, 0x0004}, {0x0013, 0x0005}, - {0x0013, 0x0006}, {0x0013, 0x0007}, {0x0013, 0x0008}, {0x0013, 0x0009}, {0x0013, 0x000a}, {0x0013, 0x000b}, {0x0013, 0x000c}, {0x0013, 0x000d}, - {0x0013, 0x000e}, {0x0013, 0x000f}, {0x0013, 0x0010}, {0x0013, 0x0011}, {0x0013, 0x0012}, {0x0013, 0x0013}, {0x0013, 0x0014}, {0x0013, 0x0015}, - {0x0013, 0x0016}, {0x0013, 0x0017}, {0x0013, 0x0018}, {0x0013, 0x0019}, {0x0013, 0x001a}, {0x0013, 0x001b}, {0x0013, 0x001c}, {0x0013, 0x001d}, - {0x0013, 0x001e}, {0x0013, 0x001f}, {0x0013, 0x0020}, {0x0013, 0x0021}, {0x0012, 0x0013}, + { + { 0x0004, 0x0007 }, + { 0x0002, 0x0003 }, + { 0x0003, 0x0005 }, + { 0x0004, 0x0008 }, + { 0x0004, 0x0009 }, + { 0x0005, 0x0007 }, + { 0x0005, 0x0008 }, + { 0x0005, 0x0009 }, + { 0x0005, 0x000a }, + { 0x0005, 0x000b }, + { 0x0005, 0x000c }, + { 0x0005, 0x000d }, + { 0x0006, 0x0007 }, + { 0x0006, 0x0008 }, + { 0x0006, 0x0009 }, + { 0x0006, 0x000a }, + { 0x0006, 0x000b }, + { 0x0006, 0x000c }, + { 0x0006, 0x000d }, + { 0x0007, 0x0006 }, + { 0x0007, 0x0007 }, + { 0x0007, 0x0008 }, + { 0x0007, 0x0009 }, + { 0x0007, 0x000a }, + { 0x0007, 0x000b }, + { 0x0007, 0x000c }, + { 0x0007, 0x000d }, + { 0x0008, 0x0006 }, + { 0x0008, 0x0007 }, + { 0x0008, 0x0008 }, + { 0x0008, 0x0009 }, + { 0x0008, 0x000a }, + { 0x0008, 0x000b }, + { 0x0009, 0x0004 }, + { 0x0009, 0x0005 }, + { 0x0009, 0x0006 }, + { 0x0009, 0x0007 }, + { 0x0009, 0x0008 }, + { 0x0009, 0x0009 }, + { 0x0009, 0x000a }, + { 0x0009, 0x000b }, + { 0x000a, 0x0004 }, + { 0x000a, 0x0005 }, + { 0x000a, 0x0006 }, + { 0x000a, 0x0007 }, + { 0x000b, 0x0004 }, + { 0x000b, 0x0005 }, + { 0x000b, 0x0006 }, + { 0x000b, 0x0007 }, + { 0x000c, 0x0004 }, + { 0x000c, 0x0005 }, + { 0x000c, 0x0006 }, + { 0x000d, 0x0005 }, + { 0x000d, 0x0006 }, + { 0x000d, 0x0007 }, + { 0x000c, 0x0007 }, + { 0x000e, 0x0005 }, + { 0x000e, 0x0006 }, + { 0x000e, 0x0007 }, + { 0x000e, 0x0008 }, + { 0x000f, 0x0005 }, + { 0x000e, 0x0009 }, + { 0x000f, 0x0006 }, + { 0x0010, 0x0006 }, + { 0x000f, 0x0007 }, + { 0x000f, 0x0008 }, + { 0x000f, 0x0009 }, + { 0x0010, 0x0007 }, + { 0x0010, 0x0008 }, + { 0x0010, 0x0009 }, + { 0x0011, 0x000a }, + { 0x0013, 0x0000 }, + { 0x0011, 0x000b }, + { 0x0013, 0x0001 }, + { 0x0013, 0x0002 }, + { 0x0012, 0x0011 }, + { 0x0012, 0x0012 }, + { 0x0013, 0x0003 }, + { 0x0013, 0x0004 }, + { 0x0013, 0x0005 }, + { 0x0013, 0x0006 }, + { 0x0013, 0x0007 }, + { 0x0013, 0x0008 }, + { 0x0013, 0x0009 }, + { 0x0013, 0x000a }, + { 0x0013, 0x000b }, + { 0x0013, 0x000c }, + { 0x0013, 0x000d }, + { 0x0013, 0x000e }, + { 0x0013, 0x000f }, + { 0x0013, 0x0010 }, + { 0x0013, 0x0011 }, + { 0x0013, 0x0012 }, + { 0x0013, 0x0013 }, + { 0x0013, 0x0014 }, + { 0x0013, 0x0015 }, + { 0x0013, 0x0016 }, + { 0x0013, 0x0017 }, + { 0x0013, 0x0018 }, + { 0x0013, 0x0019 }, + { 0x0013, 0x001a }, + { 0x0013, 0x001b }, + { 0x0013, 0x001c }, + { 0x0013, 0x001d }, + { 0x0013, 0x001e }, + { 0x0013, 0x001f }, + { 0x0013, 0x0020 }, + { 0x0013, 0x0021 }, + { 0x0012, 0x0013 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec60[24][16] = -{ - {0x0007ffff, 0x0005ffff, 0x0006ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x00000000, 0x00000003, 0x00000004, 0x00010002, 0x00010002, 0x00020001, 0x00020001, 0x00020001, 0x00020001, }, - {0x00020011, 0x00020011, 0x00020011, 0x00020011, 0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, }, - {0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, }, - {0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, - {0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, - {0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x0001001a, 0x0001001a, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, }, - {0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, 0x00020010, 0x00020010, 0x00020010, 0x00020010, }, - {0x000dffff, 0x000cffff, 0x0008ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x0000001b, 0x0000001c, 0x0000001d, 0x0000001e, 0x0000001f, 0x00000020, 0x00010013, 0x00010013, 0x00010014, 0x00010014, }, - {0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030021, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, 0x00030022, }, - {0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030023, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, 0x00030024, }, - {0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030025, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, 0x00030026, }, - {0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030027, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, }, - {0x00020029, 0x00020029, 0x00020029, 0x00020029, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002a, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002b, 0x0002002c, 0x0002002c, 0x0002002c, 0x0002002c, }, - {0x0011ffff, 0x0010ffff, 0x000fffff, 0x000effff, 0x00000031, 0x00000032, 0x00000033, 0x00000037, 0x0001002d, 0x0001002d, 0x0001002e, 0x0001002e, 0x0001002f, 0x0001002f, 0x00010030, 0x00010030, }, - {0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, }, - {0x0002003b, 0x0002003b, 0x0002003b, 0x0002003b, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003d, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, }, - {0x00010041, 0x00010041, 0x00010042, 0x00010042, 0x00020038, 0x00020038, 0x00020038, 0x00020038, 0x00020039, 0x00020039, 0x00020039, 0x00020039, 0x0002003a, 0x0002003a, 0x0002003a, 0x0002003a, }, - {0x0014ffff, 0x0015ffff, 0x0016ffff, 0x0017ffff, 0x0013ffff, 0x0012ffff, 0x0000003f, 0x00000043, 0x00000044, 0x00000045, 0x0001003c, 0x0001003c, 0x0001003e, 0x0001003e, 0x00010040, 0x00010040, }, - {0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030046, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, 0x00030048, }, - {0x0001006a, 0x0001006a, 0x0001006b, 0x0001006b, 0x0002004b, 0x0002004b, 0x0002004b, 0x0002004b, 0x0002004c, 0x0002004c, 0x0002004c, 0x0002004c, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006c, }, - {0x00010047, 0x00010047, 0x00010049, 0x00010049, 0x0001004a, 0x0001004a, 0x0001004d, 0x0001004d, 0x0001004e, 0x0001004e, 0x0001004f, 0x0001004f, 0x00010050, 0x00010050, 0x00010051, 0x00010051, }, - {0x00010052, 0x00010052, 0x00010053, 0x00010053, 0x00010054, 0x00010054, 0x00010055, 0x00010055, 0x00010056, 0x00010056, 0x00010057, 0x00010057, 0x00010058, 0x00010058, 0x00010059, 0x00010059, }, - {0x0001005a, 0x0001005a, 0x0001005b, 0x0001005b, 0x0001005c, 0x0001005c, 0x0001005d, 0x0001005d, 0x0001005e, 0x0001005e, 0x0001005f, 0x0001005f, 0x00010060, 0x00010060, 0x00010061, 0x00010061, }, - {0x00010062, 0x00010062, 0x00010063, 0x00010063, 0x00010064, 0x00010064, 0x00010065, 0x00010065, 0x00010066, 0x00010066, 0x00010067, 0x00010067, 0x00010068, 0x00010068, 0x00010069, 0x00010069, }, +const uint32_t c_aauiCQMFHuffDec60[24][16] = { + { + 0x0007ffff, + 0x0005ffff, + 0x0006ffff, + 0x0001ffff, + 0x0002ffff, + 0x0003ffff, + 0x0004ffff, + 0x00000000, + 0x00000003, + 0x00000004, + 0x00010002, + 0x00010002, + 0x00020001, + 0x00020001, + 0x00020001, + 0x00020001, + }, + { + 0x00020011, + 0x00020011, + 0x00020011, + 0x00020011, + 0x00020012, + 0x00020012, + 0x00020012, + 0x00020012, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + }, + { + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + }, + { + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + }, + { + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + }, + { + 0x00010015, + 0x00010015, + 0x00010016, + 0x00010016, + 0x00010017, + 0x00010017, + 0x00010018, + 0x00010018, + 0x00010019, + 0x00010019, + 0x0001001a, + 0x0001001a, + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x0002000c, + }, + { + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0002000f, + 0x0002000f, + 0x0002000f, + 0x0002000f, + 0x00020010, + 0x00020010, + 0x00020010, + 0x00020010, + }, + { + 0x000dffff, + 0x000cffff, + 0x0008ffff, + 0x0009ffff, + 0x000affff, + 0x000bffff, + 0x0000001b, + 0x0000001c, + 0x0000001d, + 0x0000001e, + 0x0000001f, + 0x00000020, + 0x00010013, + 0x00010013, + 0x00010014, + 0x00010014, + }, + { + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030021, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + 0x00030022, + }, + { + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030023, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + 0x00030024, + }, + { + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030025, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + 0x00030026, + }, + { + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030027, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + }, + { + 0x00020029, + 0x00020029, + 0x00020029, + 0x00020029, + 0x0002002a, + 0x0002002a, + 0x0002002a, + 0x0002002a, + 0x0002002b, + 0x0002002b, + 0x0002002b, + 0x0002002b, + 0x0002002c, + 0x0002002c, + 0x0002002c, + 0x0002002c, + }, + { + 0x0011ffff, + 0x0010ffff, + 0x000fffff, + 0x000effff, + 0x00000031, + 0x00000032, + 0x00000033, + 0x00000037, + 0x0001002d, + 0x0001002d, + 0x0001002e, + 0x0001002e, + 0x0001002f, + 0x0001002f, + 0x00010030, + 0x00010030, + }, + { + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + }, + { + 0x0002003b, + 0x0002003b, + 0x0002003b, + 0x0002003b, + 0x0002003d, + 0x0002003d, + 0x0002003d, + 0x0002003d, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + }, + { + 0x00010041, + 0x00010041, + 0x00010042, + 0x00010042, + 0x00020038, + 0x00020038, + 0x00020038, + 0x00020038, + 0x00020039, + 0x00020039, + 0x00020039, + 0x00020039, + 0x0002003a, + 0x0002003a, + 0x0002003a, + 0x0002003a, + }, + { + 0x0014ffff, + 0x0015ffff, + 0x0016ffff, + 0x0017ffff, + 0x0013ffff, + 0x0012ffff, + 0x0000003f, + 0x00000043, + 0x00000044, + 0x00000045, + 0x0001003c, + 0x0001003c, + 0x0001003e, + 0x0001003e, + 0x00010040, + 0x00010040, + }, + { + 0x00030046, + 0x00030046, + 0x00030046, + 0x00030046, + 0x00030046, + 0x00030046, + 0x00030046, + 0x00030046, + 0x00030048, + 0x00030048, + 0x00030048, + 0x00030048, + 0x00030048, + 0x00030048, + 0x00030048, + 0x00030048, + }, + { + 0x0001006a, + 0x0001006a, + 0x0001006b, + 0x0001006b, + 0x0002004b, + 0x0002004b, + 0x0002004b, + 0x0002004b, + 0x0002004c, + 0x0002004c, + 0x0002004c, + 0x0002004c, + 0x0002006c, + 0x0002006c, + 0x0002006c, + 0x0002006c, + }, + { + 0x00010047, + 0x00010047, + 0x00010049, + 0x00010049, + 0x0001004a, + 0x0001004a, + 0x0001004d, + 0x0001004d, + 0x0001004e, + 0x0001004e, + 0x0001004f, + 0x0001004f, + 0x00010050, + 0x00010050, + 0x00010051, + 0x00010051, + }, + { + 0x00010052, + 0x00010052, + 0x00010053, + 0x00010053, + 0x00010054, + 0x00010054, + 0x00010055, + 0x00010055, + 0x00010056, + 0x00010056, + 0x00010057, + 0x00010057, + 0x00010058, + 0x00010058, + 0x00010059, + 0x00010059, + }, + { + 0x0001005a, + 0x0001005a, + 0x0001005b, + 0x0001005b, + 0x0001005c, + 0x0001005c, + 0x0001005d, + 0x0001005d, + 0x0001005e, + 0x0001005e, + 0x0001005f, + 0x0001005f, + 0x00010060, + 0x00010060, + 0x00010061, + 0x00010061, + }, + { + 0x00010062, + 0x00010062, + 0x00010063, + 0x00010063, + 0x00010064, + 0x00010064, + 0x00010065, + 0x00010065, + 0x00010066, + 0x00010066, + 0x00010067, + 0x00010067, + 0x00010068, + 0x00010068, + 0x00010069, + 0x00010069, + }, }; #endif #ifndef ROM_TO_RAM @@ -3976,62 +41476,734 @@ const uint32_t c_aauiCQMFHuffEnc61[129][2] = #else const uint16_t c_aauiCQMFHuffEnc61[129][2] = #endif -{ - {0x0004, 0x0008}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x0009}, {0x0004, 0x000a}, {0x0004, 0x000b}, {0x0005, 0x0008}, {0x0005, 0x0009}, - {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0005, 0x000c}, {0x0005, 0x000d}, {0x0005, 0x000e}, {0x0005, 0x000f}, {0x0006, 0x0008}, {0x0006, 0x0009}, - {0x0006, 0x000a}, {0x0006, 0x000b}, {0x0006, 0x000c}, {0x0006, 0x000d}, {0x0006, 0x000e}, {0x0006, 0x000f}, {0x0007, 0x0008}, {0x0007, 0x0009}, - {0x0007, 0x000a}, {0x0007, 0x000b}, {0x0007, 0x000c}, {0x0007, 0x000d}, {0x0007, 0x000e}, {0x0007, 0x000f}, {0x0008, 0x0006}, {0x0008, 0x0007}, - {0x0008, 0x0008}, {0x0008, 0x0009}, {0x0008, 0x000a}, {0x0008, 0x000b}, {0x0008, 0x000c}, {0x0008, 0x000d}, {0x0008, 0x000e}, {0x0008, 0x000f}, - {0x0009, 0x0006}, {0x0009, 0x0007}, {0x0009, 0x0008}, {0x0009, 0x0009}, {0x0009, 0x000a}, {0x0009, 0x000b}, {0x000a, 0x0005}, {0x000a, 0x0006}, - {0x000a, 0x0007}, {0x000a, 0x0008}, {0x000a, 0x0009}, {0x000a, 0x000a}, {0x000a, 0x000b}, {0x000b, 0x0005}, {0x000b, 0x0006}, {0x000b, 0x0007}, - {0x000b, 0x0008}, {0x000b, 0x0009}, {0x000c, 0x0006}, {0x000c, 0x0007}, {0x000c, 0x0008}, {0x000c, 0x0009}, {0x000d, 0x0005}, {0x000d, 0x0006}, - {0x000d, 0x0007}, {0x000d, 0x0008}, {0x000d, 0x0009}, {0x000d, 0x000a}, {0x000e, 0x0008}, {0x000d, 0x000b}, {0x000e, 0x0009}, {0x000f, 0x0009}, - {0x000f, 0x000a}, {0x000f, 0x000b}, {0x000f, 0x000c}, {0x000f, 0x000d}, {0x000f, 0x000e}, {0x0010, 0x000c}, {0x0011, 0x0015}, {0x0010, 0x000d}, - {0x000f, 0x000f}, {0x0010, 0x000e}, {0x0010, 0x000f}, {0x0012, 0x0000}, {0x0011, 0x0016}, {0x0010, 0x0010}, {0x0010, 0x0011}, {0x0011, 0x0017}, - {0x0012, 0x0001}, {0x0012, 0x0002}, {0x0012, 0x0003}, {0x0012, 0x0004}, {0x0012, 0x0005}, {0x0012, 0x0006}, {0x0012, 0x0007}, {0x0012, 0x0008}, - {0x0012, 0x0009}, {0x0012, 0x000a}, {0x0012, 0x000b}, {0x0012, 0x000c}, {0x0012, 0x000d}, {0x0012, 0x000e}, {0x0012, 0x000f}, {0x0012, 0x0010}, - {0x0012, 0x0011}, {0x0012, 0x0012}, {0x0012, 0x0013}, {0x0012, 0x0014}, {0x0012, 0x0015}, {0x0012, 0x0016}, {0x0012, 0x0017}, {0x0012, 0x0018}, - {0x0012, 0x0019}, {0x0012, 0x001a}, {0x0012, 0x001b}, {0x0012, 0x001c}, {0x0012, 0x001d}, {0x0012, 0x001e}, {0x0012, 0x001f}, {0x0012, 0x0020}, - {0x0012, 0x0021}, {0x0012, 0x0022}, {0x0012, 0x0023}, {0x0012, 0x0024}, {0x0012, 0x0025}, {0x0012, 0x0026}, {0x0012, 0x0027}, {0x0012, 0x0028}, - {0x0012, 0x0029}, + { + { 0x0004, 0x0008 }, + { 0x0003, 0x0006 }, + { 0x0003, 0x0007 }, + { 0x0004, 0x0009 }, + { 0x0004, 0x000a }, + { 0x0004, 0x000b }, + { 0x0005, 0x0008 }, + { 0x0005, 0x0009 }, + { 0x0005, 0x000a }, + { 0x0005, 0x000b }, + { 0x0005, 0x000c }, + { 0x0005, 0x000d }, + { 0x0005, 0x000e }, + { 0x0005, 0x000f }, + { 0x0006, 0x0008 }, + { 0x0006, 0x0009 }, + { 0x0006, 0x000a }, + { 0x0006, 0x000b }, + { 0x0006, 0x000c }, + { 0x0006, 0x000d }, + { 0x0006, 0x000e }, + { 0x0006, 0x000f }, + { 0x0007, 0x0008 }, + { 0x0007, 0x0009 }, + { 0x0007, 0x000a }, + { 0x0007, 0x000b }, + { 0x0007, 0x000c }, + { 0x0007, 0x000d }, + { 0x0007, 0x000e }, + { 0x0007, 0x000f }, + { 0x0008, 0x0006 }, + { 0x0008, 0x0007 }, + { 0x0008, 0x0008 }, + { 0x0008, 0x0009 }, + { 0x0008, 0x000a }, + { 0x0008, 0x000b }, + { 0x0008, 0x000c }, + { 0x0008, 0x000d }, + { 0x0008, 0x000e }, + { 0x0008, 0x000f }, + { 0x0009, 0x0006 }, + { 0x0009, 0x0007 }, + { 0x0009, 0x0008 }, + { 0x0009, 0x0009 }, + { 0x0009, 0x000a }, + { 0x0009, 0x000b }, + { 0x000a, 0x0005 }, + { 0x000a, 0x0006 }, + { 0x000a, 0x0007 }, + { 0x000a, 0x0008 }, + { 0x000a, 0x0009 }, + { 0x000a, 0x000a }, + { 0x000a, 0x000b }, + { 0x000b, 0x0005 }, + { 0x000b, 0x0006 }, + { 0x000b, 0x0007 }, + { 0x000b, 0x0008 }, + { 0x000b, 0x0009 }, + { 0x000c, 0x0006 }, + { 0x000c, 0x0007 }, + { 0x000c, 0x0008 }, + { 0x000c, 0x0009 }, + { 0x000d, 0x0005 }, + { 0x000d, 0x0006 }, + { 0x000d, 0x0007 }, + { 0x000d, 0x0008 }, + { 0x000d, 0x0009 }, + { 0x000d, 0x000a }, + { 0x000e, 0x0008 }, + { 0x000d, 0x000b }, + { 0x000e, 0x0009 }, + { 0x000f, 0x0009 }, + { 0x000f, 0x000a }, + { 0x000f, 0x000b }, + { 0x000f, 0x000c }, + { 0x000f, 0x000d }, + { 0x000f, 0x000e }, + { 0x0010, 0x000c }, + { 0x0011, 0x0015 }, + { 0x0010, 0x000d }, + { 0x000f, 0x000f }, + { 0x0010, 0x000e }, + { 0x0010, 0x000f }, + { 0x0012, 0x0000 }, + { 0x0011, 0x0016 }, + { 0x0010, 0x0010 }, + { 0x0010, 0x0011 }, + { 0x0011, 0x0017 }, + { 0x0012, 0x0001 }, + { 0x0012, 0x0002 }, + { 0x0012, 0x0003 }, + { 0x0012, 0x0004 }, + { 0x0012, 0x0005 }, + { 0x0012, 0x0006 }, + { 0x0012, 0x0007 }, + { 0x0012, 0x0008 }, + { 0x0012, 0x0009 }, + { 0x0012, 0x000a }, + { 0x0012, 0x000b }, + { 0x0012, 0x000c }, + { 0x0012, 0x000d }, + { 0x0012, 0x000e }, + { 0x0012, 0x000f }, + { 0x0012, 0x0010 }, + { 0x0012, 0x0011 }, + { 0x0012, 0x0012 }, + { 0x0012, 0x0013 }, + { 0x0012, 0x0014 }, + { 0x0012, 0x0015 }, + { 0x0012, 0x0016 }, + { 0x0012, 0x0017 }, + { 0x0012, 0x0018 }, + { 0x0012, 0x0019 }, + { 0x0012, 0x001a }, + { 0x0012, 0x001b }, + { 0x0012, 0x001c }, + { 0x0012, 0x001d }, + { 0x0012, 0x001e }, + { 0x0012, 0x001f }, + { 0x0012, 0x0020 }, + { 0x0012, 0x0021 }, + { 0x0012, 0x0022 }, + { 0x0012, 0x0023 }, + { 0x0012, 0x0024 }, + { 0x0012, 0x0025 }, + { 0x0012, 0x0026 }, + { 0x0012, 0x0027 }, + { 0x0012, 0x0028 }, + { 0x0012, 0x0029 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec61[33][16] = -{ - {0x0008ffff, 0x0007ffff, 0x0005ffff, 0x0006ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x00000000, 0x00000003, 0x00000004, 0x00000005, 0x00010001, 0x00010001, 0x00010002, 0x00010002, }, - {0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, }, - {0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, }, - {0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, }, - {0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, 0x0003000d, }, - {0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x00020011, 0x00020011, 0x00020011, 0x00020011, }, - {0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00020013, 0x00020013, 0x00020013, 0x00020013, 0x00020014, 0x00020014, 0x00020014, 0x00020014, 0x00020015, 0x00020015, 0x00020015, 0x00020015, }, - {0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x0001001a, 0x0001001a, 0x0001001b, 0x0001001b, 0x0001001c, 0x0001001c, 0x0001001d, 0x0001001d, }, - {0x000effff, 0x000cffff, 0x000dffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x0000001e, 0x0000001f, 0x00000020, 0x00000021, 0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000026, 0x00000027, }, - {0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030028, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, 0x00030029, }, - {0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002a, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, }, - {0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, }, - {0x00010038, 0x00010038, 0x00010039, 0x00010039, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002e, 0x0002002f, 0x0002002f, 0x0002002f, 0x0002002f, 0x00020030, 0x00020030, 0x00020030, 0x00020030, }, - {0x00020031, 0x00020031, 0x00020031, 0x00020031, 0x00020032, 0x00020032, 0x00020032, 0x00020032, 0x00020033, 0x00020033, 0x00020033, 0x00020033, 0x00020034, 0x00020034, 0x00020034, 0x00020034, }, - {0x0014ffff, 0x0013ffff, 0x000fffff, 0x0010ffff, 0x0011ffff, 0x0012ffff, 0x0000003a, 0x0000003b, 0x0000003c, 0x0000003d, 0x00010035, 0x00010035, 0x00010036, 0x00010036, 0x00010037, 0x00010037, }, - {0x00020044, 0x00020044, 0x00020044, 0x00020044, 0x00020046, 0x00020046, 0x00020046, 0x00020046, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, 0x0003003e, }, - {0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x0003003f, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, 0x00030040, }, - {0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030041, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, 0x00030042, }, - {0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030043, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, 0x00030045, }, - {0x00000055, 0x00000056, 0x00010047, 0x00010047, 0x00010048, 0x00010048, 0x00010049, 0x00010049, 0x0001004a, 0x0001004a, 0x0001004b, 0x0001004b, 0x0001004c, 0x0001004c, 0x00010050, 0x00010050, }, - {0x0017ffff, 0x0018ffff, 0x0019ffff, 0x001affff, 0x001bffff, 0x001cffff, 0x001dffff, 0x001effff, 0x001fffff, 0x0020ffff, 0x0016ffff, 0x0015ffff, 0x0000004d, 0x0000004f, 0x00000051, 0x00000052, }, - {0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, }, - {0x0002007f, 0x0002007f, 0x0002007f, 0x0002007f, 0x00020080, 0x00020080, 0x00020080, 0x00020080, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, }, - {0x00020053, 0x00020053, 0x00020053, 0x00020053, 0x00020058, 0x00020058, 0x00020058, 0x00020058, 0x00020059, 0x00020059, 0x00020059, 0x00020059, 0x0002005a, 0x0002005a, 0x0002005a, 0x0002005a, }, - {0x0002005b, 0x0002005b, 0x0002005b, 0x0002005b, 0x0002005c, 0x0002005c, 0x0002005c, 0x0002005c, 0x0002005d, 0x0002005d, 0x0002005d, 0x0002005d, 0x0002005e, 0x0002005e, 0x0002005e, 0x0002005e, }, - {0x0002005f, 0x0002005f, 0x0002005f, 0x0002005f, 0x00020060, 0x00020060, 0x00020060, 0x00020060, 0x00020061, 0x00020061, 0x00020061, 0x00020061, 0x00020062, 0x00020062, 0x00020062, 0x00020062, }, - {0x00020063, 0x00020063, 0x00020063, 0x00020063, 0x00020064, 0x00020064, 0x00020064, 0x00020064, 0x00020065, 0x00020065, 0x00020065, 0x00020065, 0x00020066, 0x00020066, 0x00020066, 0x00020066, }, - {0x00020067, 0x00020067, 0x00020067, 0x00020067, 0x00020068, 0x00020068, 0x00020068, 0x00020068, 0x00020069, 0x00020069, 0x00020069, 0x00020069, 0x0002006a, 0x0002006a, 0x0002006a, 0x0002006a, }, - {0x0002006b, 0x0002006b, 0x0002006b, 0x0002006b, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006d, 0x0002006d, 0x0002006d, 0x0002006d, 0x0002006e, 0x0002006e, 0x0002006e, 0x0002006e, }, - {0x0002006f, 0x0002006f, 0x0002006f, 0x0002006f, 0x00020070, 0x00020070, 0x00020070, 0x00020070, 0x00020071, 0x00020071, 0x00020071, 0x00020071, 0x00020072, 0x00020072, 0x00020072, 0x00020072, }, - {0x00020073, 0x00020073, 0x00020073, 0x00020073, 0x00020074, 0x00020074, 0x00020074, 0x00020074, 0x00020075, 0x00020075, 0x00020075, 0x00020075, 0x00020076, 0x00020076, 0x00020076, 0x00020076, }, - {0x00020077, 0x00020077, 0x00020077, 0x00020077, 0x00020078, 0x00020078, 0x00020078, 0x00020078, 0x00020079, 0x00020079, 0x00020079, 0x00020079, 0x0002007a, 0x0002007a, 0x0002007a, 0x0002007a, }, - {0x0002007b, 0x0002007b, 0x0002007b, 0x0002007b, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007d, 0x0002007d, 0x0002007d, 0x0002007d, 0x0002007e, 0x0002007e, 0x0002007e, 0x0002007e, }, +const uint32_t c_aauiCQMFHuffDec61[33][16] = { + { + 0x0008ffff, + 0x0007ffff, + 0x0005ffff, + 0x0006ffff, + 0x0001ffff, + 0x0002ffff, + 0x0003ffff, + 0x0004ffff, + 0x00000000, + 0x00000003, + 0x00000004, + 0x00000005, + 0x00010001, + 0x00010001, + 0x00010002, + 0x00010002, + }, + { + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + }, + { + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + }, + { + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + }, + { + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + 0x0003000d, + }, + { + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0002000f, + 0x0002000f, + 0x0002000f, + 0x0002000f, + 0x00020010, + 0x00020010, + 0x00020010, + 0x00020010, + 0x00020011, + 0x00020011, + 0x00020011, + 0x00020011, + }, + { + 0x00020012, + 0x00020012, + 0x00020012, + 0x00020012, + 0x00020013, + 0x00020013, + 0x00020013, + 0x00020013, + 0x00020014, + 0x00020014, + 0x00020014, + 0x00020014, + 0x00020015, + 0x00020015, + 0x00020015, + 0x00020015, + }, + { + 0x00010016, + 0x00010016, + 0x00010017, + 0x00010017, + 0x00010018, + 0x00010018, + 0x00010019, + 0x00010019, + 0x0001001a, + 0x0001001a, + 0x0001001b, + 0x0001001b, + 0x0001001c, + 0x0001001c, + 0x0001001d, + 0x0001001d, + }, + { + 0x000effff, + 0x000cffff, + 0x000dffff, + 0x0009ffff, + 0x000affff, + 0x000bffff, + 0x0000001e, + 0x0000001f, + 0x00000020, + 0x00000021, + 0x00000022, + 0x00000023, + 0x00000024, + 0x00000025, + 0x00000026, + 0x00000027, + }, + { + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030028, + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + 0x00030029, + }, + { + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002a, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + }, + { + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + }, + { + 0x00010038, + 0x00010038, + 0x00010039, + 0x00010039, + 0x0002002e, + 0x0002002e, + 0x0002002e, + 0x0002002e, + 0x0002002f, + 0x0002002f, + 0x0002002f, + 0x0002002f, + 0x00020030, + 0x00020030, + 0x00020030, + 0x00020030, + }, + { + 0x00020031, + 0x00020031, + 0x00020031, + 0x00020031, + 0x00020032, + 0x00020032, + 0x00020032, + 0x00020032, + 0x00020033, + 0x00020033, + 0x00020033, + 0x00020033, + 0x00020034, + 0x00020034, + 0x00020034, + 0x00020034, + }, + { + 0x0014ffff, + 0x0013ffff, + 0x000fffff, + 0x0010ffff, + 0x0011ffff, + 0x0012ffff, + 0x0000003a, + 0x0000003b, + 0x0000003c, + 0x0000003d, + 0x00010035, + 0x00010035, + 0x00010036, + 0x00010036, + 0x00010037, + 0x00010037, + }, + { + 0x00020044, + 0x00020044, + 0x00020044, + 0x00020044, + 0x00020046, + 0x00020046, + 0x00020046, + 0x00020046, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + 0x0003003e, + }, + { + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x0003003f, + 0x00030040, + 0x00030040, + 0x00030040, + 0x00030040, + 0x00030040, + 0x00030040, + 0x00030040, + 0x00030040, + }, + { + 0x00030041, + 0x00030041, + 0x00030041, + 0x00030041, + 0x00030041, + 0x00030041, + 0x00030041, + 0x00030041, + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030042, + 0x00030042, + }, + { + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030043, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + 0x00030045, + }, + { + 0x00000055, + 0x00000056, + 0x00010047, + 0x00010047, + 0x00010048, + 0x00010048, + 0x00010049, + 0x00010049, + 0x0001004a, + 0x0001004a, + 0x0001004b, + 0x0001004b, + 0x0001004c, + 0x0001004c, + 0x00010050, + 0x00010050, + }, + { + 0x0017ffff, + 0x0018ffff, + 0x0019ffff, + 0x001affff, + 0x001bffff, + 0x001cffff, + 0x001dffff, + 0x001effff, + 0x001fffff, + 0x0020ffff, + 0x0016ffff, + 0x0015ffff, + 0x0000004d, + 0x0000004f, + 0x00000051, + 0x00000052, + }, + { + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030057, + 0x00030057, + 0x00030057, + 0x00030057, + 0x00030057, + 0x00030057, + 0x00030057, + 0x00030057, + }, + { + 0x0002007f, + 0x0002007f, + 0x0002007f, + 0x0002007f, + 0x00020080, + 0x00020080, + 0x00020080, + 0x00020080, + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x0003004e, + }, + { + 0x00020053, + 0x00020053, + 0x00020053, + 0x00020053, + 0x00020058, + 0x00020058, + 0x00020058, + 0x00020058, + 0x00020059, + 0x00020059, + 0x00020059, + 0x00020059, + 0x0002005a, + 0x0002005a, + 0x0002005a, + 0x0002005a, + }, + { + 0x0002005b, + 0x0002005b, + 0x0002005b, + 0x0002005b, + 0x0002005c, + 0x0002005c, + 0x0002005c, + 0x0002005c, + 0x0002005d, + 0x0002005d, + 0x0002005d, + 0x0002005d, + 0x0002005e, + 0x0002005e, + 0x0002005e, + 0x0002005e, + }, + { + 0x0002005f, + 0x0002005f, + 0x0002005f, + 0x0002005f, + 0x00020060, + 0x00020060, + 0x00020060, + 0x00020060, + 0x00020061, + 0x00020061, + 0x00020061, + 0x00020061, + 0x00020062, + 0x00020062, + 0x00020062, + 0x00020062, + }, + { + 0x00020063, + 0x00020063, + 0x00020063, + 0x00020063, + 0x00020064, + 0x00020064, + 0x00020064, + 0x00020064, + 0x00020065, + 0x00020065, + 0x00020065, + 0x00020065, + 0x00020066, + 0x00020066, + 0x00020066, + 0x00020066, + }, + { + 0x00020067, + 0x00020067, + 0x00020067, + 0x00020067, + 0x00020068, + 0x00020068, + 0x00020068, + 0x00020068, + 0x00020069, + 0x00020069, + 0x00020069, + 0x00020069, + 0x0002006a, + 0x0002006a, + 0x0002006a, + 0x0002006a, + }, + { + 0x0002006b, + 0x0002006b, + 0x0002006b, + 0x0002006b, + 0x0002006c, + 0x0002006c, + 0x0002006c, + 0x0002006c, + 0x0002006d, + 0x0002006d, + 0x0002006d, + 0x0002006d, + 0x0002006e, + 0x0002006e, + 0x0002006e, + 0x0002006e, + }, + { + 0x0002006f, + 0x0002006f, + 0x0002006f, + 0x0002006f, + 0x00020070, + 0x00020070, + 0x00020070, + 0x00020070, + 0x00020071, + 0x00020071, + 0x00020071, + 0x00020071, + 0x00020072, + 0x00020072, + 0x00020072, + 0x00020072, + }, + { + 0x00020073, + 0x00020073, + 0x00020073, + 0x00020073, + 0x00020074, + 0x00020074, + 0x00020074, + 0x00020074, + 0x00020075, + 0x00020075, + 0x00020075, + 0x00020075, + 0x00020076, + 0x00020076, + 0x00020076, + 0x00020076, + }, + { + 0x00020077, + 0x00020077, + 0x00020077, + 0x00020077, + 0x00020078, + 0x00020078, + 0x00020078, + 0x00020078, + 0x00020079, + 0x00020079, + 0x00020079, + 0x00020079, + 0x0002007a, + 0x0002007a, + 0x0002007a, + 0x0002007a, + }, + { + 0x0002007b, + 0x0002007b, + 0x0002007b, + 0x0002007b, + 0x0002007c, + 0x0002007c, + 0x0002007c, + 0x0002007c, + 0x0002007d, + 0x0002007d, + 0x0002007d, + 0x0002007d, + 0x0002007e, + 0x0002007e, + 0x0002007e, + 0x0002007e, + }, }; #endif #ifndef ROM_TO_RAM @@ -4039,73 +42211,902 @@ const uint32_t c_aauiCQMFHuffEnc62[153][2] = #else const uint16_t c_aauiCQMFHuffEnc62[153][2] = #endif -{ - {0x0004, 0x0009}, {0x0003, 0x0006}, {0x0003, 0x0007}, {0x0004, 0x000a}, {0x0004, 0x000b}, {0x0005, 0x000a}, {0x0005, 0x000b}, {0x0005, 0x000c}, - {0x0005, 0x000d}, {0x0005, 0x000e}, {0x0005, 0x000f}, {0x0005, 0x0010}, {0x0005, 0x0011}, {0x0006, 0x000a}, {0x0006, 0x000b}, {0x0006, 0x000c}, - {0x0006, 0x000d}, {0x0006, 0x000e}, {0x0006, 0x000f}, {0x0006, 0x0010}, {0x0006, 0x0011}, {0x0006, 0x0012}, {0x0006, 0x0013}, {0x0007, 0x0009}, - {0x0007, 0x000a}, {0x0007, 0x000b}, {0x0007, 0x000c}, {0x0007, 0x000d}, {0x0007, 0x000e}, {0x0007, 0x000f}, {0x0007, 0x0010}, {0x0007, 0x0011}, - {0x0007, 0x0012}, {0x0007, 0x0013}, {0x0008, 0x0009}, {0x0008, 0x000a}, {0x0008, 0x000b}, {0x0008, 0x000c}, {0x0008, 0x000d}, {0x0008, 0x000e}, - {0x0008, 0x000f}, {0x0008, 0x0010}, {0x0008, 0x0011}, {0x0009, 0x0007}, {0x0009, 0x0008}, {0x0009, 0x0009}, {0x0009, 0x000a}, {0x0009, 0x000b}, - {0x0009, 0x000c}, {0x0009, 0x000d}, {0x0009, 0x000e}, {0x0009, 0x000f}, {0x0009, 0x0010}, {0x0009, 0x0011}, {0x000a, 0x0004}, {0x000a, 0x0005}, - {0x000a, 0x0006}, {0x000a, 0x0007}, {0x000a, 0x0008}, {0x000a, 0x0009}, {0x000a, 0x000a}, {0x000a, 0x000b}, {0x000a, 0x000c}, {0x000a, 0x000d}, - {0x000b, 0x0007}, {0x000c, 0x0007}, {0x000c, 0x0008}, {0x000c, 0x0009}, {0x000c, 0x000a}, {0x000c, 0x000b}, {0x000c, 0x000c}, {0x000d, 0x0007}, - {0x000c, 0x000d}, {0x000d, 0x0008}, {0x000d, 0x0009}, {0x000d, 0x000a}, {0x000d, 0x000b}, {0x000e, 0x0008}, {0x000d, 0x000c}, {0x000d, 0x000d}, - {0x000e, 0x0009}, {0x000e, 0x000a}, {0x000e, 0x000b}, {0x000e, 0x000c}, {0x000f, 0x000c}, {0x000e, 0x000d}, {0x000f, 0x000d}, {0x000f, 0x000e}, - {0x000f, 0x000f}, {0x0010, 0x000f}, {0x0010, 0x0010}, {0x0011, 0x0019}, {0x0010, 0x0011}, {0x0010, 0x0012}, {0x0010, 0x0013}, {0x0010, 0x0014}, - {0x0010, 0x0015}, {0x0012, 0x0000}, {0x0010, 0x0016}, {0x0011, 0x001a}, {0x0010, 0x0017}, {0x0012, 0x0001}, {0x0012, 0x0002}, {0x0012, 0x0003}, - {0x0011, 0x001b}, {0x0012, 0x0004}, {0x0012, 0x0005}, {0x0012, 0x0006}, {0x0012, 0x0007}, {0x0012, 0x0008}, {0x0012, 0x0009}, {0x0012, 0x000a}, - {0x0012, 0x000b}, {0x0012, 0x000c}, {0x0012, 0x000d}, {0x0012, 0x000e}, {0x0012, 0x000f}, {0x0012, 0x0010}, {0x0012, 0x0011}, {0x0012, 0x0012}, - {0x0012, 0x0013}, {0x0012, 0x0014}, {0x0012, 0x0015}, {0x0012, 0x0016}, {0x0012, 0x0017}, {0x0012, 0x0018}, {0x0011, 0x001c}, {0x0012, 0x0019}, - {0x0012, 0x001a}, {0x0012, 0x001b}, {0x0012, 0x001c}, {0x0012, 0x001d}, {0x0012, 0x001e}, {0x0012, 0x001f}, {0x0012, 0x0020}, {0x0012, 0x0021}, - {0x0012, 0x0022}, {0x0012, 0x0023}, {0x0012, 0x0024}, {0x0012, 0x0025}, {0x0012, 0x0026}, {0x0012, 0x0027}, {0x0012, 0x0028}, {0x0012, 0x0029}, - {0x0012, 0x002a}, {0x0012, 0x002b}, {0x0012, 0x002c}, {0x0012, 0x002d}, {0x0012, 0x002e}, {0x0012, 0x002f}, {0x0012, 0x0030}, {0x0012, 0x0031}, - {0x0011, 0x001d}, + { + { 0x0004, 0x0009 }, + { 0x0003, 0x0006 }, + { 0x0003, 0x0007 }, + { 0x0004, 0x000a }, + { 0x0004, 0x000b }, + { 0x0005, 0x000a }, + { 0x0005, 0x000b }, + { 0x0005, 0x000c }, + { 0x0005, 0x000d }, + { 0x0005, 0x000e }, + { 0x0005, 0x000f }, + { 0x0005, 0x0010 }, + { 0x0005, 0x0011 }, + { 0x0006, 0x000a }, + { 0x0006, 0x000b }, + { 0x0006, 0x000c }, + { 0x0006, 0x000d }, + { 0x0006, 0x000e }, + { 0x0006, 0x000f }, + { 0x0006, 0x0010 }, + { 0x0006, 0x0011 }, + { 0x0006, 0x0012 }, + { 0x0006, 0x0013 }, + { 0x0007, 0x0009 }, + { 0x0007, 0x000a }, + { 0x0007, 0x000b }, + { 0x0007, 0x000c }, + { 0x0007, 0x000d }, + { 0x0007, 0x000e }, + { 0x0007, 0x000f }, + { 0x0007, 0x0010 }, + { 0x0007, 0x0011 }, + { 0x0007, 0x0012 }, + { 0x0007, 0x0013 }, + { 0x0008, 0x0009 }, + { 0x0008, 0x000a }, + { 0x0008, 0x000b }, + { 0x0008, 0x000c }, + { 0x0008, 0x000d }, + { 0x0008, 0x000e }, + { 0x0008, 0x000f }, + { 0x0008, 0x0010 }, + { 0x0008, 0x0011 }, + { 0x0009, 0x0007 }, + { 0x0009, 0x0008 }, + { 0x0009, 0x0009 }, + { 0x0009, 0x000a }, + { 0x0009, 0x000b }, + { 0x0009, 0x000c }, + { 0x0009, 0x000d }, + { 0x0009, 0x000e }, + { 0x0009, 0x000f }, + { 0x0009, 0x0010 }, + { 0x0009, 0x0011 }, + { 0x000a, 0x0004 }, + { 0x000a, 0x0005 }, + { 0x000a, 0x0006 }, + { 0x000a, 0x0007 }, + { 0x000a, 0x0008 }, + { 0x000a, 0x0009 }, + { 0x000a, 0x000a }, + { 0x000a, 0x000b }, + { 0x000a, 0x000c }, + { 0x000a, 0x000d }, + { 0x000b, 0x0007 }, + { 0x000c, 0x0007 }, + { 0x000c, 0x0008 }, + { 0x000c, 0x0009 }, + { 0x000c, 0x000a }, + { 0x000c, 0x000b }, + { 0x000c, 0x000c }, + { 0x000d, 0x0007 }, + { 0x000c, 0x000d }, + { 0x000d, 0x0008 }, + { 0x000d, 0x0009 }, + { 0x000d, 0x000a }, + { 0x000d, 0x000b }, + { 0x000e, 0x0008 }, + { 0x000d, 0x000c }, + { 0x000d, 0x000d }, + { 0x000e, 0x0009 }, + { 0x000e, 0x000a }, + { 0x000e, 0x000b }, + { 0x000e, 0x000c }, + { 0x000f, 0x000c }, + { 0x000e, 0x000d }, + { 0x000f, 0x000d }, + { 0x000f, 0x000e }, + { 0x000f, 0x000f }, + { 0x0010, 0x000f }, + { 0x0010, 0x0010 }, + { 0x0011, 0x0019 }, + { 0x0010, 0x0011 }, + { 0x0010, 0x0012 }, + { 0x0010, 0x0013 }, + { 0x0010, 0x0014 }, + { 0x0010, 0x0015 }, + { 0x0012, 0x0000 }, + { 0x0010, 0x0016 }, + { 0x0011, 0x001a }, + { 0x0010, 0x0017 }, + { 0x0012, 0x0001 }, + { 0x0012, 0x0002 }, + { 0x0012, 0x0003 }, + { 0x0011, 0x001b }, + { 0x0012, 0x0004 }, + { 0x0012, 0x0005 }, + { 0x0012, 0x0006 }, + { 0x0012, 0x0007 }, + { 0x0012, 0x0008 }, + { 0x0012, 0x0009 }, + { 0x0012, 0x000a }, + { 0x0012, 0x000b }, + { 0x0012, 0x000c }, + { 0x0012, 0x000d }, + { 0x0012, 0x000e }, + { 0x0012, 0x000f }, + { 0x0012, 0x0010 }, + { 0x0012, 0x0011 }, + { 0x0012, 0x0012 }, + { 0x0012, 0x0013 }, + { 0x0012, 0x0014 }, + { 0x0012, 0x0015 }, + { 0x0012, 0x0016 }, + { 0x0012, 0x0017 }, + { 0x0012, 0x0018 }, + { 0x0011, 0x001c }, + { 0x0012, 0x0019 }, + { 0x0012, 0x001a }, + { 0x0012, 0x001b }, + { 0x0012, 0x001c }, + { 0x0012, 0x001d }, + { 0x0012, 0x001e }, + { 0x0012, 0x001f }, + { 0x0012, 0x0020 }, + { 0x0012, 0x0021 }, + { 0x0012, 0x0022 }, + { 0x0012, 0x0023 }, + { 0x0012, 0x0024 }, + { 0x0012, 0x0025 }, + { 0x0012, 0x0026 }, + { 0x0012, 0x0027 }, + { 0x0012, 0x0028 }, + { 0x0012, 0x0029 }, + { 0x0012, 0x002a }, + { 0x0012, 0x002b }, + { 0x0012, 0x002c }, + { 0x0012, 0x002d }, + { 0x0012, 0x002e }, + { 0x0012, 0x002f }, + { 0x0012, 0x0030 }, + { 0x0012, 0x0031 }, + { 0x0011, 0x001d }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec62[41][16] = -{ - {0x0009ffff, 0x0008ffff, 0x0005ffff, 0x0006ffff, 0x0007ffff, 0x0001ffff, 0x0002ffff, 0x0003ffff, 0x0004ffff, 0x00000000, 0x00000003, 0x00000004, 0x00010001, 0x00010001, 0x00010002, 0x00010002, }, - {0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, }, - {0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, 0x00030008, }, - {0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x00030009, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, 0x0003000a, }, - {0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000b, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, 0x0003000c, }, - {0x0001001e, 0x0001001e, 0x0001001f, 0x0001001f, 0x00010020, 0x00010020, 0x00010021, 0x00010021, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, }, - {0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, 0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x00020011, 0x00020011, 0x00020011, 0x00020011, 0x00020012, 0x00020012, 0x00020012, 0x00020012, }, - {0x00020013, 0x00020013, 0x00020013, 0x00020013, 0x00020014, 0x00020014, 0x00020014, 0x00020014, 0x00020015, 0x00020015, 0x00020015, 0x00020015, 0x00020016, 0x00020016, 0x00020016, 0x00020016, }, - {0x00000029, 0x0000002a, 0x00010017, 0x00010017, 0x00010018, 0x00010018, 0x00010019, 0x00010019, 0x0001001a, 0x0001001a, 0x0001001b, 0x0001001b, 0x0001001c, 0x0001001c, 0x0001001d, 0x0001001d, }, - {0x0012ffff, 0x0010ffff, 0x0011ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000026, 0x00000027, 0x00000028, }, - {0x0002003e, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002003f, 0x0002003f, 0x0002003f, 0x0002003f, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, }, - {0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, }, - {0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, }, - {0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, }, - {0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, }, - {0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, }, - {0x00020036, 0x00020036, 0x00020036, 0x00020036, 0x00020037, 0x00020037, 0x00020037, 0x00020037, 0x00020038, 0x00020038, 0x00020038, 0x00020038, 0x00020039, 0x00020039, 0x00020039, 0x00020039, }, - {0x0002003a, 0x0002003a, 0x0002003a, 0x0002003a, 0x0002003b, 0x0002003b, 0x0002003b, 0x0002003b, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003d, }, - {0x0019ffff, 0x0018ffff, 0x0017ffff, 0x0013ffff, 0x0014ffff, 0x0015ffff, 0x0016ffff, 0x00000041, 0x00000042, 0x00000043, 0x00000044, 0x00000045, 0x00000046, 0x00000048, 0x00010040, 0x00010040, }, - {0x00020053, 0x00020053, 0x00020053, 0x00020053, 0x00020055, 0x00020055, 0x00020055, 0x00020055, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, 0x00030047, }, - {0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x00030049, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, 0x0003004a, }, - {0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004b, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, 0x0003004c, }, - {0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004e, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, 0x0003004f, }, - {0x0002004d, 0x0002004d, 0x0002004d, 0x0002004d, 0x00020050, 0x00020050, 0x00020050, 0x00020050, 0x00020051, 0x00020051, 0x00020051, 0x00020051, 0x00020052, 0x00020052, 0x00020052, 0x00020052, }, - {0x0000005a, 0x0000005c, 0x0000005d, 0x0000005e, 0x0000005f, 0x00000060, 0x00000062, 0x00000064, 0x00010054, 0x00010054, 0x00010056, 0x00010056, 0x00010057, 0x00010057, 0x00010058, 0x00010058, }, - {0x001dffff, 0x001effff, 0x001fffff, 0x0020ffff, 0x0021ffff, 0x0022ffff, 0x0023ffff, 0x0024ffff, 0x0025ffff, 0x0026ffff, 0x0027ffff, 0x0028ffff, 0x001affff, 0x001bffff, 0x001cffff, 0x00000059, }, - {0x00020096, 0x00020096, 0x00020096, 0x00020096, 0x00020097, 0x00020097, 0x00020097, 0x00020097, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, 0x0003005b, }, - {0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030063, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, 0x00030068, }, - {0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x0003007e, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, 0x00030098, }, - {0x00020061, 0x00020061, 0x00020061, 0x00020061, 0x00020065, 0x00020065, 0x00020065, 0x00020065, 0x00020066, 0x00020066, 0x00020066, 0x00020066, 0x00020067, 0x00020067, 0x00020067, 0x00020067, }, - {0x00020069, 0x00020069, 0x00020069, 0x00020069, 0x0002006a, 0x0002006a, 0x0002006a, 0x0002006a, 0x0002006b, 0x0002006b, 0x0002006b, 0x0002006b, 0x0002006c, 0x0002006c, 0x0002006c, 0x0002006c, }, - {0x0002006d, 0x0002006d, 0x0002006d, 0x0002006d, 0x0002006e, 0x0002006e, 0x0002006e, 0x0002006e, 0x0002006f, 0x0002006f, 0x0002006f, 0x0002006f, 0x00020070, 0x00020070, 0x00020070, 0x00020070, }, - {0x00020071, 0x00020071, 0x00020071, 0x00020071, 0x00020072, 0x00020072, 0x00020072, 0x00020072, 0x00020073, 0x00020073, 0x00020073, 0x00020073, 0x00020074, 0x00020074, 0x00020074, 0x00020074, }, - {0x00020075, 0x00020075, 0x00020075, 0x00020075, 0x00020076, 0x00020076, 0x00020076, 0x00020076, 0x00020077, 0x00020077, 0x00020077, 0x00020077, 0x00020078, 0x00020078, 0x00020078, 0x00020078, }, - {0x00020079, 0x00020079, 0x00020079, 0x00020079, 0x0002007a, 0x0002007a, 0x0002007a, 0x0002007a, 0x0002007b, 0x0002007b, 0x0002007b, 0x0002007b, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007c, }, - {0x0002007d, 0x0002007d, 0x0002007d, 0x0002007d, 0x0002007f, 0x0002007f, 0x0002007f, 0x0002007f, 0x00020080, 0x00020080, 0x00020080, 0x00020080, 0x00020081, 0x00020081, 0x00020081, 0x00020081, }, - {0x00020082, 0x00020082, 0x00020082, 0x00020082, 0x00020083, 0x00020083, 0x00020083, 0x00020083, 0x00020084, 0x00020084, 0x00020084, 0x00020084, 0x00020085, 0x00020085, 0x00020085, 0x00020085, }, - {0x00020086, 0x00020086, 0x00020086, 0x00020086, 0x00020087, 0x00020087, 0x00020087, 0x00020087, 0x00020088, 0x00020088, 0x00020088, 0x00020088, 0x00020089, 0x00020089, 0x00020089, 0x00020089, }, - {0x0002008a, 0x0002008a, 0x0002008a, 0x0002008a, 0x0002008b, 0x0002008b, 0x0002008b, 0x0002008b, 0x0002008c, 0x0002008c, 0x0002008c, 0x0002008c, 0x0002008d, 0x0002008d, 0x0002008d, 0x0002008d, }, - {0x0002008e, 0x0002008e, 0x0002008e, 0x0002008e, 0x0002008f, 0x0002008f, 0x0002008f, 0x0002008f, 0x00020090, 0x00020090, 0x00020090, 0x00020090, 0x00020091, 0x00020091, 0x00020091, 0x00020091, }, - {0x00020092, 0x00020092, 0x00020092, 0x00020092, 0x00020093, 0x00020093, 0x00020093, 0x00020093, 0x00020094, 0x00020094, 0x00020094, 0x00020094, 0x00020095, 0x00020095, 0x00020095, 0x00020095, }, +const uint32_t c_aauiCQMFHuffDec62[41][16] = { + { + 0x0009ffff, + 0x0008ffff, + 0x0005ffff, + 0x0006ffff, + 0x0007ffff, + 0x0001ffff, + 0x0002ffff, + 0x0003ffff, + 0x0004ffff, + 0x00000000, + 0x00000003, + 0x00000004, + 0x00010001, + 0x00010001, + 0x00010002, + 0x00010002, + }, + { + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + }, + { + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + 0x00030008, + }, + { + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x00030009, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + 0x0003000a, + }, + { + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000b, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + 0x0003000c, + }, + { + 0x0001001e, + 0x0001001e, + 0x0001001f, + 0x0001001f, + 0x00010020, + 0x00010020, + 0x00010021, + 0x00010021, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0002000e, + }, + { + 0x0002000f, + 0x0002000f, + 0x0002000f, + 0x0002000f, + 0x00020010, + 0x00020010, + 0x00020010, + 0x00020010, + 0x00020011, + 0x00020011, + 0x00020011, + 0x00020011, + 0x00020012, + 0x00020012, + 0x00020012, + 0x00020012, + }, + { + 0x00020013, + 0x00020013, + 0x00020013, + 0x00020013, + 0x00020014, + 0x00020014, + 0x00020014, + 0x00020014, + 0x00020015, + 0x00020015, + 0x00020015, + 0x00020015, + 0x00020016, + 0x00020016, + 0x00020016, + 0x00020016, + }, + { + 0x00000029, + 0x0000002a, + 0x00010017, + 0x00010017, + 0x00010018, + 0x00010018, + 0x00010019, + 0x00010019, + 0x0001001a, + 0x0001001a, + 0x0001001b, + 0x0001001b, + 0x0001001c, + 0x0001001c, + 0x0001001d, + 0x0001001d, + }, + { + 0x0012ffff, + 0x0010ffff, + 0x0011ffff, + 0x000affff, + 0x000bffff, + 0x000cffff, + 0x000dffff, + 0x000effff, + 0x000fffff, + 0x00000022, + 0x00000023, + 0x00000024, + 0x00000025, + 0x00000026, + 0x00000027, + 0x00000028, + }, + { + 0x0002003e, + 0x0002003e, + 0x0002003e, + 0x0002003e, + 0x0002003f, + 0x0002003f, + 0x0002003f, + 0x0002003f, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + }, + { + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + }, + { + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + }, + { + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030031, + }, + { + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + }, + { + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + }, + { + 0x00020036, + 0x00020036, + 0x00020036, + 0x00020036, + 0x00020037, + 0x00020037, + 0x00020037, + 0x00020037, + 0x00020038, + 0x00020038, + 0x00020038, + 0x00020038, + 0x00020039, + 0x00020039, + 0x00020039, + 0x00020039, + }, + { + 0x0002003a, + 0x0002003a, + 0x0002003a, + 0x0002003a, + 0x0002003b, + 0x0002003b, + 0x0002003b, + 0x0002003b, + 0x0002003c, + 0x0002003c, + 0x0002003c, + 0x0002003c, + 0x0002003d, + 0x0002003d, + 0x0002003d, + 0x0002003d, + }, + { + 0x0019ffff, + 0x0018ffff, + 0x0017ffff, + 0x0013ffff, + 0x0014ffff, + 0x0015ffff, + 0x0016ffff, + 0x00000041, + 0x00000042, + 0x00000043, + 0x00000044, + 0x00000045, + 0x00000046, + 0x00000048, + 0x00010040, + 0x00010040, + }, + { + 0x00020053, + 0x00020053, + 0x00020053, + 0x00020053, + 0x00020055, + 0x00020055, + 0x00020055, + 0x00020055, + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030047, + 0x00030047, + }, + { + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + 0x00030049, + 0x0003004a, + 0x0003004a, + 0x0003004a, + 0x0003004a, + 0x0003004a, + 0x0003004a, + 0x0003004a, + 0x0003004a, + }, + { + 0x0003004b, + 0x0003004b, + 0x0003004b, + 0x0003004b, + 0x0003004b, + 0x0003004b, + 0x0003004b, + 0x0003004b, + 0x0003004c, + 0x0003004c, + 0x0003004c, + 0x0003004c, + 0x0003004c, + 0x0003004c, + 0x0003004c, + 0x0003004c, + }, + { + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x0003004e, + 0x0003004f, + 0x0003004f, + 0x0003004f, + 0x0003004f, + 0x0003004f, + 0x0003004f, + 0x0003004f, + 0x0003004f, + }, + { + 0x0002004d, + 0x0002004d, + 0x0002004d, + 0x0002004d, + 0x00020050, + 0x00020050, + 0x00020050, + 0x00020050, + 0x00020051, + 0x00020051, + 0x00020051, + 0x00020051, + 0x00020052, + 0x00020052, + 0x00020052, + 0x00020052, + }, + { + 0x0000005a, + 0x0000005c, + 0x0000005d, + 0x0000005e, + 0x0000005f, + 0x00000060, + 0x00000062, + 0x00000064, + 0x00010054, + 0x00010054, + 0x00010056, + 0x00010056, + 0x00010057, + 0x00010057, + 0x00010058, + 0x00010058, + }, + { + 0x001dffff, + 0x001effff, + 0x001fffff, + 0x0020ffff, + 0x0021ffff, + 0x0022ffff, + 0x0023ffff, + 0x0024ffff, + 0x0025ffff, + 0x0026ffff, + 0x0027ffff, + 0x0028ffff, + 0x001affff, + 0x001bffff, + 0x001cffff, + 0x00000059, + }, + { + 0x00020096, + 0x00020096, + 0x00020096, + 0x00020096, + 0x00020097, + 0x00020097, + 0x00020097, + 0x00020097, + 0x0003005b, + 0x0003005b, + 0x0003005b, + 0x0003005b, + 0x0003005b, + 0x0003005b, + 0x0003005b, + 0x0003005b, + }, + { + 0x00030063, + 0x00030063, + 0x00030063, + 0x00030063, + 0x00030063, + 0x00030063, + 0x00030063, + 0x00030063, + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030068, + 0x00030068, + }, + { + 0x0003007e, + 0x0003007e, + 0x0003007e, + 0x0003007e, + 0x0003007e, + 0x0003007e, + 0x0003007e, + 0x0003007e, + 0x00030098, + 0x00030098, + 0x00030098, + 0x00030098, + 0x00030098, + 0x00030098, + 0x00030098, + 0x00030098, + }, + { + 0x00020061, + 0x00020061, + 0x00020061, + 0x00020061, + 0x00020065, + 0x00020065, + 0x00020065, + 0x00020065, + 0x00020066, + 0x00020066, + 0x00020066, + 0x00020066, + 0x00020067, + 0x00020067, + 0x00020067, + 0x00020067, + }, + { + 0x00020069, + 0x00020069, + 0x00020069, + 0x00020069, + 0x0002006a, + 0x0002006a, + 0x0002006a, + 0x0002006a, + 0x0002006b, + 0x0002006b, + 0x0002006b, + 0x0002006b, + 0x0002006c, + 0x0002006c, + 0x0002006c, + 0x0002006c, + }, + { + 0x0002006d, + 0x0002006d, + 0x0002006d, + 0x0002006d, + 0x0002006e, + 0x0002006e, + 0x0002006e, + 0x0002006e, + 0x0002006f, + 0x0002006f, + 0x0002006f, + 0x0002006f, + 0x00020070, + 0x00020070, + 0x00020070, + 0x00020070, + }, + { + 0x00020071, + 0x00020071, + 0x00020071, + 0x00020071, + 0x00020072, + 0x00020072, + 0x00020072, + 0x00020072, + 0x00020073, + 0x00020073, + 0x00020073, + 0x00020073, + 0x00020074, + 0x00020074, + 0x00020074, + 0x00020074, + }, + { + 0x00020075, + 0x00020075, + 0x00020075, + 0x00020075, + 0x00020076, + 0x00020076, + 0x00020076, + 0x00020076, + 0x00020077, + 0x00020077, + 0x00020077, + 0x00020077, + 0x00020078, + 0x00020078, + 0x00020078, + 0x00020078, + }, + { + 0x00020079, + 0x00020079, + 0x00020079, + 0x00020079, + 0x0002007a, + 0x0002007a, + 0x0002007a, + 0x0002007a, + 0x0002007b, + 0x0002007b, + 0x0002007b, + 0x0002007b, + 0x0002007c, + 0x0002007c, + 0x0002007c, + 0x0002007c, + }, + { + 0x0002007d, + 0x0002007d, + 0x0002007d, + 0x0002007d, + 0x0002007f, + 0x0002007f, + 0x0002007f, + 0x0002007f, + 0x00020080, + 0x00020080, + 0x00020080, + 0x00020080, + 0x00020081, + 0x00020081, + 0x00020081, + 0x00020081, + }, + { + 0x00020082, + 0x00020082, + 0x00020082, + 0x00020082, + 0x00020083, + 0x00020083, + 0x00020083, + 0x00020083, + 0x00020084, + 0x00020084, + 0x00020084, + 0x00020084, + 0x00020085, + 0x00020085, + 0x00020085, + 0x00020085, + }, + { + 0x00020086, + 0x00020086, + 0x00020086, + 0x00020086, + 0x00020087, + 0x00020087, + 0x00020087, + 0x00020087, + 0x00020088, + 0x00020088, + 0x00020088, + 0x00020088, + 0x00020089, + 0x00020089, + 0x00020089, + 0x00020089, + }, + { + 0x0002008a, + 0x0002008a, + 0x0002008a, + 0x0002008a, + 0x0002008b, + 0x0002008b, + 0x0002008b, + 0x0002008b, + 0x0002008c, + 0x0002008c, + 0x0002008c, + 0x0002008c, + 0x0002008d, + 0x0002008d, + 0x0002008d, + 0x0002008d, + }, + { + 0x0002008e, + 0x0002008e, + 0x0002008e, + 0x0002008e, + 0x0002008f, + 0x0002008f, + 0x0002008f, + 0x0002008f, + 0x00020090, + 0x00020090, + 0x00020090, + 0x00020090, + 0x00020091, + 0x00020091, + 0x00020091, + 0x00020091, + }, + { + 0x00020092, + 0x00020092, + 0x00020092, + 0x00020092, + 0x00020093, + 0x00020093, + 0x00020093, + 0x00020093, + 0x00020094, + 0x00020094, + 0x00020094, + 0x00020094, + 0x00020095, + 0x00020095, + 0x00020095, + 0x00020095, + }, }; #endif #ifndef ROM_TO_RAM @@ -4113,150 +43114,970 @@ const uint32_t c_aauiCQMFHuffEnc63[181][2] = #else const uint16_t c_aauiCQMFHuffEnc63[181][2] = #endif -{ - {0x0004, 0x0008}, {0x0003, 0x0005}, {0x0002, 0x0003}, {0x0004, 0x0009}, {0x0005, 0x000c}, {0x0005, 0x000d}, {0x0005, 0x000e}, {0x0005, 0x000f}, - {0x0006, 0x000c}, {0x0006, 0x000d}, {0x0006, 0x000e}, {0x0006, 0x000f}, {0x0006, 0x0010}, {0x0006, 0x0011}, {0x0006, 0x0012}, {0x0006, 0x0013}, - {0x0006, 0x0014}, {0x0006, 0x0015}, {0x0006, 0x0016}, {0x0006, 0x0017}, {0x0007, 0x000b}, {0x0007, 0x000c}, {0x0007, 0x000d}, {0x0007, 0x000e}, - {0x0007, 0x000f}, {0x0007, 0x0010}, {0x0007, 0x0011}, {0x0007, 0x0012}, {0x0007, 0x0013}, {0x0007, 0x0014}, {0x0007, 0x0015}, {0x0007, 0x0016}, - {0x0007, 0x0017}, {0x0008, 0x000c}, {0x0008, 0x000d}, {0x0008, 0x000e}, {0x0008, 0x000f}, {0x0008, 0x0010}, {0x0008, 0x0011}, {0x0008, 0x0012}, - {0x0008, 0x0013}, {0x0008, 0x0014}, {0x0008, 0x0015}, {0x0009, 0x0008}, {0x0009, 0x0009}, {0x0009, 0x000a}, {0x0009, 0x000b}, {0x0009, 0x000c}, - {0x0009, 0x000d}, {0x0009, 0x000e}, {0x0009, 0x000f}, {0x0009, 0x0010}, {0x0009, 0x0011}, {0x0009, 0x0012}, {0x0009, 0x0013}, {0x0009, 0x0014}, - {0x0009, 0x0015}, {0x000a, 0x0007}, {0x0009, 0x0016}, {0x0009, 0x0017}, {0x000a, 0x0008}, {0x000a, 0x0009}, {0x000a, 0x000a}, {0x000a, 0x000b}, - {0x000a, 0x000c}, {0x000a, 0x000d}, {0x000a, 0x000e}, {0x000b, 0x0008}, {0x000b, 0x0009}, {0x000b, 0x000a}, {0x000a, 0x000f}, {0x000b, 0x000b}, - {0x000b, 0x000c}, {0x000b, 0x000d}, {0x000c, 0x0009}, {0x000c, 0x000a}, {0x000c, 0x000b}, {0x000c, 0x000c}, {0x000c, 0x000d}, {0x000c, 0x000e}, - {0x000c, 0x000f}, {0x000d, 0x0008}, {0x000d, 0x0009}, {0x000d, 0x000a}, {0x000d, 0x000b}, {0x000d, 0x000c}, {0x000d, 0x000d}, {0x000d, 0x000e}, - {0x000d, 0x000f}, {0x000d, 0x0010}, {0x000d, 0x0011}, {0x000e, 0x0007}, {0x000e, 0x0008}, {0x000e, 0x0009}, {0x000e, 0x000a}, {0x000e, 0x000b}, - {0x000e, 0x000c}, {0x000e, 0x000d}, {0x000e, 0x000e}, {0x000e, 0x000f}, {0x000f, 0x0008}, {0x000f, 0x0009}, {0x000f, 0x000a}, {0x000f, 0x000b}, - {0x000f, 0x000c}, {0x0010, 0x0009}, {0x0010, 0x000a}, {0x000f, 0x000d}, {0x0010, 0x000b}, {0x0010, 0x000c}, {0x0010, 0x000d}, {0x0011, 0x000e}, - {0x0011, 0x000f}, {0x0010, 0x000e}, {0x0011, 0x0010}, {0x0011, 0x0011}, {0x0012, 0x0014}, {0x0014, 0x0000}, {0x0010, 0x000f}, {0x0012, 0x0015}, - {0x0012, 0x0016}, {0x0014, 0x0001}, {0x0012, 0x0017}, {0x0012, 0x0018}, {0x0012, 0x0019}, {0x0013, 0x0010}, {0x0012, 0x001a}, {0x0014, 0x0002}, - {0x0012, 0x001b}, {0x0014, 0x0003}, {0x0014, 0x0004}, {0x0014, 0x0005}, {0x0013, 0x0011}, {0x0014, 0x0006}, {0x0013, 0x0012}, {0x0014, 0x0007}, - {0x0014, 0x0008}, {0x0014, 0x0009}, {0x0014, 0x000a}, {0x0014, 0x000b}, {0x0014, 0x000c}, {0x0014, 0x000d}, {0x0014, 0x000e}, {0x0013, 0x0013}, - {0x0014, 0x000f}, {0x0014, 0x0010}, {0x0014, 0x0011}, {0x0014, 0x0012}, {0x0014, 0x0013}, {0x0014, 0x0014}, {0x0014, 0x0015}, {0x0014, 0x0016}, - {0x0014, 0x0017}, {0x0014, 0x0018}, {0x0014, 0x0019}, {0x0014, 0x001a}, {0x0014, 0x001b}, {0x0014, 0x001c}, {0x0014, 0x001d}, {0x0014, 0x001e}, - {0x0014, 0x001f}, {0x0013, 0x0014}, {0x0013, 0x0015}, {0x0013, 0x0016}, {0x0013, 0x0017}, {0x0013, 0x0018}, {0x0013, 0x0019}, {0x0013, 0x001a}, - {0x0013, 0x001b}, {0x0013, 0x001c}, {0x0013, 0x001d}, {0x0013, 0x001e}, {0x0013, 0x001f}, {0x0013, 0x0020}, {0x0013, 0x0021}, {0x0013, 0x0022}, - {0x0013, 0x0023}, {0x0013, 0x0024}, {0x0013, 0x0025}, {0x0013, 0x0026}, {0x0013, 0x0027}, + { + { 0x0004, 0x0008 }, + { 0x0003, 0x0005 }, + { 0x0002, 0x0003 }, + { 0x0004, 0x0009 }, + { 0x0005, 0x000c }, + { 0x0005, 0x000d }, + { 0x0005, 0x000e }, + { 0x0005, 0x000f }, + { 0x0006, 0x000c }, + { 0x0006, 0x000d }, + { 0x0006, 0x000e }, + { 0x0006, 0x000f }, + { 0x0006, 0x0010 }, + { 0x0006, 0x0011 }, + { 0x0006, 0x0012 }, + { 0x0006, 0x0013 }, + { 0x0006, 0x0014 }, + { 0x0006, 0x0015 }, + { 0x0006, 0x0016 }, + { 0x0006, 0x0017 }, + { 0x0007, 0x000b }, + { 0x0007, 0x000c }, + { 0x0007, 0x000d }, + { 0x0007, 0x000e }, + { 0x0007, 0x000f }, + { 0x0007, 0x0010 }, + { 0x0007, 0x0011 }, + { 0x0007, 0x0012 }, + { 0x0007, 0x0013 }, + { 0x0007, 0x0014 }, + { 0x0007, 0x0015 }, + { 0x0007, 0x0016 }, + { 0x0007, 0x0017 }, + { 0x0008, 0x000c }, + { 0x0008, 0x000d }, + { 0x0008, 0x000e }, + { 0x0008, 0x000f }, + { 0x0008, 0x0010 }, + { 0x0008, 0x0011 }, + { 0x0008, 0x0012 }, + { 0x0008, 0x0013 }, + { 0x0008, 0x0014 }, + { 0x0008, 0x0015 }, + { 0x0009, 0x0008 }, + { 0x0009, 0x0009 }, + { 0x0009, 0x000a }, + { 0x0009, 0x000b }, + { 0x0009, 0x000c }, + { 0x0009, 0x000d }, + { 0x0009, 0x000e }, + { 0x0009, 0x000f }, + { 0x0009, 0x0010 }, + { 0x0009, 0x0011 }, + { 0x0009, 0x0012 }, + { 0x0009, 0x0013 }, + { 0x0009, 0x0014 }, + { 0x0009, 0x0015 }, + { 0x000a, 0x0007 }, + { 0x0009, 0x0016 }, + { 0x0009, 0x0017 }, + { 0x000a, 0x0008 }, + { 0x000a, 0x0009 }, + { 0x000a, 0x000a }, + { 0x000a, 0x000b }, + { 0x000a, 0x000c }, + { 0x000a, 0x000d }, + { 0x000a, 0x000e }, + { 0x000b, 0x0008 }, + { 0x000b, 0x0009 }, + { 0x000b, 0x000a }, + { 0x000a, 0x000f }, + { 0x000b, 0x000b }, + { 0x000b, 0x000c }, + { 0x000b, 0x000d }, + { 0x000c, 0x0009 }, + { 0x000c, 0x000a }, + { 0x000c, 0x000b }, + { 0x000c, 0x000c }, + { 0x000c, 0x000d }, + { 0x000c, 0x000e }, + { 0x000c, 0x000f }, + { 0x000d, 0x0008 }, + { 0x000d, 0x0009 }, + { 0x000d, 0x000a }, + { 0x000d, 0x000b }, + { 0x000d, 0x000c }, + { 0x000d, 0x000d }, + { 0x000d, 0x000e }, + { 0x000d, 0x000f }, + { 0x000d, 0x0010 }, + { 0x000d, 0x0011 }, + { 0x000e, 0x0007 }, + { 0x000e, 0x0008 }, + { 0x000e, 0x0009 }, + { 0x000e, 0x000a }, + { 0x000e, 0x000b }, + { 0x000e, 0x000c }, + { 0x000e, 0x000d }, + { 0x000e, 0x000e }, + { 0x000e, 0x000f }, + { 0x000f, 0x0008 }, + { 0x000f, 0x0009 }, + { 0x000f, 0x000a }, + { 0x000f, 0x000b }, + { 0x000f, 0x000c }, + { 0x0010, 0x0009 }, + { 0x0010, 0x000a }, + { 0x000f, 0x000d }, + { 0x0010, 0x000b }, + { 0x0010, 0x000c }, + { 0x0010, 0x000d }, + { 0x0011, 0x000e }, + { 0x0011, 0x000f }, + { 0x0010, 0x000e }, + { 0x0011, 0x0010 }, + { 0x0011, 0x0011 }, + { 0x0012, 0x0014 }, + { 0x0014, 0x0000 }, + { 0x0010, 0x000f }, + { 0x0012, 0x0015 }, + { 0x0012, 0x0016 }, + { 0x0014, 0x0001 }, + { 0x0012, 0x0017 }, + { 0x0012, 0x0018 }, + { 0x0012, 0x0019 }, + { 0x0013, 0x0010 }, + { 0x0012, 0x001a }, + { 0x0014, 0x0002 }, + { 0x0012, 0x001b }, + { 0x0014, 0x0003 }, + { 0x0014, 0x0004 }, + { 0x0014, 0x0005 }, + { 0x0013, 0x0011 }, + { 0x0014, 0x0006 }, + { 0x0013, 0x0012 }, + { 0x0014, 0x0007 }, + { 0x0014, 0x0008 }, + { 0x0014, 0x0009 }, + { 0x0014, 0x000a }, + { 0x0014, 0x000b }, + { 0x0014, 0x000c }, + { 0x0014, 0x000d }, + { 0x0014, 0x000e }, + { 0x0013, 0x0013 }, + { 0x0014, 0x000f }, + { 0x0014, 0x0010 }, + { 0x0014, 0x0011 }, + { 0x0014, 0x0012 }, + { 0x0014, 0x0013 }, + { 0x0014, 0x0014 }, + { 0x0014, 0x0015 }, + { 0x0014, 0x0016 }, + { 0x0014, 0x0017 }, + { 0x0014, 0x0018 }, + { 0x0014, 0x0019 }, + { 0x0014, 0x001a }, + { 0x0014, 0x001b }, + { 0x0014, 0x001c }, + { 0x0014, 0x001d }, + { 0x0014, 0x001e }, + { 0x0014, 0x001f }, + { 0x0013, 0x0014 }, + { 0x0013, 0x0015 }, + { 0x0013, 0x0016 }, + { 0x0013, 0x0017 }, + { 0x0013, 0x0018 }, + { 0x0013, 0x0019 }, + { 0x0013, 0x001a }, + { 0x0013, 0x001b }, + { 0x0013, 0x001c }, + { 0x0013, 0x001d }, + { 0x0013, 0x001e }, + { 0x0013, 0x001f }, + { 0x0013, 0x0020 }, + { 0x0013, 0x0021 }, + { 0x0013, 0x0022 }, + { 0x0013, 0x0023 }, + { 0x0013, 0x0024 }, + { 0x0013, 0x0025 }, + { 0x0013, 0x0026 }, + { 0x0013, 0x0027 }, -}; + }; #ifndef ROM_TO_RAM -const uint32_t c_aauiCQMFHuffDec63[39][16] = -{ - {0x0008ffff, 0x0006ffff, 0x0007ffff, 0x0003ffff, 0x0004ffff, 0x0005ffff, 0x0001ffff, 0x0002ffff, 0x00000000, 0x00000003, 0x00010001, 0x00010001, 0x00020002, 0x00020002, 0x00020002, 0x00020002, }, - {0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030004, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, 0x00030005, }, - {0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030006, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, 0x00030007, }, - {0x00020008, 0x00020008, 0x00020008, 0x00020008, 0x00020009, 0x00020009, 0x00020009, 0x00020009, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000a, 0x0002000b, 0x0002000b, 0x0002000b, 0x0002000b, }, - {0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000d, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000e, 0x0002000f, 0x0002000f, 0x0002000f, 0x0002000f, }, - {0x00020010, 0x00020010, 0x00020010, 0x00020010, 0x00020011, 0x00020011, 0x00020011, 0x00020011, 0x00020012, 0x00020012, 0x00020012, 0x00020012, 0x00020013, 0x00020013, 0x00020013, 0x00020013, }, - {0x00000025, 0x00000026, 0x00000027, 0x00000028, 0x00000029, 0x0000002a, 0x00010014, 0x00010014, 0x00010015, 0x00010015, 0x00010016, 0x00010016, 0x00010017, 0x00010017, 0x00010018, 0x00010018, }, - {0x00010019, 0x00010019, 0x0001001a, 0x0001001a, 0x0001001b, 0x0001001b, 0x0001001c, 0x0001001c, 0x0001001d, 0x0001001d, 0x0001001e, 0x0001001e, 0x0001001f, 0x0001001f, 0x00010020, 0x00010020, }, - {0x0014ffff, 0x0011ffff, 0x0012ffff, 0x0013ffff, 0x0009ffff, 0x000affff, 0x000bffff, 0x000cffff, 0x000dffff, 0x000effff, 0x000fffff, 0x0010ffff, 0x00000021, 0x00000022, 0x00000023, 0x00000024, }, - {0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002b, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, 0x0003002c, }, - {0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002d, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, 0x0003002e, }, - {0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x0003002f, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, 0x00030030, }, - {0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030031, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, 0x00030032, }, - {0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030033, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, 0x00030034, }, - {0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030035, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, 0x00030036, }, - {0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030037, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, 0x00030038, }, - {0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003a, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, 0x0003003b, }, - {0x00010043, 0x00010043, 0x00010044, 0x00010044, 0x00010045, 0x00010045, 0x00010047, 0x00010047, 0x00010048, 0x00010048, 0x00010049, 0x00010049, 0x00020039, 0x00020039, 0x00020039, 0x00020039, }, - {0x0002003c, 0x0002003c, 0x0002003c, 0x0002003c, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003d, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002003e, 0x0002003f, 0x0002003f, 0x0002003f, 0x0002003f, }, - {0x00020040, 0x00020040, 0x00020040, 0x00020040, 0x00020041, 0x00020041, 0x00020041, 0x00020041, 0x00020042, 0x00020042, 0x00020042, 0x00020042, 0x00020046, 0x00020046, 0x00020046, 0x00020046, }, - {0x001dffff, 0x001affff, 0x001bffff, 0x001cffff, 0x0015ffff, 0x0016ffff, 0x0017ffff, 0x0018ffff, 0x0019ffff, 0x0000004a, 0x0000004b, 0x0000004c, 0x0000004d, 0x0000004e, 0x0000004f, 0x00000050, }, - {0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030051, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, 0x00030052, }, - {0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030053, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, 0x00030054, }, - {0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030055, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, 0x00030056, }, - {0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030057, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, 0x00030058, }, - {0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x00030059, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, 0x0003005a, }, - {0x00010064, 0x00010064, 0x00010065, 0x00010065, 0x00010066, 0x00010066, 0x00010067, 0x00010067, 0x00010068, 0x00010068, 0x0001006b, 0x0001006b, 0x0002005b, 0x0002005b, 0x0002005b, 0x0002005b, }, - {0x0002005c, 0x0002005c, 0x0002005c, 0x0002005c, 0x0002005d, 0x0002005d, 0x0002005d, 0x0002005d, 0x0002005e, 0x0002005e, 0x0002005e, 0x0002005e, 0x0002005f, 0x0002005f, 0x0002005f, 0x0002005f, }, - {0x00020060, 0x00020060, 0x00020060, 0x00020060, 0x00020061, 0x00020061, 0x00020061, 0x00020061, 0x00020062, 0x00020062, 0x00020062, 0x00020062, 0x00020063, 0x00020063, 0x00020063, 0x00020063, }, - {0x0026ffff, 0x0025ffff, 0x0022ffff, 0x0023ffff, 0x0024ffff, 0x0020ffff, 0x0021ffff, 0x001effff, 0x001fffff, 0x00000069, 0x0000006a, 0x0000006c, 0x0000006d, 0x0000006e, 0x00000071, 0x00000076, }, - {0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x0003006f, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, 0x00030070, }, - {0x00030072, 0x00030072, 0x00030072, 0x00030072, 0x00030072, 0x00030072, 0x00030072, 0x00030072, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, 0x00030073, }, - {0x00020074, 0x00020074, 0x00020074, 0x00020074, 0x00020077, 0x00020077, 0x00020077, 0x00020077, 0x00020078, 0x00020078, 0x00020078, 0x00020078, 0x0002007a, 0x0002007a, 0x0002007a, 0x0002007a, }, - {0x0002007b, 0x0002007b, 0x0002007b, 0x0002007b, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007c, 0x0002007e, 0x0002007e, 0x0002007e, 0x0002007e, 0x00020080, 0x00020080, 0x00020080, 0x00020080, }, - {0x0001007d, 0x0001007d, 0x00010084, 0x00010084, 0x00010086, 0x00010086, 0x0001008f, 0x0001008f, 0x000100a1, 0x000100a1, 0x000100a2, 0x000100a2, 0x000100a3, 0x000100a3, 0x000100a4, 0x000100a4, }, - {0x000100a5, 0x000100a5, 0x000100a6, 0x000100a6, 0x000100a7, 0x000100a7, 0x000100a8, 0x000100a8, 0x000100a9, 0x000100a9, 0x000100aa, 0x000100aa, 0x000100ab, 0x000100ab, 0x000100ac, 0x000100ac, }, - {0x000100ad, 0x000100ad, 0x000100ae, 0x000100ae, 0x000100af, 0x000100af, 0x000100b0, 0x000100b0, 0x000100b1, 0x000100b1, 0x000100b2, 0x000100b2, 0x000100b3, 0x000100b3, 0x000100b4, 0x000100b4, }, - {0x00000091, 0x00000092, 0x00000093, 0x00000094, 0x00000095, 0x00000096, 0x00000097, 0x00000098, 0x00000099, 0x0000009a, 0x0000009b, 0x0000009c, 0x0000009d, 0x0000009e, 0x0000009f, 0x000000a0, }, - {0x00000075, 0x00000079, 0x0000007f, 0x00000081, 0x00000082, 0x00000083, 0x00000085, 0x00000087, 0x00000088, 0x00000089, 0x0000008a, 0x0000008b, 0x0000008c, 0x0000008d, 0x0000008e, 0x00000090, }, +const uint32_t c_aauiCQMFHuffDec63[39][16] = { + { + 0x0008ffff, + 0x0006ffff, + 0x0007ffff, + 0x0003ffff, + 0x0004ffff, + 0x0005ffff, + 0x0001ffff, + 0x0002ffff, + 0x00000000, + 0x00000003, + 0x00010001, + 0x00010001, + 0x00020002, + 0x00020002, + 0x00020002, + 0x00020002, + }, + { + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030004, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + 0x00030005, + }, + { + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030006, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + 0x00030007, + }, + { + 0x00020008, + 0x00020008, + 0x00020008, + 0x00020008, + 0x00020009, + 0x00020009, + 0x00020009, + 0x00020009, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x0002000a, + 0x0002000b, + 0x0002000b, + 0x0002000b, + 0x0002000b, + }, + { + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x0002000c, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0002000d, + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0002000e, + 0x0002000f, + 0x0002000f, + 0x0002000f, + 0x0002000f, + }, + { + 0x00020010, + 0x00020010, + 0x00020010, + 0x00020010, + 0x00020011, + 0x00020011, + 0x00020011, + 0x00020011, + 0x00020012, + 0x00020012, + 0x00020012, + 0x00020012, + 0x00020013, + 0x00020013, + 0x00020013, + 0x00020013, + }, + { + 0x00000025, + 0x00000026, + 0x00000027, + 0x00000028, + 0x00000029, + 0x0000002a, + 0x00010014, + 0x00010014, + 0x00010015, + 0x00010015, + 0x00010016, + 0x00010016, + 0x00010017, + 0x00010017, + 0x00010018, + 0x00010018, + }, + { + 0x00010019, + 0x00010019, + 0x0001001a, + 0x0001001a, + 0x0001001b, + 0x0001001b, + 0x0001001c, + 0x0001001c, + 0x0001001d, + 0x0001001d, + 0x0001001e, + 0x0001001e, + 0x0001001f, + 0x0001001f, + 0x00010020, + 0x00010020, + }, + { + 0x0014ffff, + 0x0011ffff, + 0x0012ffff, + 0x0013ffff, + 0x0009ffff, + 0x000affff, + 0x000bffff, + 0x000cffff, + 0x000dffff, + 0x000effff, + 0x000fffff, + 0x0010ffff, + 0x00000021, + 0x00000022, + 0x00000023, + 0x00000024, + }, + { + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002b, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + 0x0003002c, + }, + { + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002d, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + 0x0003002e, + }, + { + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x0003002f, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + 0x00030030, + }, + { + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030031, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + 0x00030032, + }, + { + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030033, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + 0x00030034, + }, + { + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030035, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + 0x00030036, + }, + { + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030037, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + 0x00030038, + }, + { + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003a, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + 0x0003003b, + }, + { + 0x00010043, + 0x00010043, + 0x00010044, + 0x00010044, + 0x00010045, + 0x00010045, + 0x00010047, + 0x00010047, + 0x00010048, + 0x00010048, + 0x00010049, + 0x00010049, + 0x00020039, + 0x00020039, + 0x00020039, + 0x00020039, + }, + { + 0x0002003c, + 0x0002003c, + 0x0002003c, + 0x0002003c, + 0x0002003d, + 0x0002003d, + 0x0002003d, + 0x0002003d, + 0x0002003e, + 0x0002003e, + 0x0002003e, + 0x0002003e, + 0x0002003f, + 0x0002003f, + 0x0002003f, + 0x0002003f, + }, + { + 0x00020040, + 0x00020040, + 0x00020040, + 0x00020040, + 0x00020041, + 0x00020041, + 0x00020041, + 0x00020041, + 0x00020042, + 0x00020042, + 0x00020042, + 0x00020042, + 0x00020046, + 0x00020046, + 0x00020046, + 0x00020046, + }, + { + 0x001dffff, + 0x001affff, + 0x001bffff, + 0x001cffff, + 0x0015ffff, + 0x0016ffff, + 0x0017ffff, + 0x0018ffff, + 0x0019ffff, + 0x0000004a, + 0x0000004b, + 0x0000004c, + 0x0000004d, + 0x0000004e, + 0x0000004f, + 0x00000050, + }, + { + 0x00030051, + 0x00030051, + 0x00030051, + 0x00030051, + 0x00030051, + 0x00030051, + 0x00030051, + 0x00030051, + 0x00030052, + 0x00030052, + 0x00030052, + 0x00030052, + 0x00030052, + 0x00030052, + 0x00030052, + 0x00030052, + }, + { + 0x00030053, + 0x00030053, + 0x00030053, + 0x00030053, + 0x00030053, + 0x00030053, + 0x00030053, + 0x00030053, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + 0x00030054, + }, + { + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030055, + 0x00030056, + 0x00030056, + 0x00030056, + 0x00030056, + 0x00030056, + 0x00030056, + 0x00030056, + 0x00030056, + }, + { + 0x00030057, + 0x00030057, + 0x00030057, + 0x00030057, + 0x00030057, + 0x00030057, + 0x00030057, + 0x00030057, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + 0x00030058, + }, + { + 0x00030059, + 0x00030059, + 0x00030059, + 0x00030059, + 0x00030059, + 0x00030059, + 0x00030059, + 0x00030059, + 0x0003005a, + 0x0003005a, + 0x0003005a, + 0x0003005a, + 0x0003005a, + 0x0003005a, + 0x0003005a, + 0x0003005a, + }, + { + 0x00010064, + 0x00010064, + 0x00010065, + 0x00010065, + 0x00010066, + 0x00010066, + 0x00010067, + 0x00010067, + 0x00010068, + 0x00010068, + 0x0001006b, + 0x0001006b, + 0x0002005b, + 0x0002005b, + 0x0002005b, + 0x0002005b, + }, + { + 0x0002005c, + 0x0002005c, + 0x0002005c, + 0x0002005c, + 0x0002005d, + 0x0002005d, + 0x0002005d, + 0x0002005d, + 0x0002005e, + 0x0002005e, + 0x0002005e, + 0x0002005e, + 0x0002005f, + 0x0002005f, + 0x0002005f, + 0x0002005f, + }, + { + 0x00020060, + 0x00020060, + 0x00020060, + 0x00020060, + 0x00020061, + 0x00020061, + 0x00020061, + 0x00020061, + 0x00020062, + 0x00020062, + 0x00020062, + 0x00020062, + 0x00020063, + 0x00020063, + 0x00020063, + 0x00020063, + }, + { + 0x0026ffff, + 0x0025ffff, + 0x0022ffff, + 0x0023ffff, + 0x0024ffff, + 0x0020ffff, + 0x0021ffff, + 0x001effff, + 0x001fffff, + 0x00000069, + 0x0000006a, + 0x0000006c, + 0x0000006d, + 0x0000006e, + 0x00000071, + 0x00000076, + }, + { + 0x0003006f, + 0x0003006f, + 0x0003006f, + 0x0003006f, + 0x0003006f, + 0x0003006f, + 0x0003006f, + 0x0003006f, + 0x00030070, + 0x00030070, + 0x00030070, + 0x00030070, + 0x00030070, + 0x00030070, + 0x00030070, + 0x00030070, + }, + { + 0x00030072, + 0x00030072, + 0x00030072, + 0x00030072, + 0x00030072, + 0x00030072, + 0x00030072, + 0x00030072, + 0x00030073, + 0x00030073, + 0x00030073, + 0x00030073, + 0x00030073, + 0x00030073, + 0x00030073, + 0x00030073, + }, + { + 0x00020074, + 0x00020074, + 0x00020074, + 0x00020074, + 0x00020077, + 0x00020077, + 0x00020077, + 0x00020077, + 0x00020078, + 0x00020078, + 0x00020078, + 0x00020078, + 0x0002007a, + 0x0002007a, + 0x0002007a, + 0x0002007a, + }, + { + 0x0002007b, + 0x0002007b, + 0x0002007b, + 0x0002007b, + 0x0002007c, + 0x0002007c, + 0x0002007c, + 0x0002007c, + 0x0002007e, + 0x0002007e, + 0x0002007e, + 0x0002007e, + 0x00020080, + 0x00020080, + 0x00020080, + 0x00020080, + }, + { + 0x0001007d, + 0x0001007d, + 0x00010084, + 0x00010084, + 0x00010086, + 0x00010086, + 0x0001008f, + 0x0001008f, + 0x000100a1, + 0x000100a1, + 0x000100a2, + 0x000100a2, + 0x000100a3, + 0x000100a3, + 0x000100a4, + 0x000100a4, + }, + { + 0x000100a5, + 0x000100a5, + 0x000100a6, + 0x000100a6, + 0x000100a7, + 0x000100a7, + 0x000100a8, + 0x000100a8, + 0x000100a9, + 0x000100a9, + 0x000100aa, + 0x000100aa, + 0x000100ab, + 0x000100ab, + 0x000100ac, + 0x000100ac, + }, + { + 0x000100ad, + 0x000100ad, + 0x000100ae, + 0x000100ae, + 0x000100af, + 0x000100af, + 0x000100b0, + 0x000100b0, + 0x000100b1, + 0x000100b1, + 0x000100b2, + 0x000100b2, + 0x000100b3, + 0x000100b3, + 0x000100b4, + 0x000100b4, + }, + { + 0x00000091, + 0x00000092, + 0x00000093, + 0x00000094, + 0x00000095, + 0x00000096, + 0x00000097, + 0x00000098, + 0x00000099, + 0x0000009a, + 0x0000009b, + 0x0000009c, + 0x0000009d, + 0x0000009e, + 0x0000009f, + 0x000000a0, + }, + { + 0x00000075, + 0x00000079, + 0x0000007f, + 0x00000081, + 0x00000082, + 0x00000083, + 0x00000085, + 0x00000087, + 0x00000088, + 0x00000089, + 0x0000008a, + 0x0000008b, + 0x0000008c, + 0x0000008d, + 0x0000008e, + 0x00000090, + }, }; #endif #ifndef ROM_TO_RAM -const uint32_t(*c_apauiHuffEncTabels[2 * ALLOC_TABLE_SIZE])[2] = +const uint32_t ( *c_apauiHuffEncTabels[2 * ALLOC_TABLE_SIZE] )[2] = #else -const uint16_t(*c_apauiHuffEncTabels[2 * ALLOC_TABLE_SIZE])[2] = -#endif -{ - NULL, - c_aauiCQMFHuffEnc1, - c_aauiCQMFHuffEnc2, - c_aauiCQMFHuffEnc3, - c_aauiCQMFHuffEnc4, - c_aauiCQMFHuffEnc5, - c_aauiCQMFHuffEnc6, - c_aauiCQMFHuffEnc7, - c_aauiCQMFHuffEnc8, - c_aauiCQMFHuffEnc9, - c_aauiCQMFHuffEnc10, - c_aauiCQMFHuffEnc11, - c_aauiCQMFHuffEnc12, - c_aauiCQMFHuffEnc13, - c_aauiCQMFHuffEnc14, - c_aauiCQMFHuffEnc15, - c_aauiCQMFHuffEnc16, - c_aauiCQMFHuffEnc17, - c_aauiCQMFHuffEnc18, - c_aauiCQMFHuffEnc19, - c_aauiCQMFHuffEnc20, - c_aauiCQMFHuffEnc21, - c_aauiCQMFHuffEnc22, - c_aauiCQMFHuffEnc23, - c_aauiCQMFHuffEnc24, - c_aauiCQMFHuffEnc25, - c_aauiCQMFHuffEnc26, - c_aauiCQMFHuffEnc27, - c_aauiCQMFHuffEnc28, - c_aauiCQMFHuffEnc29, - c_aauiCQMFHuffEnc30, - c_aauiCQMFHuffEnc31, - NULL, - c_aauiCQMFHuffEnc33, - c_aauiCQMFHuffEnc34, - c_aauiCQMFHuffEnc35, - c_aauiCQMFHuffEnc36, - c_aauiCQMFHuffEnc37, - c_aauiCQMFHuffEnc38, - c_aauiCQMFHuffEnc39, - c_aauiCQMFHuffEnc40, - c_aauiCQMFHuffEnc41, - c_aauiCQMFHuffEnc42, - c_aauiCQMFHuffEnc43, - c_aauiCQMFHuffEnc44, - c_aauiCQMFHuffEnc45, - c_aauiCQMFHuffEnc46, - c_aauiCQMFHuffEnc47, - c_aauiCQMFHuffEnc48, - c_aauiCQMFHuffEnc49, - c_aauiCQMFHuffEnc50, - c_aauiCQMFHuffEnc51, - c_aauiCQMFHuffEnc52, - c_aauiCQMFHuffEnc53, - c_aauiCQMFHuffEnc54, - c_aauiCQMFHuffEnc55, - c_aauiCQMFHuffEnc56, - c_aauiCQMFHuffEnc57, - c_aauiCQMFHuffEnc58, - c_aauiCQMFHuffEnc59, - c_aauiCQMFHuffEnc60, - c_aauiCQMFHuffEnc61, - c_aauiCQMFHuffEnc62, - c_aauiCQMFHuffEnc63, -}; +const uint16_t ( *c_apauiHuffEncTabels[2 * ALLOC_TABLE_SIZE] )[2] = +#endif + { + NULL, + c_aauiCQMFHuffEnc1, + c_aauiCQMFHuffEnc2, + c_aauiCQMFHuffEnc3, + c_aauiCQMFHuffEnc4, + c_aauiCQMFHuffEnc5, + c_aauiCQMFHuffEnc6, + c_aauiCQMFHuffEnc7, + c_aauiCQMFHuffEnc8, + c_aauiCQMFHuffEnc9, + c_aauiCQMFHuffEnc10, + c_aauiCQMFHuffEnc11, + c_aauiCQMFHuffEnc12, + c_aauiCQMFHuffEnc13, + c_aauiCQMFHuffEnc14, + c_aauiCQMFHuffEnc15, + c_aauiCQMFHuffEnc16, + c_aauiCQMFHuffEnc17, + c_aauiCQMFHuffEnc18, + c_aauiCQMFHuffEnc19, + c_aauiCQMFHuffEnc20, + c_aauiCQMFHuffEnc21, + c_aauiCQMFHuffEnc22, + c_aauiCQMFHuffEnc23, + c_aauiCQMFHuffEnc24, + c_aauiCQMFHuffEnc25, + c_aauiCQMFHuffEnc26, + c_aauiCQMFHuffEnc27, + c_aauiCQMFHuffEnc28, + c_aauiCQMFHuffEnc29, + c_aauiCQMFHuffEnc30, + c_aauiCQMFHuffEnc31, + NULL, + c_aauiCQMFHuffEnc33, + c_aauiCQMFHuffEnc34, + c_aauiCQMFHuffEnc35, + c_aauiCQMFHuffEnc36, + c_aauiCQMFHuffEnc37, + c_aauiCQMFHuffEnc38, + c_aauiCQMFHuffEnc39, + c_aauiCQMFHuffEnc40, + c_aauiCQMFHuffEnc41, + c_aauiCQMFHuffEnc42, + c_aauiCQMFHuffEnc43, + c_aauiCQMFHuffEnc44, + c_aauiCQMFHuffEnc45, + c_aauiCQMFHuffEnc46, + c_aauiCQMFHuffEnc47, + c_aauiCQMFHuffEnc48, + c_aauiCQMFHuffEnc49, + c_aauiCQMFHuffEnc50, + c_aauiCQMFHuffEnc51, + c_aauiCQMFHuffEnc52, + c_aauiCQMFHuffEnc53, + c_aauiCQMFHuffEnc54, + c_aauiCQMFHuffEnc55, + c_aauiCQMFHuffEnc56, + c_aauiCQMFHuffEnc57, + c_aauiCQMFHuffEnc58, + c_aauiCQMFHuffEnc59, + c_aauiCQMFHuffEnc60, + c_aauiCQMFHuffEnc61, + c_aauiCQMFHuffEnc62, + c_aauiCQMFHuffEnc63, + }; #ifndef ROM_TO_RAM -const uint32_t(*c_apauiHuffDecTables[2 * ALLOC_TABLE_SIZE])[HUFF_DEC_TABLE_SIZE] = { +const uint32_t ( *c_apauiHuffDecTables[2 * ALLOC_TABLE_SIZE] )[HUFF_DEC_TABLE_SIZE] = { NULL, c_aauiCQMFHuffDec1, c_aauiCQMFHuffDec2, @@ -4323,317 +44144,7737 @@ const uint32_t(*c_apauiHuffDecTables[2 * ALLOC_TABLE_SIZE])[HUFF_DEC_TABLE_SIZE] c_aauiCQMFHuffDec63, }; #else -const uint32_t num_row_aauiCQMFHuff[2 * ALLOC_TABLE_SIZE] = -{ 0, 16, 16, 25, 36, 36, 49, 64, 81, 100, - 169, 196, 289, 324, 400, 576, 729, 729, 28, 29, - 32, 37, 39, 46, 55, 65, 77, 91, 109, 129, - 153, 181, 0, 16, 16, 25, 36, 36, 49, 64, 81, - 100, 169, 196, 289, 324, 400, 576, 729, 729, 28, - 29, 32, 37, 39, 46, 55, 65, 77, 91, 109, - 129, 153, 181 -}; +const uint32_t num_row_aauiCQMFHuff[2 * ALLOC_TABLE_SIZE] = { 0, 16, 16, 25, 36, 36, 49, 64, 81, 100, + 169, 196, 289, 324, 400, 576, 729, 729, 28, 29, + 32, 37, 39, 46, 55, 65, 77, 91, 109, 129, + 153, 181, 0, 16, 16, 25, 36, 36, 49, 64, 81, + 100, 169, 196, 289, 324, 400, 576, 729, 729, 28, + 29, 32, 37, 39, 46, 55, 65, 77, 91, 109, + 129, 153, 181 }; #endif #ifdef USE_DEMOD_TABLES const int32_t c_aaiHuffDemod1[16][2] = { - 0,0,0,1,0,2,0,3,1,0,1,1,1,2,1,3,2,0,2,1,2,2,2,3,3,0,3,1,3,2,3,3, + 0, + 0, + 0, + 1, + 0, + 2, + 0, + 3, + 1, + 0, + 1, + 1, + 1, + 2, + 1, + 3, + 2, + 0, + 2, + 1, + 2, + 2, + 2, + 3, + 3, + 0, + 3, + 1, + 3, + 2, + 3, + 3, }; const int32_t c_aaiHuffDemod2[16][2] = { - 0,0,0,1,0,2,0,3,1,0,1,1,1,2,1,3,2,0,2,1,2,2,2,3,3,0,3,1,3,2,3,3, + 0, + 0, + 0, + 1, + 0, + 2, + 0, + 3, + 1, + 0, + 1, + 1, + 1, + 2, + 1, + 3, + 2, + 0, + 2, + 1, + 2, + 2, + 2, + 3, + 3, + 0, + 3, + 1, + 3, + 2, + 3, + 3, }; const int32_t c_aaiHuffDemod3[25][2] = { - 0,0,0,1,0,2,0,3,0,4,1,0,1,1,1,2,1,3,1,4,2,0,2,1,2,2,2,3,2,4,3,0, - 3,1,3,2,3,3,3,4,4,0,4,1,4,2,4,3,4,4, + 0, + 0, + 0, + 1, + 0, + 2, + 0, + 3, + 0, + 4, + 1, + 0, + 1, + 1, + 1, + 2, + 1, + 3, + 1, + 4, + 2, + 0, + 2, + 1, + 2, + 2, + 2, + 3, + 2, + 4, + 3, + 0, + 3, + 1, + 3, + 2, + 3, + 3, + 3, + 4, + 4, + 0, + 4, + 1, + 4, + 2, + 4, + 3, + 4, + 4, }; const int32_t c_aaiHuffDemod4[36][2] = { - 0,0,0,1,0,2,0,3,0,4,0,5,1,0,1,1,1,2,1,3,1,4,1,5,2,0,2,1,2,2,2,3, - 2,4,2,5,3,0,3,1,3,2,3,3,3,4,3,5,4,0,4,1,4,2,4,3,4,4,4,5,5,0,5,1, - 5,2,5,3,5,4,5,5, + 0, + 0, + 0, + 1, + 0, + 2, + 0, + 3, + 0, + 4, + 0, + 5, + 1, + 0, + 1, + 1, + 1, + 2, + 1, + 3, + 1, + 4, + 1, + 5, + 2, + 0, + 2, + 1, + 2, + 2, + 2, + 3, + 2, + 4, + 2, + 5, + 3, + 0, + 3, + 1, + 3, + 2, + 3, + 3, + 3, + 4, + 3, + 5, + 4, + 0, + 4, + 1, + 4, + 2, + 4, + 3, + 4, + 4, + 4, + 5, + 5, + 0, + 5, + 1, + 5, + 2, + 5, + 3, + 5, + 4, + 5, + 5, }; const int32_t c_aaiHuffDemod5[36][2] = { - 0,0,0,1,0,2,0,3,0,4,0,5,1,0,1,1,1,2,1,3,1,4,1,5,2,0,2,1,2,2,2,3, - 2,4,2,5,3,0,3,1,3,2,3,3,3,4,3,5,4,0,4,1,4,2,4,3,4,4,4,5,5,0,5,1, - 5,2,5,3,5,4,5,5, + 0, + 0, + 0, + 1, + 0, + 2, + 0, + 3, + 0, + 4, + 0, + 5, + 1, + 0, + 1, + 1, + 1, + 2, + 1, + 3, + 1, + 4, + 1, + 5, + 2, + 0, + 2, + 1, + 2, + 2, + 2, + 3, + 2, + 4, + 2, + 5, + 3, + 0, + 3, + 1, + 3, + 2, + 3, + 3, + 3, + 4, + 3, + 5, + 4, + 0, + 4, + 1, + 4, + 2, + 4, + 3, + 4, + 4, + 4, + 5, + 5, + 0, + 5, + 1, + 5, + 2, + 5, + 3, + 5, + 4, + 5, + 5, }; const int32_t c_aaiHuffDemod6[49][2] = { - 0,0,0,1,0,2,0,3,0,4,0,5,0,6,1,0,1,1,1,2,1,3,1,4,1,5,1,6,2,0,2,1, - 2,2,2,3,2,4,2,5,2,6,3,0,3,1,3,2,3,3,3,4,3,5,3,6,4,0,4,1,4,2,4,3, - 4,4,4,5,4,6,5,0,5,1,5,2,5,3,5,4,5,5,5,6,6,0,6,1,6,2,6,3,6,4,6,5, - 6,6, + 0, + 0, + 0, + 1, + 0, + 2, + 0, + 3, + 0, + 4, + 0, + 5, + 0, + 6, + 1, + 0, + 1, + 1, + 1, + 2, + 1, + 3, + 1, + 4, + 1, + 5, + 1, + 6, + 2, + 0, + 2, + 1, + 2, + 2, + 2, + 3, + 2, + 4, + 2, + 5, + 2, + 6, + 3, + 0, + 3, + 1, + 3, + 2, + 3, + 3, + 3, + 4, + 3, + 5, + 3, + 6, + 4, + 0, + 4, + 1, + 4, + 2, + 4, + 3, + 4, + 4, + 4, + 5, + 4, + 6, + 5, + 0, + 5, + 1, + 5, + 2, + 5, + 3, + 5, + 4, + 5, + 5, + 5, + 6, + 6, + 0, + 6, + 1, + 6, + 2, + 6, + 3, + 6, + 4, + 6, + 5, + 6, + 6, }; const int32_t c_aaiHuffDemod7[64][2] = { - 0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,1,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7, - 2,0,2,1,2,2,2,3,2,4,2,5,2,6,2,7,3,0,3,1,3,2,3,3,3,4,3,5,3,6,3,7, - 4,0,4,1,4,2,4,3,4,4,4,5,4,6,4,7,5,0,5,1,5,2,5,3,5,4,5,5,5,6,5,7, - 6,0,6,1,6,2,6,3,6,4,6,5,6,6,6,7,7,0,7,1,7,2,7,3,7,4,7,5,7,6,7,7, + 0, + 0, + 0, + 1, + 0, + 2, + 0, + 3, + 0, + 4, + 0, + 5, + 0, + 6, + 0, + 7, + 1, + 0, + 1, + 1, + 1, + 2, + 1, + 3, + 1, + 4, + 1, + 5, + 1, + 6, + 1, + 7, + 2, + 0, + 2, + 1, + 2, + 2, + 2, + 3, + 2, + 4, + 2, + 5, + 2, + 6, + 2, + 7, + 3, + 0, + 3, + 1, + 3, + 2, + 3, + 3, + 3, + 4, + 3, + 5, + 3, + 6, + 3, + 7, + 4, + 0, + 4, + 1, + 4, + 2, + 4, + 3, + 4, + 4, + 4, + 5, + 4, + 6, + 4, + 7, + 5, + 0, + 5, + 1, + 5, + 2, + 5, + 3, + 5, + 4, + 5, + 5, + 5, + 6, + 5, + 7, + 6, + 0, + 6, + 1, + 6, + 2, + 6, + 3, + 6, + 4, + 6, + 5, + 6, + 6, + 6, + 7, + 7, + 0, + 7, + 1, + 7, + 2, + 7, + 3, + 7, + 4, + 7, + 5, + 7, + 6, + 7, + 7, }; const int32_t c_aaiHuffDemod8[81][2] = { - 0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,1,0,1,1,1,2,1,3,1,4,1,5,1,6, - 1,7,1,8,2,0,2,1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,3,0,3,1,3,2,3,3,3,4, - 3,5,3,6,3,7,3,8,4,0,4,1,4,2,4,3,4,4,4,5,4,6,4,7,4,8,5,0,5,1,5,2, - 5,3,5,4,5,5,5,6,5,7,5,8,6,0,6,1,6,2,6,3,6,4,6,5,6,6,6,7,6,8,7,0, - 7,1,7,2,7,3,7,4,7,5,7,6,7,7,7,8,8,0,8,1,8,2,8,3,8,4,8,5,8,6,8,7, - 8,8, + 0, + 0, + 0, + 1, + 0, + 2, + 0, + 3, + 0, + 4, + 0, + 5, + 0, + 6, + 0, + 7, + 0, + 8, + 1, + 0, + 1, + 1, + 1, + 2, + 1, + 3, + 1, + 4, + 1, + 5, + 1, + 6, + 1, + 7, + 1, + 8, + 2, + 0, + 2, + 1, + 2, + 2, + 2, + 3, + 2, + 4, + 2, + 5, + 2, + 6, + 2, + 7, + 2, + 8, + 3, + 0, + 3, + 1, + 3, + 2, + 3, + 3, + 3, + 4, + 3, + 5, + 3, + 6, + 3, + 7, + 3, + 8, + 4, + 0, + 4, + 1, + 4, + 2, + 4, + 3, + 4, + 4, + 4, + 5, + 4, + 6, + 4, + 7, + 4, + 8, + 5, + 0, + 5, + 1, + 5, + 2, + 5, + 3, + 5, + 4, + 5, + 5, + 5, + 6, + 5, + 7, + 5, + 8, + 6, + 0, + 6, + 1, + 6, + 2, + 6, + 3, + 6, + 4, + 6, + 5, + 6, + 6, + 6, + 7, + 6, + 8, + 7, + 0, + 7, + 1, + 7, + 2, + 7, + 3, + 7, + 4, + 7, + 5, + 7, + 6, + 7, + 7, + 7, + 8, + 8, + 0, + 8, + 1, + 8, + 2, + 8, + 3, + 8, + 4, + 8, + 5, + 8, + 6, + 8, + 7, + 8, + 8, }; const int32_t c_aaiHuffDemod9[100][2] = { - 0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,1,0,1,1,1,2,1,3,1,4,1,5, - 1,6,1,7,1,8,1,9,2,0,2,1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,3,0,3,1, - 3,2,3,3,3,4,3,5,3,6,3,7,3,8,3,9,4,0,4,1,4,2,4,3,4,4,4,5,4,6,4,7, - 4,8,4,9,5,0,5,1,5,2,5,3,5,4,5,5,5,6,5,7,5,8,5,9,6,0,6,1,6,2,6,3, - 6,4,6,5,6,6,6,7,6,8,6,9,7,0,7,1,7,2,7,3,7,4,7,5,7,6,7,7,7,8,7,9, - 8,0,8,1,8,2,8,3,8,4,8,5,8,6,8,7,8,8,8,9,9,0,9,1,9,2,9,3,9,4,9,5, - 9,6,9,7,9,8,9,9, + 0, + 0, + 0, + 1, + 0, + 2, + 0, + 3, + 0, + 4, + 0, + 5, + 0, + 6, + 0, + 7, + 0, + 8, + 0, + 9, + 1, + 0, + 1, + 1, + 1, + 2, + 1, + 3, + 1, + 4, + 1, + 5, + 1, + 6, + 1, + 7, + 1, + 8, + 1, + 9, + 2, + 0, + 2, + 1, + 2, + 2, + 2, + 3, + 2, + 4, + 2, + 5, + 2, + 6, + 2, + 7, + 2, + 8, + 2, + 9, + 3, + 0, + 3, + 1, + 3, + 2, + 3, + 3, + 3, + 4, + 3, + 5, + 3, + 6, + 3, + 7, + 3, + 8, + 3, + 9, + 4, + 0, + 4, + 1, + 4, + 2, + 4, + 3, + 4, + 4, + 4, + 5, + 4, + 6, + 4, + 7, + 4, + 8, + 4, + 9, + 5, + 0, + 5, + 1, + 5, + 2, + 5, + 3, + 5, + 4, + 5, + 5, + 5, + 6, + 5, + 7, + 5, + 8, + 5, + 9, + 6, + 0, + 6, + 1, + 6, + 2, + 6, + 3, + 6, + 4, + 6, + 5, + 6, + 6, + 6, + 7, + 6, + 8, + 6, + 9, + 7, + 0, + 7, + 1, + 7, + 2, + 7, + 3, + 7, + 4, + 7, + 5, + 7, + 6, + 7, + 7, + 7, + 8, + 7, + 9, + 8, + 0, + 8, + 1, + 8, + 2, + 8, + 3, + 8, + 4, + 8, + 5, + 8, + 6, + 8, + 7, + 8, + 8, + 8, + 9, + 9, + 0, + 9, + 1, + 9, + 2, + 9, + 3, + 9, + 4, + 9, + 5, + 9, + 6, + 9, + 7, + 9, + 8, + 9, + 9, }; const int32_t c_aaiHuffDemod10[169][2] = { - 0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,1,0,1,1,1,2, - 1,3,1,4,1,5,1,6,1,7,1,8,1,9,1,10,1,11,1,12,2,0,2,1,2,2,2,3,2,4,2,5, - 2,6,2,7,2,8,2,9,2,10,2,11,2,12,3,0,3,1,3,2,3,3,3,4,3,5,3,6,3,7,3,8, - 3,9,3,10,3,11,3,12,4,0,4,1,4,2,4,3,4,4,4,5,4,6,4,7,4,8,4,9,4,10,4,11, - 4,12,5,0,5,1,5,2,5,3,5,4,5,5,5,6,5,7,5,8,5,9,5,10,5,11,5,12,6,0,6,1, - 6,2,6,3,6,4,6,5,6,6,6,7,6,8,6,9,6,10,6,11,6,12,7,0,7,1,7,2,7,3,7,4, - 7,5,7,6,7,7,7,8,7,9,7,10,7,11,7,12,8,0,8,1,8,2,8,3,8,4,8,5,8,6,8,7, - 8,8,8,9,8,10,8,11,8,12,9,0,9,1,9,2,9,3,9,4,9,5,9,6,9,7,9,8,9,9,9,10, - 9,11,9,12,10,0,10,1,10,2,10,3,10,4,10,5,10,6,10,7,10,8,10,9,10,10,10,11,10,12,11,0, - 11,1,11,2,11,3,11,4,11,5,11,6,11,7,11,8,11,9,11,10,11,11,11,12,12,0,12,1,12,2,12,3, - 12,4,12,5,12,6,12,7,12,8,12,9,12,10,12,11,12,12, + 0, + 0, + 0, + 1, + 0, + 2, + 0, + 3, + 0, + 4, + 0, + 5, + 0, + 6, + 0, + 7, + 0, + 8, + 0, + 9, + 0, + 10, + 0, + 11, + 0, + 12, + 1, + 0, + 1, + 1, + 1, + 2, + 1, + 3, + 1, + 4, + 1, + 5, + 1, + 6, + 1, + 7, + 1, + 8, + 1, + 9, + 1, + 10, + 1, + 11, + 1, + 12, + 2, + 0, + 2, + 1, + 2, + 2, + 2, + 3, + 2, + 4, + 2, + 5, + 2, + 6, + 2, + 7, + 2, + 8, + 2, + 9, + 2, + 10, + 2, + 11, + 2, + 12, + 3, + 0, + 3, + 1, + 3, + 2, + 3, + 3, + 3, + 4, + 3, + 5, + 3, + 6, + 3, + 7, + 3, + 8, + 3, + 9, + 3, + 10, + 3, + 11, + 3, + 12, + 4, + 0, + 4, + 1, + 4, + 2, + 4, + 3, + 4, + 4, + 4, + 5, + 4, + 6, + 4, + 7, + 4, + 8, + 4, + 9, + 4, + 10, + 4, + 11, + 4, + 12, + 5, + 0, + 5, + 1, + 5, + 2, + 5, + 3, + 5, + 4, + 5, + 5, + 5, + 6, + 5, + 7, + 5, + 8, + 5, + 9, + 5, + 10, + 5, + 11, + 5, + 12, + 6, + 0, + 6, + 1, + 6, + 2, + 6, + 3, + 6, + 4, + 6, + 5, + 6, + 6, + 6, + 7, + 6, + 8, + 6, + 9, + 6, + 10, + 6, + 11, + 6, + 12, + 7, + 0, + 7, + 1, + 7, + 2, + 7, + 3, + 7, + 4, + 7, + 5, + 7, + 6, + 7, + 7, + 7, + 8, + 7, + 9, + 7, + 10, + 7, + 11, + 7, + 12, + 8, + 0, + 8, + 1, + 8, + 2, + 8, + 3, + 8, + 4, + 8, + 5, + 8, + 6, + 8, + 7, + 8, + 8, + 8, + 9, + 8, + 10, + 8, + 11, + 8, + 12, + 9, + 0, + 9, + 1, + 9, + 2, + 9, + 3, + 9, + 4, + 9, + 5, + 9, + 6, + 9, + 7, + 9, + 8, + 9, + 9, + 9, + 10, + 9, + 11, + 9, + 12, + 10, + 0, + 10, + 1, + 10, + 2, + 10, + 3, + 10, + 4, + 10, + 5, + 10, + 6, + 10, + 7, + 10, + 8, + 10, + 9, + 10, + 10, + 10, + 11, + 10, + 12, + 11, + 0, + 11, + 1, + 11, + 2, + 11, + 3, + 11, + 4, + 11, + 5, + 11, + 6, + 11, + 7, + 11, + 8, + 11, + 9, + 11, + 10, + 11, + 11, + 11, + 12, + 12, + 0, + 12, + 1, + 12, + 2, + 12, + 3, + 12, + 4, + 12, + 5, + 12, + 6, + 12, + 7, + 12, + 8, + 12, + 9, + 12, + 10, + 12, + 11, + 12, + 12, }; const int32_t c_aaiHuffDemod11[196][2] = { - 0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,1,0,1,1, - 1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,1,10,1,11,1,12,1,13,2,0,2,1,2,2,2,3, - 2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,3,0,3,1,3,2,3,3,3,4,3,5, - 3,6,3,7,3,8,3,9,3,10,3,11,3,12,3,13,4,0,4,1,4,2,4,3,4,4,4,5,4,6,4,7, - 4,8,4,9,4,10,4,11,4,12,4,13,5,0,5,1,5,2,5,3,5,4,5,5,5,6,5,7,5,8,5,9, - 5,10,5,11,5,12,5,13,6,0,6,1,6,2,6,3,6,4,6,5,6,6,6,7,6,8,6,9,6,10,6,11, - 6,12,6,13,7,0,7,1,7,2,7,3,7,4,7,5,7,6,7,7,7,8,7,9,7,10,7,11,7,12,7,13, - 8,0,8,1,8,2,8,3,8,4,8,5,8,6,8,7,8,8,8,9,8,10,8,11,8,12,8,13,9,0,9,1, - 9,2,9,3,9,4,9,5,9,6,9,7,9,8,9,9,9,10,9,11,9,12,9,13,10,0,10,1,10,2,10,3, - 10,4,10,5,10,6,10,7,10,8,10,9,10,10,10,11,10,12,10,13,11,0,11,1,11,2,11,3,11,4,11,5, - 11,6,11,7,11,8,11,9,11,10,11,11,11,12,11,13,12,0,12,1,12,2,12,3,12,4,12,5,12,6,12,7, - 12,8,12,9,12,10,12,11,12,12,12,13,13,0,13,1,13,2,13,3,13,4,13,5,13,6,13,7,13,8,13,9, - 13,10,13,11,13,12,13,13, + 0, + 0, + 0, + 1, + 0, + 2, + 0, + 3, + 0, + 4, + 0, + 5, + 0, + 6, + 0, + 7, + 0, + 8, + 0, + 9, + 0, + 10, + 0, + 11, + 0, + 12, + 0, + 13, + 1, + 0, + 1, + 1, + 1, + 2, + 1, + 3, + 1, + 4, + 1, + 5, + 1, + 6, + 1, + 7, + 1, + 8, + 1, + 9, + 1, + 10, + 1, + 11, + 1, + 12, + 1, + 13, + 2, + 0, + 2, + 1, + 2, + 2, + 2, + 3, + 2, + 4, + 2, + 5, + 2, + 6, + 2, + 7, + 2, + 8, + 2, + 9, + 2, + 10, + 2, + 11, + 2, + 12, + 2, + 13, + 3, + 0, + 3, + 1, + 3, + 2, + 3, + 3, + 3, + 4, + 3, + 5, + 3, + 6, + 3, + 7, + 3, + 8, + 3, + 9, + 3, + 10, + 3, + 11, + 3, + 12, + 3, + 13, + 4, + 0, + 4, + 1, + 4, + 2, + 4, + 3, + 4, + 4, + 4, + 5, + 4, + 6, + 4, + 7, + 4, + 8, + 4, + 9, + 4, + 10, + 4, + 11, + 4, + 12, + 4, + 13, + 5, + 0, + 5, + 1, + 5, + 2, + 5, + 3, + 5, + 4, + 5, + 5, + 5, + 6, + 5, + 7, + 5, + 8, + 5, + 9, + 5, + 10, + 5, + 11, + 5, + 12, + 5, + 13, + 6, + 0, + 6, + 1, + 6, + 2, + 6, + 3, + 6, + 4, + 6, + 5, + 6, + 6, + 6, + 7, + 6, + 8, + 6, + 9, + 6, + 10, + 6, + 11, + 6, + 12, + 6, + 13, + 7, + 0, + 7, + 1, + 7, + 2, + 7, + 3, + 7, + 4, + 7, + 5, + 7, + 6, + 7, + 7, + 7, + 8, + 7, + 9, + 7, + 10, + 7, + 11, + 7, + 12, + 7, + 13, + 8, + 0, + 8, + 1, + 8, + 2, + 8, + 3, + 8, + 4, + 8, + 5, + 8, + 6, + 8, + 7, + 8, + 8, + 8, + 9, + 8, + 10, + 8, + 11, + 8, + 12, + 8, + 13, + 9, + 0, + 9, + 1, + 9, + 2, + 9, + 3, + 9, + 4, + 9, + 5, + 9, + 6, + 9, + 7, + 9, + 8, + 9, + 9, + 9, + 10, + 9, + 11, + 9, + 12, + 9, + 13, + 10, + 0, + 10, + 1, + 10, + 2, + 10, + 3, + 10, + 4, + 10, + 5, + 10, + 6, + 10, + 7, + 10, + 8, + 10, + 9, + 10, + 10, + 10, + 11, + 10, + 12, + 10, + 13, + 11, + 0, + 11, + 1, + 11, + 2, + 11, + 3, + 11, + 4, + 11, + 5, + 11, + 6, + 11, + 7, + 11, + 8, + 11, + 9, + 11, + 10, + 11, + 11, + 11, + 12, + 11, + 13, + 12, + 0, + 12, + 1, + 12, + 2, + 12, + 3, + 12, + 4, + 12, + 5, + 12, + 6, + 12, + 7, + 12, + 8, + 12, + 9, + 12, + 10, + 12, + 11, + 12, + 12, + 12, + 13, + 13, + 0, + 13, + 1, + 13, + 2, + 13, + 3, + 13, + 4, + 13, + 5, + 13, + 6, + 13, + 7, + 13, + 8, + 13, + 9, + 13, + 10, + 13, + 11, + 13, + 12, + 13, + 13, }; const int32_t c_aaiHuffDemod12[289][2] = { - 0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15, - 0,16,1,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,1,10,1,11,1,12,1,13,1,14, - 1,15,1,16,2,0,2,1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13, - 2,14,2,15,2,16,3,0,3,1,3,2,3,3,3,4,3,5,3,6,3,7,3,8,3,9,3,10,3,11,3,12, - 3,13,3,14,3,15,3,16,4,0,4,1,4,2,4,3,4,4,4,5,4,6,4,7,4,8,4,9,4,10,4,11, - 4,12,4,13,4,14,4,15,4,16,5,0,5,1,5,2,5,3,5,4,5,5,5,6,5,7,5,8,5,9,5,10, - 5,11,5,12,5,13,5,14,5,15,5,16,6,0,6,1,6,2,6,3,6,4,6,5,6,6,6,7,6,8,6,9, - 6,10,6,11,6,12,6,13,6,14,6,15,6,16,7,0,7,1,7,2,7,3,7,4,7,5,7,6,7,7,7,8, - 7,9,7,10,7,11,7,12,7,13,7,14,7,15,7,16,8,0,8,1,8,2,8,3,8,4,8,5,8,6,8,7, - 8,8,8,9,8,10,8,11,8,12,8,13,8,14,8,15,8,16,9,0,9,1,9,2,9,3,9,4,9,5,9,6, - 9,7,9,8,9,9,9,10,9,11,9,12,9,13,9,14,9,15,9,16,10,0,10,1,10,2,10,3,10,4,10,5, - 10,6,10,7,10,8,10,9,10,10,10,11,10,12,10,13,10,14,10,15,10,16,11,0,11,1,11,2,11,3,11,4, - 11,5,11,6,11,7,11,8,11,9,11,10,11,11,11,12,11,13,11,14,11,15,11,16,12,0,12,1,12,2,12,3, - 12,4,12,5,12,6,12,7,12,8,12,9,12,10,12,11,12,12,12,13,12,14,12,15,12,16,13,0,13,1,13,2, - 13,3,13,4,13,5,13,6,13,7,13,8,13,9,13,10,13,11,13,12,13,13,13,14,13,15,13,16,14,0,14,1, - 14,2,14,3,14,4,14,5,14,6,14,7,14,8,14,9,14,10,14,11,14,12,14,13,14,14,14,15,14,16,15,0, - 15,1,15,2,15,3,15,4,15,5,15,6,15,7,15,8,15,9,15,10,15,11,15,12,15,13,15,14,15,15,15,16, - 16,0,16,1,16,2,16,3,16,4,16,5,16,6,16,7,16,8,16,9,16,10,16,11,16,12,16,13,16,14,16,15, - 16,16, + 0, + 0, + 0, + 1, + 0, + 2, + 0, + 3, + 0, + 4, + 0, + 5, + 0, + 6, + 0, + 7, + 0, + 8, + 0, + 9, + 0, + 10, + 0, + 11, + 0, + 12, + 0, + 13, + 0, + 14, + 0, + 15, + 0, + 16, + 1, + 0, + 1, + 1, + 1, + 2, + 1, + 3, + 1, + 4, + 1, + 5, + 1, + 6, + 1, + 7, + 1, + 8, + 1, + 9, + 1, + 10, + 1, + 11, + 1, + 12, + 1, + 13, + 1, + 14, + 1, + 15, + 1, + 16, + 2, + 0, + 2, + 1, + 2, + 2, + 2, + 3, + 2, + 4, + 2, + 5, + 2, + 6, + 2, + 7, + 2, + 8, + 2, + 9, + 2, + 10, + 2, + 11, + 2, + 12, + 2, + 13, + 2, + 14, + 2, + 15, + 2, + 16, + 3, + 0, + 3, + 1, + 3, + 2, + 3, + 3, + 3, + 4, + 3, + 5, + 3, + 6, + 3, + 7, + 3, + 8, + 3, + 9, + 3, + 10, + 3, + 11, + 3, + 12, + 3, + 13, + 3, + 14, + 3, + 15, + 3, + 16, + 4, + 0, + 4, + 1, + 4, + 2, + 4, + 3, + 4, + 4, + 4, + 5, + 4, + 6, + 4, + 7, + 4, + 8, + 4, + 9, + 4, + 10, + 4, + 11, + 4, + 12, + 4, + 13, + 4, + 14, + 4, + 15, + 4, + 16, + 5, + 0, + 5, + 1, + 5, + 2, + 5, + 3, + 5, + 4, + 5, + 5, + 5, + 6, + 5, + 7, + 5, + 8, + 5, + 9, + 5, + 10, + 5, + 11, + 5, + 12, + 5, + 13, + 5, + 14, + 5, + 15, + 5, + 16, + 6, + 0, + 6, + 1, + 6, + 2, + 6, + 3, + 6, + 4, + 6, + 5, + 6, + 6, + 6, + 7, + 6, + 8, + 6, + 9, + 6, + 10, + 6, + 11, + 6, + 12, + 6, + 13, + 6, + 14, + 6, + 15, + 6, + 16, + 7, + 0, + 7, + 1, + 7, + 2, + 7, + 3, + 7, + 4, + 7, + 5, + 7, + 6, + 7, + 7, + 7, + 8, + 7, + 9, + 7, + 10, + 7, + 11, + 7, + 12, + 7, + 13, + 7, + 14, + 7, + 15, + 7, + 16, + 8, + 0, + 8, + 1, + 8, + 2, + 8, + 3, + 8, + 4, + 8, + 5, + 8, + 6, + 8, + 7, + 8, + 8, + 8, + 9, + 8, + 10, + 8, + 11, + 8, + 12, + 8, + 13, + 8, + 14, + 8, + 15, + 8, + 16, + 9, + 0, + 9, + 1, + 9, + 2, + 9, + 3, + 9, + 4, + 9, + 5, + 9, + 6, + 9, + 7, + 9, + 8, + 9, + 9, + 9, + 10, + 9, + 11, + 9, + 12, + 9, + 13, + 9, + 14, + 9, + 15, + 9, + 16, + 10, + 0, + 10, + 1, + 10, + 2, + 10, + 3, + 10, + 4, + 10, + 5, + 10, + 6, + 10, + 7, + 10, + 8, + 10, + 9, + 10, + 10, + 10, + 11, + 10, + 12, + 10, + 13, + 10, + 14, + 10, + 15, + 10, + 16, + 11, + 0, + 11, + 1, + 11, + 2, + 11, + 3, + 11, + 4, + 11, + 5, + 11, + 6, + 11, + 7, + 11, + 8, + 11, + 9, + 11, + 10, + 11, + 11, + 11, + 12, + 11, + 13, + 11, + 14, + 11, + 15, + 11, + 16, + 12, + 0, + 12, + 1, + 12, + 2, + 12, + 3, + 12, + 4, + 12, + 5, + 12, + 6, + 12, + 7, + 12, + 8, + 12, + 9, + 12, + 10, + 12, + 11, + 12, + 12, + 12, + 13, + 12, + 14, + 12, + 15, + 12, + 16, + 13, + 0, + 13, + 1, + 13, + 2, + 13, + 3, + 13, + 4, + 13, + 5, + 13, + 6, + 13, + 7, + 13, + 8, + 13, + 9, + 13, + 10, + 13, + 11, + 13, + 12, + 13, + 13, + 13, + 14, + 13, + 15, + 13, + 16, + 14, + 0, + 14, + 1, + 14, + 2, + 14, + 3, + 14, + 4, + 14, + 5, + 14, + 6, + 14, + 7, + 14, + 8, + 14, + 9, + 14, + 10, + 14, + 11, + 14, + 12, + 14, + 13, + 14, + 14, + 14, + 15, + 14, + 16, + 15, + 0, + 15, + 1, + 15, + 2, + 15, + 3, + 15, + 4, + 15, + 5, + 15, + 6, + 15, + 7, + 15, + 8, + 15, + 9, + 15, + 10, + 15, + 11, + 15, + 12, + 15, + 13, + 15, + 14, + 15, + 15, + 15, + 16, + 16, + 0, + 16, + 1, + 16, + 2, + 16, + 3, + 16, + 4, + 16, + 5, + 16, + 6, + 16, + 7, + 16, + 8, + 16, + 9, + 16, + 10, + 16, + 11, + 16, + 12, + 16, + 13, + 16, + 14, + 16, + 15, + 16, + 16, }; const int32_t c_aaiHuffDemod13[324][2] = { - 0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15, - 0,16,0,17,1,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,1,10,1,11,1,12,1,13, - 1,14,1,15,1,16,1,17,2,0,2,1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11, - 2,12,2,13,2,14,2,15,2,16,2,17,3,0,3,1,3,2,3,3,3,4,3,5,3,6,3,7,3,8,3,9, - 3,10,3,11,3,12,3,13,3,14,3,15,3,16,3,17,4,0,4,1,4,2,4,3,4,4,4,5,4,6,4,7, - 4,8,4,9,4,10,4,11,4,12,4,13,4,14,4,15,4,16,4,17,5,0,5,1,5,2,5,3,5,4,5,5, - 5,6,5,7,5,8,5,9,5,10,5,11,5,12,5,13,5,14,5,15,5,16,5,17,6,0,6,1,6,2,6,3, - 6,4,6,5,6,6,6,7,6,8,6,9,6,10,6,11,6,12,6,13,6,14,6,15,6,16,6,17,7,0,7,1, - 7,2,7,3,7,4,7,5,7,6,7,7,7,8,7,9,7,10,7,11,7,12,7,13,7,14,7,15,7,16,7,17, - 8,0,8,1,8,2,8,3,8,4,8,5,8,6,8,7,8,8,8,9,8,10,8,11,8,12,8,13,8,14,8,15, - 8,16,8,17,9,0,9,1,9,2,9,3,9,4,9,5,9,6,9,7,9,8,9,9,9,10,9,11,9,12,9,13, - 9,14,9,15,9,16,9,17,10,0,10,1,10,2,10,3,10,4,10,5,10,6,10,7,10,8,10,9,10,10,10,11, - 10,12,10,13,10,14,10,15,10,16,10,17,11,0,11,1,11,2,11,3,11,4,11,5,11,6,11,7,11,8,11,9, - 11,10,11,11,11,12,11,13,11,14,11,15,11,16,11,17,12,0,12,1,12,2,12,3,12,4,12,5,12,6,12,7, - 12,8,12,9,12,10,12,11,12,12,12,13,12,14,12,15,12,16,12,17,13,0,13,1,13,2,13,3,13,4,13,5, - 13,6,13,7,13,8,13,9,13,10,13,11,13,12,13,13,13,14,13,15,13,16,13,17,14,0,14,1,14,2,14,3, - 14,4,14,5,14,6,14,7,14,8,14,9,14,10,14,11,14,12,14,13,14,14,14,15,14,16,14,17,15,0,15,1, - 15,2,15,3,15,4,15,5,15,6,15,7,15,8,15,9,15,10,15,11,15,12,15,13,15,14,15,15,15,16,15,17, - 16,0,16,1,16,2,16,3,16,4,16,5,16,6,16,7,16,8,16,9,16,10,16,11,16,12,16,13,16,14,16,15, - 16,16,16,17,17,0,17,1,17,2,17,3,17,4,17,5,17,6,17,7,17,8,17,9,17,10,17,11,17,12,17,13, - 17,14,17,15,17,16,17,17, + 0, + 0, + 0, + 1, + 0, + 2, + 0, + 3, + 0, + 4, + 0, + 5, + 0, + 6, + 0, + 7, + 0, + 8, + 0, + 9, + 0, + 10, + 0, + 11, + 0, + 12, + 0, + 13, + 0, + 14, + 0, + 15, + 0, + 16, + 0, + 17, + 1, + 0, + 1, + 1, + 1, + 2, + 1, + 3, + 1, + 4, + 1, + 5, + 1, + 6, + 1, + 7, + 1, + 8, + 1, + 9, + 1, + 10, + 1, + 11, + 1, + 12, + 1, + 13, + 1, + 14, + 1, + 15, + 1, + 16, + 1, + 17, + 2, + 0, + 2, + 1, + 2, + 2, + 2, + 3, + 2, + 4, + 2, + 5, + 2, + 6, + 2, + 7, + 2, + 8, + 2, + 9, + 2, + 10, + 2, + 11, + 2, + 12, + 2, + 13, + 2, + 14, + 2, + 15, + 2, + 16, + 2, + 17, + 3, + 0, + 3, + 1, + 3, + 2, + 3, + 3, + 3, + 4, + 3, + 5, + 3, + 6, + 3, + 7, + 3, + 8, + 3, + 9, + 3, + 10, + 3, + 11, + 3, + 12, + 3, + 13, + 3, + 14, + 3, + 15, + 3, + 16, + 3, + 17, + 4, + 0, + 4, + 1, + 4, + 2, + 4, + 3, + 4, + 4, + 4, + 5, + 4, + 6, + 4, + 7, + 4, + 8, + 4, + 9, + 4, + 10, + 4, + 11, + 4, + 12, + 4, + 13, + 4, + 14, + 4, + 15, + 4, + 16, + 4, + 17, + 5, + 0, + 5, + 1, + 5, + 2, + 5, + 3, + 5, + 4, + 5, + 5, + 5, + 6, + 5, + 7, + 5, + 8, + 5, + 9, + 5, + 10, + 5, + 11, + 5, + 12, + 5, + 13, + 5, + 14, + 5, + 15, + 5, + 16, + 5, + 17, + 6, + 0, + 6, + 1, + 6, + 2, + 6, + 3, + 6, + 4, + 6, + 5, + 6, + 6, + 6, + 7, + 6, + 8, + 6, + 9, + 6, + 10, + 6, + 11, + 6, + 12, + 6, + 13, + 6, + 14, + 6, + 15, + 6, + 16, + 6, + 17, + 7, + 0, + 7, + 1, + 7, + 2, + 7, + 3, + 7, + 4, + 7, + 5, + 7, + 6, + 7, + 7, + 7, + 8, + 7, + 9, + 7, + 10, + 7, + 11, + 7, + 12, + 7, + 13, + 7, + 14, + 7, + 15, + 7, + 16, + 7, + 17, + 8, + 0, + 8, + 1, + 8, + 2, + 8, + 3, + 8, + 4, + 8, + 5, + 8, + 6, + 8, + 7, + 8, + 8, + 8, + 9, + 8, + 10, + 8, + 11, + 8, + 12, + 8, + 13, + 8, + 14, + 8, + 15, + 8, + 16, + 8, + 17, + 9, + 0, + 9, + 1, + 9, + 2, + 9, + 3, + 9, + 4, + 9, + 5, + 9, + 6, + 9, + 7, + 9, + 8, + 9, + 9, + 9, + 10, + 9, + 11, + 9, + 12, + 9, + 13, + 9, + 14, + 9, + 15, + 9, + 16, + 9, + 17, + 10, + 0, + 10, + 1, + 10, + 2, + 10, + 3, + 10, + 4, + 10, + 5, + 10, + 6, + 10, + 7, + 10, + 8, + 10, + 9, + 10, + 10, + 10, + 11, + 10, + 12, + 10, + 13, + 10, + 14, + 10, + 15, + 10, + 16, + 10, + 17, + 11, + 0, + 11, + 1, + 11, + 2, + 11, + 3, + 11, + 4, + 11, + 5, + 11, + 6, + 11, + 7, + 11, + 8, + 11, + 9, + 11, + 10, + 11, + 11, + 11, + 12, + 11, + 13, + 11, + 14, + 11, + 15, + 11, + 16, + 11, + 17, + 12, + 0, + 12, + 1, + 12, + 2, + 12, + 3, + 12, + 4, + 12, + 5, + 12, + 6, + 12, + 7, + 12, + 8, + 12, + 9, + 12, + 10, + 12, + 11, + 12, + 12, + 12, + 13, + 12, + 14, + 12, + 15, + 12, + 16, + 12, + 17, + 13, + 0, + 13, + 1, + 13, + 2, + 13, + 3, + 13, + 4, + 13, + 5, + 13, + 6, + 13, + 7, + 13, + 8, + 13, + 9, + 13, + 10, + 13, + 11, + 13, + 12, + 13, + 13, + 13, + 14, + 13, + 15, + 13, + 16, + 13, + 17, + 14, + 0, + 14, + 1, + 14, + 2, + 14, + 3, + 14, + 4, + 14, + 5, + 14, + 6, + 14, + 7, + 14, + 8, + 14, + 9, + 14, + 10, + 14, + 11, + 14, + 12, + 14, + 13, + 14, + 14, + 14, + 15, + 14, + 16, + 14, + 17, + 15, + 0, + 15, + 1, + 15, + 2, + 15, + 3, + 15, + 4, + 15, + 5, + 15, + 6, + 15, + 7, + 15, + 8, + 15, + 9, + 15, + 10, + 15, + 11, + 15, + 12, + 15, + 13, + 15, + 14, + 15, + 15, + 15, + 16, + 15, + 17, + 16, + 0, + 16, + 1, + 16, + 2, + 16, + 3, + 16, + 4, + 16, + 5, + 16, + 6, + 16, + 7, + 16, + 8, + 16, + 9, + 16, + 10, + 16, + 11, + 16, + 12, + 16, + 13, + 16, + 14, + 16, + 15, + 16, + 16, + 16, + 17, + 17, + 0, + 17, + 1, + 17, + 2, + 17, + 3, + 17, + 4, + 17, + 5, + 17, + 6, + 17, + 7, + 17, + 8, + 17, + 9, + 17, + 10, + 17, + 11, + 17, + 12, + 17, + 13, + 17, + 14, + 17, + 15, + 17, + 16, + 17, + 17, }; const int32_t c_aaiHuffDemod14[400][2] = { - 0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15, - 0,16,0,17,0,18,0,19,1,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,1,10,1,11, - 1,12,1,13,1,14,1,15,1,16,1,17,1,18,1,19,2,0,2,1,2,2,2,3,2,4,2,5,2,6,2,7, - 2,8,2,9,2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17,2,18,2,19,3,0,3,1,3,2,3,3, - 3,4,3,5,3,6,3,7,3,8,3,9,3,10,3,11,3,12,3,13,3,14,3,15,3,16,3,17,3,18,3,19, - 4,0,4,1,4,2,4,3,4,4,4,5,4,6,4,7,4,8,4,9,4,10,4,11,4,12,4,13,4,14,4,15, - 4,16,4,17,4,18,4,19,5,0,5,1,5,2,5,3,5,4,5,5,5,6,5,7,5,8,5,9,5,10,5,11, - 5,12,5,13,5,14,5,15,5,16,5,17,5,18,5,19,6,0,6,1,6,2,6,3,6,4,6,5,6,6,6,7, - 6,8,6,9,6,10,6,11,6,12,6,13,6,14,6,15,6,16,6,17,6,18,6,19,7,0,7,1,7,2,7,3, - 7,4,7,5,7,6,7,7,7,8,7,9,7,10,7,11,7,12,7,13,7,14,7,15,7,16,7,17,7,18,7,19, - 8,0,8,1,8,2,8,3,8,4,8,5,8,6,8,7,8,8,8,9,8,10,8,11,8,12,8,13,8,14,8,15, - 8,16,8,17,8,18,8,19,9,0,9,1,9,2,9,3,9,4,9,5,9,6,9,7,9,8,9,9,9,10,9,11, - 9,12,9,13,9,14,9,15,9,16,9,17,9,18,9,19,10,0,10,1,10,2,10,3,10,4,10,5,10,6,10,7, - 10,8,10,9,10,10,10,11,10,12,10,13,10,14,10,15,10,16,10,17,10,18,10,19,11,0,11,1,11,2,11,3, - 11,4,11,5,11,6,11,7,11,8,11,9,11,10,11,11,11,12,11,13,11,14,11,15,11,16,11,17,11,18,11,19, - 12,0,12,1,12,2,12,3,12,4,12,5,12,6,12,7,12,8,12,9,12,10,12,11,12,12,12,13,12,14,12,15, - 12,16,12,17,12,18,12,19,13,0,13,1,13,2,13,3,13,4,13,5,13,6,13,7,13,8,13,9,13,10,13,11, - 13,12,13,13,13,14,13,15,13,16,13,17,13,18,13,19,14,0,14,1,14,2,14,3,14,4,14,5,14,6,14,7, - 14,8,14,9,14,10,14,11,14,12,14,13,14,14,14,15,14,16,14,17,14,18,14,19,15,0,15,1,15,2,15,3, - 15,4,15,5,15,6,15,7,15,8,15,9,15,10,15,11,15,12,15,13,15,14,15,15,15,16,15,17,15,18,15,19, - 16,0,16,1,16,2,16,3,16,4,16,5,16,6,16,7,16,8,16,9,16,10,16,11,16,12,16,13,16,14,16,15, - 16,16,16,17,16,18,16,19,17,0,17,1,17,2,17,3,17,4,17,5,17,6,17,7,17,8,17,9,17,10,17,11, - 17,12,17,13,17,14,17,15,17,16,17,17,17,18,17,19,18,0,18,1,18,2,18,3,18,4,18,5,18,6,18,7, - 18,8,18,9,18,10,18,11,18,12,18,13,18,14,18,15,18,16,18,17,18,18,18,19,19,0,19,1,19,2,19,3, - 19,4,19,5,19,6,19,7,19,8,19,9,19,10,19,11,19,12,19,13,19,14,19,15,19,16,19,17,19,18,19,19, + 0, + 0, + 0, + 1, + 0, + 2, + 0, + 3, + 0, + 4, + 0, + 5, + 0, + 6, + 0, + 7, + 0, + 8, + 0, + 9, + 0, + 10, + 0, + 11, + 0, + 12, + 0, + 13, + 0, + 14, + 0, + 15, + 0, + 16, + 0, + 17, + 0, + 18, + 0, + 19, + 1, + 0, + 1, + 1, + 1, + 2, + 1, + 3, + 1, + 4, + 1, + 5, + 1, + 6, + 1, + 7, + 1, + 8, + 1, + 9, + 1, + 10, + 1, + 11, + 1, + 12, + 1, + 13, + 1, + 14, + 1, + 15, + 1, + 16, + 1, + 17, + 1, + 18, + 1, + 19, + 2, + 0, + 2, + 1, + 2, + 2, + 2, + 3, + 2, + 4, + 2, + 5, + 2, + 6, + 2, + 7, + 2, + 8, + 2, + 9, + 2, + 10, + 2, + 11, + 2, + 12, + 2, + 13, + 2, + 14, + 2, + 15, + 2, + 16, + 2, + 17, + 2, + 18, + 2, + 19, + 3, + 0, + 3, + 1, + 3, + 2, + 3, + 3, + 3, + 4, + 3, + 5, + 3, + 6, + 3, + 7, + 3, + 8, + 3, + 9, + 3, + 10, + 3, + 11, + 3, + 12, + 3, + 13, + 3, + 14, + 3, + 15, + 3, + 16, + 3, + 17, + 3, + 18, + 3, + 19, + 4, + 0, + 4, + 1, + 4, + 2, + 4, + 3, + 4, + 4, + 4, + 5, + 4, + 6, + 4, + 7, + 4, + 8, + 4, + 9, + 4, + 10, + 4, + 11, + 4, + 12, + 4, + 13, + 4, + 14, + 4, + 15, + 4, + 16, + 4, + 17, + 4, + 18, + 4, + 19, + 5, + 0, + 5, + 1, + 5, + 2, + 5, + 3, + 5, + 4, + 5, + 5, + 5, + 6, + 5, + 7, + 5, + 8, + 5, + 9, + 5, + 10, + 5, + 11, + 5, + 12, + 5, + 13, + 5, + 14, + 5, + 15, + 5, + 16, + 5, + 17, + 5, + 18, + 5, + 19, + 6, + 0, + 6, + 1, + 6, + 2, + 6, + 3, + 6, + 4, + 6, + 5, + 6, + 6, + 6, + 7, + 6, + 8, + 6, + 9, + 6, + 10, + 6, + 11, + 6, + 12, + 6, + 13, + 6, + 14, + 6, + 15, + 6, + 16, + 6, + 17, + 6, + 18, + 6, + 19, + 7, + 0, + 7, + 1, + 7, + 2, + 7, + 3, + 7, + 4, + 7, + 5, + 7, + 6, + 7, + 7, + 7, + 8, + 7, + 9, + 7, + 10, + 7, + 11, + 7, + 12, + 7, + 13, + 7, + 14, + 7, + 15, + 7, + 16, + 7, + 17, + 7, + 18, + 7, + 19, + 8, + 0, + 8, + 1, + 8, + 2, + 8, + 3, + 8, + 4, + 8, + 5, + 8, + 6, + 8, + 7, + 8, + 8, + 8, + 9, + 8, + 10, + 8, + 11, + 8, + 12, + 8, + 13, + 8, + 14, + 8, + 15, + 8, + 16, + 8, + 17, + 8, + 18, + 8, + 19, + 9, + 0, + 9, + 1, + 9, + 2, + 9, + 3, + 9, + 4, + 9, + 5, + 9, + 6, + 9, + 7, + 9, + 8, + 9, + 9, + 9, + 10, + 9, + 11, + 9, + 12, + 9, + 13, + 9, + 14, + 9, + 15, + 9, + 16, + 9, + 17, + 9, + 18, + 9, + 19, + 10, + 0, + 10, + 1, + 10, + 2, + 10, + 3, + 10, + 4, + 10, + 5, + 10, + 6, + 10, + 7, + 10, + 8, + 10, + 9, + 10, + 10, + 10, + 11, + 10, + 12, + 10, + 13, + 10, + 14, + 10, + 15, + 10, + 16, + 10, + 17, + 10, + 18, + 10, + 19, + 11, + 0, + 11, + 1, + 11, + 2, + 11, + 3, + 11, + 4, + 11, + 5, + 11, + 6, + 11, + 7, + 11, + 8, + 11, + 9, + 11, + 10, + 11, + 11, + 11, + 12, + 11, + 13, + 11, + 14, + 11, + 15, + 11, + 16, + 11, + 17, + 11, + 18, + 11, + 19, + 12, + 0, + 12, + 1, + 12, + 2, + 12, + 3, + 12, + 4, + 12, + 5, + 12, + 6, + 12, + 7, + 12, + 8, + 12, + 9, + 12, + 10, + 12, + 11, + 12, + 12, + 12, + 13, + 12, + 14, + 12, + 15, + 12, + 16, + 12, + 17, + 12, + 18, + 12, + 19, + 13, + 0, + 13, + 1, + 13, + 2, + 13, + 3, + 13, + 4, + 13, + 5, + 13, + 6, + 13, + 7, + 13, + 8, + 13, + 9, + 13, + 10, + 13, + 11, + 13, + 12, + 13, + 13, + 13, + 14, + 13, + 15, + 13, + 16, + 13, + 17, + 13, + 18, + 13, + 19, + 14, + 0, + 14, + 1, + 14, + 2, + 14, + 3, + 14, + 4, + 14, + 5, + 14, + 6, + 14, + 7, + 14, + 8, + 14, + 9, + 14, + 10, + 14, + 11, + 14, + 12, + 14, + 13, + 14, + 14, + 14, + 15, + 14, + 16, + 14, + 17, + 14, + 18, + 14, + 19, + 15, + 0, + 15, + 1, + 15, + 2, + 15, + 3, + 15, + 4, + 15, + 5, + 15, + 6, + 15, + 7, + 15, + 8, + 15, + 9, + 15, + 10, + 15, + 11, + 15, + 12, + 15, + 13, + 15, + 14, + 15, + 15, + 15, + 16, + 15, + 17, + 15, + 18, + 15, + 19, + 16, + 0, + 16, + 1, + 16, + 2, + 16, + 3, + 16, + 4, + 16, + 5, + 16, + 6, + 16, + 7, + 16, + 8, + 16, + 9, + 16, + 10, + 16, + 11, + 16, + 12, + 16, + 13, + 16, + 14, + 16, + 15, + 16, + 16, + 16, + 17, + 16, + 18, + 16, + 19, + 17, + 0, + 17, + 1, + 17, + 2, + 17, + 3, + 17, + 4, + 17, + 5, + 17, + 6, + 17, + 7, + 17, + 8, + 17, + 9, + 17, + 10, + 17, + 11, + 17, + 12, + 17, + 13, + 17, + 14, + 17, + 15, + 17, + 16, + 17, + 17, + 17, + 18, + 17, + 19, + 18, + 0, + 18, + 1, + 18, + 2, + 18, + 3, + 18, + 4, + 18, + 5, + 18, + 6, + 18, + 7, + 18, + 8, + 18, + 9, + 18, + 10, + 18, + 11, + 18, + 12, + 18, + 13, + 18, + 14, + 18, + 15, + 18, + 16, + 18, + 17, + 18, + 18, + 18, + 19, + 19, + 0, + 19, + 1, + 19, + 2, + 19, + 3, + 19, + 4, + 19, + 5, + 19, + 6, + 19, + 7, + 19, + 8, + 19, + 9, + 19, + 10, + 19, + 11, + 19, + 12, + 19, + 13, + 19, + 14, + 19, + 15, + 19, + 16, + 19, + 17, + 19, + 18, + 19, + 19, }; const int32_t c_aaiHuffDemod15[576][2] = { - 0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15, - 0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,1,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7, - 1,8,1,9,1,10,1,11,1,12,1,13,1,14,1,15,1,16,1,17,1,18,1,19,1,20,1,21,1,22,1,23, - 2,0,2,1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2,14,2,15, - 2,16,2,17,2,18,2,19,2,20,2,21,2,22,2,23,3,0,3,1,3,2,3,3,3,4,3,5,3,6,3,7, - 3,8,3,9,3,10,3,11,3,12,3,13,3,14,3,15,3,16,3,17,3,18,3,19,3,20,3,21,3,22,3,23, - 4,0,4,1,4,2,4,3,4,4,4,5,4,6,4,7,4,8,4,9,4,10,4,11,4,12,4,13,4,14,4,15, - 4,16,4,17,4,18,4,19,4,20,4,21,4,22,4,23,5,0,5,1,5,2,5,3,5,4,5,5,5,6,5,7, - 5,8,5,9,5,10,5,11,5,12,5,13,5,14,5,15,5,16,5,17,5,18,5,19,5,20,5,21,5,22,5,23, - 6,0,6,1,6,2,6,3,6,4,6,5,6,6,6,7,6,8,6,9,6,10,6,11,6,12,6,13,6,14,6,15, - 6,16,6,17,6,18,6,19,6,20,6,21,6,22,6,23,7,0,7,1,7,2,7,3,7,4,7,5,7,6,7,7, - 7,8,7,9,7,10,7,11,7,12,7,13,7,14,7,15,7,16,7,17,7,18,7,19,7,20,7,21,7,22,7,23, - 8,0,8,1,8,2,8,3,8,4,8,5,8,6,8,7,8,8,8,9,8,10,8,11,8,12,8,13,8,14,8,15, - 8,16,8,17,8,18,8,19,8,20,8,21,8,22,8,23,9,0,9,1,9,2,9,3,9,4,9,5,9,6,9,7, - 9,8,9,9,9,10,9,11,9,12,9,13,9,14,9,15,9,16,9,17,9,18,9,19,9,20,9,21,9,22,9,23, - 10,0,10,1,10,2,10,3,10,4,10,5,10,6,10,7,10,8,10,9,10,10,10,11,10,12,10,13,10,14,10,15, - 10,16,10,17,10,18,10,19,10,20,10,21,10,22,10,23,11,0,11,1,11,2,11,3,11,4,11,5,11,6,11,7, - 11,8,11,9,11,10,11,11,11,12,11,13,11,14,11,15,11,16,11,17,11,18,11,19,11,20,11,21,11,22,11,23, - 12,0,12,1,12,2,12,3,12,4,12,5,12,6,12,7,12,8,12,9,12,10,12,11,12,12,12,13,12,14,12,15, - 12,16,12,17,12,18,12,19,12,20,12,21,12,22,12,23,13,0,13,1,13,2,13,3,13,4,13,5,13,6,13,7, - 13,8,13,9,13,10,13,11,13,12,13,13,13,14,13,15,13,16,13,17,13,18,13,19,13,20,13,21,13,22,13,23, - 14,0,14,1,14,2,14,3,14,4,14,5,14,6,14,7,14,8,14,9,14,10,14,11,14,12,14,13,14,14,14,15, - 14,16,14,17,14,18,14,19,14,20,14,21,14,22,14,23,15,0,15,1,15,2,15,3,15,4,15,5,15,6,15,7, - 15,8,15,9,15,10,15,11,15,12,15,13,15,14,15,15,15,16,15,17,15,18,15,19,15,20,15,21,15,22,15,23, - 16,0,16,1,16,2,16,3,16,4,16,5,16,6,16,7,16,8,16,9,16,10,16,11,16,12,16,13,16,14,16,15, - 16,16,16,17,16,18,16,19,16,20,16,21,16,22,16,23,17,0,17,1,17,2,17,3,17,4,17,5,17,6,17,7, - 17,8,17,9,17,10,17,11,17,12,17,13,17,14,17,15,17,16,17,17,17,18,17,19,17,20,17,21,17,22,17,23, - 18,0,18,1,18,2,18,3,18,4,18,5,18,6,18,7,18,8,18,9,18,10,18,11,18,12,18,13,18,14,18,15, - 18,16,18,17,18,18,18,19,18,20,18,21,18,22,18,23,19,0,19,1,19,2,19,3,19,4,19,5,19,6,19,7, - 19,8,19,9,19,10,19,11,19,12,19,13,19,14,19,15,19,16,19,17,19,18,19,19,19,20,19,21,19,22,19,23, - 20,0,20,1,20,2,20,3,20,4,20,5,20,6,20,7,20,8,20,9,20,10,20,11,20,12,20,13,20,14,20,15, - 20,16,20,17,20,18,20,19,20,20,20,21,20,22,20,23,21,0,21,1,21,2,21,3,21,4,21,5,21,6,21,7, - 21,8,21,9,21,10,21,11,21,12,21,13,21,14,21,15,21,16,21,17,21,18,21,19,21,20,21,21,21,22,21,23, - 22,0,22,1,22,2,22,3,22,4,22,5,22,6,22,7,22,8,22,9,22,10,22,11,22,12,22,13,22,14,22,15, - 22,16,22,17,22,18,22,19,22,20,22,21,22,22,22,23,23,0,23,1,23,2,23,3,23,4,23,5,23,6,23,7, - 23,8,23,9,23,10,23,11,23,12,23,13,23,14,23,15,23,16,23,17,23,18,23,19,23,20,23,21,23,22,23,23, + 0, + 0, + 0, + 1, + 0, + 2, + 0, + 3, + 0, + 4, + 0, + 5, + 0, + 6, + 0, + 7, + 0, + 8, + 0, + 9, + 0, + 10, + 0, + 11, + 0, + 12, + 0, + 13, + 0, + 14, + 0, + 15, + 0, + 16, + 0, + 17, + 0, + 18, + 0, + 19, + 0, + 20, + 0, + 21, + 0, + 22, + 0, + 23, + 1, + 0, + 1, + 1, + 1, + 2, + 1, + 3, + 1, + 4, + 1, + 5, + 1, + 6, + 1, + 7, + 1, + 8, + 1, + 9, + 1, + 10, + 1, + 11, + 1, + 12, + 1, + 13, + 1, + 14, + 1, + 15, + 1, + 16, + 1, + 17, + 1, + 18, + 1, + 19, + 1, + 20, + 1, + 21, + 1, + 22, + 1, + 23, + 2, + 0, + 2, + 1, + 2, + 2, + 2, + 3, + 2, + 4, + 2, + 5, + 2, + 6, + 2, + 7, + 2, + 8, + 2, + 9, + 2, + 10, + 2, + 11, + 2, + 12, + 2, + 13, + 2, + 14, + 2, + 15, + 2, + 16, + 2, + 17, + 2, + 18, + 2, + 19, + 2, + 20, + 2, + 21, + 2, + 22, + 2, + 23, + 3, + 0, + 3, + 1, + 3, + 2, + 3, + 3, + 3, + 4, + 3, + 5, + 3, + 6, + 3, + 7, + 3, + 8, + 3, + 9, + 3, + 10, + 3, + 11, + 3, + 12, + 3, + 13, + 3, + 14, + 3, + 15, + 3, + 16, + 3, + 17, + 3, + 18, + 3, + 19, + 3, + 20, + 3, + 21, + 3, + 22, + 3, + 23, + 4, + 0, + 4, + 1, + 4, + 2, + 4, + 3, + 4, + 4, + 4, + 5, + 4, + 6, + 4, + 7, + 4, + 8, + 4, + 9, + 4, + 10, + 4, + 11, + 4, + 12, + 4, + 13, + 4, + 14, + 4, + 15, + 4, + 16, + 4, + 17, + 4, + 18, + 4, + 19, + 4, + 20, + 4, + 21, + 4, + 22, + 4, + 23, + 5, + 0, + 5, + 1, + 5, + 2, + 5, + 3, + 5, + 4, + 5, + 5, + 5, + 6, + 5, + 7, + 5, + 8, + 5, + 9, + 5, + 10, + 5, + 11, + 5, + 12, + 5, + 13, + 5, + 14, + 5, + 15, + 5, + 16, + 5, + 17, + 5, + 18, + 5, + 19, + 5, + 20, + 5, + 21, + 5, + 22, + 5, + 23, + 6, + 0, + 6, + 1, + 6, + 2, + 6, + 3, + 6, + 4, + 6, + 5, + 6, + 6, + 6, + 7, + 6, + 8, + 6, + 9, + 6, + 10, + 6, + 11, + 6, + 12, + 6, + 13, + 6, + 14, + 6, + 15, + 6, + 16, + 6, + 17, + 6, + 18, + 6, + 19, + 6, + 20, + 6, + 21, + 6, + 22, + 6, + 23, + 7, + 0, + 7, + 1, + 7, + 2, + 7, + 3, + 7, + 4, + 7, + 5, + 7, + 6, + 7, + 7, + 7, + 8, + 7, + 9, + 7, + 10, + 7, + 11, + 7, + 12, + 7, + 13, + 7, + 14, + 7, + 15, + 7, + 16, + 7, + 17, + 7, + 18, + 7, + 19, + 7, + 20, + 7, + 21, + 7, + 22, + 7, + 23, + 8, + 0, + 8, + 1, + 8, + 2, + 8, + 3, + 8, + 4, + 8, + 5, + 8, + 6, + 8, + 7, + 8, + 8, + 8, + 9, + 8, + 10, + 8, + 11, + 8, + 12, + 8, + 13, + 8, + 14, + 8, + 15, + 8, + 16, + 8, + 17, + 8, + 18, + 8, + 19, + 8, + 20, + 8, + 21, + 8, + 22, + 8, + 23, + 9, + 0, + 9, + 1, + 9, + 2, + 9, + 3, + 9, + 4, + 9, + 5, + 9, + 6, + 9, + 7, + 9, + 8, + 9, + 9, + 9, + 10, + 9, + 11, + 9, + 12, + 9, + 13, + 9, + 14, + 9, + 15, + 9, + 16, + 9, + 17, + 9, + 18, + 9, + 19, + 9, + 20, + 9, + 21, + 9, + 22, + 9, + 23, + 10, + 0, + 10, + 1, + 10, + 2, + 10, + 3, + 10, + 4, + 10, + 5, + 10, + 6, + 10, + 7, + 10, + 8, + 10, + 9, + 10, + 10, + 10, + 11, + 10, + 12, + 10, + 13, + 10, + 14, + 10, + 15, + 10, + 16, + 10, + 17, + 10, + 18, + 10, + 19, + 10, + 20, + 10, + 21, + 10, + 22, + 10, + 23, + 11, + 0, + 11, + 1, + 11, + 2, + 11, + 3, + 11, + 4, + 11, + 5, + 11, + 6, + 11, + 7, + 11, + 8, + 11, + 9, + 11, + 10, + 11, + 11, + 11, + 12, + 11, + 13, + 11, + 14, + 11, + 15, + 11, + 16, + 11, + 17, + 11, + 18, + 11, + 19, + 11, + 20, + 11, + 21, + 11, + 22, + 11, + 23, + 12, + 0, + 12, + 1, + 12, + 2, + 12, + 3, + 12, + 4, + 12, + 5, + 12, + 6, + 12, + 7, + 12, + 8, + 12, + 9, + 12, + 10, + 12, + 11, + 12, + 12, + 12, + 13, + 12, + 14, + 12, + 15, + 12, + 16, + 12, + 17, + 12, + 18, + 12, + 19, + 12, + 20, + 12, + 21, + 12, + 22, + 12, + 23, + 13, + 0, + 13, + 1, + 13, + 2, + 13, + 3, + 13, + 4, + 13, + 5, + 13, + 6, + 13, + 7, + 13, + 8, + 13, + 9, + 13, + 10, + 13, + 11, + 13, + 12, + 13, + 13, + 13, + 14, + 13, + 15, + 13, + 16, + 13, + 17, + 13, + 18, + 13, + 19, + 13, + 20, + 13, + 21, + 13, + 22, + 13, + 23, + 14, + 0, + 14, + 1, + 14, + 2, + 14, + 3, + 14, + 4, + 14, + 5, + 14, + 6, + 14, + 7, + 14, + 8, + 14, + 9, + 14, + 10, + 14, + 11, + 14, + 12, + 14, + 13, + 14, + 14, + 14, + 15, + 14, + 16, + 14, + 17, + 14, + 18, + 14, + 19, + 14, + 20, + 14, + 21, + 14, + 22, + 14, + 23, + 15, + 0, + 15, + 1, + 15, + 2, + 15, + 3, + 15, + 4, + 15, + 5, + 15, + 6, + 15, + 7, + 15, + 8, + 15, + 9, + 15, + 10, + 15, + 11, + 15, + 12, + 15, + 13, + 15, + 14, + 15, + 15, + 15, + 16, + 15, + 17, + 15, + 18, + 15, + 19, + 15, + 20, + 15, + 21, + 15, + 22, + 15, + 23, + 16, + 0, + 16, + 1, + 16, + 2, + 16, + 3, + 16, + 4, + 16, + 5, + 16, + 6, + 16, + 7, + 16, + 8, + 16, + 9, + 16, + 10, + 16, + 11, + 16, + 12, + 16, + 13, + 16, + 14, + 16, + 15, + 16, + 16, + 16, + 17, + 16, + 18, + 16, + 19, + 16, + 20, + 16, + 21, + 16, + 22, + 16, + 23, + 17, + 0, + 17, + 1, + 17, + 2, + 17, + 3, + 17, + 4, + 17, + 5, + 17, + 6, + 17, + 7, + 17, + 8, + 17, + 9, + 17, + 10, + 17, + 11, + 17, + 12, + 17, + 13, + 17, + 14, + 17, + 15, + 17, + 16, + 17, + 17, + 17, + 18, + 17, + 19, + 17, + 20, + 17, + 21, + 17, + 22, + 17, + 23, + 18, + 0, + 18, + 1, + 18, + 2, + 18, + 3, + 18, + 4, + 18, + 5, + 18, + 6, + 18, + 7, + 18, + 8, + 18, + 9, + 18, + 10, + 18, + 11, + 18, + 12, + 18, + 13, + 18, + 14, + 18, + 15, + 18, + 16, + 18, + 17, + 18, + 18, + 18, + 19, + 18, + 20, + 18, + 21, + 18, + 22, + 18, + 23, + 19, + 0, + 19, + 1, + 19, + 2, + 19, + 3, + 19, + 4, + 19, + 5, + 19, + 6, + 19, + 7, + 19, + 8, + 19, + 9, + 19, + 10, + 19, + 11, + 19, + 12, + 19, + 13, + 19, + 14, + 19, + 15, + 19, + 16, + 19, + 17, + 19, + 18, + 19, + 19, + 19, + 20, + 19, + 21, + 19, + 22, + 19, + 23, + 20, + 0, + 20, + 1, + 20, + 2, + 20, + 3, + 20, + 4, + 20, + 5, + 20, + 6, + 20, + 7, + 20, + 8, + 20, + 9, + 20, + 10, + 20, + 11, + 20, + 12, + 20, + 13, + 20, + 14, + 20, + 15, + 20, + 16, + 20, + 17, + 20, + 18, + 20, + 19, + 20, + 20, + 20, + 21, + 20, + 22, + 20, + 23, + 21, + 0, + 21, + 1, + 21, + 2, + 21, + 3, + 21, + 4, + 21, + 5, + 21, + 6, + 21, + 7, + 21, + 8, + 21, + 9, + 21, + 10, + 21, + 11, + 21, + 12, + 21, + 13, + 21, + 14, + 21, + 15, + 21, + 16, + 21, + 17, + 21, + 18, + 21, + 19, + 21, + 20, + 21, + 21, + 21, + 22, + 21, + 23, + 22, + 0, + 22, + 1, + 22, + 2, + 22, + 3, + 22, + 4, + 22, + 5, + 22, + 6, + 22, + 7, + 22, + 8, + 22, + 9, + 22, + 10, + 22, + 11, + 22, + 12, + 22, + 13, + 22, + 14, + 22, + 15, + 22, + 16, + 22, + 17, + 22, + 18, + 22, + 19, + 22, + 20, + 22, + 21, + 22, + 22, + 22, + 23, + 23, + 0, + 23, + 1, + 23, + 2, + 23, + 3, + 23, + 4, + 23, + 5, + 23, + 6, + 23, + 7, + 23, + 8, + 23, + 9, + 23, + 10, + 23, + 11, + 23, + 12, + 23, + 13, + 23, + 14, + 23, + 15, + 23, + 16, + 23, + 17, + 23, + 18, + 23, + 19, + 23, + 20, + 23, + 21, + 23, + 22, + 23, + 23, }; const int32_t c_aaiHuffDemod16[729][2] = { - 0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15, - 0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,1,0,1,1,1,2,1,3,1,4, - 1,5,1,6,1,7,1,8,1,9,1,10,1,11,1,12,1,13,1,14,1,15,1,16,1,17,1,18,1,19,1,20, - 1,21,1,22,1,23,1,24,1,25,1,26,2,0,2,1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9, - 2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17,2,18,2,19,2,20,2,21,2,22,2,23,2,24,2,25, - 2,26,3,0,3,1,3,2,3,3,3,4,3,5,3,6,3,7,3,8,3,9,3,10,3,11,3,12,3,13,3,14, - 3,15,3,16,3,17,3,18,3,19,3,20,3,21,3,22,3,23,3,24,3,25,3,26,4,0,4,1,4,2,4,3, - 4,4,4,5,4,6,4,7,4,8,4,9,4,10,4,11,4,12,4,13,4,14,4,15,4,16,4,17,4,18,4,19, - 4,20,4,21,4,22,4,23,4,24,4,25,4,26,5,0,5,1,5,2,5,3,5,4,5,5,5,6,5,7,5,8, - 5,9,5,10,5,11,5,12,5,13,5,14,5,15,5,16,5,17,5,18,5,19,5,20,5,21,5,22,5,23,5,24, - 5,25,5,26,6,0,6,1,6,2,6,3,6,4,6,5,6,6,6,7,6,8,6,9,6,10,6,11,6,12,6,13, - 6,14,6,15,6,16,6,17,6,18,6,19,6,20,6,21,6,22,6,23,6,24,6,25,6,26,7,0,7,1,7,2, - 7,3,7,4,7,5,7,6,7,7,7,8,7,9,7,10,7,11,7,12,7,13,7,14,7,15,7,16,7,17,7,18, - 7,19,7,20,7,21,7,22,7,23,7,24,7,25,7,26,8,0,8,1,8,2,8,3,8,4,8,5,8,6,8,7, - 8,8,8,9,8,10,8,11,8,12,8,13,8,14,8,15,8,16,8,17,8,18,8,19,8,20,8,21,8,22,8,23, - 8,24,8,25,8,26,9,0,9,1,9,2,9,3,9,4,9,5,9,6,9,7,9,8,9,9,9,10,9,11,9,12, - 9,13,9,14,9,15,9,16,9,17,9,18,9,19,9,20,9,21,9,22,9,23,9,24,9,25,9,26,10,0,10,1, - 10,2,10,3,10,4,10,5,10,6,10,7,10,8,10,9,10,10,10,11,10,12,10,13,10,14,10,15,10,16,10,17, - 10,18,10,19,10,20,10,21,10,22,10,23,10,24,10,25,10,26,11,0,11,1,11,2,11,3,11,4,11,5,11,6, - 11,7,11,8,11,9,11,10,11,11,11,12,11,13,11,14,11,15,11,16,11,17,11,18,11,19,11,20,11,21,11,22, - 11,23,11,24,11,25,11,26,12,0,12,1,12,2,12,3,12,4,12,5,12,6,12,7,12,8,12,9,12,10,12,11, - 12,12,12,13,12,14,12,15,12,16,12,17,12,18,12,19,12,20,12,21,12,22,12,23,12,24,12,25,12,26,13,0, - 13,1,13,2,13,3,13,4,13,5,13,6,13,7,13,8,13,9,13,10,13,11,13,12,13,13,13,14,13,15,13,16, - 13,17,13,18,13,19,13,20,13,21,13,22,13,23,13,24,13,25,13,26,14,0,14,1,14,2,14,3,14,4,14,5, - 14,6,14,7,14,8,14,9,14,10,14,11,14,12,14,13,14,14,14,15,14,16,14,17,14,18,14,19,14,20,14,21, - 14,22,14,23,14,24,14,25,14,26,15,0,15,1,15,2,15,3,15,4,15,5,15,6,15,7,15,8,15,9,15,10, - 15,11,15,12,15,13,15,14,15,15,15,16,15,17,15,18,15,19,15,20,15,21,15,22,15,23,15,24,15,25,15,26, - 16,0,16,1,16,2,16,3,16,4,16,5,16,6,16,7,16,8,16,9,16,10,16,11,16,12,16,13,16,14,16,15, - 16,16,16,17,16,18,16,19,16,20,16,21,16,22,16,23,16,24,16,25,16,26,17,0,17,1,17,2,17,3,17,4, - 17,5,17,6,17,7,17,8,17,9,17,10,17,11,17,12,17,13,17,14,17,15,17,16,17,17,17,18,17,19,17,20, - 17,21,17,22,17,23,17,24,17,25,17,26,18,0,18,1,18,2,18,3,18,4,18,5,18,6,18,7,18,8,18,9, - 18,10,18,11,18,12,18,13,18,14,18,15,18,16,18,17,18,18,18,19,18,20,18,21,18,22,18,23,18,24,18,25, - 18,26,19,0,19,1,19,2,19,3,19,4,19,5,19,6,19,7,19,8,19,9,19,10,19,11,19,12,19,13,19,14, - 19,15,19,16,19,17,19,18,19,19,19,20,19,21,19,22,19,23,19,24,19,25,19,26,20,0,20,1,20,2,20,3, - 20,4,20,5,20,6,20,7,20,8,20,9,20,10,20,11,20,12,20,13,20,14,20,15,20,16,20,17,20,18,20,19, - 20,20,20,21,20,22,20,23,20,24,20,25,20,26,21,0,21,1,21,2,21,3,21,4,21,5,21,6,21,7,21,8, - 21,9,21,10,21,11,21,12,21,13,21,14,21,15,21,16,21,17,21,18,21,19,21,20,21,21,21,22,21,23,21,24, - 21,25,21,26,22,0,22,1,22,2,22,3,22,4,22,5,22,6,22,7,22,8,22,9,22,10,22,11,22,12,22,13, - 22,14,22,15,22,16,22,17,22,18,22,19,22,20,22,21,22,22,22,23,22,24,22,25,22,26,23,0,23,1,23,2, - 23,3,23,4,23,5,23,6,23,7,23,8,23,9,23,10,23,11,23,12,23,13,23,14,23,15,23,16,23,17,23,18, - 23,19,23,20,23,21,23,22,23,23,23,24,23,25,23,26,24,0,24,1,24,2,24,3,24,4,24,5,24,6,24,7, - 24,8,24,9,24,10,24,11,24,12,24,13,24,14,24,15,24,16,24,17,24,18,24,19,24,20,24,21,24,22,24,23, - 24,24,24,25,24,26,25,0,25,1,25,2,25,3,25,4,25,5,25,6,25,7,25,8,25,9,25,10,25,11,25,12, - 25,13,25,14,25,15,25,16,25,17,25,18,25,19,25,20,25,21,25,22,25,23,25,24,25,25,25,26,26,0,26,1, - 26,2,26,3,26,4,26,5,26,6,26,7,26,8,26,9,26,10,26,11,26,12,26,13,26,14,26,15,26,16,26,17, - 26,18,26,19,26,20,26,21,26,22,26,23,26,24,26,25,26,26, + 0, + 0, + 0, + 1, + 0, + 2, + 0, + 3, + 0, + 4, + 0, + 5, + 0, + 6, + 0, + 7, + 0, + 8, + 0, + 9, + 0, + 10, + 0, + 11, + 0, + 12, + 0, + 13, + 0, + 14, + 0, + 15, + 0, + 16, + 0, + 17, + 0, + 18, + 0, + 19, + 0, + 20, + 0, + 21, + 0, + 22, + 0, + 23, + 0, + 24, + 0, + 25, + 0, + 26, + 1, + 0, + 1, + 1, + 1, + 2, + 1, + 3, + 1, + 4, + 1, + 5, + 1, + 6, + 1, + 7, + 1, + 8, + 1, + 9, + 1, + 10, + 1, + 11, + 1, + 12, + 1, + 13, + 1, + 14, + 1, + 15, + 1, + 16, + 1, + 17, + 1, + 18, + 1, + 19, + 1, + 20, + 1, + 21, + 1, + 22, + 1, + 23, + 1, + 24, + 1, + 25, + 1, + 26, + 2, + 0, + 2, + 1, + 2, + 2, + 2, + 3, + 2, + 4, + 2, + 5, + 2, + 6, + 2, + 7, + 2, + 8, + 2, + 9, + 2, + 10, + 2, + 11, + 2, + 12, + 2, + 13, + 2, + 14, + 2, + 15, + 2, + 16, + 2, + 17, + 2, + 18, + 2, + 19, + 2, + 20, + 2, + 21, + 2, + 22, + 2, + 23, + 2, + 24, + 2, + 25, + 2, + 26, + 3, + 0, + 3, + 1, + 3, + 2, + 3, + 3, + 3, + 4, + 3, + 5, + 3, + 6, + 3, + 7, + 3, + 8, + 3, + 9, + 3, + 10, + 3, + 11, + 3, + 12, + 3, + 13, + 3, + 14, + 3, + 15, + 3, + 16, + 3, + 17, + 3, + 18, + 3, + 19, + 3, + 20, + 3, + 21, + 3, + 22, + 3, + 23, + 3, + 24, + 3, + 25, + 3, + 26, + 4, + 0, + 4, + 1, + 4, + 2, + 4, + 3, + 4, + 4, + 4, + 5, + 4, + 6, + 4, + 7, + 4, + 8, + 4, + 9, + 4, + 10, + 4, + 11, + 4, + 12, + 4, + 13, + 4, + 14, + 4, + 15, + 4, + 16, + 4, + 17, + 4, + 18, + 4, + 19, + 4, + 20, + 4, + 21, + 4, + 22, + 4, + 23, + 4, + 24, + 4, + 25, + 4, + 26, + 5, + 0, + 5, + 1, + 5, + 2, + 5, + 3, + 5, + 4, + 5, + 5, + 5, + 6, + 5, + 7, + 5, + 8, + 5, + 9, + 5, + 10, + 5, + 11, + 5, + 12, + 5, + 13, + 5, + 14, + 5, + 15, + 5, + 16, + 5, + 17, + 5, + 18, + 5, + 19, + 5, + 20, + 5, + 21, + 5, + 22, + 5, + 23, + 5, + 24, + 5, + 25, + 5, + 26, + 6, + 0, + 6, + 1, + 6, + 2, + 6, + 3, + 6, + 4, + 6, + 5, + 6, + 6, + 6, + 7, + 6, + 8, + 6, + 9, + 6, + 10, + 6, + 11, + 6, + 12, + 6, + 13, + 6, + 14, + 6, + 15, + 6, + 16, + 6, + 17, + 6, + 18, + 6, + 19, + 6, + 20, + 6, + 21, + 6, + 22, + 6, + 23, + 6, + 24, + 6, + 25, + 6, + 26, + 7, + 0, + 7, + 1, + 7, + 2, + 7, + 3, + 7, + 4, + 7, + 5, + 7, + 6, + 7, + 7, + 7, + 8, + 7, + 9, + 7, + 10, + 7, + 11, + 7, + 12, + 7, + 13, + 7, + 14, + 7, + 15, + 7, + 16, + 7, + 17, + 7, + 18, + 7, + 19, + 7, + 20, + 7, + 21, + 7, + 22, + 7, + 23, + 7, + 24, + 7, + 25, + 7, + 26, + 8, + 0, + 8, + 1, + 8, + 2, + 8, + 3, + 8, + 4, + 8, + 5, + 8, + 6, + 8, + 7, + 8, + 8, + 8, + 9, + 8, + 10, + 8, + 11, + 8, + 12, + 8, + 13, + 8, + 14, + 8, + 15, + 8, + 16, + 8, + 17, + 8, + 18, + 8, + 19, + 8, + 20, + 8, + 21, + 8, + 22, + 8, + 23, + 8, + 24, + 8, + 25, + 8, + 26, + 9, + 0, + 9, + 1, + 9, + 2, + 9, + 3, + 9, + 4, + 9, + 5, + 9, + 6, + 9, + 7, + 9, + 8, + 9, + 9, + 9, + 10, + 9, + 11, + 9, + 12, + 9, + 13, + 9, + 14, + 9, + 15, + 9, + 16, + 9, + 17, + 9, + 18, + 9, + 19, + 9, + 20, + 9, + 21, + 9, + 22, + 9, + 23, + 9, + 24, + 9, + 25, + 9, + 26, + 10, + 0, + 10, + 1, + 10, + 2, + 10, + 3, + 10, + 4, + 10, + 5, + 10, + 6, + 10, + 7, + 10, + 8, + 10, + 9, + 10, + 10, + 10, + 11, + 10, + 12, + 10, + 13, + 10, + 14, + 10, + 15, + 10, + 16, + 10, + 17, + 10, + 18, + 10, + 19, + 10, + 20, + 10, + 21, + 10, + 22, + 10, + 23, + 10, + 24, + 10, + 25, + 10, + 26, + 11, + 0, + 11, + 1, + 11, + 2, + 11, + 3, + 11, + 4, + 11, + 5, + 11, + 6, + 11, + 7, + 11, + 8, + 11, + 9, + 11, + 10, + 11, + 11, + 11, + 12, + 11, + 13, + 11, + 14, + 11, + 15, + 11, + 16, + 11, + 17, + 11, + 18, + 11, + 19, + 11, + 20, + 11, + 21, + 11, + 22, + 11, + 23, + 11, + 24, + 11, + 25, + 11, + 26, + 12, + 0, + 12, + 1, + 12, + 2, + 12, + 3, + 12, + 4, + 12, + 5, + 12, + 6, + 12, + 7, + 12, + 8, + 12, + 9, + 12, + 10, + 12, + 11, + 12, + 12, + 12, + 13, + 12, + 14, + 12, + 15, + 12, + 16, + 12, + 17, + 12, + 18, + 12, + 19, + 12, + 20, + 12, + 21, + 12, + 22, + 12, + 23, + 12, + 24, + 12, + 25, + 12, + 26, + 13, + 0, + 13, + 1, + 13, + 2, + 13, + 3, + 13, + 4, + 13, + 5, + 13, + 6, + 13, + 7, + 13, + 8, + 13, + 9, + 13, + 10, + 13, + 11, + 13, + 12, + 13, + 13, + 13, + 14, + 13, + 15, + 13, + 16, + 13, + 17, + 13, + 18, + 13, + 19, + 13, + 20, + 13, + 21, + 13, + 22, + 13, + 23, + 13, + 24, + 13, + 25, + 13, + 26, + 14, + 0, + 14, + 1, + 14, + 2, + 14, + 3, + 14, + 4, + 14, + 5, + 14, + 6, + 14, + 7, + 14, + 8, + 14, + 9, + 14, + 10, + 14, + 11, + 14, + 12, + 14, + 13, + 14, + 14, + 14, + 15, + 14, + 16, + 14, + 17, + 14, + 18, + 14, + 19, + 14, + 20, + 14, + 21, + 14, + 22, + 14, + 23, + 14, + 24, + 14, + 25, + 14, + 26, + 15, + 0, + 15, + 1, + 15, + 2, + 15, + 3, + 15, + 4, + 15, + 5, + 15, + 6, + 15, + 7, + 15, + 8, + 15, + 9, + 15, + 10, + 15, + 11, + 15, + 12, + 15, + 13, + 15, + 14, + 15, + 15, + 15, + 16, + 15, + 17, + 15, + 18, + 15, + 19, + 15, + 20, + 15, + 21, + 15, + 22, + 15, + 23, + 15, + 24, + 15, + 25, + 15, + 26, + 16, + 0, + 16, + 1, + 16, + 2, + 16, + 3, + 16, + 4, + 16, + 5, + 16, + 6, + 16, + 7, + 16, + 8, + 16, + 9, + 16, + 10, + 16, + 11, + 16, + 12, + 16, + 13, + 16, + 14, + 16, + 15, + 16, + 16, + 16, + 17, + 16, + 18, + 16, + 19, + 16, + 20, + 16, + 21, + 16, + 22, + 16, + 23, + 16, + 24, + 16, + 25, + 16, + 26, + 17, + 0, + 17, + 1, + 17, + 2, + 17, + 3, + 17, + 4, + 17, + 5, + 17, + 6, + 17, + 7, + 17, + 8, + 17, + 9, + 17, + 10, + 17, + 11, + 17, + 12, + 17, + 13, + 17, + 14, + 17, + 15, + 17, + 16, + 17, + 17, + 17, + 18, + 17, + 19, + 17, + 20, + 17, + 21, + 17, + 22, + 17, + 23, + 17, + 24, + 17, + 25, + 17, + 26, + 18, + 0, + 18, + 1, + 18, + 2, + 18, + 3, + 18, + 4, + 18, + 5, + 18, + 6, + 18, + 7, + 18, + 8, + 18, + 9, + 18, + 10, + 18, + 11, + 18, + 12, + 18, + 13, + 18, + 14, + 18, + 15, + 18, + 16, + 18, + 17, + 18, + 18, + 18, + 19, + 18, + 20, + 18, + 21, + 18, + 22, + 18, + 23, + 18, + 24, + 18, + 25, + 18, + 26, + 19, + 0, + 19, + 1, + 19, + 2, + 19, + 3, + 19, + 4, + 19, + 5, + 19, + 6, + 19, + 7, + 19, + 8, + 19, + 9, + 19, + 10, + 19, + 11, + 19, + 12, + 19, + 13, + 19, + 14, + 19, + 15, + 19, + 16, + 19, + 17, + 19, + 18, + 19, + 19, + 19, + 20, + 19, + 21, + 19, + 22, + 19, + 23, + 19, + 24, + 19, + 25, + 19, + 26, + 20, + 0, + 20, + 1, + 20, + 2, + 20, + 3, + 20, + 4, + 20, + 5, + 20, + 6, + 20, + 7, + 20, + 8, + 20, + 9, + 20, + 10, + 20, + 11, + 20, + 12, + 20, + 13, + 20, + 14, + 20, + 15, + 20, + 16, + 20, + 17, + 20, + 18, + 20, + 19, + 20, + 20, + 20, + 21, + 20, + 22, + 20, + 23, + 20, + 24, + 20, + 25, + 20, + 26, + 21, + 0, + 21, + 1, + 21, + 2, + 21, + 3, + 21, + 4, + 21, + 5, + 21, + 6, + 21, + 7, + 21, + 8, + 21, + 9, + 21, + 10, + 21, + 11, + 21, + 12, + 21, + 13, + 21, + 14, + 21, + 15, + 21, + 16, + 21, + 17, + 21, + 18, + 21, + 19, + 21, + 20, + 21, + 21, + 21, + 22, + 21, + 23, + 21, + 24, + 21, + 25, + 21, + 26, + 22, + 0, + 22, + 1, + 22, + 2, + 22, + 3, + 22, + 4, + 22, + 5, + 22, + 6, + 22, + 7, + 22, + 8, + 22, + 9, + 22, + 10, + 22, + 11, + 22, + 12, + 22, + 13, + 22, + 14, + 22, + 15, + 22, + 16, + 22, + 17, + 22, + 18, + 22, + 19, + 22, + 20, + 22, + 21, + 22, + 22, + 22, + 23, + 22, + 24, + 22, + 25, + 22, + 26, + 23, + 0, + 23, + 1, + 23, + 2, + 23, + 3, + 23, + 4, + 23, + 5, + 23, + 6, + 23, + 7, + 23, + 8, + 23, + 9, + 23, + 10, + 23, + 11, + 23, + 12, + 23, + 13, + 23, + 14, + 23, + 15, + 23, + 16, + 23, + 17, + 23, + 18, + 23, + 19, + 23, + 20, + 23, + 21, + 23, + 22, + 23, + 23, + 23, + 24, + 23, + 25, + 23, + 26, + 24, + 0, + 24, + 1, + 24, + 2, + 24, + 3, + 24, + 4, + 24, + 5, + 24, + 6, + 24, + 7, + 24, + 8, + 24, + 9, + 24, + 10, + 24, + 11, + 24, + 12, + 24, + 13, + 24, + 14, + 24, + 15, + 24, + 16, + 24, + 17, + 24, + 18, + 24, + 19, + 24, + 20, + 24, + 21, + 24, + 22, + 24, + 23, + 24, + 24, + 24, + 25, + 24, + 26, + 25, + 0, + 25, + 1, + 25, + 2, + 25, + 3, + 25, + 4, + 25, + 5, + 25, + 6, + 25, + 7, + 25, + 8, + 25, + 9, + 25, + 10, + 25, + 11, + 25, + 12, + 25, + 13, + 25, + 14, + 25, + 15, + 25, + 16, + 25, + 17, + 25, + 18, + 25, + 19, + 25, + 20, + 25, + 21, + 25, + 22, + 25, + 23, + 25, + 24, + 25, + 25, + 25, + 26, + 26, + 0, + 26, + 1, + 26, + 2, + 26, + 3, + 26, + 4, + 26, + 5, + 26, + 6, + 26, + 7, + 26, + 8, + 26, + 9, + 26, + 10, + 26, + 11, + 26, + 12, + 26, + 13, + 26, + 14, + 26, + 15, + 26, + 16, + 26, + 17, + 26, + 18, + 26, + 19, + 26, + 20, + 26, + 21, + 26, + 22, + 26, + 23, + 26, + 24, + 26, + 25, + 26, + 26, }; const int32_t c_aaiHuffDemod17[729][2] = { - 0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15, - 0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,1,0,1,1,1,2,1,3,1,4, - 1,5,1,6,1,7,1,8,1,9,1,10,1,11,1,12,1,13,1,14,1,15,1,16,1,17,1,18,1,19,1,20, - 1,21,1,22,1,23,1,24,1,25,1,26,2,0,2,1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9, - 2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17,2,18,2,19,2,20,2,21,2,22,2,23,2,24,2,25, - 2,26,3,0,3,1,3,2,3,3,3,4,3,5,3,6,3,7,3,8,3,9,3,10,3,11,3,12,3,13,3,14, - 3,15,3,16,3,17,3,18,3,19,3,20,3,21,3,22,3,23,3,24,3,25,3,26,4,0,4,1,4,2,4,3, - 4,4,4,5,4,6,4,7,4,8,4,9,4,10,4,11,4,12,4,13,4,14,4,15,4,16,4,17,4,18,4,19, - 4,20,4,21,4,22,4,23,4,24,4,25,4,26,5,0,5,1,5,2,5,3,5,4,5,5,5,6,5,7,5,8, - 5,9,5,10,5,11,5,12,5,13,5,14,5,15,5,16,5,17,5,18,5,19,5,20,5,21,5,22,5,23,5,24, - 5,25,5,26,6,0,6,1,6,2,6,3,6,4,6,5,6,6,6,7,6,8,6,9,6,10,6,11,6,12,6,13, - 6,14,6,15,6,16,6,17,6,18,6,19,6,20,6,21,6,22,6,23,6,24,6,25,6,26,7,0,7,1,7,2, - 7,3,7,4,7,5,7,6,7,7,7,8,7,9,7,10,7,11,7,12,7,13,7,14,7,15,7,16,7,17,7,18, - 7,19,7,20,7,21,7,22,7,23,7,24,7,25,7,26,8,0,8,1,8,2,8,3,8,4,8,5,8,6,8,7, - 8,8,8,9,8,10,8,11,8,12,8,13,8,14,8,15,8,16,8,17,8,18,8,19,8,20,8,21,8,22,8,23, - 8,24,8,25,8,26,9,0,9,1,9,2,9,3,9,4,9,5,9,6,9,7,9,8,9,9,9,10,9,11,9,12, - 9,13,9,14,9,15,9,16,9,17,9,18,9,19,9,20,9,21,9,22,9,23,9,24,9,25,9,26,10,0,10,1, - 10,2,10,3,10,4,10,5,10,6,10,7,10,8,10,9,10,10,10,11,10,12,10,13,10,14,10,15,10,16,10,17, - 10,18,10,19,10,20,10,21,10,22,10,23,10,24,10,25,10,26,11,0,11,1,11,2,11,3,11,4,11,5,11,6, - 11,7,11,8,11,9,11,10,11,11,11,12,11,13,11,14,11,15,11,16,11,17,11,18,11,19,11,20,11,21,11,22, - 11,23,11,24,11,25,11,26,12,0,12,1,12,2,12,3,12,4,12,5,12,6,12,7,12,8,12,9,12,10,12,11, - 12,12,12,13,12,14,12,15,12,16,12,17,12,18,12,19,12,20,12,21,12,22,12,23,12,24,12,25,12,26,13,0, - 13,1,13,2,13,3,13,4,13,5,13,6,13,7,13,8,13,9,13,10,13,11,13,12,13,13,13,14,13,15,13,16, - 13,17,13,18,13,19,13,20,13,21,13,22,13,23,13,24,13,25,13,26,14,0,14,1,14,2,14,3,14,4,14,5, - 14,6,14,7,14,8,14,9,14,10,14,11,14,12,14,13,14,14,14,15,14,16,14,17,14,18,14,19,14,20,14,21, - 14,22,14,23,14,24,14,25,14,26,15,0,15,1,15,2,15,3,15,4,15,5,15,6,15,7,15,8,15,9,15,10, - 15,11,15,12,15,13,15,14,15,15,15,16,15,17,15,18,15,19,15,20,15,21,15,22,15,23,15,24,15,25,15,26, - 16,0,16,1,16,2,16,3,16,4,16,5,16,6,16,7,16,8,16,9,16,10,16,11,16,12,16,13,16,14,16,15, - 16,16,16,17,16,18,16,19,16,20,16,21,16,22,16,23,16,24,16,25,16,26,17,0,17,1,17,2,17,3,17,4, - 17,5,17,6,17,7,17,8,17,9,17,10,17,11,17,12,17,13,17,14,17,15,17,16,17,17,17,18,17,19,17,20, - 17,21,17,22,17,23,17,24,17,25,17,26,18,0,18,1,18,2,18,3,18,4,18,5,18,6,18,7,18,8,18,9, - 18,10,18,11,18,12,18,13,18,14,18,15,18,16,18,17,18,18,18,19,18,20,18,21,18,22,18,23,18,24,18,25, - 18,26,19,0,19,1,19,2,19,3,19,4,19,5,19,6,19,7,19,8,19,9,19,10,19,11,19,12,19,13,19,14, - 19,15,19,16,19,17,19,18,19,19,19,20,19,21,19,22,19,23,19,24,19,25,19,26,20,0,20,1,20,2,20,3, - 20,4,20,5,20,6,20,7,20,8,20,9,20,10,20,11,20,12,20,13,20,14,20,15,20,16,20,17,20,18,20,19, - 20,20,20,21,20,22,20,23,20,24,20,25,20,26,21,0,21,1,21,2,21,3,21,4,21,5,21,6,21,7,21,8, - 21,9,21,10,21,11,21,12,21,13,21,14,21,15,21,16,21,17,21,18,21,19,21,20,21,21,21,22,21,23,21,24, - 21,25,21,26,22,0,22,1,22,2,22,3,22,4,22,5,22,6,22,7,22,8,22,9,22,10,22,11,22,12,22,13, - 22,14,22,15,22,16,22,17,22,18,22,19,22,20,22,21,22,22,22,23,22,24,22,25,22,26,23,0,23,1,23,2, - 23,3,23,4,23,5,23,6,23,7,23,8,23,9,23,10,23,11,23,12,23,13,23,14,23,15,23,16,23,17,23,18, - 23,19,23,20,23,21,23,22,23,23,23,24,23,25,23,26,24,0,24,1,24,2,24,3,24,4,24,5,24,6,24,7, - 24,8,24,9,24,10,24,11,24,12,24,13,24,14,24,15,24,16,24,17,24,18,24,19,24,20,24,21,24,22,24,23, - 24,24,24,25,24,26,25,0,25,1,25,2,25,3,25,4,25,5,25,6,25,7,25,8,25,9,25,10,25,11,25,12, - 25,13,25,14,25,15,25,16,25,17,25,18,25,19,25,20,25,21,25,22,25,23,25,24,25,25,25,26,26,0,26,1, - 26,2,26,3,26,4,26,5,26,6,26,7,26,8,26,9,26,10,26,11,26,12,26,13,26,14,26,15,26,16,26,17, - 26,18,26,19,26,20,26,21,26,22,26,23,26,24,26,25,26,26, + 0, + 0, + 0, + 1, + 0, + 2, + 0, + 3, + 0, + 4, + 0, + 5, + 0, + 6, + 0, + 7, + 0, + 8, + 0, + 9, + 0, + 10, + 0, + 11, + 0, + 12, + 0, + 13, + 0, + 14, + 0, + 15, + 0, + 16, + 0, + 17, + 0, + 18, + 0, + 19, + 0, + 20, + 0, + 21, + 0, + 22, + 0, + 23, + 0, + 24, + 0, + 25, + 0, + 26, + 1, + 0, + 1, + 1, + 1, + 2, + 1, + 3, + 1, + 4, + 1, + 5, + 1, + 6, + 1, + 7, + 1, + 8, + 1, + 9, + 1, + 10, + 1, + 11, + 1, + 12, + 1, + 13, + 1, + 14, + 1, + 15, + 1, + 16, + 1, + 17, + 1, + 18, + 1, + 19, + 1, + 20, + 1, + 21, + 1, + 22, + 1, + 23, + 1, + 24, + 1, + 25, + 1, + 26, + 2, + 0, + 2, + 1, + 2, + 2, + 2, + 3, + 2, + 4, + 2, + 5, + 2, + 6, + 2, + 7, + 2, + 8, + 2, + 9, + 2, + 10, + 2, + 11, + 2, + 12, + 2, + 13, + 2, + 14, + 2, + 15, + 2, + 16, + 2, + 17, + 2, + 18, + 2, + 19, + 2, + 20, + 2, + 21, + 2, + 22, + 2, + 23, + 2, + 24, + 2, + 25, + 2, + 26, + 3, + 0, + 3, + 1, + 3, + 2, + 3, + 3, + 3, + 4, + 3, + 5, + 3, + 6, + 3, + 7, + 3, + 8, + 3, + 9, + 3, + 10, + 3, + 11, + 3, + 12, + 3, + 13, + 3, + 14, + 3, + 15, + 3, + 16, + 3, + 17, + 3, + 18, + 3, + 19, + 3, + 20, + 3, + 21, + 3, + 22, + 3, + 23, + 3, + 24, + 3, + 25, + 3, + 26, + 4, + 0, + 4, + 1, + 4, + 2, + 4, + 3, + 4, + 4, + 4, + 5, + 4, + 6, + 4, + 7, + 4, + 8, + 4, + 9, + 4, + 10, + 4, + 11, + 4, + 12, + 4, + 13, + 4, + 14, + 4, + 15, + 4, + 16, + 4, + 17, + 4, + 18, + 4, + 19, + 4, + 20, + 4, + 21, + 4, + 22, + 4, + 23, + 4, + 24, + 4, + 25, + 4, + 26, + 5, + 0, + 5, + 1, + 5, + 2, + 5, + 3, + 5, + 4, + 5, + 5, + 5, + 6, + 5, + 7, + 5, + 8, + 5, + 9, + 5, + 10, + 5, + 11, + 5, + 12, + 5, + 13, + 5, + 14, + 5, + 15, + 5, + 16, + 5, + 17, + 5, + 18, + 5, + 19, + 5, + 20, + 5, + 21, + 5, + 22, + 5, + 23, + 5, + 24, + 5, + 25, + 5, + 26, + 6, + 0, + 6, + 1, + 6, + 2, + 6, + 3, + 6, + 4, + 6, + 5, + 6, + 6, + 6, + 7, + 6, + 8, + 6, + 9, + 6, + 10, + 6, + 11, + 6, + 12, + 6, + 13, + 6, + 14, + 6, + 15, + 6, + 16, + 6, + 17, + 6, + 18, + 6, + 19, + 6, + 20, + 6, + 21, + 6, + 22, + 6, + 23, + 6, + 24, + 6, + 25, + 6, + 26, + 7, + 0, + 7, + 1, + 7, + 2, + 7, + 3, + 7, + 4, + 7, + 5, + 7, + 6, + 7, + 7, + 7, + 8, + 7, + 9, + 7, + 10, + 7, + 11, + 7, + 12, + 7, + 13, + 7, + 14, + 7, + 15, + 7, + 16, + 7, + 17, + 7, + 18, + 7, + 19, + 7, + 20, + 7, + 21, + 7, + 22, + 7, + 23, + 7, + 24, + 7, + 25, + 7, + 26, + 8, + 0, + 8, + 1, + 8, + 2, + 8, + 3, + 8, + 4, + 8, + 5, + 8, + 6, + 8, + 7, + 8, + 8, + 8, + 9, + 8, + 10, + 8, + 11, + 8, + 12, + 8, + 13, + 8, + 14, + 8, + 15, + 8, + 16, + 8, + 17, + 8, + 18, + 8, + 19, + 8, + 20, + 8, + 21, + 8, + 22, + 8, + 23, + 8, + 24, + 8, + 25, + 8, + 26, + 9, + 0, + 9, + 1, + 9, + 2, + 9, + 3, + 9, + 4, + 9, + 5, + 9, + 6, + 9, + 7, + 9, + 8, + 9, + 9, + 9, + 10, + 9, + 11, + 9, + 12, + 9, + 13, + 9, + 14, + 9, + 15, + 9, + 16, + 9, + 17, + 9, + 18, + 9, + 19, + 9, + 20, + 9, + 21, + 9, + 22, + 9, + 23, + 9, + 24, + 9, + 25, + 9, + 26, + 10, + 0, + 10, + 1, + 10, + 2, + 10, + 3, + 10, + 4, + 10, + 5, + 10, + 6, + 10, + 7, + 10, + 8, + 10, + 9, + 10, + 10, + 10, + 11, + 10, + 12, + 10, + 13, + 10, + 14, + 10, + 15, + 10, + 16, + 10, + 17, + 10, + 18, + 10, + 19, + 10, + 20, + 10, + 21, + 10, + 22, + 10, + 23, + 10, + 24, + 10, + 25, + 10, + 26, + 11, + 0, + 11, + 1, + 11, + 2, + 11, + 3, + 11, + 4, + 11, + 5, + 11, + 6, + 11, + 7, + 11, + 8, + 11, + 9, + 11, + 10, + 11, + 11, + 11, + 12, + 11, + 13, + 11, + 14, + 11, + 15, + 11, + 16, + 11, + 17, + 11, + 18, + 11, + 19, + 11, + 20, + 11, + 21, + 11, + 22, + 11, + 23, + 11, + 24, + 11, + 25, + 11, + 26, + 12, + 0, + 12, + 1, + 12, + 2, + 12, + 3, + 12, + 4, + 12, + 5, + 12, + 6, + 12, + 7, + 12, + 8, + 12, + 9, + 12, + 10, + 12, + 11, + 12, + 12, + 12, + 13, + 12, + 14, + 12, + 15, + 12, + 16, + 12, + 17, + 12, + 18, + 12, + 19, + 12, + 20, + 12, + 21, + 12, + 22, + 12, + 23, + 12, + 24, + 12, + 25, + 12, + 26, + 13, + 0, + 13, + 1, + 13, + 2, + 13, + 3, + 13, + 4, + 13, + 5, + 13, + 6, + 13, + 7, + 13, + 8, + 13, + 9, + 13, + 10, + 13, + 11, + 13, + 12, + 13, + 13, + 13, + 14, + 13, + 15, + 13, + 16, + 13, + 17, + 13, + 18, + 13, + 19, + 13, + 20, + 13, + 21, + 13, + 22, + 13, + 23, + 13, + 24, + 13, + 25, + 13, + 26, + 14, + 0, + 14, + 1, + 14, + 2, + 14, + 3, + 14, + 4, + 14, + 5, + 14, + 6, + 14, + 7, + 14, + 8, + 14, + 9, + 14, + 10, + 14, + 11, + 14, + 12, + 14, + 13, + 14, + 14, + 14, + 15, + 14, + 16, + 14, + 17, + 14, + 18, + 14, + 19, + 14, + 20, + 14, + 21, + 14, + 22, + 14, + 23, + 14, + 24, + 14, + 25, + 14, + 26, + 15, + 0, + 15, + 1, + 15, + 2, + 15, + 3, + 15, + 4, + 15, + 5, + 15, + 6, + 15, + 7, + 15, + 8, + 15, + 9, + 15, + 10, + 15, + 11, + 15, + 12, + 15, + 13, + 15, + 14, + 15, + 15, + 15, + 16, + 15, + 17, + 15, + 18, + 15, + 19, + 15, + 20, + 15, + 21, + 15, + 22, + 15, + 23, + 15, + 24, + 15, + 25, + 15, + 26, + 16, + 0, + 16, + 1, + 16, + 2, + 16, + 3, + 16, + 4, + 16, + 5, + 16, + 6, + 16, + 7, + 16, + 8, + 16, + 9, + 16, + 10, + 16, + 11, + 16, + 12, + 16, + 13, + 16, + 14, + 16, + 15, + 16, + 16, + 16, + 17, + 16, + 18, + 16, + 19, + 16, + 20, + 16, + 21, + 16, + 22, + 16, + 23, + 16, + 24, + 16, + 25, + 16, + 26, + 17, + 0, + 17, + 1, + 17, + 2, + 17, + 3, + 17, + 4, + 17, + 5, + 17, + 6, + 17, + 7, + 17, + 8, + 17, + 9, + 17, + 10, + 17, + 11, + 17, + 12, + 17, + 13, + 17, + 14, + 17, + 15, + 17, + 16, + 17, + 17, + 17, + 18, + 17, + 19, + 17, + 20, + 17, + 21, + 17, + 22, + 17, + 23, + 17, + 24, + 17, + 25, + 17, + 26, + 18, + 0, + 18, + 1, + 18, + 2, + 18, + 3, + 18, + 4, + 18, + 5, + 18, + 6, + 18, + 7, + 18, + 8, + 18, + 9, + 18, + 10, + 18, + 11, + 18, + 12, + 18, + 13, + 18, + 14, + 18, + 15, + 18, + 16, + 18, + 17, + 18, + 18, + 18, + 19, + 18, + 20, + 18, + 21, + 18, + 22, + 18, + 23, + 18, + 24, + 18, + 25, + 18, + 26, + 19, + 0, + 19, + 1, + 19, + 2, + 19, + 3, + 19, + 4, + 19, + 5, + 19, + 6, + 19, + 7, + 19, + 8, + 19, + 9, + 19, + 10, + 19, + 11, + 19, + 12, + 19, + 13, + 19, + 14, + 19, + 15, + 19, + 16, + 19, + 17, + 19, + 18, + 19, + 19, + 19, + 20, + 19, + 21, + 19, + 22, + 19, + 23, + 19, + 24, + 19, + 25, + 19, + 26, + 20, + 0, + 20, + 1, + 20, + 2, + 20, + 3, + 20, + 4, + 20, + 5, + 20, + 6, + 20, + 7, + 20, + 8, + 20, + 9, + 20, + 10, + 20, + 11, + 20, + 12, + 20, + 13, + 20, + 14, + 20, + 15, + 20, + 16, + 20, + 17, + 20, + 18, + 20, + 19, + 20, + 20, + 20, + 21, + 20, + 22, + 20, + 23, + 20, + 24, + 20, + 25, + 20, + 26, + 21, + 0, + 21, + 1, + 21, + 2, + 21, + 3, + 21, + 4, + 21, + 5, + 21, + 6, + 21, + 7, + 21, + 8, + 21, + 9, + 21, + 10, + 21, + 11, + 21, + 12, + 21, + 13, + 21, + 14, + 21, + 15, + 21, + 16, + 21, + 17, + 21, + 18, + 21, + 19, + 21, + 20, + 21, + 21, + 21, + 22, + 21, + 23, + 21, + 24, + 21, + 25, + 21, + 26, + 22, + 0, + 22, + 1, + 22, + 2, + 22, + 3, + 22, + 4, + 22, + 5, + 22, + 6, + 22, + 7, + 22, + 8, + 22, + 9, + 22, + 10, + 22, + 11, + 22, + 12, + 22, + 13, + 22, + 14, + 22, + 15, + 22, + 16, + 22, + 17, + 22, + 18, + 22, + 19, + 22, + 20, + 22, + 21, + 22, + 22, + 22, + 23, + 22, + 24, + 22, + 25, + 22, + 26, + 23, + 0, + 23, + 1, + 23, + 2, + 23, + 3, + 23, + 4, + 23, + 5, + 23, + 6, + 23, + 7, + 23, + 8, + 23, + 9, + 23, + 10, + 23, + 11, + 23, + 12, + 23, + 13, + 23, + 14, + 23, + 15, + 23, + 16, + 23, + 17, + 23, + 18, + 23, + 19, + 23, + 20, + 23, + 21, + 23, + 22, + 23, + 23, + 23, + 24, + 23, + 25, + 23, + 26, + 24, + 0, + 24, + 1, + 24, + 2, + 24, + 3, + 24, + 4, + 24, + 5, + 24, + 6, + 24, + 7, + 24, + 8, + 24, + 9, + 24, + 10, + 24, + 11, + 24, + 12, + 24, + 13, + 24, + 14, + 24, + 15, + 24, + 16, + 24, + 17, + 24, + 18, + 24, + 19, + 24, + 20, + 24, + 21, + 24, + 22, + 24, + 23, + 24, + 24, + 24, + 25, + 24, + 26, + 25, + 0, + 25, + 1, + 25, + 2, + 25, + 3, + 25, + 4, + 25, + 5, + 25, + 6, + 25, + 7, + 25, + 8, + 25, + 9, + 25, + 10, + 25, + 11, + 25, + 12, + 25, + 13, + 25, + 14, + 25, + 15, + 25, + 16, + 25, + 17, + 25, + 18, + 25, + 19, + 25, + 20, + 25, + 21, + 25, + 22, + 25, + 23, + 25, + 24, + 25, + 25, + 25, + 26, + 26, + 0, + 26, + 1, + 26, + 2, + 26, + 3, + 26, + 4, + 26, + 5, + 26, + 6, + 26, + 7, + 26, + 8, + 26, + 9, + 26, + 10, + 26, + 11, + 26, + 12, + 26, + 13, + 26, + 14, + 26, + 15, + 26, + 16, + 26, + 17, + 26, + 18, + 26, + 19, + 26, + 20, + 26, + 21, + 26, + 22, + 26, + 23, + 26, + 24, + 26, + 25, + 26, + 26, }; -const int32_t(*c_apaiDemodTables[ALLOC_TABLE_SIZE])[2] = { +const int32_t ( *c_apaiDemodTables[ALLOC_TABLE_SIZE] )[2] = { NULL, c_aaiHuffDemod1, c_aaiHuffDemod2, @@ -4670,95 +51911,1156 @@ const int32_t(*c_apaiDemodTables[ALLOC_TABLE_SIZE])[2] = { #endif const int32_t c_aiLogAddTable[LOG_ADD_TABLE_LENGTH] = { - 0x40, 0x40, 0x3F, 0x3F, 0x3E, 0x3E, 0x3D, 0x3D, 0x3C, 0x3C, 0x3B, 0x3B, 0x3A, 0x3A, 0x39, 0x39, - 0x38, 0x38, 0x37, 0x37, 0x37, 0x36, 0x36, 0x35, 0x35, 0x34, 0x34, 0x33, 0x33, 0x33, 0x32, 0x32, - 0x31, 0x31, 0x31, 0x30, 0x30, 0x2F, 0x2F, 0x2F, 0x2E, 0x2E, 0x2D, 0x2D, 0x2D, 0x2C, 0x2C, 0x2B, - 0x2B, 0x2B, 0x2A, 0x2A, 0x2A, 0x29, 0x29, 0x29, 0x28, 0x28, 0x27, 0x27, 0x27, 0x26, 0x26, 0x26, - 0x25, 0x25, 0x25, 0x24, 0x24, 0x24, 0x23, 0x23, 0x23, 0x23, 0x22, 0x22, 0x22, 0x21, 0x21, 0x21, - 0x20, 0x20, 0x20, 0x20, 0x1F, 0x1F, 0x1F, 0x1E, 0x1E, 0x1E, 0x1E, 0x1D, 0x1D, 0x1D, 0x1C, 0x1C, - 0x1C, 0x1C, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x1A, 0x1A, 0x19, 0x19, 0x19, 0x19, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x17, 0x17, 0x17, 0x17, 0x16, 0x16, 0x16, 0x16, 0x16, 0x15, 0x15, 0x15, 0x15, - 0x15, 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x12, 0x12, 0x12, 0x12, - 0x12, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0F, 0x0F, 0x0F, - 0x0F, 0x0F, 0x0F, 0x0F, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, - 0x0D, 0x0D, 0x0D, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, - 0x0B, 0x0B, 0x0B, 0x0B, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x09, 0x09, - 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, - 0x07, 0x07, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, + 0x40, + 0x3F, + 0x3F, + 0x3E, + 0x3E, + 0x3D, + 0x3D, + 0x3C, + 0x3C, + 0x3B, + 0x3B, + 0x3A, + 0x3A, + 0x39, + 0x39, + 0x38, + 0x38, + 0x37, + 0x37, + 0x37, + 0x36, + 0x36, + 0x35, + 0x35, + 0x34, + 0x34, + 0x33, + 0x33, + 0x33, + 0x32, + 0x32, + 0x31, + 0x31, + 0x31, + 0x30, + 0x30, + 0x2F, + 0x2F, + 0x2F, + 0x2E, + 0x2E, + 0x2D, + 0x2D, + 0x2D, + 0x2C, + 0x2C, + 0x2B, + 0x2B, + 0x2B, + 0x2A, + 0x2A, + 0x2A, + 0x29, + 0x29, + 0x29, + 0x28, + 0x28, + 0x27, + 0x27, + 0x27, + 0x26, + 0x26, + 0x26, + 0x25, + 0x25, + 0x25, + 0x24, + 0x24, + 0x24, + 0x23, + 0x23, + 0x23, + 0x23, + 0x22, + 0x22, + 0x22, + 0x21, + 0x21, + 0x21, + 0x20, + 0x20, + 0x20, + 0x20, + 0x1F, + 0x1F, + 0x1F, + 0x1E, + 0x1E, + 0x1E, + 0x1E, + 0x1D, + 0x1D, + 0x1D, + 0x1C, + 0x1C, + 0x1C, + 0x1C, + 0x1B, + 0x1B, + 0x1B, + 0x1B, + 0x1A, + 0x1A, + 0x1A, + 0x1A, + 0x19, + 0x19, + 0x19, + 0x19, + 0x18, + 0x18, + 0x18, + 0x18, + 0x18, + 0x17, + 0x17, + 0x17, + 0x17, + 0x16, + 0x16, + 0x16, + 0x16, + 0x16, + 0x15, + 0x15, + 0x15, + 0x15, + 0x15, + 0x14, + 0x14, + 0x14, + 0x14, + 0x14, + 0x13, + 0x13, + 0x13, + 0x13, + 0x13, + 0x13, + 0x12, + 0x12, + 0x12, + 0x12, + 0x12, + 0x11, + 0x11, + 0x11, + 0x11, + 0x11, + 0x11, + 0x10, + 0x10, + 0x10, + 0x10, + 0x10, + 0x10, + 0x0F, + 0x0F, + 0x0F, + 0x0F, + 0x0F, + 0x0F, + 0x0F, + 0x0E, + 0x0E, + 0x0E, + 0x0E, + 0x0E, + 0x0E, + 0x0E, + 0x0D, + 0x0D, + 0x0D, + 0x0D, + 0x0D, + 0x0D, + 0x0D, + 0x0D, + 0x0C, + 0x0C, + 0x0C, + 0x0C, + 0x0C, + 0x0C, + 0x0C, + 0x0C, + 0x0B, + 0x0B, + 0x0B, + 0x0B, + 0x0B, + 0x0B, + 0x0B, + 0x0B, + 0x0B, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x09, + 0x09, + 0x09, + 0x09, + 0x09, + 0x09, + 0x09, + 0x09, + 0x09, + 0x09, + 0x08, + 0x08, + 0x08, + 0x08, + 0x08, + 0x08, + 0x08, + 0x08, + 0x08, + 0x08, + 0x08, + 0x08, + 0x08, + 0x07, + 0x07, + 0x07, + 0x07, + 0x07, + 0x07, + 0x07, + 0x07, + 0x07, + 0x07, + 0x07, + 0x07, + 0x07, + 0x06, + 0x06, + 0x06, + 0x06, + 0x06, + 0x06, + 0x06, + 0x06, + 0x06, + 0x06, + 0x06, + 0x06, + 0x06, + 0x06, + 0x06, + 0x06, + 0x05, + 0x05, + 0x05, + 0x05, + 0x05, + 0x05, + 0x05, + 0x05, + 0x05, + 0x05, + 0x05, + 0x05, + 0x05, + 0x05, + 0x05, + 0x05, + 0x05, + 0x05, + 0x05, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x03, + 0x03, + 0x03, + 0x03, + 0x03, + 0x03, + 0x03, + 0x03, + 0x03, + 0x03, + 0x03, + 0x03, + 0x03, + 0x03, + 0x03, + 0x03, + 0x03, + 0x03, + 0x03, + 0x03, + 0x03, + 0x03, + 0x03, + 0x03, + 0x03, + 0x03, + 0x03, + 0x03, + 0x03, + 0x03, + 0x03, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x02, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, }; const int32_t c_aiBandwidthAdjust48[MAX_BANDS_48] = { - 0,0,0,0,0,0,0,0,0,0,0,64,64,64,64,64, - 101,101,128,165,165,180,213, }; + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 64, + 64, + 64, + 64, + 64, + 101, + 101, + 128, + 165, + 165, + 180, + 213, +}; const int32_t c_aiAbsoluteThresh48[MAX_BANDS_48] = { - -1787,-1787,-1787,-1787,-1787,-1787,-1787,-1787,-1782,-1761,-1737,-1679,-1638,-1613,-1590,-1568, - -1516,-1459,-1395,-1289,-671,-409,-401, }; + -1787, + -1787, + -1787, + -1787, + -1787, + -1787, + -1787, + -1787, + -1782, + -1761, + -1737, + -1679, + -1638, + -1613, + -1590, + -1568, + -1516, + -1459, + -1395, + -1289, + -671, + -409, + -401, +}; #if PERCEPTUAL_MODEL_SLGAIN_SHIFT == 4 const int32_t c_aiDefaultTheta48[MAX_BANDS_48] = { - 7,7,6,5,5,4,4,4,4,4,4,4,4,4,4,4, - 4,4,4,4,4,4,4, + 7, + 7, + 6, + 5, + 5, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, }; #elif PERCEPTUAL_MODEL_SLGAIN_SHIFT == 8 const int32_t c_aiDefaultTheta48[MAX_BANDS_48] = { - 112,112,96,80,80,64,64,64,64,64,64,64,64,64,64,64, - 64,64,64,64,64,64,64, + 112, + 112, + 96, + 80, + 80, + 64, + 64, + 64, + 64, + 64, + 64, + 64, + 64, + 64, + 64, + 64, + 64, + 64, + 64, + 64, + 64, + 64, + 64, }; #endif -const int32_t c_aaiSpreadFunction48[MAX_BANDS_48*MAX_BANDS_48] = { - 0,-1561,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552, - -2552,-2552,-2552,-2552,-2552,-2552,-2552,-289,-4,-1234,-2295,-2552,-2552,-2552,-2552,-2552, - -2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-569,-229, - -8,-905,-1705,-2324,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552, - -2552,-2552,-2552,-2552,-2552,-789,-445,-173,-16,-656,-1271,-1765,-2172,-2520,-2552,-2552, - -2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-961,-616,-340,-136, - -28,-488,-976,-1382,-1729,-2032,-2305,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552, - -2552,-2552,-2552,-1088,-743,-465,-257,-148,-31,-371,-769,-1114,-1417,-1689,-2054,-2483, - -2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-1198,-852,-574,-364,-209,-148, - -42,-300,-635,-936,-1207,-1572,-2000,-2376,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552, - -2552,-1293,-948,-669,-458,-301,-183,-145,-56,-258,-547,-816,-1179,-1606,-1982,-2311, - -2552,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-1375,-1029,-750,-539,-381,-260,-180,-142, - -68,-231,-487,-846,-1272,-1647,-1976,-2261,-2552,-2552,-2552,-2552,-2552,-2552,-2552,-1444, - -1099,-820,-608,-449,-328,-233,-194,-138,-77,-213,-555,-978,-1352,-1681,-1966,-2268, - -2552,-2552,-2552,-2552,-2552,-2552,-1501,-1155,-876,-665,-505,-383,-287,-210,-193,-130, - -79,-298,-711,-1083,-1411,-1696,-1997,-2288,-2550,-2552,-2552,-2552,-2552,-1567,-1221,-942, - -730,-570,-448,-351,-272,-206,-189,-151,-72,-349,-713,-1039,-1324,-1625,-1915,-2177, - -2448,-2552,-2552,-2552,-1650,-1304,-1025,-813,-653,-530,-432,-352,-285,-227,-177,-163, - -69,-297,-613,-895,-1195,-1485,-1746,-2017,-2238,-2401,-2545,-1727,-1381,-1102,-890,-730, - -607,-509,-428,-360,-301,-249,-180,-153,-72,-257,-527,-824,-1112,-1373,-1643,-1865, - -2028,-2171,-1798,-1452,-1173,-960,-800,-677,-579,-498,-430,-370,-317,-246,-192,-145, - -76,-224,-505,-790,-1050,-1320,-1540,-1703,-1847,-1860,-1514,-1234,-1022,-862,-738,-640, - -559,-490,-430,-377,-306,-224,-197,-136,-81,-242,-515,-771,-1040,-1260,-1422,-1566, - -1923,-1577,-1297,-1085,-925,-801,-703,-621,-553,-492,-439,-367,-284,-213,-198,-144, - -83,-235,-479,-744,-963,-1125,-1268,-1986,-1640,-1360,-1148,-988,-864,-766,-684,-615, - -555,-501,-429,-345,-273,-211,-204,-146,-89,-216,-465,-680,-841,-984,-2043,-1697, - -1417,-1205,-1044,-921,-822,-741,-672,-611,-557,-485,-401,-328,-264,-211,-205,-140, - -93,-227,-430,-588,-729,-2104,-1758,-1479,-1266,-1106,-982,-884,-802,-733,-673,-619, - -546,-461,-388,-324,-269,-212,-211,-151,-100,-195,-336,-472,-2163,-1817,-1537,-1324, - -1164,-1040,-942,-860,-791,-731,-676,-604,-519,-445,-380,-325,-268,-226,-219,-147, - -114,-167,-280,-2203,-1857,-1577,-1365,-1205,-1081,-982,-901,-831,-771,-717,-644,-559, - -485,-420,-364,-306,-252,-239,-206,-132,-122,-163,-2224,-1878,-1598,-1386,-1225,-1102, - -1003,-921,-852,-792,-737,-665,-580,-505,-441,-385,-326,-271,-222,-224,-176,-121,-114, +const int32_t c_aaiSpreadFunction48[MAX_BANDS_48 * MAX_BANDS_48] = { + 0, + -1561, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -289, + -4, + -1234, + -2295, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -569, + -229, + -8, + -905, + -1705, + -2324, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -789, + -445, + -173, + -16, + -656, + -1271, + -1765, + -2172, + -2520, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -961, + -616, + -340, + -136, + -28, + -488, + -976, + -1382, + -1729, + -2032, + -2305, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -1088, + -743, + -465, + -257, + -148, + -31, + -371, + -769, + -1114, + -1417, + -1689, + -2054, + -2483, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -1198, + -852, + -574, + -364, + -209, + -148, + -42, + -300, + -635, + -936, + -1207, + -1572, + -2000, + -2376, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -1293, + -948, + -669, + -458, + -301, + -183, + -145, + -56, + -258, + -547, + -816, + -1179, + -1606, + -1982, + -2311, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -1375, + -1029, + -750, + -539, + -381, + -260, + -180, + -142, + -68, + -231, + -487, + -846, + -1272, + -1647, + -1976, + -2261, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -1444, + -1099, + -820, + -608, + -449, + -328, + -233, + -194, + -138, + -77, + -213, + -555, + -978, + -1352, + -1681, + -1966, + -2268, + -2552, + -2552, + -2552, + -2552, + -2552, + -2552, + -1501, + -1155, + -876, + -665, + -505, + -383, + -287, + -210, + -193, + -130, + -79, + -298, + -711, + -1083, + -1411, + -1696, + -1997, + -2288, + -2550, + -2552, + -2552, + -2552, + -2552, + -1567, + -1221, + -942, + -730, + -570, + -448, + -351, + -272, + -206, + -189, + -151, + -72, + -349, + -713, + -1039, + -1324, + -1625, + -1915, + -2177, + -2448, + -2552, + -2552, + -2552, + -1650, + -1304, + -1025, + -813, + -653, + -530, + -432, + -352, + -285, + -227, + -177, + -163, + -69, + -297, + -613, + -895, + -1195, + -1485, + -1746, + -2017, + -2238, + -2401, + -2545, + -1727, + -1381, + -1102, + -890, + -730, + -607, + -509, + -428, + -360, + -301, + -249, + -180, + -153, + -72, + -257, + -527, + -824, + -1112, + -1373, + -1643, + -1865, + -2028, + -2171, + -1798, + -1452, + -1173, + -960, + -800, + -677, + -579, + -498, + -430, + -370, + -317, + -246, + -192, + -145, + -76, + -224, + -505, + -790, + -1050, + -1320, + -1540, + -1703, + -1847, + -1860, + -1514, + -1234, + -1022, + -862, + -738, + -640, + -559, + -490, + -430, + -377, + -306, + -224, + -197, + -136, + -81, + -242, + -515, + -771, + -1040, + -1260, + -1422, + -1566, + -1923, + -1577, + -1297, + -1085, + -925, + -801, + -703, + -621, + -553, + -492, + -439, + -367, + -284, + -213, + -198, + -144, + -83, + -235, + -479, + -744, + -963, + -1125, + -1268, + -1986, + -1640, + -1360, + -1148, + -988, + -864, + -766, + -684, + -615, + -555, + -501, + -429, + -345, + -273, + -211, + -204, + -146, + -89, + -216, + -465, + -680, + -841, + -984, + -2043, + -1697, + -1417, + -1205, + -1044, + -921, + -822, + -741, + -672, + -611, + -557, + -485, + -401, + -328, + -264, + -211, + -205, + -140, + -93, + -227, + -430, + -588, + -729, + -2104, + -1758, + -1479, + -1266, + -1106, + -982, + -884, + -802, + -733, + -673, + -619, + -546, + -461, + -388, + -324, + -269, + -212, + -211, + -151, + -100, + -195, + -336, + -472, + -2163, + -1817, + -1537, + -1324, + -1164, + -1040, + -942, + -860, + -791, + -731, + -676, + -604, + -519, + -445, + -380, + -325, + -268, + -226, + -219, + -147, + -114, + -167, + -280, + -2203, + -1857, + -1577, + -1365, + -1205, + -1081, + -982, + -901, + -831, + -771, + -717, + -644, + -559, + -485, + -420, + -364, + -306, + -252, + -239, + -206, + -132, + -122, + -163, + -2224, + -1878, + -1598, + -1386, + -1225, + -1102, + -1003, + -921, + -852, + -792, + -737, + -665, + -580, + -505, + -441, + -385, + -326, + -271, + -222, + -224, + -176, + -121, + -114, }; #endif - diff --git a/lib_rend/ivas_lcld_tables.h b/lib_rend/ivas_lcld_tables.h index ad2a836f49..ee92fa46b9 100644 --- a/lib_rend/ivas_lcld_tables.h +++ b/lib_rend/ivas_lcld_tables.h @@ -53,7 +53,7 @@ extern "C" #define MAX_BANDS ( 23 ) #define MAX_BANDS_48 ( 23 ) - extern const int32_t c_aiBandwidths48[MAX_BANDS_48]; // move this +extern const int32_t c_aiBandwidths48[MAX_BANDS_48]; // move this #define ENV_MIN ( -64 ) @@ -105,20 +105,6 @@ extern "C" #define TON_QUOTA_ABS_THRESHOLD ( 8.0f ) #define TON_QUOTA_INC_THRESHOLD ( 4.0f ) -#define LOG_ADD_TABLE_LENGTH ( 512 ) - -#define PERCEPTUAL_MODEL_SCALE ( 64 ) - -#define PERCEPTUAL_MODEL_SCALE_SHIFT ( 6 ) - -#define PERCEPTUAL_MODEL_ALPHA_SCALE ( 614 ) - -#define PERCEPTUAL_MODEL_ALPHA_INV_SCALE ( 6827 ) - -#define PERCEPTUAL_MODEL_ALPHA_SHIFT ( 11 ) - -#define PERCEPTUAL_MODEL_SLGAIN_SHIFT ( 8 ) //(4) - #define MAX_BANDS_48 ( 23 ) //#define USE_DEMOD_TABLES @@ -149,12 +135,6 @@ extern "C" extern const int32_t c_aiHuffmanSize[ALLOC_TABLE_SIZE]; - extern const int32_t c_aiLogAddTable[LOG_ADD_TABLE_LENGTH]; - extern const int32_t c_aiBandwidthAdjust48[MAX_BANDS_48]; - extern const int32_t c_aiAbsoluteThresh48[MAX_BANDS_48]; - extern const int32_t c_aiDefaultTheta48[MAX_BANDS_48]; - extern const int32_t c_aaiSpreadFunction48[MAX_BANDS_48 * MAX_BANDS_48]; - #ifndef ROM_TO_RAM extern const uint32_t c_aauiCQMFHuffEnc1[16][2]; @@ -580,20 +560,6 @@ extern const uint32_t num_row_aauiCQMFHuff[2 * ALLOC_TABLE_SIZE]; extern const uint32_t c_aaiRMSEnvHuffDec[13][HUFF_DEC_TABLE_SIZE]; - void PerceptualModel( const int32_t iMaxQuantBands, - const int32_t *piRMSEnvelope, - int32_t *piExcitation, - int32_t *piSMR ); - - void PerceptualModelStereo( const int32_t iMaxQuantBands, - const int32_t *piMSFlags, - const int32_t *piRMSEnvelope0, - const int32_t *piRMSEnvelope1, - int32_t *piExcitation0, - int32_t *piExcitation1, - int32_t *piSMR0, - int32_t *piSMR1 ); - #ifdef __cplusplus } #endif -- GitLab From 2e253a1ed0296641a6ab60be5d1106e1aedc2456 Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Thu, 4 May 2023 18:40:34 +0530 Subject: [PATCH 25/31] clang format fix --- lib_rend/ivas_CQMFEncoder.c | 24 ++++++++-------- lib_rend/ivas_PerceptualModel.h | 50 ++++++++++++++++----------------- lib_rend/ivas_lcld_tables.h | 2 +- 3 files changed, 38 insertions(+), 38 deletions(-) diff --git a/lib_rend/ivas_CQMFEncoder.c b/lib_rend/ivas_CQMFEncoder.c index 82bcf6879a..755fb670f4 100644 --- a/lib_rend/ivas_CQMFEncoder.c +++ b/lib_rend/ivas_CQMFEncoder.c @@ -1079,12 +1079,12 @@ static void QuantizeSpectrumDPCM_Opt( const int32_t iNumGroups, fVal = ppfReal[iBlockOffset][iFBOffset] + fPredReal; if ( fVal > 0.0 ) { - iQuantValue = ( int32_t )( fSCFGain * fVal + 0.5 ); + iQuantValue = (int32_t) ( fSCFGain * fVal + 0.5 ); ppiSignReal[iBlockOffset][iFBOffset] = 0; } else { - iQuantValue = ( int32_t )( -fSCFGain * fVal + 0.5 ); + iQuantValue = (int32_t) ( -fSCFGain * fVal + 0.5 ); ppiSignReal[iBlockOffset][iFBOffset] = 1; } iQuantValue = ( iQuantValue < iMaxQuantVal ) ? iQuantValue : iMaxQuantVal; @@ -1094,12 +1094,12 @@ static void QuantizeSpectrumDPCM_Opt( const int32_t iNumGroups, fVal = ppfImag[iBlockOffset][iFBOffset] + fPredImag; if ( fVal > 0.0 ) { - iQuantValue = ( int32_t )( fSCFGain * fVal + 0.5 ); + iQuantValue = (int32_t) ( fSCFGain * fVal + 0.5 ); ppiSignImag[iBlockOffset][iFBOffset] = 0; } else { - iQuantValue = ( int32_t )( -fSCFGain * fVal + 0.5 ); + iQuantValue = (int32_t) ( -fSCFGain * fVal + 0.5 ); ppiSignImag[iBlockOffset][iFBOffset] = 1; } @@ -1137,12 +1137,12 @@ static void QuantizeSpectrumDPCM_Opt( const int32_t iNumGroups, fVal = ppfReal[iBlockOffset][iFBOffset]; if ( fVal > 0.0 ) { - iQuantValue = ( int32_t )( fSCFGain * fVal + 0.5 ); + iQuantValue = (int32_t) ( fSCFGain * fVal + 0.5 ); ppiSignReal[iBlockOffset][iFBOffset] = 0; } else { - iQuantValue = ( int32_t )( -fSCFGain * fVal + 0.5 ); + iQuantValue = (int32_t) ( -fSCFGain * fVal + 0.5 ); ppiSignReal[iBlockOffset][iFBOffset] = 1; } iQuantValue = ( iQuantValue < iMaxQuantVal ) ? iQuantValue : iMaxQuantVal; @@ -1152,12 +1152,12 @@ static void QuantizeSpectrumDPCM_Opt( const int32_t iNumGroups, fVal = ppfImag[iBlockOffset][iFBOffset]; if ( fVal > 0.0 ) { - iQuantValue = ( int32_t )( fSCFGain * fVal + 0.5 ); + iQuantValue = (int32_t) ( fSCFGain * fVal + 0.5 ); ppiSignImag[iBlockOffset][iFBOffset] = 0; } else { - iQuantValue = ( int32_t )( -fSCFGain * fVal + 0.5 ); + iQuantValue = (int32_t) ( -fSCFGain * fVal + 0.5 ); ppiSignImag[iBlockOffset][iFBOffset] = 1; } iQuantValue = ( iQuantValue < iMaxQuantVal ) ? iQuantValue : iMaxQuantVal; @@ -1239,12 +1239,12 @@ static void QuantizeSpectrumDPCM( const int32_t iNumGroups, fVal = ppfReal[iBlockOffset][iFBOffset] + fPredReal; if ( fVal > 0.0 ) { - iQuantValue = ( int32_t )( fSCFGain * fVal + 0.5 ); + iQuantValue = (int32_t) ( fSCFGain * fVal + 0.5 ); ppiSignReal[iBlockOffset][iFBOffset] = 0; } else { - iQuantValue = ( int32_t )( -fSCFGain * fVal + 0.5 ); + iQuantValue = (int32_t) ( -fSCFGain * fVal + 0.5 ); ppiSignReal[iBlockOffset][iFBOffset] = 1; } #ifdef _DEBUG_VERBOSE @@ -1262,12 +1262,12 @@ static void QuantizeSpectrumDPCM( const int32_t iNumGroups, fVal = ppfImag[iBlockOffset][iFBOffset] + fPredImag; if ( fVal > 0.0 ) { - iQuantValue = ( int32_t )( fSCFGain * fVal + 0.5 ); + iQuantValue = (int32_t) ( fSCFGain * fVal + 0.5 ); ppiSignImag[iBlockOffset][iFBOffset] = 0; } else { - iQuantValue = ( int32_t )( -fSCFGain * fVal + 0.5 ); + iQuantValue = (int32_t) ( -fSCFGain * fVal + 0.5 ); ppiSignImag[iBlockOffset][iFBOffset] = 1; } diff --git a/lib_rend/ivas_PerceptualModel.h b/lib_rend/ivas_PerceptualModel.h index fdd1027623..269bfa4a3f 100644 --- a/lib_rend/ivas_PerceptualModel.h +++ b/lib_rend/ivas_PerceptualModel.h @@ -39,34 +39,34 @@ extern "C" #endif #include -#define LOG_ADD_TABLE_LENGTH (512) -#define PERCEPTUAL_MODEL_SCALE (64) -#define PERCEPTUAL_MODEL_SCALE_SHIFT (6) -#define PERCEPTUAL_MODEL_ALPHA_SCALE (614) -#define PERCEPTUAL_MODEL_ALPHA_INV_SCALE (6827) -#define PERCEPTUAL_MODEL_ALPHA_SHIFT (11) -#define PERCEPTUAL_MODEL_SLGAIN_SHIFT (8)//(4) -#define MAX_BANDS_48 ( 23 ) +#define LOG_ADD_TABLE_LENGTH ( 512 ) +#define PERCEPTUAL_MODEL_SCALE ( 64 ) +#define PERCEPTUAL_MODEL_SCALE_SHIFT ( 6 ) +#define PERCEPTUAL_MODEL_ALPHA_SCALE ( 614 ) +#define PERCEPTUAL_MODEL_ALPHA_INV_SCALE ( 6827 ) +#define PERCEPTUAL_MODEL_ALPHA_SHIFT ( 11 ) +#define PERCEPTUAL_MODEL_SLGAIN_SHIFT ( 8 ) //(4) +#define MAX_BANDS_48 ( 23 ) - extern const int32_t c_aiLogAddTable[LOG_ADD_TABLE_LENGTH]; - extern const int32_t c_aiBandwidthAdjust48[MAX_BANDS_48]; - extern const int32_t c_aiAbsoluteThresh48[MAX_BANDS_48]; - extern const int32_t c_aiDefaultTheta48[MAX_BANDS_48]; - extern const int32_t c_aaiSpreadFunction48[MAX_BANDS_48 * MAX_BANDS_48]; + extern const int32_t c_aiLogAddTable[LOG_ADD_TABLE_LENGTH]; + extern const int32_t c_aiBandwidthAdjust48[MAX_BANDS_48]; + extern const int32_t c_aiAbsoluteThresh48[MAX_BANDS_48]; + extern const int32_t c_aiDefaultTheta48[MAX_BANDS_48]; + extern const int32_t c_aaiSpreadFunction48[MAX_BANDS_48 * MAX_BANDS_48]; - extern void PerceptualModel(const int32_t iMaxQuantBands, - const int32_t *piRMSEnvelope, - int32_t *piExcitation, - int32_t *piSMR); + extern void PerceptualModel( const int32_t iMaxQuantBands, + const int32_t *piRMSEnvelope, + int32_t *piExcitation, + int32_t *piSMR ); - extern void PerceptualModelStereo(const int32_t iMaxQuantBands, - const int32_t *piMSFlags, - const int32_t *piRMSEnvelope0, - const int32_t *piRMSEnvelope1, - int32_t *piExcitation0, - int32_t *piExcitation1, - int32_t *piSMR0, - int32_t *piSMR1); + extern void PerceptualModelStereo( const int32_t iMaxQuantBands, + const int32_t *piMSFlags, + const int32_t *piRMSEnvelope0, + const int32_t *piRMSEnvelope1, + int32_t *piExcitation0, + int32_t *piExcitation1, + int32_t *piSMR0, + int32_t *piSMR1 ); #ifdef __cplusplus } diff --git a/lib_rend/ivas_lcld_tables.h b/lib_rend/ivas_lcld_tables.h index ee92fa46b9..b50edae637 100644 --- a/lib_rend/ivas_lcld_tables.h +++ b/lib_rend/ivas_lcld_tables.h @@ -53,7 +53,7 @@ extern "C" #define MAX_BANDS ( 23 ) #define MAX_BANDS_48 ( 23 ) -extern const int32_t c_aiBandwidths48[MAX_BANDS_48]; // move this + extern const int32_t c_aiBandwidths48[MAX_BANDS_48]; // move this #define ENV_MIN ( -64 ) -- GitLab From 18f88b6aa439c1d88f06cd5c5b36a80eec10c74c Mon Sep 17 00:00:00 2001 From: rtyag Date: Fri, 5 May 2023 16:48:15 +1000 Subject: [PATCH 26/31] minor clean up of buffer lenght macros for various formats --- lib_rend/lib_rend.c | 53 ++++++++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 1f1be0b7b0..650c10206b 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -55,7 +55,14 @@ /* Maximum buffer length (total) in samples. */ #ifdef SPLIT_REND_WITH_HEAD_ROT +#ifdef REND_STATIC_MEM_OPT +#define MAX_BUFFER_LENGTH ( MAX_BUFFER_LENGTH_PER_CHANNEL * MAX_INPUT_CHANNELS ) +#define MAX_CLDFB_BUFFER_LENGTH ( MAX_CLDFB_BUFFER_LENGTH_PER_CHANNEL * MAX_INPUT_CHANNELS ) +#define MAX_BIN_BUFFER_LENGTH ( MAX_BUFFER_LENGTH_PER_CHANNEL * BINAURAL_CHANNELS ) +#else #define MAX_BUFFER_LENGTH ( MAX_CLDFB_BUFFER_LENGTH_PER_CHANNEL * MAX_INPUT_CHANNELS ) +#endif + #else #define MAX_BUFFER_LENGTH ( MAX_BUFFER_LENGTH_PER_CHANNEL * MAX_INPUT_CHANNELS ) #endif @@ -2543,7 +2550,7 @@ static ivas_error setRendInputActiveSplitPostRend( outConfig = *rendCtx.pOutConfig; #ifdef REND_STATIC_MEM_OPT - if ( ( error = allocateInputBaseBufferData( &inputSplitPostRend->bufferData, MAX_BUFFER_LENGTH_PER_CHANNEL * BINAURAL_CHANNELS ) ) != IVAS_ERR_OK ) + if ( ( error = allocateInputBaseBufferData( &inputSplitPostRend->bufferData, MAX_BIN_BUFFER_LENGTH ) ) != IVAS_ERR_OK ) { return error; } @@ -2551,7 +2558,7 @@ static ivas_error setRendInputActiveSplitPostRend( initRendInputBase( &inputSplitPostRend->base, inConfig, id, rendCtx #ifdef REND_STATIC_MEM_OPT , - inputSplitPostRend->bufferData, MAX_BUFFER_LENGTH_PER_CHANNEL * BINAURAL_CHANNELS + inputSplitPostRend->bufferData, MAX_BIN_BUFFER_LENGTH #endif ); @@ -2588,7 +2595,7 @@ static ivas_error setRendInputActiveSba( } #ifdef REND_STATIC_MEM_OPT - if ( ( error = allocateInputBaseBufferData( &inputSba->bufferData, MAX_BUFFER_LENGTH ) ) != IVAS_ERR_OK ) + if ( ( error = allocateInputBaseBufferData( &inputSba->bufferData, MAX_CLDFB_BUFFER_LENGTH ) ) != IVAS_ERR_OK ) { return error; } @@ -2596,7 +2603,7 @@ static ivas_error setRendInputActiveSba( initRendInputBase( &inputSba->base, inConfig, id, rendCtx #ifdef REND_STATIC_MEM_OPT , - inputSba->bufferData, MAX_BUFFER_LENGTH + inputSba->bufferData, MAX_CLDFB_BUFFER_LENGTH #endif ); setZeroPanMatrix( inputSba->hoaDecMtx ); @@ -4099,13 +4106,15 @@ ivas_error IVAS_REND_GetDelay( #ifdef SPLIT_REND_WITH_HEAD_ROT if ( hIvasRend->inputsSba[i].splitRendWrapper.hBinHrSplitPreRend != NULL ) { - if ( hIvasRend->hRendererConfig->renderer_type_override != RENDER_TYPE_OVERRIDE_FASTCONV ) +#if ( defined DEBUGGING ) || ( defined SPLIT_REND_WITH_HEAD_ROT ) + if ( hIvasRend->hRendererConfig->renderer_type_override == RENDER_TYPE_OVERRIDE_FASTCONV ) { - latency_ns = ( hIvasRend->inputsSba[i].crendWrapper != NULL ) ? hIvasRend->inputsSba[i].crendWrapper->binaural_latency_ns : 0; + latency_ns = hIvasRend->inputsSba[i].cldfbRendWrapper.binaural_latency_ns; } else +#endif { - latency_ns = hIvasRend->inputsSba[i].cldfbRendWrapper.binaural_latency_ns; + latency_ns = ( hIvasRend->inputsSba[i].crendWrapper != NULL ) ? hIvasRend->inputsSba[i].crendWrapper->binaural_latency_ns : 0; } max_latency_ns = max( max_latency_ns, latency_ns ); } @@ -6102,21 +6111,8 @@ static ivas_error renderSbaToSplitBinaural( &sbaInput->splitRendWrapper.multiBinPoseData, sbaInput->base.ctx.pHeadRotData->sr_pose_pred_axis ); -#ifdef SPLIT_REND_WITH_HEAD_ROT - if ( sbaInput->base.ctx.hhRendererConfig[0]->renderer_type_override != RENDER_TYPE_OVERRIDE_FASTCONV ) - { - renderSbaToMultiBinaural( - sbaInput, - outConfig, - tmpCrendBuffer ); - max_band = (int16_t) ( ( BINAURAL_MAXBANDS * ( *sbaInput->base.ctx.pOutSampleRate ) ) / 48000 ); - if ( outConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) - { - accumulate2dArrayToBuffer( tmpCrendBuffer, &outAudio ); - } - } - else -#endif +#if ( defined DEBUGGING ) || ( defined SPLIT_REND_WITH_HEAD_ROT ) + if ( sbaInput->base.ctx.hhRendererConfig[0]->renderer_type_override == RENDER_TYPE_OVERRIDE_FASTCONV ) { copyBufferToCLDFBarray( sbaInput->base.inputBuffer, Cldfb_RealBuffer, Cldfb_ImagBuffer ); @@ -6131,6 +6127,19 @@ static ivas_error renderSbaToSplitBinaural( low_res_pre_rend_rot ); max_band = sbaInput->cldfbRendWrapper.hCldfbRend->max_band; } + else +#endif + { + renderSbaToMultiBinaural( + sbaInput, + outConfig, + tmpCrendBuffer ); + max_band = (int16_t) ( ( BINAURAL_MAXBANDS * ( *sbaInput->base.ctx.pOutSampleRate ) ) / 48000 ); + if ( outConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) + { + accumulate2dArrayToBuffer( tmpCrendBuffer, &outAudio ); + } + } /*SPLIT pre rendering MD and CLDFB coding*/ convertBitsBufferToInternalBitsBuff( *hBits, &bits ); -- GitLab From 0ec0211198b706b3f26e4586974295c5c104afcf Mon Sep 17 00:00:00 2001 From: rtyag Date: Mon, 8 May 2023 16:58:22 +1000 Subject: [PATCH 27/31] fix for clang memory sanitizer --- lib_com/options.h | 1 + lib_rend/ivas_CQMFDecoder.c | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/lib_com/options.h b/lib_com/options.h index dec3063de3..eadd9a164c 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -207,6 +207,7 @@ #define SBA_CREND_ROT_OPT #define ROM_TO_RAM /*switch to convert CQMF decoder tables to RAM*/ +#define SPLIT_REND_CLANG_SAN_FIX #endif diff --git a/lib_rend/ivas_CQMFDecoder.c b/lib_rend/ivas_CQMFDecoder.c index 0c152e95e3..b5fe0b38ea 100644 --- a/lib_rend/ivas_CQMFDecoder.c +++ b/lib_rend/ivas_CQMFDecoder.c @@ -1623,18 +1623,39 @@ ReadCQMFData( const int32_t iNumGroups, const int32_t *piGroupLengths, const int ppiSignReal[iBlockOffest][iFBOffset] = ivas_split_rend_bitstream_read_int32( pBits, 1 ); iBitsRead += 1; } +#ifdef SPLIT_REND_CLANG_SAN_FIX + else + { + ppiSignReal[iBlockOffest][iFBOffset] = 0; + } +#endif if ( iQuantValue2 > 0 ) { ppiSignImag[iBlockOffest][iFBOffset] = ivas_split_rend_bitstream_read_int32( pBits, 1 ); iBitsRead += 1; } +#ifdef SPLIT_REND_CLANG_SAN_FIX + else + { + ppiSignImag[iBlockOffest][iFBOffset] = 0; + } +#endif iFBOffset++; } } else { +#ifdef SPLIT_REND_CLANG_SAN_FIX + for ( m = 0; m < piBandwidths[b]; m++ ) + { + ppiSignReal[iBlockOffest][iFBOffset] = 0; + ppiSignImag[iBlockOffest][iFBOffset] = 0; + iFBOffset++; + } +#else iFBOffset += piBandwidths[b]; +#endif } } -- GitLab From 775112f019e64dc6414fd6561382f5a9a4d1b5ba Mon Sep 17 00:00:00 2001 From: rtyag Date: Tue, 9 May 2023 19:59:13 +1000 Subject: [PATCH 28/31] clang address sanitizer fix --- apps/renderer.c | 8 ++++++++ lib_com/ivas_cnst.h | 5 ++++- lib_com/options.h | 2 +- lib_dec/ivas_binRenderer_internal.c | 3 ++- lib_rend/lib_rend.c | 5 +++-- lib_util/split_render_file_read_write.c | 6 ++++++ 6 files changed, 24 insertions(+), 5 deletions(-) diff --git a/apps/renderer.c b/apps/renderer.c index 9f9f6f1ea8..64d87d0092 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -66,6 +66,10 @@ #define RENDERER_MAX_METADATA_LENGTH 8192 #define RENDERER_MAX_METADATA_LINE_LENGTH 1024 +#ifdef SPLIT_REND_CLDFB_HUFF_SAN_FIX +#define SPLIT_REND_BITS_BUFF_SIZE ( ( ( ( (int32_t) SPLIT_REND_MAX_BRATE / FRAMES_PER_SEC ) + 7 ) >> 3 ) + SPLIT_REND_ADDITIONAL_BYTES_TO_READ ) +#endif + #if !defined( DEBUGGING ) && !defined( WMOPS ) static #endif @@ -1215,8 +1219,12 @@ int main( #ifdef SPLIT_REND_WITH_HEAD_ROT if ( is_split_pre_rend_mode( &args ) || is_split_post_rend_mode( &args ) ) { +#ifdef SPLIT_REND_CLDFB_HUFF_SAN_FIX + bitsBufferSize = SPLIT_REND_BITS_BUFF_SIZE; +#else bitsBufferSize = (int32_t) SPLIT_REND_MAX_BRATE / FRAMES_PER_SEC; bitsBufferSize = ( bitsBufferSize + 7 ) >> 3; +#endif } else { diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index 4256e41afb..2bcf082064 100644 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -1728,8 +1728,11 @@ typedef enum #define SPLIT_REND_384k 384000 #define SPLIT_REND_512k 512000 #define SPLIT_REND_768k 768000 -#define SPLIT_REND_MAX_BRATE SPLIT_REND_768k +#define SPLIT_REND_MAX_BRATE SPLIT_REND_768k +#ifdef SPLIT_REND_CLDFB_HUFF_SAN_FIX +#define SPLIT_REND_ADDITIONAL_BYTES_TO_READ ( 1 ) +#endif /*----------------------------------------------------------------------------------* * Limiter constants diff --git a/lib_com/options.h b/lib_com/options.h index eadd9a164c..917becccbd 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -208,7 +208,7 @@ #define ROM_TO_RAM /*switch to convert CQMF decoder tables to RAM*/ #define SPLIT_REND_CLANG_SAN_FIX - +#define SPLIT_REND_CLDFB_HUFF_SAN_FIX #endif /* ################## End DEVELOPMENT switches ######################### */ diff --git a/lib_dec/ivas_binRenderer_internal.c b/lib_dec/ivas_binRenderer_internal.c index c7cf76137a..d1942d94f5 100644 --- a/lib_dec/ivas_binRenderer_internal.c +++ b/lib_dec/ivas_binRenderer_internal.c @@ -1520,7 +1520,7 @@ void ivas_rend_CldfbMultiBinRendProcess( for ( pose_idx = 0; pose_idx < hCldfbRend->numPoses; pose_idx++ ) - + { for ( slot_idx = 0; slot_idx < MAX_PARAM_SPATIAL_SUBFRAMES; slot_idx++ ) { idx = sf_idx * MAX_PARAM_SPATIAL_SUBFRAMES + slot_idx; @@ -1530,6 +1530,7 @@ void ivas_rend_CldfbMultiBinRendProcess( mvr2r( &Cldfb_ImagBuffer_Binaural[pose_idx][ch_idx][slot_idx][0], &Cldfb_Out_Imag[pose_idx][ch_idx][idx][0], hCldfbRend->max_band ); } } + } } return; diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 650c10206b..80d578188f 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -6087,8 +6087,6 @@ static ivas_error renderSbaToSplitBinaural( { float tmpCrendBuffer[MAX_OUTPUT_CHANNELS][L_FRAME48k]; ivas_error error; - float Cldfb_RealBuffer[MAX_OUTPUT_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; - float Cldfb_ImagBuffer[MAX_OUTPUT_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG float Cldfb_RealBuffer_Binaural[MAX_HEAD_ROT_POSES + 1][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; float Cldfb_ImagBuffer_Binaural[MAX_HEAD_ROT_POSES + 1][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; @@ -6114,6 +6112,9 @@ static ivas_error renderSbaToSplitBinaural( #if ( defined DEBUGGING ) || ( defined SPLIT_REND_WITH_HEAD_ROT ) if ( sbaInput->base.ctx.hhRendererConfig[0]->renderer_type_override == RENDER_TYPE_OVERRIDE_FASTCONV ) { + float Cldfb_RealBuffer[MAX_OUTPUT_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer[MAX_OUTPUT_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + copyBufferToCLDFBarray( sbaInput->base.inputBuffer, Cldfb_RealBuffer, Cldfb_ImagBuffer ); ivas_rend_CldfbMultiBinRendProcess( diff --git a/lib_util/split_render_file_read_write.c b/lib_util/split_render_file_read_write.c index 8171354fe4..19c0544b16 100644 --- a/lib_util/split_render_file_read_write.c +++ b/lib_util/split_render_file_read_write.c @@ -235,6 +235,12 @@ ivas_error split_rend_read_bits_from_file( SplitFileReadWrite *hSplitRendFileRea { return IVAS_ERR_FAILED_FILE_READ; } +#ifdef SPLIT_REND_CLDFB_HUFF_SAN_FIX + for ( i = 0; i < SPLIT_REND_ADDITIONAL_BYTES_TO_READ; i++ ) + { + bits[num_bytes + i] = 0; + } +#endif *bits_read = 0; *bits_written = bit_len; -- GitLab From 206e675b7ce2443fd355fc16385295c469fbe073 Mon Sep 17 00:00:00 2001 From: rtyag Date: Wed, 10 May 2023 23:52:27 +1000 Subject: [PATCH 29/31] stack optimization with default rend options --- lib_com/options.h | 1 + lib_rend/lib_rend.c | 51 +++++++++++++++++++++++++++++++++++++++------ 2 files changed, 46 insertions(+), 6 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 917becccbd..5c06d98c06 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -209,6 +209,7 @@ #define ROM_TO_RAM /*switch to convert CQMF decoder tables to RAM*/ #define SPLIT_REND_CLANG_SAN_FIX #define SPLIT_REND_CLDFB_HUFF_SAN_FIX +#define SPLIT_REND_STACK_OPT #endif /* ################## End DEVELOPMENT switches ######################### */ diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 80d578188f..250445010c 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -6077,6 +6077,30 @@ static ivas_error renderSbaToMultiBinaural( } #endif +#ifdef SPLIT_REND_STACK_OPT +static ivas_error renderSbaToMultiBinauralCldfb( input_sba *sbaInput, + float Cldfb_Out_Real[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + float Cldfb_Out_Imag[][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], + const int16_t low_res_pre_rend_rot ) +{ + float Cldfb_RealBuffer[MAX_OUTPUT_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer[MAX_OUTPUT_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + + copyBufferToCLDFBarray( sbaInput->base.inputBuffer, Cldfb_RealBuffer, Cldfb_ImagBuffer ); + + ivas_rend_CldfbMultiBinRendProcess( + sbaInput->cldfbRendWrapper.hCldfbRend, + sbaInput->base.ctx.pHeadRotData, + &sbaInput->splitRendWrapper.multiBinPoseData, + Cldfb_RealBuffer, + Cldfb_ImagBuffer, + Cldfb_Out_Real, + Cldfb_Out_Imag, + low_res_pre_rend_rot ); + return IVAS_ERR_OK; +} +#endif + static ivas_error renderSbaToSplitBinaural( input_sba *sbaInput, #ifdef SPLIT_REND_WITH_HEAD_ROT @@ -6112,6 +6136,13 @@ static ivas_error renderSbaToSplitBinaural( #if ( defined DEBUGGING ) || ( defined SPLIT_REND_WITH_HEAD_ROT ) if ( sbaInput->base.ctx.hhRendererConfig[0]->renderer_type_override == RENDER_TYPE_OVERRIDE_FASTCONV ) { + +#ifdef SPLIT_REND_STACK_OPT + renderSbaToMultiBinauralCldfb( sbaInput, + Cldfb_RealBuffer_Binaural, + Cldfb_ImagBuffer_Binaural, + low_res_pre_rend_rot ); +#else float Cldfb_RealBuffer[MAX_OUTPUT_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; float Cldfb_ImagBuffer[MAX_OUTPUT_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; @@ -6126,6 +6157,7 @@ static ivas_error renderSbaToSplitBinaural( Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, low_res_pre_rend_rot ); +#endif max_band = sbaInput->cldfbRendWrapper.hCldfbRend->max_band; } else @@ -6164,13 +6196,12 @@ static ivas_error renderSbaToSplitBinaural( } #endif -static ivas_error renderSbaToBinaural( +static ivas_error +renderSbaToBinaural( input_sba *sbaInput, const IVAS_REND_AudioConfig outConfig, IVAS_REND_AudioBuffer outAudio ) { - float tmpCrendBuffer[MAX_OUTPUT_CHANNELS][L_FRAME48k]; - ivas_error error; IVAS_REND_AudioBuffer tmpRotBuffer; @@ -6179,10 +6210,16 @@ static ivas_error renderSbaToBinaural( #if defined DEBUGGING && defined SPLIT_REND_WITH_HEAD_ROT if ( sbaInput->base.ctx.hhRendererConfig[0]->renderer_type_override == RENDER_TYPE_OVERRIDE_FASTCONV ) { - float Cldfb_RealBuffer[MAX_OUTPUT_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; - float Cldfb_ImagBuffer[MAX_OUTPUT_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; float Cldfb_RealBuffer_Binaural[1][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; float Cldfb_ImagBuffer_Binaural[1][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; +#ifdef SPLIT_REND_STACK_OPT + renderSbaToMultiBinauralCldfb( sbaInput, + Cldfb_RealBuffer_Binaural, + Cldfb_ImagBuffer_Binaural, + 0 ); +#else + float Cldfb_RealBuffer[MAX_OUTPUT_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer[MAX_OUTPUT_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; copyBufferToCLDFBarray( sbaInput->base.inputBuffer, Cldfb_RealBuffer, Cldfb_ImagBuffer ); @@ -6195,12 +6232,14 @@ static ivas_error renderSbaToBinaural( Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, 0 ); - +#endif accumulateCLDFBArrayToBuffer( Cldfb_RealBuffer_Binaural[0], Cldfb_ImagBuffer_Binaural[0], &outAudio ); } else #endif { + float tmpCrendBuffer[MAX_OUTPUT_CHANNELS][L_FRAME48k]; + tmpRotBuffer = sbaInput->base.inputBuffer; tmpRotBuffer.data = malloc( tmpRotBuffer.config.numSamplesPerChannel * tmpRotBuffer.config.numChannels * sizeof( float ) ); -- GitLab From 03186a11dd471e24ed24382d264b45e2862ea90a Mon Sep 17 00:00:00 2001 From: rtyag Date: Fri, 19 May 2023 17:45:05 +1000 Subject: [PATCH 30/31] adding PCM output support to ivas SBA decoder in split rend mode --- apps/decoder.c | 71 +++++++++++++++++++++++++---- lib_dec/ivas_binRenderer_internal.c | 5 +- lib_dec/ivas_dec.c | 10 ++-- lib_dec/ivas_dirac_dec.c | 3 +- lib_dec/ivas_init_dec.c | 12 +++-- lib_dec/ivas_output_config.c | 6 +-- lib_dec/ivas_sba_dec.c | 8 ++-- lib_dec/ivas_spar_decoder.c | 2 +- lib_dec/lib_dec.c | 10 +++- lib_dec/lib_dec.h | 1 + lib_rend/ivas_output_init.c | 2 + lib_rend/ivas_splitRendererPre.c | 2 +- lib_rend/lib_rend.c | 2 +- 13 files changed, 105 insertions(+), 29 deletions(-) diff --git a/apps/decoder.c b/apps/decoder.c index 575a696452..0d9ce5fd0b 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -117,7 +117,9 @@ typedef struct float no_diegetic_pan; bool renderConfigEnabled; char *renderConfigFilename; - +#ifdef SPLIT_REND_WITH_HEAD_ROT + char *outputMdFilename; +#endif #ifdef DEBUGGING IVAS_DEC_FORCED_REND_MODE forcedRendMode; #ifdef DEBUG_FOA_AGC @@ -267,7 +269,7 @@ int main( /* sanity check */ if ( arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL && arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL_ROOM #ifdef SPLIT_REND_WITH_HEAD_ROT - && arg.outputFormat != IVAS_DEC_OUTPUT_SPLIT_BINAURAL_CLDFB + && arg.outputFormat != IVAS_DEC_OUTPUT_SPLIT_BINAURAL_CLDFB && arg.outputFormat != IVAS_DEC_OUTPUT_SPLIT_BINAURAL_PCM #endif ) { @@ -358,7 +360,7 @@ int main( /* sanity check */ if ( arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL && arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL_ROOM #ifdef SPLIT_REND_WITH_HEAD_ROT - && arg.outputFormat != IVAS_DEC_OUTPUT_SPLIT_BINAURAL_CLDFB + && arg.outputFormat != IVAS_DEC_OUTPUT_SPLIT_BINAURAL_CLDFB && arg.outputFormat != IVAS_DEC_OUTPUT_SPLIT_BINAURAL_PCM #endif ) { @@ -377,7 +379,7 @@ int main( * Configure the decoder *------------------------------------------------------------------------------------------*/ #ifdef SPLIT_REND_WITH_HEAD_ROT - if ( arg.outputFormat == IVAS_DEC_OUTPUT_SPLIT_BINAURAL_CLDFB ) + if ( arg.outputFormat == IVAS_DEC_OUTPUT_SPLIT_BINAURAL_CLDFB || arg.outputFormat == IVAS_DEC_OUTPUT_SPLIT_BINAURAL_PCM ) { arg.enableHeadRotation = true; } @@ -489,7 +491,10 @@ int main( /* sanity check */ #ifdef SPLIT_REND_WITH_HEAD_ROT - if ( ( arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL_ROOM ) && ( arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL ) && ( arg.outputFormat != IVAS_DEC_OUTPUT_SPLIT_BINAURAL_CLDFB ) ) + if ( ( arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL_ROOM ) && + ( arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL ) && + ( arg.outputFormat != IVAS_DEC_OUTPUT_SPLIT_BINAURAL_CLDFB ) && + ( arg.outputFormat != IVAS_DEC_OUTPUT_SPLIT_BINAURAL_PCM ) ) { fprintf( stderr, "\nExternal Renderer Config is supported only when BINAURAL_ROOM is used as output OR when Split rendering mode is enabled. Exiting. \n" ); exit( -1 ); @@ -757,10 +762,14 @@ static IVAS_DEC_AUDIO_CONFIG cmdline2config( output_config = IVAS_DEC_OUTPUT_BINAURAL; } #ifdef SPLIT_REND_WITH_HEAD_ROT - else if ( strcmp( argv_to_upper, "SPLIT_BINAURAL" ) == 0 ) + else if ( strcmp( argv_to_upper, "BINAURAL_SPLIT_CLDFB" ) == 0 ) { output_config = IVAS_DEC_OUTPUT_SPLIT_BINAURAL_CLDFB; } + else if ( strcmp( argv_to_upper, "BINAURAL_SPLIT_PCM" ) == 0 ) + { + output_config = IVAS_DEC_OUTPUT_SPLIT_BINAURAL_PCM; + } #endif else if ( strcmp( argv_to_upper, "BINAURAL_ROOM" ) == 0 ) { @@ -830,6 +839,10 @@ static bool parseCmdlIVAS_dec( arg->renderConfigEnabled = false; arg->renderConfigFilename = NULL; +#ifdef SPLIT_REND_WITH_HEAD_ROT + arg->outputMdFilename = NULL; +#endif + arg->inputFormat = IVAS_DEC_INPUT_FORMAT_G192; arg->no_diegetic_pan = 0.f; @@ -1057,6 +1070,19 @@ static bool parseCmdlIVAS_dec( } i += 2; } +#ifdef SPLIT_REND_WITH_HEAD_ROT + else if ( strcmp( argv_to_upper, "-OM" ) == 0 ) + { + arg->outputMdFilename = argv[i + 1]; + if ( arg->outputMdFilename[0] == '\0' ) + { + fprintf( stderr, "Error: output metadata file path not specified\n\n" ); + usage_dec(); + return false; + } + i += 2; + } +#endif else if ( strcmp( argv_to_upper, "-NO_DIEGETIC_PAN" ) == 0 ) { i++; @@ -1197,7 +1223,7 @@ static void usage_dec( void ) fprintf( stdout, "---------------------\n" ); #ifdef SPLIT_REND_WITH_HEAD_ROT fprintf( stdout, "OutputConf : Output configuration: MONO, STEREO, 5_1, 7_1, 5_1_2, 5_1_4, 7_1_4, FOA,\n" ); - fprintf( stdout, " HOA2, HOA3, BINAURAL, BINAURAL_ROOM, SPLIT_BINAURAL, EXT\n" ); + fprintf( stdout, " HOA2, HOA3, BINAURAL, BINAURAL_ROOM, BINAURAL_SPLIT_CLDFB, BINAURAL_SPLIT_PCM, EXT\n" ); #else fprintf( stdout, "OutputConf : Output configuration: MONO, STEREO, 5_1, 7_1, 5_1_2, 5_1_4, 7_1_4, FOA,\n" ); fprintf( stdout, " HOA2, HOA3, BINAURAL, BINAURAL_ROOM, EXT\n" ); @@ -1242,6 +1268,9 @@ static void usage_dec( void ) fprintf( stdout, "-render_config File : Renderer configuration File\n" ); fprintf( stdout, "-no_diegetic_pan : panning mono non-diegetic sound to stereo -1<= pan <=1,\n" ); fprintf( stdout, " left or l or 1->left, right or r or -1->right, center or c or 0->middle\n" ); +#ifdef SPLIT_REND_WITH_HEAD_ROT + fprintf( stdout, "-om File : MD output file for BINAURAL_SPLIT_PCM output format\n" ); +#endif fprintf( stdout, "-q : Quiet mode, no frame counter\n" ); fprintf( stdout, " default is deactivated\n" ); #ifdef DEBUGGING @@ -1343,6 +1372,22 @@ static ivas_error initOnFirstGoodFrame( else #endif { +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( arg.outputFormat == IVAS_DEC_OUTPUT_SPLIT_BINAURAL_PCM ) + { + int16_t delayNumSamples_temp[3]; + int32_t delayTimeScale_temp; + IVAS_DEC_GetDelay( hIvasDec, delayNumSamples_temp, &delayTimeScale_temp ); + assert( arg.outputMdFilename != NULL ); + error = split_rend_writer_open( hSplitRendFileReadWrite, arg.outputMdFilename, delayNumSamples_temp[0], delayTimeScale_temp ); + if ( error != IVAS_ERR_OK ) + { + fprintf( stderr, "Could not open split rend metadata file %s\n", arg.outputWavFilename ); + exit( -1 ); + } + } +#endif + /* Open audio writer and write all previously skipped bad frames now that frame size is known */ if ( ( error = AudioFileWriter_open( ppAfWriter, arg.outputWavFilename, arg.output_Fs, *pNumOutChannels ) ) != IVAS_ERR_OK ) { @@ -1717,7 +1762,7 @@ static ivas_error decodeG192( if ( decodedGoodFrame ) { #ifdef SPLIT_REND_WITH_HEAD_ROT - if ( hSplitRendFileReadWrite != NULL ) + if ( ( hSplitRendFileReadWrite != NULL ) && ( arg.outputFormat == IVAS_DEC_OUTPUT_SPLIT_BINAURAL_CLDFB ) ) { if ( split_rend_write_bitstream_to_file( hSplitRendFileReadWrite, splitRendBits.bits_buf, &splitRendBits.bits_read, &splitRendBits.bits_written ) != IVAS_ERR_OK ) { @@ -1728,6 +1773,16 @@ static ivas_error decodeG192( else #endif { +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( ( hSplitRendFileReadWrite != NULL ) && ( arg.outputFormat == IVAS_DEC_OUTPUT_SPLIT_BINAURAL_PCM ) ) + { + if ( split_rend_write_bitstream_to_file( hSplitRendFileReadWrite, splitRendBits.bits_buf, &splitRendBits.bits_read, &splitRendBits.bits_written ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nUnable to write to bitstream file!\n" ); + exit( -1 ); + } + } +#endif if ( delayNumSamples < nOutSamples ) { if ( ( error = AudioFileWriter_write( afWriter, &pcmBuf[delayNumSamples * nOutChannels], nOutSamples * nOutChannels - ( delayNumSamples * nOutChannels ) ) ) != IVAS_ERR_OK ) diff --git a/lib_dec/ivas_binRenderer_internal.c b/lib_dec/ivas_binRenderer_internal.c index d1942d94f5..7719f500dd 100644 --- a/lib_dec/ivas_binRenderer_internal.c +++ b/lib_dec/ivas_binRenderer_internal.c @@ -685,7 +685,7 @@ ivas_error ivas_rend_openCldfbRend( hBinRenderer->hInputSetup->is_loudspeaker_setup = 0; getAudioConfigNumChannels( inConfig, &hBinRenderer->hInputSetup->nchan_out_woLFE ); - if ( out_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) + if ( ( out_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) || ( out_config == AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ) { #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG hBinRenderer->numPoses = pMultiBinPoseData->num_poses + 1; @@ -751,7 +751,8 @@ ivas_error ivas_binRenderer_open( } #ifdef SPLIT_REND_WITH_HEAD_ROT - if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) + if ( ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) || + ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ) { #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG hBinRenderer->numPoses = st_ivas->splitBinRend.splitrend.multiBinPoseData.num_poses + 1; diff --git a/lib_dec/ivas_dec.c b/lib_dec/ivas_dec.c index cc589fd7aa..4c9bf28a46 100644 --- a/lib_dec/ivas_dec.c +++ b/lib_dec/ivas_dec.c @@ -102,7 +102,8 @@ ivas_error ivas_dec( output_frame = (int16_t) ( output_Fs / FRAMES_PER_SEC ); #ifdef SPLIT_REND_WITH_HEAD_ROT - if ( output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) + if ( ( output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) || + ( output_config == AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ) { assert( st_ivas->ivas_format == SBA_FORMAT && ( output_Fs == 48000 ) && "split binaural mode is currently supported with SBA format and 48k sampling rate only" ); ivas_set_split_rend_setup( &st_ivas->splitBinRend, &st_ivas->hRenderConfig->split_rend_config, st_ivas->hHeadTrackData, hSplitRendBits ); @@ -627,19 +628,22 @@ ivas_error ivas_dec( #ifdef SPLIT_REND_WITH_HEAD_ROT /*split rendering process calls*/ - if ( output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) + if ( ( output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) || + ( output_config == AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ) { IVAS_DEC_SPLIT_REND_WRAPPER *hSplitBinRend; int16_t max_band; + int16_t pcm_out; hSplitBinRend = &st_ivas->splitBinRend; max_band = (int16_t) ( ( BINAURAL_MAXBANDS * output_Fs ) / 48000 ); + pcm_out = ( output_config == AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ? 1 : 0; ivas_renderMultiBinToSplitBinaural( &hSplitBinRend->splitrend, st_ivas->hHeadTrackData->Quaternions, st_ivas->hRenderConfig->split_rend_config.splitRendBitRate, hSplitBinRend->hSplitRendBits, hSplitBinRend->hMultiBinCldfbData->Cldfb_RealBuffer_Binaural, hSplitBinRend->hMultiBinCldfbData->Cldfb_ImagBuffer_Binaural, - max_band, output, 1, 0 ); + max_band, output, 1, pcm_out ); free( st_ivas->splitBinRend.hMultiBinCldfbData ); } diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c index 1e452a08f6..a29670397f 100644 --- a/lib_dec/ivas_dirac_dec.c +++ b/lib_dec/ivas_dirac_dec.c @@ -2570,7 +2570,8 @@ void ivas_dirac_dec( Cldfb_RealBuffer, Cldfb_ImagBuffer ); #ifdef SPLIT_REND_WITH_HEAD_ROT - if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) + if ( ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) || + ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ) { int16_t pos_idx; #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index 9f26e4e88f..721f30343b 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -630,7 +630,7 @@ ivas_error ivas_init_decoder_front( if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL || st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_ROOM #ifdef SPLIT_REND_WITH_HEAD_ROT - || st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB + || st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB || st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_PCM #endif ) { @@ -1217,7 +1217,8 @@ ivas_error ivas_init_decoder( if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) { #ifdef SPLIT_REND_WITH_HEAD_ROT - if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) + if ( ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) || + ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ) { ivas_renderSplitGetMultiBinPoseData( &st_ivas->hRenderConfig->split_rend_config, @@ -1230,11 +1231,12 @@ ivas_error ivas_init_decoder( return error; } #ifdef SPLIT_REND_WITH_HEAD_ROT - if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) + if ( ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) || + ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ) { ivas_split_renderer_open( &st_ivas->splitBinRend.splitrend, &st_ivas->hRenderConfig->split_rend_config, - hDecoderConfig->output_Fs, 1, 0 ); + hDecoderConfig->output_Fs, 1, ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ? 1 : 0 ); } #endif } @@ -2067,7 +2069,7 @@ static ivas_error doSanityChecks_IVAS( if ( !( output_config == AUDIO_CONFIG_BINAURAL || output_config == AUDIO_CONFIG_BINAURAL_ROOM #ifdef SPLIT_REND_WITH_HEAD_ROT - || output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB + || output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB || output_config == AUDIO_CONFIG_BINAURAL_SPLIT_PCM #endif ) ) { diff --git a/lib_dec/ivas_output_config.c b/lib_dec/ivas_output_config.c index bd4a3242d1..f4db4828e5 100644 --- a/lib_dec/ivas_output_config.c +++ b/lib_dec/ivas_output_config.c @@ -81,7 +81,7 @@ void ivas_renderer_select( if ( output_config == AUDIO_CONFIG_BINAURAL || output_config == AUDIO_CONFIG_BINAURAL_ROOM #ifdef SPLIT_REND_WITH_HEAD_ROT - || output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB + || output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB || output_config == AUDIO_CONFIG_BINAURAL_SPLIT_PCM #endif ) { @@ -136,7 +136,7 @@ void ivas_renderer_select( *internal_config = output_config; if ( output_config == AUDIO_CONFIG_BINAURAL #ifdef SPLIT_REND_WITH_HEAD_ROT - || output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB + || output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB || output_config == AUDIO_CONFIG_BINAURAL_SPLIT_PCM #endif ) { @@ -153,7 +153,7 @@ void ivas_renderer_select( if ( output_config == AUDIO_CONFIG_BINAURAL #ifdef SPLIT_REND_WITH_HEAD_ROT - || output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB + || output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB || output_config == AUDIO_CONFIG_BINAURAL_SPLIT_PCM #endif ) { diff --git a/lib_dec/ivas_sba_dec.c b/lib_dec/ivas_sba_dec.c index 72f71e73d7..e551029c9a 100644 --- a/lib_dec/ivas_sba_dec.c +++ b/lib_dec/ivas_sba_dec.c @@ -241,7 +241,8 @@ ivas_error ivas_sba_dec_reconfigure( if ( st_ivas->hBinRenderer == NULL && ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) ) { #ifdef SPLIT_REND_WITH_HEAD_ROT - if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) + if ( ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) || + ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ) { ivas_renderSplitGetMultiBinPoseData( &st_ivas->hRenderConfig->split_rend_config, @@ -255,11 +256,12 @@ ivas_error ivas_sba_dec_reconfigure( return error; } #ifdef SPLIT_REND_WITH_HEAD_ROT - if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) + if ( ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) || + ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ) { ivas_split_renderer_open( &st_ivas->splitBinRend.splitrend, &st_ivas->hRenderConfig->split_rend_config, - hDecoderConfig->output_Fs, 1, 0 ); + hDecoderConfig->output_Fs, 1, ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ? 1 : 0 ); } #endif } diff --git a/lib_dec/ivas_spar_decoder.c b/lib_dec/ivas_spar_decoder.c index ea2da61151..5780c7da88 100644 --- a/lib_dec/ivas_spar_decoder.c +++ b/lib_dec/ivas_spar_decoder.c @@ -1284,7 +1284,7 @@ void ivas_spar_dec_upmixer( { if ( hDecoderConfig->output_config == AUDIO_CONFIG_FOA || !( st_ivas->hOutSetup.output_config == AUDIO_CONFIG_BINAURAL || st_ivas->hOutSetup.output_config == AUDIO_CONFIG_BINAURAL_ROOM #ifdef SPLIT_REND_WITH_HEAD_ROT - || st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB + || st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB || st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_PCM #endif ) ) { diff --git a/lib_dec/lib_dec.c b/lib_dec/lib_dec.c index 5b58da5874..c53df56c92 100644 --- a/lib_dec/lib_dec.c +++ b/lib_dec/lib_dec.c @@ -364,6 +364,10 @@ static AUDIO_CONFIG mapOutputFormat( { output_config = AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB; } + else if ( outputFormat == IVAS_DEC_OUTPUT_SPLIT_BINAURAL_PCM ) + { + output_config = AUDIO_CONFIG_BINAURAL_SPLIT_PCM; + } #endif else { @@ -1942,7 +1946,11 @@ static ivas_error get_channel_config( #ifdef SPLIT_REND_WITH_HEAD_ROT else if ( config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB ) { - strcpy( str, "Split_Binaural" ); + strcpy( str, "Binaural_Split_CLDFB" ); + } + else if ( config == AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) + { + strcpy( str, "Binaural_Split_PCM" ); } #endif else if ( config == AUDIO_CONFIG_EXTERNAL ) diff --git a/lib_dec/lib_dec.h b/lib_dec/lib_dec.h index de65606568..d9608c2b83 100644 --- a/lib_dec/lib_dec.h +++ b/lib_dec/lib_dec.h @@ -59,6 +59,7 @@ typedef enum _IVAS_DEC_OUTPUT_CONFIG IVAS_DEC_OUTPUT_BINAURAL_ROOM, #ifdef SPLIT_REND_WITH_HEAD_ROT IVAS_DEC_OUTPUT_SPLIT_BINAURAL_CLDFB, + IVAS_DEC_OUTPUT_SPLIT_BINAURAL_PCM, #endif IVAS_DEC_OUTPUT_EXT, IVAS_DEC_OUTPUT_UNKNOWN = 0xffff diff --git a/lib_rend/ivas_output_init.c b/lib_rend/ivas_output_init.c index 4802fcf388..bc3a637428 100644 --- a/lib_rend/ivas_output_init.c +++ b/lib_rend/ivas_output_init.c @@ -94,6 +94,7 @@ int16_t audioCfg2channels( case AUDIO_CONFIG_BINAURAL_ROOM: #ifdef SPLIT_REND_WITH_HEAD_ROT case AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB: + case AUDIO_CONFIG_BINAURAL_SPLIT_PCM: #endif nchan_out = 2; break; @@ -223,6 +224,7 @@ void ivas_output_init( case AUDIO_CONFIG_BINAURAL_ROOM: #ifdef SPLIT_REND_WITH_HEAD_ROT case AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB: + case AUDIO_CONFIG_BINAURAL_SPLIT_PCM: #endif case AUDIO_CONFIG_ISM1: case AUDIO_CONFIG_ISM2: diff --git a/lib_rend/ivas_splitRendererPre.c b/lib_rend/ivas_splitRendererPre.c index f498128c91..e6667c0d51 100644 --- a/lib_rend/ivas_splitRendererPre.c +++ b/lib_rend/ivas_splitRendererPre.c @@ -1607,7 +1607,7 @@ ivas_error ivas_split_renderer_open( SPLIT_REND_WRAPPER *hSplitRendWrapper, } if ( is_pcm_out == 0 ) { - error = ivas_splitBinLCLDEncOpen( &hSplitRendWrapper->hSplitBinLCLDEnc, OutSampleRate, 2, ivas_get_lcld_bitrate( pSplitRendConfig->splitRendBitRate ) ); + error = ivas_splitBinLCLDEncOpen( &hSplitRendWrapper->hSplitBinLCLDEnc, OutSampleRate, BINAURAL_CHANNELS, ivas_get_lcld_bitrate( pSplitRendConfig->splitRendBitRate ) ); if ( error != IVAS_ERR_OK ) { return error; diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 250445010c..dfa7a06e07 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -2863,7 +2863,7 @@ static ivas_error initMasaDummyDecForBinauralOut( ivas_output_init( &( decDummy->hOutSetup ), output_config ); if ( output_config == AUDIO_CONFIG_BINAURAL #ifdef SPLIT_REND_WITH_HEAD_ROT - || output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB + || output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CLDFB || output_config == AUDIO_CONFIG_BINAURAL_SPLIT_PCM #endif ) { -- GitLab From 406ebc1503d25c7af0d98e41b32728feaff547ff Mon Sep 17 00:00:00 2001 From: rtyag Date: Mon, 22 May 2023 16:00:40 +1000 Subject: [PATCH 31/31] warning fix in MCT dec --- lib_dec/ivas_mct_dec.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib_dec/ivas_mct_dec.c b/lib_dec/ivas_mct_dec.c index 845a5a6bd8..9c1aca1323 100644 --- a/lib_dec/ivas_mct_dec.c +++ b/lib_dec/ivas_mct_dec.c @@ -1014,8 +1014,11 @@ static ivas_error ivas_mc_dec_reconfig( { ivas_binRenderer_close( &st_ivas->hBinRenderer ); } - +#ifdef SPLIT_REND_WITH_HEAD_ROT + if ( ( st_ivas->hCrendWrapper != NULL ) && ( st_ivas->hCrendWrapper->hCrend[0] != NULL ) && ( st_ivas->renderer_type != RENDERER_BINAURAL_MIXER_CONV && st_ivas->renderer_type != RENDERER_BINAURAL_MIXER_CONV_ROOM && ( st_ivas->renderer_type != RENDERER_BINAURAL_OBJECTS_TD || st_ivas->hRenderConfig->roomAcoustics.late_reverb_on == 0 ) ) ) +#else if ( ( st_ivas->hCrendWrapper != NULL ) && ( st_ivas->hCrendWrapper->hCrend != NULL ) && ( st_ivas->renderer_type != RENDERER_BINAURAL_MIXER_CONV && st_ivas->renderer_type != RENDERER_BINAURAL_MIXER_CONV_ROOM && ( st_ivas->renderer_type != RENDERER_BINAURAL_OBJECTS_TD || st_ivas->hRenderConfig->roomAcoustics.late_reverb_on == 0 ) ) ) +#endif { ivas_rend_closeCrend( &( st_ivas->hCrendWrapper ) #ifdef SPLIT_REND_WITH_HEAD_ROT -- GitLab